LaTeX Bibliography Not Resolving: Diagnostic Guide for Citation Undefined and Empty Bibliographies
A practical diagnostic guide for LaTeX citation undefined warnings and empty bibliographies with biblatex and BibTeX, covering backend mismatches, .bbl inspection, package conflicts and verification steps.
30 Sept 2026, 01:17 UTC

The problem you see in the log, not the preamble
Citation ‘key’ on page X undefined and an empty bibliography are build-order and backend mismatches, not a broken .bib file. The useful takeaway is to verify what LaTeX wrote, what the backend actually read, and what it wrote back, before editing entries.
Recognizable conditions
- LaTeX warnings:
Citation ‘...’ on page X undefinedandThere were undefined references. No .bbl file is created or it is stale. - .bbl exists but is empty or contains only the preamble, so
\printbibliographyprints nothing. - Citations render but entries are missing or duplicated after switching engines. The log shows
Package biblatex Error: Incompatible package. - Unicode names appear garbled in the bibliography when using pdfLaTeX without inputenc/fontenc, or XeLaTeX/LuaLaTeX without a proper font setup.
Cause / diagnostic table
| Symptom | Likely cause | First check |
|---|---|---|
| Citation undefined, no .bbl | Backend not run or wrong backend for declared option | Presence and timestamp of .bbl vs last pdflatex run |
| .bbl exists but empty | .bib parse error, encoding mismatch, or backend ran with zero citekeys | .blg log for errors; .bcf citekey list |
| Entries missing after backend=biber | bibtex was executed instead of biber | Build command history; backend option in preamble |
| Package biblatex Error: Incompatible package | cite or natbib loaded before biblatex | Preamble package order |
| Garbled Unicode in references | Engine/encoding mismatch for .bib | Engine used, inputenc/fontenc, .bib file encoding |
Ordered checks
1. Confirm what LaTeX asked for
Run a first LaTeX pass in the project directory where the .tex file lives. You need write permission for the directory.
pdflatex -interaction=nonstopmode <doc>.tex
Expected check: the log ends with ... output written on <doc>.pdf and a .bcf file is created for biblatex. If you use traditional BibTeX, an .aux file with \bibdata and \bibstyle is created.
Risk: deleting .aux files resets all cross-references. Only remove them intentionally and plan two LaTeX reruns after.
2. Inspect backend output
For biblatex with backend=biber:
biber <doc>
Expected check: a .blg file is written. Inspect it for lines indicating how many citekeys were found and absence of fatal errors. A parse error in the .bib will be reported here, not in the LaTeX log.
For traditional BibTeX:
bibtex <doc>
Expected check: a .bbl file is created with formatted entries. If the .bbl is empty, the backend saw no usable entries.
3. Verify backend option matches the tool
Check the preamble for:
\usepackage[backend=biber]{biblatex}
If backend=biber is declared but you ran bibtex, citations stay undefined. Conversely, backend=bibtex with biber produces a mismatched .bbl.
Practical check: open the generated .bbl. With biblatex+biber it should contain \entry{key}{...} blocks. With BibTeX it should contain \bibitem entries. Missing or malformed blocks signal a parse problem.
4. Check for package conflicts
Search the preamble for \usepackage{cite} or \usepackage{natbib} before biblatex. biblatex is incompatible with these packages and will abort citation resolution.
Fix is to remove the conflicting package and use biblatex citation commands only.
5. Validate .bib encoding and syntax
Open the .bib file in a UTF-8 aware editor. Common failures are unescaped special characters, missing commas, or mismatched braces. Biber is stricter about Unicode than BibTeX.
If you must use pdfLaTeX, ensure \usepackage[utf8]{inputenc} and \usepackage[T1]{fontenc} are present and the .bib is saved as UTF-8. With XeLaTeX/LuaLaTeX, use a Unicode font and avoid inputenc.
Fixes tied to findings
- No .bbl generated: run the correct backend after the first LaTeX pass, then run LaTeX twice. Sequence for biblatex+biber: pdflatex → biber → pdflatex → pdflatex.
- .bbl empty: fix .bib parse errors reported in .blg, correct encoding, and ensure the .bcf lists citekeys. A minimal test document with
\addbibresource{test.bib},\cite{key}and\printbibliographyisolates the problem from the main project. - Backend mismatch: align the option and the tool. Changing to backend=bibtex disables many Unicode and advanced sorting features; document this trade-off.
- Incompatible packages: remove cite/natbib, keep only biblatex.
- Stale Biber cache: if errors persist after fixing the .bib, clear the cache with
biber --cache-cleanrun from a terminal with user write permission to~/.biber. This resets cached data and forces a fresh read.
How to verify the result
Create a minimal test file and resource, then follow the build sequence for your declared backend. Verify the PDF shows the citation number and a formatted bibliography entry. Inspect the .bbl for an entry for the test key and confirm the .blg shows zero errors.
Limitations: biblatex with backend=bibtex does not support full Unicode sorting and some entry types. Traditional BibTeX styles are limited in field support. Engine choice constrains font handling for non-ASCII names.
Escalation criteria
Escalate for human review when:
- .blg reports a fatal parse error that persists after correcting braces, commas, and encoding.
- Citations remain undefined after correct backend runs, correct package order, and a clean rebuild with .aux removed.
- Unicode garbling remains after matching engine, encoding, and font setup.
In those cases provide the preamble snippet with package options, the first 50 lines of the .blg, and the build commands used.
0 replies
A thoughtful contribution can make all the difference. Be the first to share one.