X-Git-Url: https://git.donarmstrong.com/?p=org-ref.git;a=blobdiff_plain;f=org-ref.org;h=30bf03006a56807061533ebd416bb99e1780e794;hp=323a86812e4a159ea643679749652f8cdf2f1bd1;hb=e4db76f0de5ad3ef65632a0e156c18958e4b1bbe;hpb=1b84e90c4440b04909ffc52c0c3cad089ecee31c diff --git a/org-ref.org b/org-ref.org index 323a868..30bf030 100644 --- a/org-ref.org +++ b/org-ref.org @@ -151,6 +151,8 @@ This next variable determines the citation types that are available in org-ref. "footcites" "footcitetexts" "smartcites" "Smartcites" "textcites" "Textcites" "supercites" "autocites" "Autocites" + ;; for the bibentry package + "bibentry" ) "List of citation types known in org-ref" :type '(repeat :tag "List of citation types" string) @@ -578,8 +580,89 @@ We use a link for the bibliography so that we can click on it to open the biblio ((eq format 'ascii) (org-ref-get-ascii-bibliography)) ((eq format 'html) (org-ref-get-html-bibliography)) ((eq format 'latex) - ;; write out the latex bibliography command - (format "\\bibliography{%s}" (replace-regexp-in-string "\\.bib" "" (expand-file-name keyword))))))) + ;; write out the latex bibliography command + (format "\\bibliography{%s}" (replace-regexp-in-string "\\.bib" "" (mapconcat 'identity + (mapcar 'expand-file-name + (split-string keyword ",")) + ","))))))) + +#+END_SRC + +Believe it or not, sometimes it makes sense /not/ to include the bibliography in a document (e.g. when you are required to submit references as a separate file). To generate the references, in another file, you must make a little tex file with these contents, and then compile it. + +#+BEGIN_LaTeX + \input{project-description.bbl} +#+END_LaTeX + +Here, we make a =nobibliography= link that acts like the bibliography, enables creation of the bbl file, but does not put an actual bibliography in the file. + +#+BEGIN_SRC emacs-lisp :tangle org-ref.el +(org-add-link-type "nobibliography" + ;; this code is run on clicking. The bibliography + ;; may contain multiple files. this code finds the + ;; one you clicked on and opens it. + (lambda (link-string) + ;; get link-string boundaries + ;; we have to go to the beginning of the line, and then search forward + + (let* ((bibfile) + ;; object is the link you clicked on + (object (org-element-context)) + + (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))) + + ;; We set the reftex-default-bibliography + ;; here. it should be a local variable only in + ;; the current buffer. We need this for using + ;; reftex to do citations. + (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 + + ;; formatting code + (lambda (keyword desc format) + (cond + ((eq format 'org) (org-ref-get-org-bibliography)) + ((eq format 'ascii) (org-ref-get-ascii-bibliography)) + ((eq format 'html) (org-ref-get-html-bibliography)) + ((eq format 'latex) + ;; write out the latex bibliography command + +; (format "{\\setbox0\\vbox{\\bibliography{%s}}}" +; (replace-regexp-in-string "\\.bib" "" (mapconcat 'identity +; (mapcar 'expand-file-name +; (split-string keyword ",")) +; ","))) + + (format "\\nobibliography{%s}" + (replace-regexp-in-string "\\.bib" "" (mapconcat 'identity + (mapcar 'expand-file-name + (split-string keyword ",")) + ","))) + + )))) #+END_SRC #+BEGIN_SRC emacs-lisp :tangle org-ref.el @@ -881,6 +964,7 @@ At the moment, ref links are not usable for section links. You need [[#CUSTOM_ID ;; we did not find anything, so go back to where we came (org-mark-ring-goto) (error "%s not found" label)) + (org-show-entry) (message "go back with (org-mark-ring-goto) `C-c &`")) ;formatting (lambda (keyword desc format) @@ -2256,6 +2340,7 @@ I like convenience. Here are some aliases for faster typing. (defalias 'orp 'org-ref-open-pdf-at-point) (defalias 'oru 'org-ref-open-url-at-point) (defalias 'orn 'org-ref-open-notes-at-point) +(defalias 'ornr 'org-ref-open-notes-from-reftex) (defalias 'orib 'org-ref-insert-bibliography-link) (defalias 'oric 'org-ref-insert-cite-link)