# BibTeX or BibLaTeX? Managing citations in LaTeX theses the right way

> BibTeX, BibLaTeX and biber compared: which backend fits a bachelor's, master's or doctoral thesis, which citation command to use, and where the typical compile errors sit.

Acurio · 2026-10-05 · LaTeX, BibTeX, BibLaTeX, Citations, Master's thesis, PhD

If you are writing a master's thesis in computer science, physics, electrical engineering, or mathematics, you will almost certainly end up in LaTeX — and with it, in the choice between BibTeX and BibLaTeX. Both handle citations and the reference list, but they are different beasts: different age, different feature set, different error messages. This article shows you which tool fits your thesis, which citation commands to use in your prose, and where the pre-submission compile errors tend to hide.

## BibTeX, BibLaTeX, biber — three names, three things

The confusion often starts at the names. These are three separate tools:

- **BibTeX** is the classic 1985 program that turns a `.bib` file and a style file (`.bst`) into a formatted reference list.
- **biblatex** is a LaTeX package that moves the formatting into LaTeX code — instead of a dedicated style language (`.bst`) that almost nobody can read.
- **biber** is the modern backend that reads and sorts your `.bib` data for biblatex. biber replaces classic BibTeX as the data processor.

In practice: if you are starting fresh today, you want **biblatex + biber**. BibTeX is not broken, but it is a 40-year-old answer to a problem that has since been solved more cleanly.

| Feature | BibTeX (classic) | BibLaTeX + biber |
| --- | --- | --- |
| First release | 1985 | 2006 / 2009 |
| UTF-8 (umlauts natively) | No, only via `\"a` | Yes, native |
| Citation styles | Hard-coded in `.bst` | Configurable in LaTeX |
| Localisation | English only | German, French, etc. |
| Sorting | ASCII | Unicode-correct |
| Citation commands | only `\cite` | `\parencite`, `\textcite`, `\autocite` … |
| Learning curve | Steep but shallow ceiling | Gentler, extensible |

## When classic BibTeX still makes sense

Two cases where sticking with classic BibTeX is pragmatic:

1. **Your department ships a LaTeX template built on a `.bst` style.** Older university templates — anything from before 2010, really — tend to use `natbib` + BibTeX. If you cannot touch the formatting, leave it alone; migrating costs more time than it saves.
2. **You are submitting to a journal with a prescribed `.bst` file.** Elsevier, Springer, IEEE, and many others distribute their styles as BibTeX templates. CS conference submissions almost always use `IEEEtran.bst` or a variant.

For everything else — fresh bachelor/master thesis, PhD dissertation, German-language literature, non-English author names — biblatex is the better choice.

## The `.bib` file: the shared foundation

In both worlds, the `.bib` file is the same: a plain text file with entries in BibTeX syntax. A journal article looks like this:

```bibtex
@article{mueller2023learning,
  author  = {Mueller, Anna and Weber, Thomas},
  title   = {Learning strategies at university: A longitudinal study},
  journal = {Zeitschrift für Pädagogische Psychologie},
  year    = {2023},
  volume  = {37},
  number  = {2},
  pages   = {112--128},
  doi     = {10.1024/1010-0652/a000345},
}
```

The key `mueller2023learning` is the handle you cite from LaTeX — you type it into `\cite{mueller2023learning}`. Convention: `lastname + year + keyword`, all lowercase, no diacritics, no special characters. That convention saves you later, when you discover two articles by the same author in the same year (`mueller2023a`, `mueller2023b`).

### What BibLaTeX adds

biblatex understands fields that classic BibTeX ignores — most importantly `date`, `langid`, `url`, `urldate`, and dedicated entry types like `@online`, `@thesis`, `@report`:

```bibtex
@online{ons2024education,
  author  = {{Office for National Statistics}},
  title   = {Educational qualifications 2023},
  year    = {2024},
  urldate = {2026-05-12},
  url     = {https://www.ons.gov.uk/...},
  langid  = {english},
}
```

The doubled braces around the author are required whenever the author is an organisation — otherwise biber tries to read "Statistics" as a last name and "Office for National" as a first name. You will not see the problem in the compiled PDF, but your alphabetical sorting will be wrong.

## Citation commands: the big biblatex win

