Browse Source

ox-bibtex: Use bibtex files not in current directory

* contrib/lisp/ox-bibtex.el (org-bibtex-process-bib-files): Process
  bibtexfilename so that it does not have to be in the same directory.
Konrad Herbst 5 years ago
parent
commit
b2866a504d
1 changed files with 20 additions and 7 deletions
  1. 20 7
      contrib/lisp/ox-bibtex.el

+ 20 - 7
contrib/lisp/ox-bibtex.el

@@ -36,7 +36,7 @@
 ;;
 ;; The usage is as follows:
 ;;
-;;   #+BIBLIOGRAPHY: bibfilebasename stylename optional-options
+;;   #+BIBLIOGRAPHY: bibfilename stylename optional-options
 ;;
 ;; e.g. given foo.bib and using style plain:
 ;;
@@ -44,6 +44,10 @@
 ;;
 ;; "stylename" can also be "nil", in which case no style will be used.
 ;;
+;; Full filepaths are also possible:
+;;
+;;   #+BIBLIOGRAPHY: /home/user/Literature/foo.bib plain option:-d
+;;
 ;; Optional options are of the form:
 ;;
 ;;   option:-foobar pass '-foobar' to bibtex2html
@@ -187,7 +191,16 @@ Return new parse tree."
 	(when (equal (org-element-property :key keyword) "BIBLIOGRAPHY")
 	  (let ((arguments (org-bibtex-get-arguments keyword))
 		(file (org-bibtex-get-file keyword))
-		temp-file)
+		temp-file
+		out-file)
+	    ;; Test if filename is given with .bib-extension and strip
+    	    ;; it off. Filenames with another extensions will be
+	    ;; untouched and will finally rise an error in bibtex2html.
+	    (setq file (if (equal (file-name-extension file) "bib")
+			   (file-name-sans-extension file) file))
+	    ;; Outpufiles of bibtex2html will be put into current working directory
+	    ;; so define a variable for this.
+	    (setq out-file (file-name-base file))
 	    ;; limit is set: collect citations throughout the document
 	    ;; in TEMP-FILE and pass it to "bibtex2html" as "-citefile"
 	    ;; argument.
@@ -219,7 +232,7 @@ Return new parse tree."
 	    (and temp-file (delete-file temp-file))
 	    ;; Open produced HTML file, and collect Bibtex key names
 	    (with-temp-buffer
-	      (insert-file-contents (concat file ".html"))
+	      (insert-file-contents (concat out-file ".html"))
 	      ;; Update `org-bibtex-html-entries-alist'.
 	      (goto-char (point-min))
 	      (while (re-search-forward
@@ -233,14 +246,14 @@ Return new parse tree."
 	       ((org-export-derived-backend-p backend 'html)
 		(insert (format "<div id=\"bibliography\">\n<h2>%s</h2>\n"
 				(org-export-translate "References" :html info)))
-		(insert-file-contents (concat file ".html"))
+		(insert-file-contents (concat out-file ".html"))
 		(insert "\n</div>"))
 	       ((org-export-derived-backend-p backend 'ascii)
 		;; convert HTML references to text w/pandoc
 		(unless (eq 0 (call-process "pandoc" nil nil nil
-					    (concat file ".html")
+					    (concat out-file ".html")
 					    "-o"
-					    (concat file ".txt")))
+					    (concat out-file ".txt")))
 		  (error "Executing pandoc failed"))
 		(insert
 		 (format
@@ -249,7 +262,7 @@ Return new parse tree."
 		   "References"
 		   (intern (format ":%s" (plist-get info :ascii-charset)))
 		   info)))
-		(insert-file-contents (concat file ".txt"))
+		(insert-file-contents (concat out-file ".txt"))
 		(goto-char (point-min))
 		(while (re-search-forward
 			"\\[ \\[bib\\][^ ]+ \\(\\]\\||[\n\r]\\)" nil t)