X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=blobdiff_plain;f=org-ref.el;h=72b4b528d9741b8722b4377d751474e5f0b60542;hp=842483791e20db7ee4cbfaccc994535d4590a5ef;hb=8758611b7670699ecaf4335933666a5967f39065;hpb=d9d107c9e0aeb8c285c6aeef774059fee0bbac6d diff --git a/org-ref.el b/org-ref.el index 8424837..72b4b52 100644 --- a/org-ref.el +++ b/org-ref.el @@ -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 "(%s)" 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