In this entry I describe what I use for reference and citation management in Emacs. It is nothing original, and relies on a couple of excellent packages, to whose authors I am deeply indebted. However, it took me a while to figure out which tools where most suitable for me, so I share this summary in the hope that it may be of help to others.
My setup allows me to:
- get citations easily into my database from journals' websites or
from pdf metadata (
Zotero
) - backup the database and synchronise it among computers through the
cloud (
Zotero
) - export data to a BibTeX file, kept automatically updated,
from which various Emacs packages take the job (
Zotero
) - insert citations into LaTeX documents with a powerful and
convenient search interface (
reftex
andhelm-bibtex
) - insert citations into org-mode documents, which correctly export to
LaTex and HTML (
org-ref
andhelm-bibtex
) - open the article's PDF from Emacs (from the link or through a search interface)
- take notes about an article and get at them through the citation
link or a search interface (
helm-bibtex
)
Getting citations: Zotero
Zotero is a reference database manager which can generate bibliographies in different formats, which works as a standalone application or as a Firefox extension (which is an especially convenient way to add citations to the database). It can also take a PDF file and use the PDF metadata to find the appropriate citation. It is widely documented online.
I use Zotero as a BibTeX manager. That is, references are stored in
Zotero's database (that I keep synchronised in the office and the
laptop through a Box.com account thanks to Zotero's DAV support).
It is very convenient to collect references from websites and for
a quick search, but I do not use it to generate citations. Instead, I
rely on BetterBibTex (a Zotero extension) to export to a .bib
file
(I freely use TeX markup in Zotero, which BetterBibTex respects if the
entry is marked with a #LaTeX
tag). I write exclusively in Emacs
and insert references and generate bibliographies using several Emacs
packages, directly in LaTeX documents, or in org-mode documents which
get eventually exported to LaTeX or HTML.
Writing in LaTeX
When writing directly a LaTeX document, I insert with reftex
or
helm-bibtex (the first is bundled with Emacs, the second is
available from MELPA). You need to specify the .bib
files you will
be using, plus some useful key-bindings.
(setq reftex-default-bibliography '("~/biblio/main.bib") )
(setq helm-bibtex-bibliography '("~/biblio/main.bib")
(add-hook 'TeX-mode-hook
(lambda() (define-key TeX-mode-map "\C-ch" 'helm-bibtex)) )
Both packages, when you hit the chosen keybinding (for reftex
it is C-c [
by default), open a search window from which you select
the reference (powerful regexp-based queries are possible, check the
respective documentations) and a \cite
or similar command is
inserted for you. I have not explored helm-bibtex
sufficiently to
have an opinion on which interface is superior as regards the search
facilities. However, helm-bibtex
has the ability to open the PDF
file and the notes related to the reference (see below).
Writing in org-mode
When writing org-mode documents, I insert citations with org-ref
(available from MELPA). I changed the key binding from C-c ]
to
C-c [
to have it the same as reftex
(though this hides another
org-mode
key). org-ref
opens helm-bibtex
for the search, but
inserts the citation in its own format (as cite:key
). This is
converted to the appropriate LaTeX command on export; you also need to
include bibliography and bibliographystyle links at some place in the
document (usually the end) to get the reference list at that point:
bibliographystyle:unsrtnat bibliography:~/biblio/main.bib
org-ref
supports other link types besides citation links (like
references to figures or other labels). Check out the documentation.
Opening the article's PDF
From the helm-bibtex
search window, one of the actions is to open
the pdf. This relies on a link in the corresponding BiBTeX entry.
When exporting from Zotero, the files are listed in a file
field
(there is no need to export both entries and files, since BetterBibTex
will link directly to the Zotero attached file). You must tell
helm-bibtex
which field to look for. It will open all the specified
files, by default in Emacs itself, but you can change this to another
viewer as shown:
(setq bibtex-completion-pdf-field "file")
(setq bibtex-completion-pdf-open-function
(lambda (fpath)
(start-process "evince" "*helm-bibtex-evince*" "/usr/bin/evince" fpath)))
(The names helm-bibtex-pdf-field
and helm-bibtex-pdf-open-function
were formerly used for variables bibtex-completion-pdf-field
and
bibtex-completion-pdf-open-function
and still work as aliases).
If you move to an already-entered citation command, in both LaTeX and
Org modes the minibuffer shows information on the cited entry. In
Org, you can click with the mouse for additional options (an approach
I don't like). One of the options is open the PDF file, but I haven't
been able to get it to work. Another option is to open the
helm-bibtex
search window and insert the citation key as a search
term: this will get directly to the entry, and then one can invoke the
open PDF action as if the whole process originated from a search from
scratch. This is almost what I want, except that inserting the key is
not straightforward. In principle, typing M-n
with the search
window open inserts the word-at-point in the minibuffer. This is
great except that sometimes the keys comprise more than one word
(because they include characters such as colons or underscores). Then
M-n
doesn't work. For multiword keys, one can use C-w
, which
inserts from point to end of word, and inserts the following words on
repeating the key. However, apart from the multiple key presses, this
will only work if the point is exactly at the beginning of the key.
This is an issue, while minor, I would like to fix but currently don't
know how.
Notes
With helm-bibtex
one can link BibTeX entries to notes in an
org-mode
file. I use a single .org
file for all bibliographic
notes, which can be accessed as one of the actions (press TAB
) from
the helm-bibtex
search window. The file is specified in your
.emacs
with something like
(setq helm-bibtex-notes-path "~/doc/apuntes/bibnotes.org")
You can also access the notes from a previously-inserted citation like you access the PDF (except you select a different action from the search window). All comments above apply also to opening the notes.
Conclusion
I am rather happy with this solution for reference management, which
combines the best of Zotero's convenience for getting references in a
database with the power of the Emacs tools described above to make
effective use of the database. However, it is only recently that I
discovered org-ref
and helm-bibtex
, so I expect to learn more on
them and hopefully share on updates to this post.