]> 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 71252ebccd34183bb0a2f0db2b6d32177622dbd5..72b4b528d9741b8722b4377d751474e5f0b60542 100644 (file)
@@ -89,6 +89,12 @@ You should use full-paths for each file."
   :type 'string
   :group 'org-ref)
 
+(defcustom org-ref-note-title-format
+  "** TODO %y - %t"
+  "String to format the title of a note. See the `org-ref-reftex-format-citation' docstring for the escape codes."
+  :type 'string
+  :group 'org-ref)
+
 (defcustom org-ref-open-notes-function
   (lambda ()
     (org-show-entry)
@@ -105,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."
@@ -328,12 +346,12 @@ You will see a message in the minibuffer when on a cite, ref or label link."
   ":\\([a-zA-Z0-9-_:\\./]*,?\\)*"))
 
 
-(setq org-ref-label-re
-      "label:\\([a-zA-Z0-9-_:]*,?\\)*")
+(defvar org-ref-label-re
+  "label:\\([a-zA-Z0-9-_:]*,?\\)*")
 
 
-(setq org-ref-ref-re
-      "\\(eq\\)?ref:\\([a-zA-Z0-9-_:]*,?\\)*")
+(defvar org-ref-ref-re
+  "\\(eq\\)?ref:\\([a-zA-Z0-9-_:]*,?\\)*")
 
 
 (defface org-ref-cite-face
@@ -442,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")))
@@ -458,8 +480,11 @@ environment, only %l is available."
                ((= l ?E) (car (reftex-get-bib-names "editor" entry)))
                ((= l ?h) (org-ref-reftex-get-bib-field "howpublished" entry))
                ((= l ?i) (org-ref-reftex-get-bib-field "institution" entry))
-               ((= l ?j) (org-ref-reftex-get-bib-field "journal" entry))
-               ((= l ?k) (org-ref-reftex-get-bib-field "key" entry))
+               ((= l ?j) (let ((jt (reftex-get-bib-field "journal" entry)))
+                           (if (string= "" jt)
+                               (reftex-get-bib-field "journaltitle" entry)
+                             jt)))
+               ((= l ?k) (org-ref-reftex-get-bib-field "=key=" entry))
                ((= l ?m) (org-ref-reftex-get-bib-field "month" entry))
                ((= l ?n) (org-ref-reftex-get-bib-field "number" entry))
                ((= l ?o) (org-ref-reftex-get-bib-field "organization" entry))
@@ -473,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)))))
 
