To use this package, add the following line to your .emacs:
Two new functions are added for navigating entries,
bu-previous-entry, bound to
bibtex-utils adds a hook to
bibtex-mode-hook. The hook will run
.bib files is opened, parsing all the keywords present in the
file and storing them in a local variable. Those keywords will be used to
provide tab-completion when the user calls the function
When point is within a bibtex entry, calling
prompt the user for keywords, with tab-completion. If a keywords field
already exists, the keywords will be added to it. If not, a new field will
be added to the entry. Hitting return on its own will complete the process.
Any keywords not already in the local variable are added to it.
You will probably want to bind this function to a key:
(eval-after-load 'bibtex '(define-key bibtex-mode-map "\C-ck" 'bu-make-field-keywords))
These functions assume that keywords consist of phrases with no commas; commas are interpreted as separators between keywords. Newlines are ignored, so keywords can span multiple lines.
When we add bibtex entries we collect from online sources, they often
contain fields that we don’t wish to keep.
bibtex-utils provides a
convenient way to delete these fields when you run the command
bibtex-clean-entry. This command is provided by the built-in Emacs
bibtex-mode, and is bound to
C-c C-c by default.
bibtex-utils adds a hook that calls the function
bu-bibtex-clean-entry-hook. This will delete any fields listed in the
bu-bibtex-fields-ignore-list from the entry. By default, this
variable is empty, but you can customize it to contain any fields you
want automatically deleted from entries.
I found this very useful function on Nick Higham’s blog, where it was contributed by a user named Bernhard. Thanks Bernhard!
bibtex-utils also provides a mechanism to open the documents (pdfs,
webpages) for a given bibtex entry.
For the moment, this system assumes that all of your pdfs are in a single
directory, saved in the customizable variable
bu-pdf-dir. By default this
is set to ~~/pdfs~. You can also specify the path to your pdf viewer in the
bu-pdf-viewer. The default is
nil, which tells Emacs to open
the file in Emacs itself. I highly recommend you do this, after
installing the pdf-tools package.
For now, the files must be named the same as the entry key, with the ‘.pdf’ suffix added. This will become customizable eventually.
If you store article doi codes in your entries, in the field
bibtex-utils can look those up for you too. At the moment, this only
works with firefox with the
doi protocol extension, but it may be
possible to tweak it to use Chrome with a different extension. The
variables to play with are
a doi link will invoke the command
bu-doi-resolver bu-doi-prefix doi,
which by default is
If you store the article url in the url field,
bibtex-utils can open the
url using Emacs’ default browser, via the function
How it works
When you invoke
bu-open-doc from anywhere within a bibtex entry,
bibtex-utils first looks for the pdf and opens it if it finds it. If it
doesn’t, it will check for a doi, and open that if it exists. Finally, it
will try to browse to the url. I’m planning to make the order of priority
customizable in the near future.
If you call
bu-open-doc with a prefix argument (i.e.,
C-u M-x bu-open-doc, or
C-u RETURN in a bibtex search buffer), it will
ignore any local pdf files, and try to open the doi or url instead.
This function will jump from a bibtex citation in a source document
directly to the document itself (i.e., the pdf or webpage). It’s a
bu-open-doc that works when you’re not already on the
bibtex entry. If you use bibtex keys in different file types (org mode,
markdown, latex etc), you may want to bind this to a global key:
(global-set-key [f9] 'bu-jump-to-doc)
bibtex-utils does not provide a way to jump from a bibtex
citation to the bibtex entry in the
.bib file. Reftex already does
this. The function is called
reftex-view-crossref, which is bound to
C-c & by default.
When you search for entries from BibTeX mode, the results are placed in
a buffer called
*BibTeX Search*. This is a read only buffer in BibTeX
mode. I have added a new minor mode,
bibtex-search-minor-mode to make
it possible to add some convenient key-bindings to use here: