]> git.donarmstrong.com Git - org-ref.git/blobdiff - org-ref.el
make the example user function more functional.
[org-ref.git] / org-ref.el
index 842483791e20db7ee4cbfaccc994535d4590a5ef..72b4b528d9741b8722b4377d751474e5f0b60542 100644 (file)
@@ -111,11 +111,23 @@ You should use full-paths for each file."
 
 (defcustom org-ref-open-pdf-function
    'org-ref-open-pdf-at-point
-"User-defined function to open a pdf from a link.  The function must get the key at point, and derive a path to the pdf file, then open it.  The default function is `org-ref-open-pdf-at-point'."
+   "User-defined function to open a pdf from a link.  The
+function must get the key at point, and derive a path to the pdf
+file, then open it.  The default function is
+`org-ref-open-pdf-at-point'."
   :type 'function
   :group 'org-ref)
 
 
+(defcustom org-ref-get-pdf-filename-function
+  'org-ref-get-pdf-filename
+  "User-defined function to get a filename from a bibtex key.
+The function must take a key as an argument, and return the path
+to the corresponding filename. The default is
+`org-ref-get-pdf-filename'. An alternative value is
+`org-ref-get-mendeley-filename'.")
+
+
 (defcustom org-ref-insert-cite-function
   'org-ref-helm-insert-cite-link
   "Function to call to insert citation links.  The default is `org-ref-helm-insert-cite-link' which uses `helm-bibtex'.  `org-ref' modifies `helm-bibtex' a little bit to give `org-mode' citations, and to reorder default actions.  You may use `org-ref-insert-cite-link' if you like the reftex interface."
@@ -448,10 +460,14 @@ environment, only %l is available."
                           (if reftex-comment-citations
                               reftex-cite-comment-format
                             "")))
-               ((= l ?a) (reftex-format-names
-                          (reftex-get-bib-names "author" entry)
-                          (or n 2)))
-               ((= l ?A) (car (reftex-get-bib-names "author" entry)))
+               ((= l ?a) (replace-regexp-in-string
+                          "\n\\|\t\\|\s+" " "
+                          (reftex-format-names
+                           (reftex-get-bib-names "author" entry)
+                           (or n 2))))
+               ((= l ?A) (replace-regexp-in-string
+                          "\n\\|\t\\|\s+" " "
+                          (car (reftex-get-bib-names "author" entry))))
                ((= l ?b) (org-ref-reftex-get-bib-field "booktitle" entry "in: %s"))
                ((= l ?B) (reftex-abbreviate-title
                           (org-ref-reftex-get-bib-field "booktitle" entry "in: %s")))
@@ -482,9 +498,13 @@ environment, only %l is available."
                ((= l ?U) (org-ref-reftex-get-bib-field "url" entry))
                ((= l ?r) (org-ref-reftex-get-bib-field "address" entry))
               ;; strip enclosing brackets from title if they are there
-               ((= l ?t) (org-ref-reftex-get-bib-field "title" entry))
-               ((= l ?T) (reftex-abbreviate-title
+               ((= l ?t) (replace-regexp-in-string
+                          "\n\\|\t\\|\s+" " "
                           (org-ref-reftex-get-bib-field "title" entry)))
+               ((= l ?T) (reftex-abbreviate-title
+                          ((replace-regexp-in-string
+                            "\n\\|\t\\|\s+" " "
+                            (org-ref-reftex-get-bib-field "title" entry)))))
                ((= l ?v) (org-ref-reftex-get-bib-field "volume" entry))
                ((= l ?y) (org-ref-reftex-get-bib-field "year" entry)))))
 
@@ -496,7 +516,6 @@ environment, only %l is available."
     (setq format (replace-match "%" t t format)))
   (while (string-match "[ ,.;:]*%<" format)
     (setq format (replace-match "" t t format)))
-  ;; also replace carriage returns, tabs, and multiple whitespaces
   format)
 
 (defun org-ref-get-bibtex-entry-citation (key)
@@ -1404,9 +1423,10 @@ Optional argument ARG Does nothing."
  ;formatting
  (lambda (keyword desc format)
    (cond
-    ((eq format 'html) (format "(<eqref>%s</eqref>)" path))
-    ((eq format 'latex)
-     (format "\\eqref{%s}" keyword)))))
+    ((eq format 'latex) (format "\\eqref{%s}" keyword))
+    ;;considering the fact that latex's the standard of math formulas, just use mathjax to render the html
+    ;;customize the variable 'org-html-mathjax-template' and 'org-html-mathjax-options' refering to  'autonumber'
+    ((eq format 'html) (format "\\eqref{%s}" keyword)))))
 
 ;; ** cite link
 
@@ -1529,12 +1549,37 @@ falling back to what the user has set in `org-ref-default-bibliography'"
 
 ;; *** key at point functions
 
+(defun org-ref-get-pdf-filename (key)
+  "Return the pdf filename associated with a bibtex KEY."
+  (format (concat org-ref-pdf-directory "%s.pdf") key))
+
+
+(defun org-ref-get-mendeley-filename (key)
+  "Return the pdf filename indicated by mendeley file field.
+Falls back to org-ref-get-pdf-filename if file filed does not exist.
+Contributed by https://github.com/autosquid."
+  (let* ((results (org-ref-get-bibtex-key-and-file key))
+        (bibfile (cdr results)))
+    (with-temp-buffer
+      (insert-file-contents bibfile)
+      (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
+      (bibtex-search-entry key nil 0)
+      (setq entry (bibtex-parse-entry))
+      (let ((e (org-ref-reftex-get-bib-field "file" entry)))
+       (if (> (length e) 4)
+           (remove-if
+            (lambda (ch)
+              (find ch "{}\\"))
+            (format "/%s" (subseq e 1 (- (length e) 4))))
+         (format (concat org-ref-pdf-directory "%s.pdf") key))))))
+
+
 (defun org-ref-open-pdf-at-point ()
   "Open the pdf for bibtex key under point if it exists."
   (interactive)
   (let* ((results (org-ref-get-bibtex-key-and-file))
         (key (car results))
-         (pdf-file (format (concat org-ref-pdf-directory "%s.pdf") key)))
+         (pdf-file (funcall org-ref-get-pdf-filename-function key)))
     (if (file-exists-p pdf-file)
        (org-open-file pdf-file)
 (message "no pdf found for %s" key))))
@@ -1717,7 +1762,7 @@ get a lot of options.  LINK-STRING is used by the link function."
   (interactive)
   (let* ((results (org-ref-get-bibtex-key-and-file))
         (key (car results))
-         (pdf-file (format (concat org-ref-pdf-directory "%s.pdf") key))
+         (pdf-file (funcall org-ref-get-pdf-filename-function key))
          (bibfile (cdr results))
         (url (save-excursion
                (with-temp-buffer
@@ -3253,7 +3298,7 @@ With two prefix args, insert a label link."
 Checks for pdf and doi, and add appropriate functions."
   (let* ((results (org-ref-get-bibtex-key-and-file))
         (key (car results))
-         (pdf-file (format (concat org-ref-pdf-directory "%s.pdf") key))
+         (pdf-file (funcall org-ref-get-pdf-filename-function key))
          (bibfile (cdr results))
         (url (save-excursion
                (with-temp-buffer
@@ -3353,7 +3398,13 @@ This is a list of cons cells '((\"description\" . action)). The action function
 ;; example of adding your own function
 (add-to-list
  'org-ref-helm-user-candidates
- '("Example" . (lambda () (message-box "You did it!")))
+ '("Open pdf in emacs" . (lambda ()
+
+                          (find-file
+                           (concat
+                            org-ref-pdf-directory
+                            (car (org-ref-get-bibtex-key-and-file))
+                            ".pdf"))))
  t)
 
 ;;;###autoload