biblio.el: An extensible Emacs package for browsing and fetching references
biblio.el makes it easy to browse and gather bibliographic references and publications from various sources, by keywords or by DOI. References are automatically fetched from well-curated sources, and formatted as BibTeX.
- CrossRef, an exhaustive academic search engine
- arXiv, an archive of pre-prints in various scientific fields
- DBLP, a database of Computer Science publications
- HAL, a French repository of Open Access publications
- doi.org, a DOI resolver (to retrieve BibTeX records from DOIs)
- CrossCite, an alternative DOI resolver and BibTeX formatting service
- Dissemin, a database tracking the open access status of scholarly articles
M-x biblio-lookup. Each source can also be accessed independently:
M-x crossref-lookupto query CrossRef
M-x arxiv-lookupto query arXiv
M-x dblp-lookupto query DBLP
M-x doi-insertto insert a BibTeX record by DOI
M-x dissemin-lookupto show information about the open access status of a particular DOI
Most of these commands work together: for example,
crossref-lookup displays a
list of results in
biblio-selection-mode. In that mode, use:
RETto visit the corresponding web page
M-wto copy the BibTeX record of the current entry
C-yto insert the BibTeX record of the current entry
xto run an extended action, such as fetching a Dissemin record
I do the same as
i, but additionally close the search window.
To insert a clean BibTeX entry for this paper in the current buffer, use
M-x crossref-lookup RET fiat deductive delaware RET i
iinserts the BibTeX record of the currently selected entry in your buffer).
To find publications by computer scientist Leslie Lamport, use
M-x dblp-lookup RET author:Lamport RET(see more info about DBLP's syntax at http://dblp.uni-trier.de/search/)
To check whether an article is freely available online, use
xin the list of results. For example
M-x crossref-lookup RET emacs stallman RETfollowed by
x Dissemin RETwill help you find open access copies of Stallman's paper on EMACS (spoiler: it's here).
Add MELPA to your package sources, then
M-x package-install RET biblio RET.
Adding new backends
The extensibility mechanism is inspired by the one of company-mode. See the
biblio-backends. Here is the definition of
;;;###autoload (defun biblio-dblp-backend (command &optional arg &rest more) "A DBLP backend for biblio.el. COMMAND, ARG, MORE: See `biblio-backends'." (pcase command (`name "DBLP") (`prompt "DBLP query: ") (`url (biblio-dblp--url arg)) (`parse-buffer (biblio-dblp--parse-search-results)) (`forward-bibtex (biblio-dblp--forward-bibtex arg (car more))) (`register (add-to-list 'biblio-backends #'biblio-dblp-backend)))) ;;;###autoload (add-hook 'biblio-init-hook #'biblio-dblp-backend)
Note how the autoload registers the backend without loading the entire file.
biblio-lookup is called by the user, it will run all functions in
'register as their first argument, and the
backend will be added to the list of backends add that point.
Adding new actions
The selection mode menu has an extended action key,
x. The only extension at
the moment is Dissemin. Extensions
(label . function) added to
biblio-selection-mode-actions-alist; function is called with the metadata of
the current entry when the user selects
label from the list of extensions