;;; x2bib.el --- Bibliography conversion to Bibtex
|
|
|
|
;;; Header:
|
|
|
|
;;; Commentary:
|
|
|
|
;; 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:
|
|
(require 'bibtex)
|
|
(require 'org-ref-core)
|
|
|
|
;;* 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.
|
|
|
|
;;;###autoload
|
|
(defun ris2bib (risfile &optional verbose)
|
|
"Convert RISFILE to bibtex and insert at point.
|
|
Without a prefix arg, stderr is diverted.
|
|
If VERBOSE is non-nil show command output."
|
|
(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)))
|
|
|
|
;;* 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.
|
|
|
|
;;;###autoload
|
|
(defun medxml2bib (medfile &optional verbose)
|
|
"Convert MEDFILE (in Pubmed xml) to bibtex and insert at point.
|
|
Without a prefix arg, stderr is diverted.
|
|
Display output if VERBOSE is non-nil."
|
|
(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)))
|
|
|
|
;;* 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.
|
|
|
|
;;;###autoload
|
|
(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)))))
|
|
|
|
(provide 'x2bib)
|
|
|
|
;;; x2bib.el ends here
|