Version 0.25.1
--------------
(released on June 26, 2025)

- Fix copyright year in the documentation.

- Include tests into the tarball.


Version 0.25.0
--------------
(released on June 21, 2025)

- Added external_href for links to be opened in an external window.

- Added support for ``@software``, ``@patent``, and ``@dataset``.

- Added :py:attr:`pybtex.database.BibliographyData.preamble_list` to get the
  preamble as a list.

- Fixed formatting in ``__repr__`` for :py:meth:`pybtex.database.Entry`.

- Fixed formatting bibliographies with crossrefs with ``pybtex-format``.

- Fixed registering plugins at runtime.

- Fixed numerous typos in the documentation.

- Updated Sphinx config for compatilibility with Sphinx 6+.

- Removed the dependency on the deprecated ``distutils`` module.

- Removed the dependency on ``setuptools``.

- Finally dropped support for Python 2. :)

Thanks to Tomáš Hrnčiar, Jerry James, Maximilian Linhoff, Christopher
Markiewicz, Kunal Marwaha, Clément Pit-Claudel, Julian Rüth, Tristan Stenner,
Nick Touran, and Matthias Troffaes for their contributions!


Version 0.24.0
--------------
(released on January 17, 2021)

**This is the last version that supports Python 2. The next version will
require Python 3.6 or above.**

- Added support for ``sup`` and ``sub`` tags to LaTeX and Markdown backends.

- Added support for ``@online`` entries and the ``urldate`` field.

- Restored compatibility with Python 2.

- Fixed tests on Windows.

- Fixed bugs in the example plugin.

- Fixed bad ``get_default_encoding()`` call.


Thanks to Matthias Troffaes for his contributions!


Version 0.23.0
--------------
(released on October 12, 2020)

- Reimplemented :py:class:`~pybtex.utils.OrderedCaseInsensitiveDict` using
  :py:class:`python:collections.OrderedDict` (so it has a __delitem__).

- ``unsrt.py`` now supports type when formatting phdthesis.

- Added :py:meth:`~pybtex.database.BibliographyData.from_string` to
  :py:class:`pybtex.database.BibliographyData`.

- Added :py:meth:`~pybtex.database.Entry.from_string` and
  :py:meth:`~pybtex.database.Entry.to_string` to
  :py:class:`pybtex.database.Entry`.

- Added indentation to ``__repr__`` in
  :py:class:`pybtex.database.BibliographyData` and
  :py:class:`pybtex.database.Entry`.

- Preserve order in
  :py:meth:`pybtex.utils.OrderedCaseInsensitiveDict.__repr__`.

- Fixed entries with duplicate keys being removed during sorting.

- Fixed handling of duplicate person fields

- Use :py:mod:`~xml.etree.ElementTree` instead of the deprecated
  ``cElementTree``.

- Import base classes from :py:mod:`python:collections.abc` instead of
  :py:mod:`python:collections`.

- Use ``__iter__`` instead of deprecated ``Element.getchildren()``.


Thanks to David Chiang, Jerry James, Jannik Schürg, Nathaniel Starkman, and
Matthias Troffaes for their fixes and improvements!


Version 0.22.2
--------------
(released on January 17, 2019)

- Fixed compatibility with Python 2 and older versions of Python 3.


Version 0.22.1
--------------
(released on January 16, 2019)

- Fixed non-working ``--backend`` option with ``pybtex -l python``.


Version 0.22.0
--------------
(released on November 18, 2018)

- Fixed handling of duplicate fields in ``.bib`` biles. Thanks, Jannik Schürg!

- BibTeX parser is now up to 10% faster on some files. Thanks, Fabrice
  Benhamouda!

- Fixed parsing of names with ``\~`` characters.

- Fixed formatting proceedings without an ``editor`` field in ``unsrt.py``.

- In case of too many braces in a BibTeX string, ``PybtexSyntaxError`` is now raised instead
  of ``RecursionError``.

- Dropped ``2to3``, made the code compatible with both Python 2 and 3 with Six_.

- Moved tests outside of the ``pybtex`` package.

- Fixed searching in docs with recent versions of Sphinx_.

- API: renamed ``bibtex.BibTeXEntryIterator`` to ``bibtex.LowLevelParser`` for clarity.

- API: removed confusing usage of ``Person.text`` in ``tempate.names``.

- API: ``Entry.fields`` does not automagically look for cross-referenced entries
  anymore.

.. _Six: https://pypi.org/project/six/
.. _Sphinx: http://sphinx-doc.org/


Version 0.21
------------
(released on January 20, 2017)

- BibTeX writer now uses latexcodec_ to encode characters that are not directly
  supported by the output encoding. Thanks, Hong Xu!