This is where biblatex pays for itself every day. Classic BibTeX really only has `\cite{key}` — what the output looks like depends on the style, not on the shape of your sentence.

biblatex separates the intent:

| Command | Output (author-year) | Use case |
| --- | --- | --- |
| `\parencite{mueller2023}` | (Mueller 2023) | Citation in parentheses at the end of a sentence |
| `\textcite{mueller2023}` | Mueller (2023) | Author in the running text, year in parentheses |
| `\autocite{mueller2023}` | depends on configuration | The default you set at the top of the preamble |
| `\footcite{mueller2023}` | Citation as a footnote | Chicago notes, legal writing |
| `\cite{mueller2023}` | Bare minimum, no parentheses | Rarely used directly |

With a page number: `\parencite[p.~42]{mueller2023}` → (Mueller 2023, p. 42). The tilde `~` is a non-breaking space, preventing an ugly line break between "p." and "42".

Multiple citations in one parenthesis: `\parencite{mueller2023,weber2022,schmidt2020}`. biblatex sorts them according to the scheme you set in the preamble (usually alphabetical or by year).

## A minimal LaTeX skeleton

A working main document for a bachelor's thesis with biblatex looks like this:

```latex
\documentclass[12pt,a4paper]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[
  backend=biber,
  style=authoryear,
  natbib=true
]{biblatex}
\addbibresource{references.bib}

\begin{document}

Trust is the precondition for openness
\parencite[p.~42]{mueller2023learning}.

\textcite{mueller2023learning} describes the process
in three stages.

\printbibliography

\end{document}
```

The build order is `pdflatex` → `biber` → `pdflatex` → `pdflatex`. The two trailing passes stabilise cross-references and numbering. In TeXstudio or Overleaf you set this as a build chain and run it with one button.

## Choosing a style with biblatex

Instead of hunting for a `.bst` file and hoping it supports APA 7, you set the style directly in the package call. The important ones:

- `style=authoryear` — author-year, close to Harvard
- `style=authoryear-icomp` — compact variant for multiple works by the same author in one year
- `style=numeric` — numeric, like Vancouver or IEEE
- `style=alphabetic` — short tags like `[Mül23]`, popular in theoretical CS
- `style=apa` — APA 7, via the add-on package `biblatex-apa`
- `style=ieee` — IEEE-aligned, via `biblatex-ieee`
- `style=chicago-authordate` or `chicago-notes` — via `biblatex-chicago`

