persid icon indicating copy to clipboard operation
persid copied to clipboard

Persistent identifier library for GNU Emacs

** Persistent Identifier Library

The Persistent Identifier Library allows to manipulate persistent identifiers that are used to locate scholar resources online. The library knows about the following formats:

  • isbn: International Standard Book Number (https://isbn.org)
  • issn: International Standard Serial Number (https://www.issn.org)
  • doi: Digital Object identifier (https://www.doi.org)
  • pmid: PubMed (https://pubmed.ncbi.nlm.nih.gov)
  • pmcid: PubMed Central (https://www.ncbi.nlm.nih.gov/pmc)
  • arxiv: Cornell University (https://arxiv.org)

Given an identifier in one of the known formats, the libray can query information about the resources and format it as a bibtex entry. To do so, the library primarily use the crossref.org API (doi,pmid, pcmi), openalex.org API (issn), arxiv API (arxiv) and OpenLibrary (isbn) Unfortunately, OpenLibrary is far from being complete and a lot of ISBN records are missing.

The main function is the interactive =persid-insert-bibtex= function that accept a single identifier and return the corresponding bibtex inserting it into the buffer. To do that, the format of the identifier is first identified and normalized (if needed), then the correspoding bibtex is queried online:

  • doi: [[https://www.crossref.org/documentation/retrieve-metadata/rest-api/a-non-technical-introduction-to-our-api/][Crossref API]] is used to get bibtex
  • pmid: [[https://www.ncbi.nlm.nih.gov/pmc/tools/id-converter-api/][PubMed converter API]] is used to convert pmid to doi, then the crossref API is used to get bibtex.
  • pmcid: [[https://www.ncbi.nlm.nih.gov/pmc/tools/id-converter-api/][PubMed converter API]] is used to convert pmcid to doi, then the crossref API is used to get bibtex.
  • arxiv: [[https://arxiv.org/help/api/][arXiv API]] is used to get bibtex
  • issn: [[https://docs.openalex.org/][OpenAlex API]] is used to get the name and the publisher information.
  • isbn: [[https://openlibrary.org/dev/docs/api/books][OpenLibrary Book API]] is used to get bibtex

See also: [[https://guides.lib.berkeley.edu/information-studies/apis][Information Studies: APIs for scholarly resources]]

** Example usage

#+begin_src emacs-lisp (persid-insert-bibtex "arxiv:2008.06030") #+end_src

#+begin_src bibtex @Article{2020arXiv200806030R, author = {{Rougier}, Nicolas P.}, title = "{On the design of text editors}", journal = {arXiv e-prints}, keywords = {Computer Science - Human-Computer Interaction}, year = 2020, month = aug, eid = {arXiv:2008.06030}, pages = {arXiv:2008.06030}, archivePrefix = {arXiv}, eprint = {2008.06030}, primaryClass = {cs.HC}, adsurl = {https://ui.adsabs.harvard.edu/abs/2020arXiv200806030R}, adsnote = {Provided by the SAO/NASA Astrophysics Data System} } #+end_src bibtex

** Related work

  • [[https://github.com/cpitclaudel/biblio.el][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.

  • [[https://github.com/jkitchin/org-ref][org-ref]] makes it easy to insert citations, cross-references, indexes and glossaries as hyper-functional links into org files. The links are fontified so you can tell them apart from other links, and each link is clickable to access functions like opening a pdf, notes or url associated with the link. Each link also can be exported to LaTeX to build a PDF. For citations, export to other formats is supported by citeproc for high quality export to HTML, markdown, plain text, or stand-alone (i.e. independent of a bibtex file) LaTeX.

  • [[https://github.com/yantar92/org-capture-ref][org-capture-ref]] extends org-ref's idea to auto-retrieve BiBTeX from scientific paper links. Instead of limiting BiBTeX generation to research purposes (scientific articles and books), this package auto-generates BiBTeX for any possible web link (Youtube videos, blog posts, reddit threads, etc).

  • [[https://github.com/larsmagne/bookiez.el][bookiez]] is a library for looking up ISBNs via the Google Book API, displaying the result, and maintaining a database of books.

  • [[https://github.com/mpedramfar/zotra][zotra]] provides functions to get bibliographic information from a url and save it into a bibtex file. It also provides a way to obtain a list of attachments (e.g. PDF files) associated with a url. This is done using Zotero translators, but without using the Zotero client.

  • [[https://github.com/gkowzan/biblio-zotero][biblio-zotero]] retrieves and insert BibTeX records from various sources by using Zotero translation server. Calling biblio-zotero-insert-bibtex will forward the provided URL to the server and insert a formatted BibTeX entry in the current buffer.

  • [[https://github.com/emacs-citar/citar][Citar]] provides a highly-configurable completing-read front-end to browse and act on BibTeX, BibLaTeX, and CSL JSON bibliographic data, and LaTeX, markdown, and org-cite editing support.

  • [[https://www.github.com/fabcontigiani/biblio-openlibrary][biblio-openlibrary]] provides an OpenLibrary backend for ~biblio.el~, allowing to /interactively/ browse and gather bibliographic entries from OpenLibrary by ISBN.