- HTML backend: {braced stings} are now wrapped with ``<span class="bibtex-protected">``
  to enable custom CSS styling.

- ``unsrt.py``: DOI, PubMed and Arxiv links now use HTTPS instead of HTTP.

- ``unsrt.py``: URLs with percent characters are now formatted correctly.

- ``unsrt.py``: short page / volume / chapter numbers are now joined with a
  non-breaking space, like in BibTeX.

- ``unsrt.py``: ``inbook`` now uses the ``editor`` field if the ``author`` field is
  missing, like in BibTeX.

- ``unsrt.py``: the words "volume" and "pages" in the beginning of the sentence are
  now capitalized, like in BibTeX.

- ``unsrt.py``: removed unnecessary period between the book title and the comma in
  ``inbook``.


Version 0.20.1
--------------
(released on March 17, 2016)

- LaTeX backend: fix encoding tilde (``"~"``) characters with newer versions of latexcodec_.
- Fix splitting names with escaped space (``"\ "``) characters.


Version 0.20
------------
(released on March 10, 2016)

- YAML reader and writer now preserve the order of bibliography entries.

- Improved URL formatting in pythonic styles.

- Built-in pythonic styles now support the ``ISBN`` field.

- Pythonic styles now treat LaTeX braces correctly:

  - case conversion does not affect {braced substrings},

  - braces are stripped from non-LaTeX output: ``"{P}ython"`` becomes ``"Python"``.

- Pythonic styles now use latexcodec_ to decode LaTeX markup. For example,
  ``"Schr\"odinger"`` is now correctly rendered as ``"Schrödinger"`` in
  HTML or plain text.

Thanks to Hong Xu for his contributions!

.. _latexcodec: https://github.com/mcmtroffaes/latexcodec/


Version 0.19
------------
(released on October 26, 2015)

- Added Markdown output format (contributed by Jorrit Wronski).

- Incorrectly formatted author and editor names now result in warnings instead of errors,
  unless ``--strict`` mode is enabled.

- Fixed HTML escaping.

- Fixed parsing nested ``.aux`` files.

- Fixed splitting names separated by non-lowercase ``" and "``.

- Fixed line numbers in error messages when parsing strings with DOS/Windows line breaks.

- Fixed compatibility with BibTeX when parsing certain weird "von" names.

- Removed excessive trailing newline from ``.bib`` output.

- Text wrapping now works exactly as in BibTeX.

- Added new API for :doc:`reading and writing bibliography data <api/parsing>`.

- Pythonic styles: reworked and extended the :ref:`rich text API <rich-text>`.

- Pythonic styles: added ``strong``, ``i``, ``b``, ``tt`` tags, renamed the old
  ``emph`` tag to ``em``.

- Pythonic styles: the ``author_year_title`` style now returns ``""`` instead of ``None``
  (fixes unorderable types error in Python 3).

- Ported the documentation_ to Sphinx_.

Thanks to Jorrit Wronski and Matthias Troffaes for their fixes and improvements!


.. _documentation: https://docs.pybtex.org/

.. _Sphinx: http://sphinx-doc.org/


Version 0.18
------------
(released on July 6, 2014)

- Pybtex is now fully case-insensitive (like BibTeX). As a consequence, IEEEtran styles now work correctly.

- Added ``--preserve-case`` option to ``pybtex-convert`` (default behavior is
  to converted all identifiers to lower case).

- An error is reported if two citations have the same key but different case, like in BibTeX. (Example: ddt1999 and DDT1999).

- Fixed parsing unused bibliography entries with strings containing ``@`` characters.

- ``entry.max$`` constant is now set to 250, ``global.max$`` is set to 20000, like in BibTeX.

- Added ``--strict`` option to ``pybtex-convert`` and ``pybtex-format`` (turns
  warning into errors).

- Strict mode is now enabled by default when using pybtex as a library
  (exceptions are raised on all errors instead of just printing warnings to
  stderr).

  Non-strict error handling is still enabled when using pybtex from the command
  line, for compatibility with BibTeX. Use ``--strict`` option if you don't
  like this.

- Added missing ``pybtex-format`` manpage.


Version 0.17
------------
(released on March 10, 2014)

- Added ``pybtex-format`` utility for formatting bibliography files as HTML,
  LaTeX, and other supported human-readable formats.

- Added ``--strict`` command line option to ``pybtex`` (all warnings become errors).

- Added ``alpha`` label style, and ``alpha`` and ``unsrtalpha`` formatting styles.

- Added support for ``url``, ``eprint``, ``doi``, and ``pubmed`` fields in ``unsrt`` style.

- Names with hyphens are now abbreviated correctly ("Jean-Baptiste" becomes "J.-B.").

- ``width$`` now uses cmr10 font metrics, like in BibTeX. Non-latin characters are also supported.

- Pythonic style engine now supports ``@preamble`` commands.

- Warning on missing fields are now more human-readable.

- When writing BibTeX files, put entry key on the same line with entry type. Fixes warnings in Jabref.

- When using multiple ``.bib`` files, macros defined in earlier files are available in subsequent ones (like in BibTeX).

- Fixed parsing ``.bst`` files with lines consisting of a single ``%`` character.

- Fixed sorting entries without author in ``author_year_title`` sorting style.

- Fixed broken ``CaseInsensitiveDict.get()``.

- ``CaseInsensitiveDict`` is now pickleable.

- Added support for registering plugins at runtime with
  ``pybtex.plugin.register_plugin()`` - useful for using pybtex as a library.

Many thanks to Matthias C. M. Troffaes for his numerous fixes and improvements!


Version 0.16
------------
(released on March 17, 2012)

- BibTeX ``.bib`` and ``.bst`` parsers were completely rewritten. They are now
  much faster and more BibTeX-compatible.

- Syntax errors and undefined strings in ``.bib`` files now result in warnings
  instead of errors, like in BibTeX.

- Unused entries in ``.bib`` files are now skipped, like in BibTeX.

- The case of entry keys is now preserved (in previous versions they were
  converted to lowercase).

- Pythonic style engine now supports sorting.

- Pythonic style engine: fixed nested optional() blocks.

- Fixed parsing of some names with a Last part but no von part.

- Fixed processing of brace-level-one "special characters" in ``purify$`` BibTeX
  built-in function.

- Added proper error messages on encoding errors in .bib files.

- The default encoding is now UTF-8 on all platforms.

- ``pybtex-convert`` now preserves the order of entries in BibTeX and BibTeXML
  files.


The following changes were contributed by Matthias C. M. Troffaes:

- Fixed first_of behavior when non-empty child is followed by a child that has a
  missing field.

- Fixed crossref lookups when key is not lower case.

- Completed unsrt and plain python styles: they now contain all entry types.

- Added doctree backend for rendering into a tree of docutils nodes.

- Added support for non-string backends.



Version 0.15
------------
(released on February 1, 2011)

- Changed license from GPL-3 to MIT.

- Added support for :doc:`setuptools plugins <api/plugins>`.

- BibTeX parser: fixed whitespace normalization in concatenated strings.

- BibTeX parser: when parsing multiple BibTeX files, macros defined in
  earlier files are now available to all subsequent files, like in BibTeX.

- BibTeX ``.bst`` interpreter now prints warnings on missing entries, like
  BibTeX, instead of raising a ``KeyError``.

- ``call.type$`` BibTeX built-in function now uses ``default.entry`` for
  unknown entry types, like in BibTeX.

- ``substring$`` now accepts ``start=0`` and returns an empty string.

- ``change.case$``: fixed incorrect formatting of strings starting with special
  characters with ``"t"`` format.

- Fixed abbreviation of names starting with special characters or
  non-alphabetic characters.

- Fixed incorrect entry order and duplicated entries with ``\nocite{*}``.

- Added more detailed error messages for already defined variables in ``.bst``
  files.


Version 0.14.1
--------------
(released on September 30, 2010)

- Added missing ``custom_fixers`` directory to the tarball --- needed only for
  converting the sources to Python 3.


Version 0.14
------------
(released on September 20, 2010)

- BibTeX writer: fixed quoting ``"`` (double quote) characters.

- BibTeX parser now produces human-readable error messages on unread macros.

- Added error messages on missing data in ``.aux`` files.

- Improved performance on very long name lists.

- Added support for Python 3.


Version 0.13.2
--------------
(released on February 26, 2010)

- BibTeX parser: fixed a bug with parsing strings containing braces, like
  ``"Error in {DNA}"``.


Version 0.13.1
--------------
(released on February 18, 2010)

- Fixed ``ImportError: No module named kpathsea`` errors. One of the source files
  was missing from ``pybtex-0.13.tar.bz2`` for some strange reason. Sorry about that. ;)


Version 0.13
------------
(released on February 14, 2010)

- Implemented ``--min-crossrefs`` option.

- All command line options of the original BibTeX are not supported.

- Pybtex now respects ``BSTINPUTS``, ``BIBINPUTS`` and ``TEXMFOUTPUT`` environment
  variables.

- BibTeX bibliography parser now strips excessive whitespace from fields, like
  BibTeX does.


Version 0.12
------------
(released on November 21, 2009)

- Pybtex now works correctly with ``\input{filename}`` in LaTeX files.

- Added a proper ``change.case$`` BibTeX function instead of a stub.

- Added ``-e``/``--encoding`` command line option.

- Fixed non-working ``--bibtex-encoding`` option.

- Added proper error messages on missing plugins, file IO errors, some BibTeX
  interpreter errors, etc.

- Fallback to backslash-encoding when printing messages to the console - to
  make them printable regardless of the locale.


Version 0.11
------------
(released on September 7, 2009)

- Made ``text.lentgh$`` and ``text.prefix$`` BibTeX built-in functions treat
  braces and TeX special characters properly (like the original BibTeX
  functions do).

- Changed ``purify$`` to replace ties and hyphens by spaces.

- Fixed a bug in ``substring$`` with negative start values.

- Fixed .bst file grammar to allow underscores in identifiers.

- BibTeX name parser: ties are now treated as whitespace when splitting name
  parts.

- Implemented BibTeX-like text wrapping. The resulting .bbl output should now
  be byte-for-byte identical to that of BibTeX in most cases.


Version 0.10
------------
(released on August 24, 2009)

- Added support for multiple bibliography databases.

- Pythonic bibliography formatter: added helper functions to simplify writing
  BibTeX-like name formatting styles in Python. Added a tool for automatic
  conversion of BibTeX ``{ll}{, ff}``-like patterns into Python.

- BibTeX parser: added missing characters to the caracter set of the valid
  identifiers.

- BibTeX parser: a comma is now allowed between the last field and the closing
  brace.

- BibTeX name parser: when splitting name parts into words, whitespace at brace
  level > 0 is now ignored.

- BibTeX name parser: fixed parsing of single-word lowercase names and complex
  von names, like in "Andrea de Leeuw van Weenen".

- Fixed broken ``--label-style`` and ``--name-style`` options.

- Added (autogenerated) manpages.

- Added this changelog.


Version 0.9
-----------
(released on August 17, 2009)

- Implemented ``\citation{*}``.  

- Implemented crossrefs.

- BibTeX ``.bib`` parser now supports newlines inside strings.

- Fixed: ``.bib`` filename from ``.aux`` file was ignored.

- Fixed incorrect argument passing to codecs.open().

- Fixed incorrect whitespace handling in the name parsing code.


Version 20090402
----------------
(released on February 04, 2009)

- Fixed yet more encoding-related bugs.

- Cleaned up some old nasty code, updated the documentation, added more tests.


Version 20080918
----------------
(released on September 18, 2008)

- Added HTML backend. The pythonic bibliography formatter can now produce LaTeX,
  HTML, and plaintext.

- BibTeXML writer now indents the resulting XML.

- Removed the dependency on external elementtree.

- Improved the interface of the ``pybtex-convert`` script. It is just
  ``convert foo.bib foo.yaml`` now.

- Fixed several bugs in the BibTeX interpreter.

- Fixed several encoding-related bugs.


Version 20070513
----------------
(released on May 13, 2007)

- Added an interpreter for the BibTeX stack language. Pybtex now supports
  BibTeX style files.

- Added a YAML bibliography format (both input and output).

- Improved processing of names with {braces}.

- Added support for ``@preamble`` to both BibTeX parser and writer.

- Introduced an experimental pythonic template language to make bibliography
  formatting easier with a more functional-oriented approach.

- Added support for incollection entries to the experimentl pythonic bibliography
  style.

- cElementTree is now used for BibTeXML parsing, if present.

- Added some documentation files (finally).


Version 20060416
----------------
(released on April 16, 2006)

- Added BibTeX and BibTeXML formatters for bibliography databases. Added a
  database conversion tool.

- Improved name splitting in the BibTeX parser.

- Locale encoding is now used by default.

- Added ``richtext.Check`` class to simplify formatting of optional bibliography
  fields.

- Added support for booklet and inbook entry types to the experimentl pythonic
  bibliography style.


Version 20060402
----------------
(released on April 2, 2006)

- Added initial Unicode support and input/output encodings.

- Introduced output backends to make bibliography styles markup-independent.
  Added LaTeX and Plaintext backends.

- Improved BibTeXML parser, add support for pre-parsed names (``<bibtex:first>``,
  ``<bibtex:middle>`` and so on).

- Added default macros for month names to the BibTeX parser.

- Added an experimental ``richtext.Phrase`` (former ``Pack`` class (former
  ``Packer`` class)) class to make creating sentences and delimited lists
  easier.

- Added experimental support for pluggable name and label styles to the
  pythonic bibliogrphy formatter.

- Made Pybtex work on Windows by renaming aux.py to auxfile.py. Duh.


Version 0.1
-----------
(released on March 4, 2006)

Initial release. This version already has a basic BibTeX .bib parser, BibTeXML
parser and a proof-of-concept pythonic bibliography formatter.
