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.

The short answer

On LaTeX.to both run from a single Ctrl+Enter. The compiler looks at what the first LaTeX pass produced:

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:

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:

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

Switching a document

From BibTeX to biblatex:

  1. Replace \bibliographystyle{...} with \usepackage[style=...]{biblatex} in the preamble.
  2. Replace \bibliography{references} with \addbibresource{references.bib} in the preamble (with the extension) and put \printbibliography where the list goes.
  3. Remove natbib or cite if loaded.
  4. Keep the .bib as it is. \cite still 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.