@@ -487,8 +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
-  (setq format (replace-regexp-in-string "\n\\|\t\\|\s+" " " format))
   format)
 
 (defun org-ref-get-bibtex-entry-citation (key)
@@ -499,14 +526,15 @@ Format according to the type in `org-ref-bibliography-entry-format'."
        (file) (entry) (bibtex-entry) (entry-type) (format))
 
     (setq file (catch 'result
-                (loop for file in org-ref-bibliography-files do
-                      (if (org-ref-key-in-file-p key (file-truename file))
-                          (throw 'result file)
-                        (message "%s not found in %s"
-                                 key (file-truename file))))))
+                (cl-loop for file in org-ref-bibliography-files do
+                         (if (org-ref-key-in-file-p key (file-truename file))
+                             (throw 'result file)
+                           (message "%s not found in %s"
+                                    key (file-truename file))))))
 
     (with-temp-buffer
       (insert-file-contents file)
+      (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
       (bibtex-search-entry key nil 0)
       (setq bibtex-entry (bibtex-parse-entry))
       ;; downcase field names so they work in the format-citation code
@@ -574,13 +602,14 @@ Format according to the type in `org-ref-bibliography-entry-format'."
        (file) (entry) (bibtex-entry) (entry-type) (format))
 
     (setq file (catch 'result
-                (loop for file in org-ref-bibliography-files do
+                (cl-loop for file in org-ref-bibliography-files do
                       (if (org-ref-key-in-file-p key (file-truename file))
                           (throw 'result file)
                         (message "%s not found in %s" key (file-truename file))))))
 
     (with-temp-buffer
       (insert-file-contents file)
+      (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
       (bibtex-search-entry key nil 0)
       (setq entry (bibtex-parse-entry))
       (format "** %s - %s
@@ -653,26 +682,27 @@ Format according to the type in `org-ref-bibliography-entry-format'."
                          (split-string
                           (org-element-property :path object) ","))
 
-                    ;; now if we have comma separated bibliographies
-                    ;; we find the one clicked on. we want to
-                    ;; search forward to next comma from point
-                    (save-excursion
-                      (if (search-forward "," link-string-end 1 1)
-                          ;; we found a match
-                          (setq key-end (- (match-end 0) 1))
-                        ;; no comma found so take the point
-                        (setq key-end (point))))
-                    ;; and backward to previous comma from point
-                    (save-excursion
-                      (if (search-backward "," link-string-beginning 1 1)
-                          ;; we found a match
-                          (setq key-beginning (+ (match-beginning 0) 1))
-                        (setq key-beginning (point)))) ; no match found
+                    (let (key-beginning key-end)
+                      ;; now if we have comma separated bibliographies
+                      ;; we find the one clicked on. we want to
+                      ;; search forward to next comma from point
+                      (save-excursion
+                        (if (search-forward "," link-string-end 1 1)
+                            ;; we found a match
+                            (setq key-end (- (match-end 0) 1))
+                          ;; no comma found so take the point
+                          (setq key-end (point))))
+                      ;; and backward to previous comma from point
+                      (save-excursion
+                        (if (search-backward "," link-string-beginning 1 1)
+                            ;; we found a match
+                            (setq key-beginning (+ (match-beginning 0) 1))
+                          (setq key-beginning (point)))) ; no match found
                       ;; save the key we clicked on.
-                    (setq bibfile (org-ref-strip-string
-                                   (buffer-substring key-beginning key-end)))
-                    ;; open file on click
-                    (find-file bibfile)))
+                      (setq bibfile (org-ref-strip-string
+                                     (buffer-substring key-beginning key-end)))
+                      ;; open file on click
+                      (find-file bibfile))))
 
                   ;; formatting code
                   (lambda (keyword desc format)
@@ -719,21 +749,22 @@ Format according to the type in `org-ref-bibliography-entry-format'."
                       (set (make-local-variable 'reftex-default-bibliography)
                            (split-string (org-element-property :path object) ","))
 
-                      ;; now if we have comma separated bibliographies
-                      ;; we find the one clicked on. we want to
-                      ;; search forward to next comma from point
-                      (save-excursion
-                        (if (search-forward "," link-string-end 1 1)
-                            (setq key-end (- (match-end 0) 1)) ; we found a match
-                          (setq key-end (point)))) ; no comma found so take the point
-                      ;; and backward to previous comma from point
-                      (save-excursion
-                        (if (search-backward "," link-string-beginning 1 1)
-                            (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match
-                          (setq key-beginning (point)))) ; no match found
-                      ;; save the key we clicked on.
-                      (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end)))
-                      (find-file bibfile))) ; open file on click
+                      (let (key-beginning key-end)
+                        ;; now if we have comma separated bibliographies
+                        ;; we find the one clicked on. we want to
+                        ;; search forward to next comma from point
+                        (save-excursion
+                          (if (search-forward "," link-string-end 1 1)
+                              (setq key-end (- (match-end 0) 1)) ; we found a match
+                            (setq key-end (point)))) ; no comma found so take the point
+                        ;; and backward to previous comma from point
+                        (save-excursion
+                          (if (search-backward "," link-string-beginning 1 1)
+                              (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match
+                            (setq key-beginning (point)))) ; no match found
+                        ;; save the key we clicked on.
+                        (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end)))
+                        (find-file bibfile)))) ; open file on click
 
                     ;; formatting code
                   (lambda (keyword desc format)
@@ -825,21 +856,22 @@ ARG does nothing."
                       (set (make-local-variable 'reftex-default-addbibresource)
                            (split-string (org-element-property :path object) ","))
 
-                      ;; now if we have comma separated bibliographies
-                      ;; we find the one clicked on. we want to
-                      ;; search forward to next comma from point
-                      (save-excursion
-                        (if (search-forward "," link-string-end 1 1)
-                            (setq key-end (- (match-end 0) 1)) ; we found a match
-                          (setq key-end (point)))) ; no comma found so take the point
-                      ;; and backward to previous comma from point
-                      (save-excursion
-                        (if (search-backward "," link-string-beginning 1 1)
-                            (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match
-                          (setq key-beginning (point)))) ; no match found
-                      ;; save the key we clicked on.
-                      (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end)))
-                      (find-file bibfile))) ; open file on click
+                      (let (key-beginning key-end)
+                        ;; now if we have comma separated bibliographies
+                        ;; we find the one clicked on. we want to
+                        ;; search forward to next comma from point
+                        (save-excursion
+                          (if (search-forward "," link-string-end 1 1)
+                              (setq key-end (- (match-end 0) 1)) ; we found a match
+                            (setq key-end (point)))) ; no comma found so take the point
+                        ;; and backward to previous comma from point
+                        (save-excursion
+                          (if (search-backward "," link-string-beginning 1 1)
+                              (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match
+                            (setq key-beginning (point)))) ; no match found
+                        ;; save the key we clicked on.
+                        (setq bibfile (org-ref-strip-string (buffer-substring key-beginning key-end)))
+                        (find-file bibfile)))) ; open file on click
 
                     ;; formatting code
                   (lambda (keyword desc format)
@@ -866,11 +898,11 @@ ARG does nothing."
                       (string-match-p
                        "[^.]*\\.\\(png\\|jpg\\|eps\\|pdf\\)$"
                        (org-element-property :path link)))
