Citations and bibliography formatter
citeproc-py is a CSL processor for Python. It aims to implement the CSL 1.0.1 specification. citeproc-py can output styled citations and bibliographies in a number of different output formats. Currently supported are plain text, reStructuredText and HTML. Other formats can be added easily.
citeproc-py uses semantic versioning. Currently, its major version number is still at 0, meaning the API is not yet stable. However, you should not expect to see any major API changes soon.
citeproc-py supports Python 3.6 and up. It depends on lxml for parsing and navigating the CSL style and locale files.
The recommended way of installing citeproc-py is by using pip:
pip install citeproc-py
If lxml isn’t installed, pip will try to install it for you.
If you insist, you can manually install citeproc-py from distribution packages hosted at PyPI. Please ignore the release archives offered by GitHub.
To get started with citeproc-py, take a look at the examples under examples/. Two examples are provided, one parsing references from a JSON representation of references as supported by citeproc-js, another parsing the references from a BibTeX file. Both show and explain how to cite references and render the bibliography.
Currently, citeproc-py passes almost 60% of the (relevant) tests in the citeproc-test suite. However, it is more than 60% complete, as citeproc-py doesn’t take care of double spaces and repeated punctuation marks yet, making a good deal of the tests fail. In addition, the following features have not yet been implemented (there are probably some I forgot though):
Also, some citeproc-js functionality that is not part of the CSL spec is not (yet) supported:
Running the Tests
First clone the citeproc-test suite so that it sits next to the citeproc-py directory. Now you can run citeproc-test.py (in the tests directory). Run citeproc-test.py --help to see its usage information.
Release 0.6.0 (2021-05-27)
Various issues on Windows: testing, explicit utf-8 encoding
Strings with unescaped declared r”aw”
Removed support for Python 2.7, 3.5 and added for 3.9
Travis CI is removed in favor of GitHub actions testing across all 3 major OSes (MacOS, Windows, GNU/Linux Ubuntu)
CSL test-suite progressed from 5779a8c to c3db429
Release 0.5.1 (2020-03-06)
avoid rnc2rng 2.6.2 which breaks installation of citeproc-py
Release 0.5.0 (2020-02-09)
handle commas and ampersands in a functional style
Number: handle commas and ampersands
added symbol for textquotesingle
specify fallback locales for fr-CA and es-CL
improved page number and ranges parsing
don’t fail on empty page ranges (#90) (bbm)
detect end of file while parsing incorrect bib (#59) (John Vandenberg)
Removed 3.2-3.4 and added 3.7, 3.8 to supported Pythons
Refactored locales handling
Release 0.4.0 (2017-06-23)
allow specifying the encoding of a BibTeX database file (#20 and #25)
BibTeX ‘month’ field: support integers and “<month> <day>” values
BibTeX ‘pages’ field: support “10”, “10+”, “10-12” and “10–12” formats
BibTeX entry types: map the non-standard ‘thesis’ and ‘report’ entries
update the CSL schema to version 1.0.1 (#5)
update the CSL locales to commit 49bf3fc0
avoid crash when there is nothing to affix (David Lesieur)
fix BibTeX month to CSL month mapping (#24)
strip leading/trailing whitespace from BibTeX values (#37)
Release 0.3.0 (2014-11-07)
Major improvements to the BibTeX parser:
split names into parts and assign them to the equivalent CSL name parts
fixed handling of accent macros and escaped characters
more compatible (La)TeX macro handling in general (but still basic)
handle standard Computer Modern ligatures such as –, —, and <<
added unit tests for the BibTeX and LaTeX parsers
disable RelaxNG validation of CSL styles by default (API change)
Release 0.2.0 (2014-10-25)
bad cite callback function can determine how a bad cite is displayed (hetsch)
added option to disable RelaxNG validation (Jasper Op de Coul)
distutils was replaced with setuptools (Joshua Carp)
bug fixes (Yaroslav Halchenko, David Lesieur)
CitationStylesBibliography.bibliography() now returns the list of entries
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Hashes for citeproc_py-0.6.0-py3-none-any.whl