thebibliography, classic BibTeX, and modern BibLaTeX — and choosing wrong early costs you a migration later.
This guide covers all three, when each is the right call, and the errors that bite everyone once.
Level 1: thebibliography — No Database Needed
For a document with a handful of references — a homework set, a short report, a CV — you can write the bibliography inline. It compiles in a single pass with no external tools:
The {9} argument is a width sample — use {99} if you have ten or more entries so the labels align. Each \bibitem{key} becomes citable with \cite{key}, and LaTeX keeps numbering consistent.
When it stops scaling: the moment you cite the same sources in a second document, or pass ten entries, move to a .bib database. Formatting entries by hand is exactly the busywork the next two levels remove.
Level 2: Classic BibTeX
BibTeX separates data from presentation: your references live once in a.bib file, and a style file decides how they appear. The classic academic combination is BibTeX with the natbib package:
The matching references.bib entry looks like this:
natbib gives you the two citation commands that matter in author-year writing: \citep{...} for parenthetical “(Kaplan et al., 2020)” and \citet{...} for textual “Kaplan et al. (2020) show…”. Choosing between them per sentence is most of what good citation style comes down to.
The four-pass dance: classic BibTeX needs pdflatex → bibtex → pdflatex → pdflatex to resolve everything. Cloud editors run this sequence for you — locally, it’s the classic explanation for “why are my citations question marks?”
Level 3: Modern BibLaTeX with Biber
BibLaTeX is the current-generation system: styles are configured with package options instead of hard-to-modify.bst files, Unicode names just work, and localization is built in:
Swap style=authoryear for style=numeric, style=apa, or style=ieee and the entire document reformats — no other changes. \parencite and \textcite are the BibLaTeX equivalents of natbib’s \citep/\citet.
Which should you choose? For a new project: BibLaTeX, unless your target journal’s template explicitly requires a classic .bst style (many still do — check the author guidelines first). For an existing project: stay with what the template uses; mixing the two systems in one document does not work.
The Errors Everyone Hits Once
- Citations show as
?— the bibliography passes haven’t run, or the key is misspelled. Recompile fully; check the log for “Citation … undefined”. - “I changed the .bib but nothing updated” — same cause: the bibliography tool needs to re-run, not just the LaTeX pass.
- Empty bibliography with BibLaTeX — you ran
bibtexinstead ofbiber. The backend option in the preamble decides which tool must run. - Capitalization vanishing in titles — BibTeX styles lowercase titles by design. Protect acronyms with braces in the
.bibentry:title = {Scaling Laws for {BERT}}.
Reuse the Same Database Everywhere
The quiet payoff of a.bib file: it follows you. The same database drives your papers, your thesis, and your CV’s publication list. Export from Zotero or Mendeley in BibTeX format and you never type an entry by hand.
In LaTeX Cloud Studio the bibliography passes run automatically in the cloud, and citation keys autocomplete as you type \cite{ — one less reason for question marks.
Try it with your own .bib file →
Related Guides
- Bibliography and Citations docs - The full reference
- Choosing Citation Styles - Numeric vs author-year vs footnote
- LaTeX Academic Writing Guide - The paper around the citations
