Klimi's new dotfiles with stow.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

132 lines
4.8 KiB

;;; 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