Skip to main content

Citations and bibliography formatter

Project description

# citeproc-py

![PyPI - Version](https://img.shields.io/pypi/v/citeproc-py) ![GitHub Actions Workflow Status](https://img.shields.io/github/actions/workflow/status/citeproc-py/citeproc-py/test.yml) ![Coveralls](https://img.shields.io/coverallsCoverage/github/citeproc-py/citeproc-py)

citeproc-py is a [CSL](https://citationstyles.org/) processor for Python. It aims to implement the [CSL 1.0.1 specification](https://docs.citationstyles.org/en/1.0.1/specification.html). 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](https://semver.org/). 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.

## Requirements

citeproc-py supports Python 3.9 and up. It depends on [lxml](https://lxml.de/) for parsing and navigating the CSL style and locale files.

# Installation

The recommended way of installing citeproc-py is by using [pip](https://pip.pypa.io/en/latest/):

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](https://pypi.python.org/pypi/citeproc-py/). Please ignore the release archives offered by GitHub.

## Getting Started

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.

## CSL Compatibility

Currently, citeproc-py passes almost 60% of the (relevant) tests in the [citeproc-test suite](https://github.com/citation-style-language/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):

  • disambiguation/year-suffix

  • et-al-subsequent-min/et-al-subsequent-use-first

  • collapsing

  • punctuation-in-quote

  • display

Also, some [citeproc-js](https://github.com/juris-m/citeproc-js) functionality that is not part of the CSL spec is not (yet) supported:

  • raw dates

  • static-ordering

  • literal names

## Contributing

citeproc-py is 100% volunteer maintained, and new contributions are always welcome. If you would like to contribute, please follow the guidelines in the [CONTRIBUTING.md](https://github.com/citeproc-py/citeproc-py/blob/master/CONTRIBUTING.md) file.

## Local Install and Running the Tests

First clone the citeproc-py repository and install the submodules with

git submodule update –init

Then install with

pip install -e .

Then move to the tests directory and run

python citeproc-test.py

Run

citeproc-test.py –help

to see its usage information. The first time you run the script it will clone the [citeproc-test suite](https://github.com/citation-style-language/test-suite) repository into the tests directory and checkout the last tested version. By default failed tests are automatically added into the failing_tests.txt file and aren’t shown when running the test suite again.

If you want git to fully ignore the submodule, you can type

git update-index –assume-unchanged citeproc/data/schema

# v0.8.1 (Wed Mar 12 2025)

#### 🏠 Internal

#### Authors: 1

# v0.8.0 (Wed Mar 12 2025)

#### 🚀 Enhancement

#### ⚠️ Pushed to master

#### 🏠 Internal

#### 📝 Documentation

#### Authors: 3

# Release 0.7.0 (2025-02-19)

Just to get a release out after long period.

#### Bug fixes

  • Better handling of ordinals

  • Fix locator conditions (resolves #142)

  • Make family name optional

  • Allow date parts to not be integers

  • Support space macros

  • Fix multiple capitals

  • Fix parsing BibTex integer values

#### Other changes:

  • Removed support for Python 3.6, 3.7, 3.8 and added for 3.10 - 3.13

  • Switch versioning to versioneer

# Release 0.6.0 (2021-05-27)

#### Bug fixes

  • Various issues on Windows: testing, explicit utf-8 encoding

  • Strings with unescaped declared r”aw”

#### Other changes:

  • 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)

#### Bug fixed:

  • avoid rnc2rng 2.6.2 which breaks installation of citeproc-py

# Release 0.5.0 (2020-02-09)

#### Enhancements:

  • 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

#### Bug fixed:

  • don’t fail on empty page ranges (#90) (bbm)

  • detect end of file while parsing incorrect bib (#59) (John Vandenberg)

#### Other changes:

  • Removed 3.2-3.4 and added 3.7, 3.8 to supported Pythons

  • Refactored locales handling

# Release 0.4.0 (2017-06-23)

#### New features:

  • 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

#### Bug fixed:

  • 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

#### Other changes:

  • 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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

citeproc_py-0.8.1.tar.gz (145.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

citeproc_py-0.8.1-py3-none-any.whl (181.5 kB view details)

Uploaded Python 3

File details

Details for the file citeproc_py-0.8.1.tar.gz.

File metadata

  • Download URL: citeproc_py-0.8.1.tar.gz
  • Upload date:
  • Size: 145.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for citeproc_py-0.8.1.tar.gz
Algorithm Hash digest
SHA256 755b8bf2eece07b44fa540531e8d9d69afaa5e7c678e99f2c552c6adff6f0511
MD5 2062ca17a23cadf5776ecd516d5f3a03
BLAKE2b-256 5298946337a24814b506345fcc5bb0b4a57f9e2b0bf427aebdfebcb06f08663e

See more details on using hashes here.

File details

Details for the file citeproc_py-0.8.1-py3-none-any.whl.

File metadata

  • Download URL: citeproc_py-0.8.1-py3-none-any.whl
  • Upload date:
  • Size: 181.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.2

File hashes

Hashes for citeproc_py-0.8.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f55e7d924b3fd87260ca74bcd89008645f002e1968d6a8fa6dd935dd848ba09f
MD5 55d1cbfe01ecfe563b6f27229c150843
BLAKE2b-256 3a4600cb57f34b1ee8bcf887c24fcf3f6aff44d558ba75682e4e1f55c010262f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page