The add-on packages come with your TeX distribution (TeX Live, MiKTeX) or are already installed on Overleaf. For a map of which style fits which discipline, see our [citation style comparison](https://acurio.ch/en/blog/citation-styles-compared).

## Zotero → Better BibTeX → LaTeX: the practical workflow

Hand-editing a `.bib` file is self-inflicted punishment. The working pipeline:

1. **Collect in Zotero.** Browser connector, DOI lookup, PDF metadata — Zotero fills in most of the fields automatically.
2. **Install the [Better BibTeX](https://retorque.re/zotero-better-bibtex/) plugin.** It generates stable citekeys (`mueller2023learning` instead of Zotero's random internal ID) and exports a continuously updated `.bib`.
3. **Enable "Export → Keep updated".** Any change in Zotero lands in `references.bib` immediately. No manual pulls.
4. **Set a citekey formula.** Example: `[auth:lower][year][shorttitle3_3:lower]` produces deterministic keys that stay findable after renames.

For Overleaf users: Better BibTeX can sync the `.bib` straight into your Overleaf project. Alternatively, hook Zotero into your local repository with a `git` commit hook.

More on the Zotero side in our [Zotero workflow guide](https://acurio.ch/en/blog/zotero-workflow-tips).

## The most common compile errors and what causes them

### `Package biblatex Warning: 'mueller2023' not found`

The citekey is misspelled or missing from the `.bib` file. Check case — biber is case-sensitive. After fixing, remember to re-run biber.

### `! LaTeX Error: Something's wrong--perhaps a missing \item`

Almost always a malformed `.bib`: a `=` where a `,` should be, an unclosed brace, a line break in the middle of a field value without brace protection. Open the file in JabRef or Zotero — both flag the syntactic error immediately.

### "All citations render as `[?]` in the PDF"

Either biber did not run or the run produced errors in the `biber` log. Check `main.blg` — it names the exact entry that is missing or broken.

### "Umlauts in author names disappear or render as `?`"

Rare with biber + UTF-8, but check that your `.bib` is saved as UTF-8 (not Latin-1 or Windows-1252). You set this in your editor's save dialog or, in JabRef, under "File → Preferences → General → Default encoding".

### "The reference list is in the wrong order"

In biblatex: add `sortlocale=de_DE` (or your target locale) to the package call, otherwise biber sorts by Unicode codepoint and umlauts drop to the end. In classic BibTeX, there is no clean path to real German sorting without patching the style file.

### "'et al.' kicks in too early"

In biblatex, tune this via `maxcitenames` and `mincitenames` in the preamble, e.g. `maxcitenames=2, mincitenames=1`. For APA 7, the default — "three or more authors use et al." — is already correct.

## Pre-submission checklist

- [ ] Every cited entry has a unique, stable citekey.
- [ ] Every citekey in the text appears in the `.bib`, and vice versa. The `main.blg` log flags both missing entries and unused keys.
- [ ] Umlauts and special characters render correctly in the PDF.
- [ ] DOIs sit in the `doi =` field as bare identifiers (`10.xxxx/...`) — no `DOI:` label and no `https://doi.org/` prefix. biblatex adds the URL wrapper when it renders.
- [ ] Multiple works by the same author in the same year are disambiguated with `a`, `b`, `c`.
- [ ] The final `pdflatex` pass does not emit a `rerun` warning.
- [ ] The reference list is sorted according to the correct locale (`sortlocale`).
- [ ] The `.bib` file is in git or a backup — not only in Zotero.

## What LaTeX gets perfect — and what it does not check

LaTeX and biblatex are the cleanest tools for producing a formally perfect reference list. What they do not do: they do not check whether the **page number** you wrote in `\parencite[p.~42]{mueller2023}` is actually where that claim appears in Mueller 2023. They do not check whether the study you point to even exists — Zotero can create an entry whose DOI lookup silently resolves to a different paper. And they do not check whether the claim you attribute to a source in your sentence is really supported there in the full text.

For a first pass you can run your reference list through the free [Quick Check](https://app.acurio.ch/quick-check?utm_source=blog&utm_medium=article_link&utm_campaign=bibtex-biblatex-latex-zitieren): browser-based, no sign-up, result in seconds — it flags entries whose DOI does not resolve, or sources with inconsistent metadata. You get a fast map of which `.bib` entries deserve a second look.

For the full check you upload the thesis and the source PDFs. Acurio compares each citation against the source content: does page 42 actually say what you attribute to Mueller 2023? Or is Mueller discussing a neighbouring topic there, and did you grab the wrong page while flipping between Zotero and your PDF reader? That is the most common error type in STEM theses — and the one LaTeX cannot catch, no matter how clean the compile log.

## Once your LaTeX pipeline stands

LaTeX plus biblatex plus biber plus Better BibTeX is a very robust pipeline, once it is set up. The setup costs a few hours, running it costs no thought — insert a citation, compile, done. The real quality of your thesis is decided one layer up: in reading, understanding, and faithfully representing your sources. For the form, you now have all the tools you need.


## Frequently asked questions

### Should I use BibTeX or BibLaTeX?

For a new thesis, use BibLaTeX with the biber backend. Classic BibTeX dates from the 1980s, has no native UTF-8 support, and offers only a handful of hard-coded styles. BibLaTeX separates data (biber) from presentation (the biblatex package), supports umlauts and accents directly, and ships with more than 80 ready-made citation styles.

### What is the difference between \cite, \parencite and \textcite?

\cite is the classic BibTeX command with no semantics — it prints something that depends entirely on the style. In biblatex you split the intent: \parencite puts the citation in parentheses (Mueller, 2023), \textcite weaves it into the sentence as 'Mueller (2023)', and \autocite uses whatever default you configured. The separation keeps your prose clean when you later switch styles.

### Why is a source missing from my reference list?

Three typical causes: the entry has no \cite reference in the text (biblatex does not print uncited entries by default), the citekey is misspelled (biber will warn in the log), or you forgot to re-run biber after editing. The build order is pdflatex → biber → pdflatex → pdflatex.

---

Source: https://acurio.ch/en/blog/bibtex-vs-biblatex-latex-citations
