# Changes

## 2.6.5 (27 June 2025)

- Require pybtex 0.25 and remove setuptools dependency hack.

## 2.6.4 (17 June 2025)

- Add Python 3.13 support.

- Add setuptools as dependency on all Python versions. This fixes an issue with an undeclared setuptools dependency in the latest release of pybtex. See discussion in issue #345.

- Python 3.7 and 3.8 are EOL and are therefore no longer officially supported.

- FootCiteRole now derives from SphinxRole instead of XRefRole, simplifying the implementation.

- Bib files in conf.py are now resolved relative to confdir instead of srcdir (reported and fixed by rgambord, see issue #357 and pull request #358).

- Duplicate label warnings are no longer issued if the non-prefixed keys are identical. This allows having duplicate citations, as long as the keys are differently prefixed, which is a common use case. See issue #365 reported by ego-thales.

## 2.6.3 (12 September 2024)

- Add setuptools as a runtime dependency on Python 3.12. This works around an issue with the latest release of pybtex not working on Python 3.12 otherwise. See issue #345.

- Migrate setup.py to pyproject.toml. This fixes a `namespace_packages` warning on setuptools. See issue #350.

## 2.6.2 (10 January 2023)

- Fix bibliography header repetition when recompiling documents (reported by ragonneau, see issue #342 and pull request #343).

## 2.6.1 (27 August 2023)

- The `:cite:alp:` role in the super style now also suppresses the sup tag in addition to the brackets, to make it easier to apply the necessary formatting around the citation.

## 2.6.0 (24 August 2023)

- Pre- and post-text in citations are now supported for the author_year, label, and super referencing styles. The syntax is `:cite:p:`{pre-text}key{post-text}`` (requested by RobertoBagnara, see issue #288 and pull request #316). Refer to the documentation for more details.

- New alternative style citations are now supported for the author_year, label, and super parenthetical referencing styles, which are identical to parenthetical citations but without the brackets. The syntax is `:cite:alp:`key`` (requested by davidorme, see pull request #316). Refer to the documentation for more details.

- Exclude docutils 0.18 and 0.19 to fix generation of a spurious div tag in the html builder (see issues #330, #329, #323, #322, #309).

- Add test for running the extension on Cython modules (see issue #308).

- Add test for running the extension with autoapi (see issue #319).

- Sphinx versions 2.x (and lower) are no longer supported. New minimum required version of Sphinx is 3.5.

- Running pytest without arguments will now by default skip all marked tests that require additional dependencies (currently numpydoc, rinohtype, and cython).

- Fix encoding issues when running tests on Windows.

- Python 3.6 is EOL and is therefore no longer officially supported.

## 2.5.0 (22 August 2022)

- Add support for the rinohtype builder (reported by brechtm, see issue #275).

- Migrate from `pkg_resources` to `importlib.metadata`. A side effect of this migration is that plugins registered at runtime are longer exposed as entry points. This is because `importlib` does not allow runtime modification of entry points.

- Remove sphinxcontrib namespace `__init__.py` file (no longer needed for Python 3.3+ by PEP420).

- Add support for docutils 0.18.

- Suppress LaTeX url commands in tooltips (see issue #305, reported by 1kastner).

- Document Markdown syntax for MyST (suggested by jacopok, see issue #310).

## 2.4.2 (10 April 2022)

- Add support for Python 3.10 and 3.11.

- New `bibtex_tooltips` option. Set to `False` to disable tooltip generation. See issue #286.

- New `bibtex_tooltips_style` option to customize tooltip text style. If empty (the default), the bibliography style is used. See issue #286.

- Support for `root_doc` option introduced in Sphinx 4.0 (see issue #292, reported by jhmeinke).

- Use container node instead of paragraph node for containing bibliographies, fixing a violation against the docutils spec (see issue #273, reported by rappdw, with additional input from brechtm).

- Fix mutable dataclass fields for Python 3.11 (see issue #284 and pull request #285; reported and fixed by jamesjer)

- Internal refactor: embed `reference_text_class` directly inside the pybtex nodes. This enables different text classes to be used by different styles, so different sorts of docutils nodes can be generated on rendering depending on the pybtex node used. See discussion in issue #275.

- Add numpydoc regression test.

- Bump minimal pybtex requirement to 0.24.

## 2.4.1 (10 September 2021)

- Gracefully handle textual citations when author or year are missing (see issue #267, reported by fbkarsdorp).

## 2.4.0 (8 September 2021)

- Allow specific warnings to be suppressed (see issue #255, contributed by stevenrhall).

- Fix parsing of LaTeX url commands in bibtex fields (see issue #258, reported by Matthew Giassa).

- Remove space between footnote and author for textual footnote citations in the default foot referencing style.

- Document how to use a backslash escaped space to suppress space before footnotes (see issue #256, reported by hagenw).

- Parse all bib files together, so macros specified in one file can be used in another file (see issue #216, reported by mforbes). As a consequence, duplicate citation keys across bib files will now also result in proper warnings. The `parse_bibfile` and `process_bibfile` functions have been been replaced by `parse_bibdata` and `process_bibdata` in the API.

- New `bibtex_cite_id`, `bibtex_footcite_id`, `bibtex_bibliography_id`, and `bibtex_footbibliography_id` settings, which allow custom ids (which can be used as html anchors) to be generated for citations and bibliographies, based on the citation keys rather than some random numbers (see issue #264, reported by kmuehlbauer). Refer to the documentation for detailed usage and examples.

- Switch to github actions for regression testing.

- The API is now fully type checked.

- Various minor improvements in documentation and code.

## 2.3.0 (1 June 2021)

- Add `:footcite:p:` and `:footcite:t:` roles. For capitalizing the first letter and/or listing the full author list, you can use `:footcite:ct:`, `:footcite:ts:`, `:footcite:cts:`, and `:footcite:ps:`.

- To configure your footnote referencing style, an optional config setting `bibtex_foot_reference_style` has been added. If not specified, this defaults to the `foot` style, which will use plain footnote references for citation references, matching the referencing style as in previous versions. Footnote reference styles can be fully customized to your heart’s desire, similar to regular citation reference styles.

- New `:cite:empty:` role which registers a citation without generating a reference, similar to LaTeX’s nocite command (see issue #131).

- Citation keys can now be listed directly under the bibliography directive, one key per line; such citations will always be included, regardless of any filter settings (see issue #54).

- A plain text preview of the full citation information will be shown when hovering over a citation reference (see issue #198, requested by eric-wieser).

- The separator between the text and the reference of all textual citation styles can now be customized.

## 2.2.1 (16 May 2021)

- The LaTeX output now uses hyperlink instead of sphinxcite. This fixes issues with double brackets and other mismatches between LaTeX and HTML outputs (see issue #244 reported by zhi-wang).

- The setup function now also returns the version of the extension (see issue #239 reported by lcnittl).

## 2.2.0 (5 March 2021)

- Support the `:any:` role (see issue #232).

- New natbib/biblatex inspired roles for textual and parenthetical citation references (see issue #203 reported by matthew-brett). For textual citation references, use `:cite:t:` and for parenthetical citation references, use `:cite:p:`. The old `:cite:` role is an alias for `:cite:p:`.

- Use the `s` suffix to include the full author list rather than abbreviating it with “et al.”: `:cite:ts:`, `:cite:ps:`.

- For textual citation references, use the `c` prefix to capitalize the first letter: `:cite:ct:`, `:cite:cts:`.

- New natbib inspired roles for citing just the author, year, or label, optionally with brackets, and optionally capitalizing the first letter of the author: `:cite:author:`, `:cite:authorpar:`, `:cite:cauthor:`, `:cite:cauthorpar:` `:cite:year:`, `:cite:yearpar:`, `:cite:label:`, `:cite:labelpar:` (see issue #71 reported by bk322).

- To configure your referencing style, an optional config setting `bibtex_reference_style` has been added. If not specified, this defaults to the `label` style, which will use the label to format citation references, matching the referencing style as in previous versions. The other style currently available is `author_year`, for author-year style referencing.

- Reference styles can be fully customized to your heart’s desire (see issue #203 reported by amichuda). They are based on pybtex’s template system, which was already used for customizing bibliography styles. Refer to the user documentation for examples, and to the API documentation for full details.

- Other packages can register custom reference styles through entry points. Refer to the user documentation for details.

- Propagate pybtex FieldIsMissing exception as a warning (see issue #235 reported by Zac-HD).

## 2.1.4 (8 January 2021)

- Fix ValueError exception when having citations from orphans (see issue #228, reported by VincentRouvreau).

## 2.1.3 (1 January 2021)

- Sphinx 2.1 or later is now formally required (up from 2.0).

- Fix unresolved references when running the latex build immediately after the html build, or when rerunning the html build after deleting the generated html files without deleting the pickled doctrees/environment (see issue #226, reported by skirpichev).

- No longer insert user defined header for bibliography directives if there are no citations in it.

- Warnings now consistently provide source file and line number of where the issue originated.

- Simpler and faster implementation of footcite and footbibliography.

- Improved type annotations throughout the API, now using forward declarations where possible.

## 2.1.2 (30 December 2020)

- Fix KeyError exception when building documents with footbibliography directives but without any footnotes needing to be generated for this directive (see issue #223, reported by drammock).

## 2.1.1 (29 December 2020)

- Fix latex builder KeyError exception (see issue #221, reported by jedbrown).

- Fix citation references across documents in latex build.

## 2.1.0 (28 December 2020)

- The extension no longer relies on the `bibtex.json` method. Instead, the extension now postpones identifying all citation cross-references to Sphinx’s consistency check phase. The actual citation references and bibliography citations are then generated in the resolve phase using post-transforms. As a result, `bibtex.json` is no longer needed and thus Sphinx no longer needs to run twice as in the past if the file did not exist (closes issues #214 and #215). Thanks to everyone who chimed in on this, especially everyone who made helpful suggestions to find better implementation approaches, and everyone who helped with testing.

- Citations with multiple keys will now reside in the same bracket (closes issue #94).

- Consistent use of doctutils note_explicit_target to set ids, to ensure no clashing ids.

- Improved and robustified test suite, using regular expressions to verify generated html.

- The test suite now includes a patched version of the awesome but abandoned sphinx-natbib extension, to help comparing and testing implementations and features. The long term intention is to fully support sphinx-natbib style citations.

- BACKWARD INCOMPATIBLE The API has been refactored to accommodate the new design. Refer to the API documentation for details.

## 2.0.0 (12 December 2020)

- There is a new `footcite` role and a new `footbibliography` directive, to allow easy and simple local (per document) bibliographies through footnotes. See issues #184 and #185.

- Parallel builds are now finally supported. See issues #80, #96, and #164, as well as pull request #210.

- BACKWARD INCOMPATIBLE To enable parallel builds, a new mandatory config setting `bibtex_bibfiles` has been added. This setting specifies all bib files used throughout the project, relative to the source folder.

- BACKWARD INCOMPATIBLE The encoding of bib files has been moved to an optional config setting `bibtex_encoding`. The `:encoding:` option is no longer supported.

- Headers for `bibliography` and `footbibliography` directives can be configured via the `bibtex_bibliography_header` and `bibtex_footbibliography_header` config setting.

- The `bibliography` directive no longer requires the bib files to be specified as an argument. However, if you do, citations will be constrained to those bib files.

- Support newlines/whitespace around cite keys when multiple keys are specified. Thanks to dizcza for help with testing. See issue #205 and pull request #206.

- Improve citation ordering code (reported by ukos-git, see issue #182).

- The unresolved citations across documents issue has been resolved. The extension stores all citation information in a `bibtex.json` file. If it does not exist, the file will be created on your first sphinx build, and you will have to rerun the build to make use of it. The file is automatically kept up to date, with a warning whenever you need to rerun the build. Thanks to dizcza for help with testing. See issues #197 and #204. Also see pull request #208.

- Migrate test suite to pytest, using sphinx’s testing fixtures.

- BACKWARD INCOMPATIBLE The API has been refactored. Some functions have moved to different modules. Refer to the API documentation for details.

- Drop Python 3.5 support.

- Add Python 3.9 support.

## 1.0.0 (20 September 2019)

- Drop Python 2.7 and 3.4 support (as upstream sphinx has dropped support for these as well).

- Add Python 3.8 support (contributed by hroncok).

- Update for Sphinx 2.x, and drop Sphinx 1.x support (as there is too much difference between the two versions).

- Non-bibtex citations will now no longer issue warnings (fix contributed by chrisjsewell).

- Switch to codecov for coverage reporting.

## 0.4.2 (7 January 2018)

- Drop Python 3.3 support, add Python 3.7 support.

- Work around issue with sphinx-testing on Fedora (reported by jamesjer in issue #157, fix contributed by mitya57 in pull request #158).

## 0.4.1 (28 November 2018)

- Disable tinkerer test due to upstream bug.

- Remove crossref test due to changed upstream behaviour in pybtex.

- Fix latex test to match new upstream code generation.

- Fix documentation of encoding option (contributed by Kai Mühlbauer).

- Migrate to sphinx.util.logging in favour of old deprecated logging method.

## 0.4.0 (19 April 2018)

- Remove latexcodec and curly bracket strip functionality, as this is now supported by pybtex natively (see issue #127, reported by erosennin).

- Fix tests failures with Sphinx 1.7 (see pull request #136, reported and fixed by mitya57).

## 0.3.6 (25 September 2017)

- Real fix for issue #111 (again reported by jamesjer).

- Fix test regressions due to latest Sphinx updates (see issues #115, #120, #121, and #122, reported by ndarmage and ghisvail).

- Fix test regressions on ascii locale (see issue #121, reported by ghisvail).

- Support and test Python 3.6.

## 0.3.5 (22 February 2017)

- Fix extremely high memory usage when handling large bibliographies (reported by agjohnson, see issue #102).

- Fix tests for Sphinx 1.5.1 (see issue #111, reported by jamesjer).

## 0.3.4 (20 May 2016)

- Document LaTeX workaround for `:cite:` in figure captions (contributed by xuhdev, see issue #92 and pull request #93).

- Add `bibtex_default_style` config value to override the default bibliography style (see issue #91 and pull request #97).

- Support Python 3.5 (see issue #100).

## 0.3.3 (23 October 2015)

- Add per-bibliography key prefixes, enabling local bibliographies to be used in isolation from each other (see issue #87, reported by marscher).

- Documentation now points to new location of pybtex on bitbucket.

- Simplified testing code by using the new sphinx_testing package.

## 0.3.2 (20 March 2015)

- Document how to create custom label styles (see issue #77, reported by tino).

- Disable parallel_read_safe for Sphinx 1.3 and later (see issue #80, reported by andreacassioli).

## 0.3.1 (10 July 2014)

- Fix for `type_.lower()` bug: pybtex 0.18 expects type to be a string (this fixes issue #68 reported by jluttine).

## 0.3.0 (4 May 2014)

- BACKWARD INCOMPATIBLE The alpha style is now default, so citations are labelled in a way that is more standard for Sphinx. To get the old behaviour back, add `:style: plain` to your bibliography directives.

- BACKWARD INCOMPATIBLE `is_cited()` has been removed. Use `get_cited_docnames()` instead, which will return an empty list for keys that are not cited.

- Improved support for local bibliographies (see issues #52, #62, and #63; test case provided by Boris Kheyfets):

  - New `docname` and `docnames` filter identifiers.

  - Filter expressions now also support set literals and the operators `in`, `not in`, `&`, and `|`.

  See documentation for details.

- Multiple comma-separated citation keys per cite command (see issue #61, suggested by Boris Kheyfets).

- Add support for pypy and Python 3.4.

- Drop support for Python 2.6 and Python 3.2.

- Drop 2to3 and instead use six to support both Python 2 and 3 from a single code base.

- Simplify instructions for custom styles.

- Various test suite improvements.

## 0.2.9 (9 October 2013)

- Upgrade to the latest pybtex-docutils to produce more optimal html output (specifically: no more nested `<span>`s).

- Remove latex codec code, and rely on latexcodec package instead.

- `FilterVisitor` has been removed from the public API. Use `get_bibliography_entries()` instead.

- Fix upstream Sphinx bug concerning LaTeX citation hyperlinks (contributed by erikb85; see pull request #45).

- Fix most pylint warnings, refactor code.

## 0.2.8 (7 August 2013)

- Use pybtex-docutils to remove dependency on pybtex.backends.doctree.

## 0.2.7 (4 August 2013)

- Integrate with coveralls.io, first release with 100% test coverage.

- Minor bug fixes and code improvements.

- Remove ordereddict dependency for Python 2.7 and higher (contributed by Paul Romano, see pull requests #27 and #28).

- New `:filter:` option for advanced filtering (contributed by d9pouces, see pull requests #30 and #31).

- Refactor documentation of advanced features.

- Document how to create custom pybtex styles (see issues #25, #29, and #34).

- Code is now mostly pep8 compliant.

## 0.2.6 (2 March 2013)

- For unsorted styles, citation entries are now sorted in the order they are cited, instead of following the order in the bib file, to reflect more closely the way LaTeX handles unsorted styles (addresses issue #15).

- Skip citation label warnings on Sphinx [source] links (issue #17, contributed by Simon Clift).

## 0.2.5 (18 October 2012)

- Duplicate label detection (issue #14).

- New `:labelprefix:` option to avoid duplicate labels when having multiple bibliographies with a numeric label style (addresses issue #14).

## 0.2.4 (24 August 2012)

- New options for the bibliography directive for rendering the bibliography as bullet lists or enumerated lists: `:list:`, `:enumtype:`, and `:start:`.

- Minor latex codec fixes.

- Turn exception into warning when a citation cannot be relabeled (fixes issue #2).

- Document LaTeX encoding, and how to turn it off (issue #4).

- Use pybtex labels (fixes issue #6 and issue #7).

- Cache tracked citation keys and labels, and bibliography enumeration counts (fixes issues with citations in repeated Sphinx runs).

- Bibliography ids are now unique across documents (fixes issue that could cause the wrong bibliography to be inserted).

- The plain style is now the default (addresses issue #9).

## 0.2.3 (30 July 2012)

- Document workaround for Tinkerer (issue #1).

- Use tox for testing.

- Full 2to3 compatibility.

- Document supported versions of Python (2.6, 2.7, 3.1, and 3.2).

## 0.2.2 (6 July 2012)

- Documentation and manifest fixes.

## 0.2.1 (19 June 2012)

- First public release.