-               (incf counter)
+               (cl-incf counter)
 
                (let* ((start (org-element-property :begin link))
                       (parent (car (cdr (org-element-property :parent link))))
-                      (caption (caaar (plist-get parent :caption)))
+                      (caption (cl-caaar (plist-get parent :caption)))
                       (name (plist-get parent :name)))
                  (if caption
                      (format
@@ -909,10 +941,10 @@ ARG does nothing."
          (org-element-map (org-element-parse-buffer 'element) 'table
            (lambda (table)
              "create a link for to the table"
-             (incf counter)
+             (cl-incf counter)
              (let ((start (org-element-property :begin table))
                    (name  (org-element-property :name table))
-                   (caption (caaar (org-element-property :caption table))))
+                   (caption (cl-caaar (org-element-property :caption table))))
                (if caption
                    (format
                     "[[elisp:(progn (switch-to-buffer \"%s\")(widen)(goto-char %s))][table %s: %s]] %s\n"
@@ -969,7 +1001,7 @@ ARG does nothing."
                    (org-ref-count-labels label))))
  (lambda (keyword desc format)
    (cond
-    ((eq format 'html) (format "(<label>%s</label>)" path))
+    ((eq format 'html) (format "<div id=\"%s\">" keyword))
     ((eq format 'latex)
      (format "\\label{%s}" keyword)))))
 
@@ -1048,7 +1080,7 @@ ARG does nothing."
  ;formatting
  (lambda (keyword desc format)
    (cond
-    ((eq format 'html) (format "(<ref>%s</ref>)" path))
+    ((eq format 'html) (format "<a href=\"#%s\">%s</a>" keyword keyword))
     ((eq format 'latex)
      (format "\\ref{%s}" keyword)))))
 
@@ -1223,19 +1255,19 @@ Use C-u C-u to insert a [[#custom-id]] link"
 
     (helm :input (thing-at-point 'word)
          :sources `(((name . "Available labels to ref")
-                     (candidates . ,(loop for label in labels
-                                          for context in contexts
-                                          ;; we do some kludgy adding spaces
-                                          ;; and bars to make it "easier" to
-                                          ;; see in helm.
-                                          collect (cons (concat
-                                                         label "\n"
-                                                         (mapconcat
-                                                          (lambda (x)
-                                                            (concat "   |" x))
-                                                          (split-string context "\n")
-                                                          "\n"
-                                                          ) "\n\n") label)))
+                     (candidates . ,(cl-loop for label in labels
+                                             for context in contexts
+                                             ;; we do some kludgy adding spaces
+                                             ;; and bars to make it "easier" to
+                                             ;; see in helm.
+                                             collect (cons (concat
+                                                            label "\n"
+                                                            (mapconcat
+                                                             (lambda (x)
+                                                               (concat "   |" x))
+                                                             (split-string context "\n")
+                                                             "\n"
+                                                             ) "\n\n") label)))
                      ;; default action to replace or insert ref link.
                      (action . (lambda (label)
                                  (switch-to-buffer ,cb)
@@ -1391,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
 
@@ -1419,28 +1452,30 @@ keyword we clicked on.  We also strip the text properties."
        ;; this means no description in the link
        (progn
          ;; we need the link path start and end
-         (save-excursion
-           (goto-char (org-element-property :begin object))
-           (search-forward link-string nil nil 1)
-           (setq link-string-beginning (match-beginning 0))
-           (setq link-string-end (match-end 0)))
+         (let (link-string-beginning link-string-end)
+           (save-excursion
+             (goto-char (org-element-property :begin object))
+             (search-forward link-string nil nil 1)
+             (setq link-string-beginning (match-beginning 0))
+             (setq link-string-end (match-end 0)))
 
-         ;; The key is the text between commas, or the link boundaries
-         (save-excursion
-           (if (search-forward "," link-string-end t 1)
-               (setq key-end (- (match-end 0) 1)) ; we found a match
-             (setq key-end link-string-end))) ; no comma found so take the end
-         ;; and backward to previous comma from point which defines the start character
-         (save-excursion
-           (if (search-backward "," link-string-beginning 1 1)
-               (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match
-             (setq key-beginning link-string-beginning))) ; no match found
-         ;; save the key we clicked on.
-         (setq bibtex-key
-               (org-ref-strip-string
-                (buffer-substring key-beginning key-end)))
-         (set-text-properties 0 (length bibtex-key) nil bibtex-key)
-         bibtex-key)
+           (let (key-beginning key-end)
+             ;; The key is the text between commas, or the link boundaries
+             (save-excursion
+               (if (search-forward "," link-string-end t 1)
+                   (setq key-end (- (match-end 0) 1)) ; we found a match
+                 (setq key-end link-string-end))) ; no comma found so take the end
+             ;; and backward to previous comma from point which defines the start character
+             (save-excursion
+               (if (search-backward "," link-string-beginning 1 1)
+                   (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match
+                 (setq key-beginning link-string-beginning))) ; no match found
+             ;; save the key we clicked on.
+             (let ((bibtex-key
+                    (org-ref-strip-string
+                     (buffer-substring key-beginning key-end))))
+               (set-text-properties 0 (length bibtex-key) nil bibtex-key)
+               bibtex-key))))
       ;; link with description. assume only one key
       link-string)))
 
@@ -1507,19 +1542,44 @@ falling back to what the user has set in `org-ref-default-bibliography'"
    (unless key
      (setq key (org-ref-get-bibtex-key-under-cursor)))
    (setq file     (catch 'result
-                   (loop for file in org-ref-bibliography-files do
-                         (if (org-ref-key-in-file-p key (file-truename file))
-                             (throw 'result file)))))
+                   (cl-loop for file in org-ref-bibliography-files do
+                            (if (org-ref-key-in-file-p key (file-truename file))
+                                (throw 'result file)))))
    (cons key file)))
 
 ;; *** 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))))
@@ -1534,6 +1594,7 @@ falling back to what the user has set in `org-ref-default-bibliography'"
     (save-excursion
       (with-temp-buffer
         (insert-file-contents bibfile)
+        (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
         (bibtex-search-entry key)
         ;; I like this better than bibtex-url which does not always find
         ;; the urls
@@ -1560,6 +1621,7 @@ falling back to what the user has set in `org-ref-default-bibliography'"
     (save-excursion
       (with-temp-buffer
         (insert-file-contents bibfile)
+        (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
         (bibtex-search-entry key)
         (org-ref-open-bibtex-notes)))))
 
@@ -1574,6 +1636,7 @@ falling back to what the user has set in `org-ref-default-bibliography'"
     (message "%s" (progn
                    (with-temp-buffer
                       (insert-file-contents bibfile)
+                      (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
                       (bibtex-search-entry key)
                       (org-ref-bib-citation))))))
 
@@ -1646,6 +1709,7 @@ Prompt for NEW-FILE includes bib files in `org-ref-default-bibliography', and bi
     (save-excursion
       (with-temp-buffer
         (insert-file-contents bibfile)
+        (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
         (bibtex-search-entry key)
        (setq doi (bibtex-autokey-get-field "doi"))
        ;; in case doi is a url, remove the url part.
@@ -1698,16 +1762,18 @@ 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
                  (insert-file-contents bibfile)
+                  (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
                  (bibtex-search-entry key)
                  (bibtex-autokey-get-field "url"))))
         (doi (save-excursion
                (with-temp-buffer
                  (insert-file-contents bibfile)
+                  (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
                  (bibtex-search-entry key)
                  ;; I like this better than bibtex-url which does not always find
                  ;; the urls
@@ -1784,6 +1850,7 @@ get a lot of options.  LINK-STRING is used by the link function."
        (save-excursion
          (with-temp-buffer
            (insert-file-contents bibfile)
+            (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
            (bibtex-search-entry key)
            (org-ref-bib-citation))))
       "\n"
@@ -2088,17 +2155,20 @@ arg (ALTERNATIVE-CITE) to get a menu of citation types."
 (defun org-ref-bib-citation ()
   "From a bibtex entry, create and return a simple citation string.
 This assumes you are in an article."
-
+  (bibtex-set-dialect nil t)
   (bibtex-beginning-of-entry)
   (let* ((cb (current-buffer))
         (bibtex-expand-strings t)
-        (entry (loop for (key . value) in (bibtex-parse-entry t)
-                     collect (cons (downcase key) value)))
+        (entry (cl-loop for (key . value) in (bibtex-parse-entry t)
+                        collect (cons (downcase key) value)))
         (title (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "title" entry)))
         (year  (reftex-get-bib-field "year" entry))
         (author (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "author" entry)))
         (key (reftex-get-bib-field "=key=" entry))
-        (journal (reftex-get-bib-field "journal" entry))
+        (journal (let ((jt (reftex-get-bib-field "journal" entry)))
+                    (if (string= "" jt)
+                        (reftex-get-bib-field "journaltitle" entry)
+                      jt)))
         (volume (reftex-get-bib-field "volume" entry))
         (pages (reftex-get-bib-field "pages" entry))
         (doi (reftex-get-bib-field "doi" entry))
@@ -2113,8 +2183,8 @@ This assumes you are in an article."
   (bibtex-beginning-of-entry)
   (let* ((cb (current-buffer))
         (bibtex-expand-strings t)
-        (entry (loop for (key . value) in (bibtex-parse-entry t)
-                     collect (cons (downcase key) value)))
+        (entry (cl-loop for (key . value) in (bibtex-parse-entry t)
+                        collect (cons (downcase key) value)))
         (title (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "title" entry)))
         (year  (reftex-get-bib-field "year" entry))
         (author (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "author" entry)))
@@ -2164,18 +2234,9 @@ construct the heading by hand."
   (bibtex-beginning-of-entry)
   (let* ((cb (current-buffer))
         (bibtex-expand-strings t)
-        (entry (loop for (key . value) in (bibtex-parse-entry t)
-                     collect (cons (downcase key) value)))
-        (title (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "title" entry)))
-        (year  (reftex-get-bib-field "year" entry))
-        (author (replace-regexp-in-string "\n\\|\t\\|\s+" " " (reftex-get-bib-field "author" entry)))
-        (key (reftex-get-bib-field "=key=" entry))
-        (journal (reftex-get-bib-field "journal" entry))
-        (volume (reftex-get-bib-field "volume" entry))
-        (pages (reftex-get-bib-field "pages" entry))
-        (doi (reftex-get-bib-field "doi" entry))
-        (url (reftex-get-bib-field "url" entry))
-        )
+        (entry (cl-loop for (key . value) in (bibtex-parse-entry t)
+                        collect (cons (downcase key) value)))
+        (key (reftex-get-bib-field "=key=" entry)))
 
     ;; save key to clipboard to make saving pdf later easier by pasting.
     (with-temp-buffer
@@ -2192,38 +2253,41 @@ construct the heading by hand."
     (if (re-search-forward (format ":Custom_ID: %s$" key) nil 'end)
        (funcall org-ref-open-notes-function)
       ;; no entry found, so add one
-      (insert (format "\n** TODO %s - %s" year title))
-      (insert (format"
+      (insert (org-ref-reftex-format-citation entry (concat "\n" org-ref-note-title-format)))
+      (insert (org-ref-reftex-format-citation
+               entry
+               (concat "
  :PROPERTIES:
-  :Custom_ID: %s
-  :AUTHOR: %s
-  :JOURNAL: %s
-  :YEAR: %s
-  :VOLUME: %s
-  :PAGES: %s
-  :DOI: %s
-  :URL: %s
+  :Custom_ID: %k
+  :AUTHOR: %9a
+  :JOURNAL: %j
+  :YEAR: %y
+  :VOLUME: %v
+  :PAGES: %p
+  :DOI: %D
+  :URL: %U
  :END:
-[[cite:%s]] [[file:%s/%s.pdf][pdf]]\n\n"
-key author journal year volume pages doi url key org-ref-pdf-directory key))
-(save-buffer))))
+"
+                       (format "[[cite:%s]] [[file:%s/%s.pdf][pdf]]\n\n"
+                               key org-ref-pdf-directory key))))
+      (save-buffer))))
 
 (defun org-ref-open-notes-from-reftex ()
   "Call reftex, and open notes for selected entry."
   (interactive)
   (let ((bibtex-key )))
 
-    ;; now look for entry in the notes file
-    (if  org-ref-bibliography-notes
-       (find-file-other-window org-ref-bibliography-notes)
-      (error "Org-ref-bib-bibliography-notes is not set to anything"))
+  ;; now look for entry in the notes file
+  (if  org-ref-bibliography-notes
+      (find-file-other-window org-ref-bibliography-notes)
+    (error "Org-ref-bib-bibliography-notes is not set to anything"))
 
-    (goto-char (point-min))
+  (goto-char (point-min))
 
-    (re-search-forward (format
-                       ":Custom_ID: %s$"
-                       (first (reftex-citation t)) nil 'end))
-    (funcall org-ref-open-notes-function))
+  (re-search-forward (format
+                      ":Custom_ID: %s$"
+                      (cl-first (reftex-citation t)) nil 'end))
+  (funcall org-ref-open-notes-function))
 
 ;; ** Open bibtex entry in browser
 (defun org-ref-open-in-browser ()
@@ -2735,6 +2799,7 @@ Shows bad citations, ref links and labels"
         (bibfile (cdr results)))
     (with-temp-buffer
       (insert-file-contents bibfile)
+      (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
       (bibtex-search-entry key nil 0)
       (prog1 (reftex-get-bib-field "year" (bibtex-parse-entry t))
         ))))
@@ -2926,26 +2991,27 @@ Shows bad citations, ref links and labels"
              (when (> link-string-beginning (point))
                (goto-char link-string-beginning))
 
-             ;; now if we have comma separated bibliographies
-             ;; we find the one clicked on. we want to
-             ;; search forward to next comma from point
-             (save-excursion
-               (if (search-forward "," link-string-end 1 1)
-                   (setq key-end (- (match-end 0) 1)) ; we found a match
-                 (setq key-end (point)))) ; no comma found so take the point
+             (let (key-beginning key-end)
+               ;; now if we have comma separated bibliographies
+               ;; we find the one clicked on. we want to
+               ;; search forward to next comma from point
+               (save-excursion
+                 (if (search-forward "," link-string-end 1 1)
+                     (setq key-end (- (match-end 0) 1)) ; we found a match
+                   (setq key-end (point)))) ; no comma found so take the point
 
-             ;; and backward to previous comma from point
-             (save-excursion
-               (if (search-backward "," link-string-beginning 1 1)
-                   (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match
-                 (setq key-beginning (point)))) ; no match found
-             ;; save the key we clicked on.
-             (setq bibfile
-                   (org-ref-strip-string
-                    (buffer-substring key-beginning key-end)))
-             (if (file-exists-p bibfile)
-                 (message "%s exists." bibfile)
-               (message "!!! %s NOT FOUND !!!" bibfile))))))))))
+               ;; and backward to previous comma from point
+               (save-excursion
+                 (if (search-backward "," link-string-beginning 1 1)
+                     (setq key-beginning (+ (match-beginning 0) 1)) ; we found a match
+                   (setq key-beginning (point)))) ; no match found
+               ;; save the key we clicked on.
+               (setq bibfile
+                     (org-ref-strip-string
+                      (buffer-substring key-beginning key-end)))
+               (if (file-exists-p bibfile)
+                   (message "%s exists." bibfile)
+                 (message "!!! %s NOT FOUND !!!" bibfile)))))))))))
 
 ;; ** aliases
 (defalias 'oro 'org-ref-open-citation-at-point)
@@ -3081,16 +3147,16 @@ User is prompted for tags.  This function is called from `helm-bibtex'.
 Argument CANDIDATES helm candidates."
   (message "")
   (let ((keywords (read-string "Keywords (comma separated): ")))
-    (loop for key in (helm-marked-candidates)
-         do
-         (save-window-excursion
-           (helm-bibtex-show-entry key)
-           (bibtex-set-field
-            "keywords"
-            (concat
-             keywords
-             ", " (bibtex-autokey-get-field "keywords")))
-           (save-buffer)))))
+    (cl-loop for key in (helm-marked-candidates)
+            do
+            (save-window-excursion
+              (helm-bibtex-show-entry key)
+              (bibtex-set-field
+               "keywords"
+               (concat
+                keywords
+                ", " (bibtex-autokey-get-field "keywords")))
+              (save-buffer)))))
 
 (setq helm-source-bibtex
       '((name                                      . "BibTeX entries")
@@ -3221,6 +3287,7 @@ With two prefix args, insert a label link."
        (save-excursion
          (with-temp-buffer
            (insert-file-contents bibfile)
+            (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
            (bibtex-search-entry key)
            (org-ref-bib-citation)))
       "!!! No entry found !!!" )))
@@ -3231,16 +3298,18 @@ 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
                  (insert-file-contents bibfile)
+                  (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
                  (bibtex-search-entry key)
                  (bibtex-autokey-get-field "url"))))
         (doi (save-excursion
                (with-temp-buffer
                  (insert-file-contents bibfile)
+                  (bibtex-set-dialect (parsebib-find-bibtex-dialect) t)
                  (bibtex-search-entry key)
                  ;; I like this better than bibtex-url which does not always find
                  ;; the urls
@@ -3316,10 +3385,10 @@ Checks for pdf and doi, and add appropriate functions."
                    (email-bibtex-entry))))
      t)
   ;; finally return a numbered list of the candidates
-  (loop for i from 0
-       for cell in candidates
-       collect (cons (format "%2s. %s" i (car cell))
-                     (cdr cell)))))
+  (cl-loop for i from 0
+          for cell in candidates
+          collect (cons (format "%2s. %s" i (car cell))
+                        (cdr cell)))))
 
 
 (defvar org-ref-helm-user-candidates '()
@@ -3329,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