initial commit of functions to convert bibliographies to bibtex
authorJohn Kitchin <jkitchin@andrew.cmu.edu>
Thu, 5 Mar 2015 02:03:57 +0000 (21:03 -0500)
committerJohn Kitchin <jkitchin@andrew.cmu.edu>
Thu, 5 Mar 2015 02:03:57 +0000 (21:03 -0500)
x2bib.el [new file with mode: 0644]

diff --git a/x2bib.el b/x2bib.el
new file mode 100644 (file)
index 0000000..c565aad
--- /dev/null
+++ b/x2bib.el
@@ -0,0 +1,132 @@
+;;   ti
+;;; Header:
+
+;;; Commentary:
+
+;; ;;; Reminders about lentic:
+;; Lentic key binding reminders
+;; C-c , h  Move here in other view
+;; C-c , s  Swap windows
+;; [[elisp:lentic-mode-split-window-right]]  C-c o to open this link and make the view
+
+;; This module is more for my convenience to convert bibliography files to bibtex. This can be done at the command line, for example, but I want to do it in Emacs. There are a few scenarios where this happens.
+;; 1. Someone sends me a non-Bibtex file (Endnote, etc...)
+;; 2. From some online search I select many references and there is no export to Bibtex option, e.g. from Web of Science.
+
+;; This code is mostly wrappers around the command line utilities at http://sourceforge.net/p/bibutils/home/Bibutils.
+
+;; Here are the commands that are available.
+
+;; bib2xml     convert BibTeX to MODS XML intermediate
+;; biblatex2xml        convert BibLaTeX to MODS XML intermediate
+;; copac2xml   convert COPAC format references to MODS XML intermediate
+;; end2xml     convert EndNote (Refer format) to MODS XML intermediate
+;; endx2xml    convert EndNote XML to MODS XML intermediate
+;; isi2xml     convert ISI web of science to MODS XML intermediate
+;; med2xml     convert Pubmed XML references to MODS XML intermediate
+;; modsclean   a MODS to MODS converter for testing puposes mostly
+;; ris2xml     convert RIS format to MODS XML intermediate
+;; xml2ads     convert MODS XML intermediate into Smithsonian Astrophysical Observatory (SAO)/National Aeronautics and Space Administration (NASA) Astrophyics Data System or ADS reference format (converter submitted by Richard Mathar)
+;; xml2bib     convert MODS XML intermediate into BibTeX
+;; xml2end     convert MODS XML intermediate into format for EndNote
+;; xml2isi     convert MODS XML intermediate to ISI format
+;; xml2ris     convert MODS XML intermediate into RIS format
+;; xml2wordbib convert MODS XML intermediate into Word 2007 bibliography format
+
+
+;;; Code:
+
+;; ** RIS to bibtex
+;; RIS can be pretty easily exported from Endnote. Here is a function to read an RIS file and convert it to bibtex which is inserted at point. Note that there is often other output from the commands. We try to comment them out here, but you should probably inspect the entries, and do other bibtex file compliance checks.
+
+;; #+BEGIN_SRC emacs-lisp
+(defun ris2bib (risfile &optional verbose)
+  "Convert RISFILE to bibtex and insert at point.
+Without a prefix arg, stderr is diverted."
+ (interactive
+  (list (read-file-name "RIS file:")
+        (prefix-numeric-value current-prefix-arg)))
+ (let ((result (shell-command-to-string
+               (concat
+                (format
+                 "ris2xml %s | xml2bib -w"
+                 risfile)
+                (unless verbose " 2> /dev/null")))))
+   ;; make some lines into comments.
+   (setq result (replace-regexp-in-string
+                "^xml2bib:"
+                "% xml2bib:"
+                 result))
+   (setq result (replace-regexp-in-string
+                "^ris2xml:"
+                 "% ris2xml"
+                 result))
+   (setq result (replace-regexp-in-string
+                "^     Defaulting"
+                "%     Defaulting"
+                result))
+   (insert result)))
+;; #+END_SRC
+
+;; #+RESULTS:
+;; : ris2bib
+
+;; ** Pubmed XML to bibtex
+;; In http://www.ncbi.nlm.nih.gov/pubmed/ you can select entries, and then send them to a file. If you choose Pubmed XML as the format, then you can use this function to convert it to bibtex.
+
+;; #+BEGIN_SRC emacs-lisp
+(defun medxml2bib (medfile &optional verbose)
+ "Convert MEDFILE (in Pubmed xml) to bibtex and insert at point.
+Without a prefix arg, stderr is diverted."
+ (interactive
+  (list (read-file-name "MED file:")
+        (prefix-numeric-value current-prefix-arg)))
+ (let ((result (shell-command-to-string
+               (concat
+                (format
+                 "med2xml %s | xml2bib -w"
+                 medfile)
+                (unless verbose " 2> /dev/null")))))
+   ;; make some lines into comments.
+   (setq result (replace-regexp-in-string
+                "^xml2bib:"
+                "% xml2bib:"
+                 result))
+   (setq result (replace-regexp-in-string
+                "^med2xml:"
+                 "% med2xml"
+                 result))
+   (setq result (replace-regexp-in-string
+                "^     Defaulting"
+                "%     Defaulting"
+                result))
+   (insert result)))
+;; #+END_SRC
+
+;; #+RESULTS:
+;; : medxml2bib
+
+;; ** Clean up all the entries
+
+;; Finally, after you put the new entries in, you probably need to do some clean up actions. This little function does that.
+
+;; #+BEGIN_SRC emacs-lisp
+(defun clean-entries ()
+ "Map over bibtex entries and clean them."
+ (interactive)
+ (bibtex-map-entries
+  (lambda (a b c)
+   (ignore-errors
+   (org-ref-clean-bibtex-entry)))))
+;; #+END_SRC
+
+;; #+RESULTS:
+;; : clean-entries
+
+
+
+;; ;;; x2bib.el ends here
+
+;; # Local Variables:
+;; # lentic-init: lentic-orgel-org-init
+;; # End: