Pybtex / Docs / Version history

# Version history

## Version 0.23.0

(released on October 12, 2020)

- Reimplemented `OrderedCaseInsensitiveDict` using `collections.OrderedDict` (so it has a __delitem__).

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

- Added `from_string()` to `pybtex.database.BibliographyData`.

- Added `from_string()` and `to_string()` to `pybtex.database.Entry`.

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

- Preserve order in `pybtex.utils.OrderedCaseInsensitiveDict.__repr__()`.

- Fixed entries with duplicate keys being removed during sorting.

- Fixed handling of duplicate person fields

- Use `ElementTree` instead of the deprecated `cElementTree`.

- Import base classes from `collections.abc` instead of `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.

## 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!

## 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 reading and writing bibliography data.

- Pythonic styles: reworked and extended the rich text API.

- 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!

## 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 setuptools 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.

← Extending Pybtex with plugins
Table of contents