Sphinx extension for BibTeX style citations.
The bibtex extension allows BibTeX citations to be inserted into documentation generated by Sphinx, via a bibliography
directive, along with :cite:p:
and :cite:t:
roles. These work similarly to LaTeX's thebibliography
environment and the \citet
and \citep
commands.
For formatting, the extension relies on pybtex written by Andrey Golovizin. The extension is inspired by Matthew Brett's bibstuff.sphinxext.bibref and Weston Nielson's sphinx-natbib.
- Download: https://pypi.org/project/sphinxcontrib-bibtex/#files
- Documentation: https://sphinxcontrib-bibtex.readthedocs.io/en/latest/
- Development: https://github.com/mcmtroffaes/sphinxcontrib-bibtex/
Install the module with pip install sphinxcontrib-bibtex
, or from source using pip install -e .
. Then add:
extensions = ['sphinxcontrib.bibtex']
bibtex_bibfiles = ['refs.bib']
to your project's Sphinx configuration file conf.py
.
Installation with python setup.py install
is discouraged due to potential issues with the sphinxcontrib namespace.
In your project's documentation, you can use :cite:t:
for textual citation references, :cite:p:
for parenthetical citation references, and .. bibliography::
for inserting the bibliography. For example:
See :cite:t:`1987:nelson` for an introduction to non-standard analysis.
Non-standard analysis is fun :cite:p:`1987:nelson`.
.. bibliography::
where refs.bib
would contain an entry:
@Book{1987:nelson,
author = {Edward Nelson},
title = {Radically Elementary Probability Theory},
publisher = {Princeton University Press},
year = {1987}
}
In the default style, this will get rendered as:
See Nelson [Nel87a] for an introduction to non-standard analysis. Non-standard analysis is fun [Nel87a].
Citations in sphinx are resolved globally across all documents. Typically, you have a single bibliography
directive across your entire project which collects all citations. Advanced use cases with multiple bibliography
directives across your project are also supported, but some care needs to be taken from your end to avoid duplicate citations.
In contrast, footnotes in sphinx are resolved locally per document. To achieve local bibliographies per document, you can use citations represented by footnotes as follows:
See :footcite:t:`1987:nelson` for an introduction to non-standard analysis.
Non-standard analysis is fun\ :footcite:p:`1987:nelson`.
.. footbibliography::
which will get rendered as:
See Nelson1 for an introduction to non-standard analysis. Non-standard analysis is fun2.
Note the use of the backslash escaped space to suppress the space that would otherwise precede the footnote.
Typically, you have a single footbibliography
directive at the bottom of each document that has footnote citations. Advanced use cases with multiple footbibliography
directives per document are also supported. Since everything is local, there is no concern with duplicate citations when using footnotes.
- Nel87a
Edward Nelson. Radically Elementary Probability Theory. Princeton University Press, 1987.