BibTeX vs biblatex
BibTeX vs biblatex comes down to one question, whether the bibliography is formatted by a 1985 program with its own style files or by LaTeX macros fed by Biber.
-
BibTeX
Recommended Frozen, 1985
The classic bibliography workflow, and the most widely supported.
-
biblatex (Biber)
Recommended Active, 2009
Modern citations with Unicode sorting and flexible styles.
The short answer
- A journal or conference gave you a template: BibTeX. It ships a
.bststyle, its production system expects BibTeX, and every reference manager exports for it. - A document you control, a thesis, a book, a report, anything with references in more than one language or with web pages and datasets among the sources: biblatex with Biber.
- The same
.bibfile works with both, so this is not a decision you have to get right on day one.
On LaTeX.to both run from a single Ctrl+Enter. The compiler looks at what the first LaTeX pass produced:
- A
.bcffile means biblatex, so it runs Biber. - A
\bibdataline in the.auxmeans classic BibTeX. - A first line such as
% !BIB program = biberoverrides the guess.
What BibTeX is
BibTeX is a program from 1985 that runs between LaTeX passes. The first pass writes the cited keys into the .aux file; BibTeX reads it, pulls the entries out of the .bib, formats them according to a .bst style file written in its own small stack language, and writes a .bbl that the next pass prints. Version 0.99d, from 2010, is final: it will not change, which is exactly why journals trust it.
In the document, three commands do the work:
\bibliographystyle{plain}picks the style.\cite{key}marks a citation.\bibliography{references}names the database.
The natbib package adds author-year citations on top of BibTeX styles such as plainnat.
What biblatex and Biber are
biblatex is a LaTeX package that moves the formatting out of .bst files and into LaTeX macros. Because a style is macros, you can read it and adjust it. In the document:
\usepackage[style=authoryear]{biblatex}loads it with a style.\addbibresource{references.bib}names the database.\cite,\parencite,\textciteor\autocitecite.\printbibliographyprints the list.
Biber is the program biblatex runs between passes instead of BibTeX. It reads the .bcf file biblatex writes, sorts and processes the entries, and hands the data back. It replaced BibTeX for that job because it reads Unicode, sorts by locale, and understands fields and entry types BibTeX never had. biblatex can also run classic BibTeX as its backend (backend=bibtex), for publishers who will not run Biber, at the cost of Unicode sorting and several newer features.
Where the difference shows
- Names with accents or in other scripts: Biber sorts them correctly; BibTeX sorts by bytes and needs
{\"o}tricks. - Web pages, datasets, software, videos: biblatex has
@online,@datasetand@softwarewithurlandurldate, and the style prints the access date; BibTeX squeezes them into@miscwithhowpublished. - Styles: BibTeX has
plain,abbrv,alpha,unsrt,ieeetr,apalikeand whatever the journal ships; biblatex hasnumeric,authoryear,alphabetic,apa,ieee,chicagoand dozens more, all adjustable. - Citation commands: BibTeX gives you
\citeand, withnatbib,\citepand\citet; biblatex gives\parencite,\textcite,\autocite,\footciteand more, style-aware. - Multiple bibliographies, per-chapter lists, filtering by type or keyword: biblatex does them in the document; BibTeX needs extra packages.
- Compatibility: BibTeX works with every template ever written; biblatex cannot be loaded together with
natbiborcite, and a journal that wants a.bblin its own format usually cannot take biblatex output.
Switching a document
From BibTeX to biblatex:
- Replace
\bibliographystyle{...}with\usepackage[style=...]{biblatex}in the preamble. - Replace
\bibliography{references}with\addbibresource{references.bib}in the preamble (with the extension) and put\printbibliographywhere the list goes. - Remove
natbiborciteif loaded. - Keep the
.bibas it is.\citestill works; the other commands are optional upgrades.
From biblatex to BibTeX, for a submission: the reverse edits, plus checking that every entry type exists in BibTeX (@online becomes @misc) and that the style you need ships as a .bst. If the journal only refuses Biber, backend=bibtex on the biblatex line is the smaller change.
Each engine has its own page: BibTeX, biblatex (Biber) and all engines.