BibTeX

BibTeX ist der klassische Weg, Literatur zu verwalten: Du erfasst jedes Werk einmal in einer .bib-Datenbank, und daraus wird das Literaturverzeichnis automatisch erzeugt. Im Dokument rufst du nur mit \cite einen Key auf. Tauscht du die Stildatei (.bst), wird dieselbe Datenbasis in das Format einer anderen Zeitschrift gebracht. Diese Seite erklärt, wie man eine .bib-Datei schreibt, was \bibliographystyle und \bibliography tun, und die besondere Build-Folge „latex → bibtex → latex → latex“.

Was ist BibTeX?

Man kann Literatur am Ende eines Dokuments von Hand auflisten (die Umgebung thebibliography), aber das bricht zusammen, sobald die Zahl wächst und dieselben Werke in mehreren Aufsätzen wiederverwendet werden. BibTeX ist ein separates Programm, geschrieben von Oren Patashnik um 1985, das neben, aber getrennt von TeX/LaTeX läuft. Seine Aufgabe ist es, aus einer Literaturdatenbank nur die tatsächlich zitierten Werke zu holen, sie in einem gewählten Stil zu formatieren und in einer Form auszugeben, die das Dokument einfügen kann.

Der Mechanismus hat drei Teile: die .bib-Datei (die Rohdaten der Referenzen), die \cite-Aufrufe plus zwei Befehle im Dokument (\bibliographystyle und \bibliography) und die .bst-Datei (der Stil), die das Erscheinungsbild festlegt. Weil Daten und Darstellung getrennt sind, bleibt die Datenbasis beim Wechsel des Publikationsorts unangetastet; du änderst nur ein einziges Stilwort. Das ist genau die Idee „Struktur von Darstellung trennen“, die ganz LaTeX durchzieht.

Die .bib-Datenbank schreiben

Eine .bib-Datei ist eine Liste von Einträgen. Jeder Eintrag deklariert einen Typ wie @article und gibt dann in geschweiften Klammern einen Zitierkey gefolgt von Feldern an. Der Zitierkey ist ein von dir gewählter Bezeichner (z. B. knuth1984), der exakt zu \cite{...} im Dokument passen muss. Felder haben die Form fieldname = {value} und werden durch Kommas getrennt.

references.bib
@book{knuth1984,
  author    = {Donald E. Knuth},
  title     = {The {TeX}book},
  publisher = {Addison-Wesley},
  year      = {1984}
}

@article{shannon1948,
  author  = {Claude E. Shannon},
  title   = {A Mathematical Theory of Communication},
  journal = {Bell System Technical Journal},
  volume  = {27},
  number  = {3},
  pages   = {379--423},
  year    = {1948}
}

@inproceedings{lamport1987,
  author    = {Leslie Lamport},
  title     = {Document Production: Visual or Logical?},
  booktitle = {Proceedings of TUG},
  year      = {1987},
  pages     = {19--24}
}

Es lohnt sich, die gängigen Typen und ihre Pflichtfelder zu kennen. @article ist ein Zeitschriftenartikel (author, title, journal, year); @book ist ein Buch (author oder editor, title, publisher, year); @inproceedings ist ein Beitrag in Tagungsbänden (author, title, booktitle, year). Weitere sind @phdthesis/@mastersthesis für Abschlussarbeiten, @incollection für ein Kapitel in einem Buch und @misc für Verschiedenes wie Webseiten. Welche Felder je Typ nötig sind, entscheidet der Stil.

Die geschweiften Klammern um einen Wert haben praktische Bedeutung. Wenn du wie in title = {The {TeX}book} ein zusätzliches Paar innen verschachtelst, schützt du diese Stelle vor Groß-/Kleinschreibung durch den Stil (damit TeX nicht zu Tex wird). Mehrere Autoren trennst du mit and, etwa author = {A. Smith and B. Jones}, und BibTeX samt Stil übernimmt Namensreihenfolge und Abkürzung.

Die zwei Befehle im Dokument

Im Dokument setzt du zwei Befehle an die Stelle, an der das Literaturverzeichnis erscheinen soll (meist am Ende des Textkörpers). \bibliographystyle{plain} wählt den Stil, also welche .bst verwendet wird, und \bibliography{references} sagt BibTeX zugleich, welche Datenbank zu lesen ist, und druckt die Referenzliste an dieser Stelle. Beachte, dass hier keine .bib-Endung steht: Auch wenn die Datei references.bib heißt, schreibst du references.

document.tex
\documentclass{article}
\begin{document}

TeX was created by Knuth~\cite{knuth1984}, building on
Shannon's information theory~\cite{shannon1948}.

\bibliographystyle{plain}
\bibliography{references}

\end{document}

Im Text verweist \cite{knuth1984} auf den Zitierkey knuth1984 in der .bib. Wenn die Keys nicht übereinstimmen, erscheint das Werk nicht (es gibt eine Warnung über eine undefinierte Referenz). Nur zitierte Werke erscheinen in der Liste; alles in der .bib, was du nicht zitierst, wird ignoriert (mit \nocite{*} erzwingst du die ganze Datenbank). Varianten von \cite selbst, also Mehrfachzitate, Seitenangaben und das Paket cite, behandelt die Seite „Citing basics“.

Die Build-Folge (vier Läufe)

Hier bringt BibTeX Menschen zuerst ins Stolpern. Um die Liste korrekt zu erzeugen, lautet das klassische Rezept vier Läufe in der Reihenfolge latex → bibtex → latex → latex. Warum mehrere Läufe? Weil BibTeX ein separates Programm neben LaTeX ist und beide Informationen über Hilfsdateien (.aux und .bbl) austauschen.

  • 1. latex-Lauf — verarbeitet den Text und schreibt die zitierten Keys sowie die Einstellungen von \bibliographystyle/\bibliography in die .aux-Datei. Zu diesem Zeitpunkt ist die Referenzliste noch leer.
  • bibtex — liest die .aux, um zu erfahren, welche Keys zitiert wurden, welcher Stil und welche .bib gelten; holt die passenden Einträge aus der .bib; formatiert sie nach den Regeln der .bst; und schreibt die .bbl-Datei.
  • 2. latex-Lauf — liest die .bbl ein und setzt das Literaturverzeichnis, aber Querverweise wie die Nummer jedes Eintrags sind noch nicht aufgelöst.
  • 3. latex-Lauf — Nummern und \cite-Marker stabilisieren sich, sodass Textzitate und Literaturverzeichnis genau zusammenpassen.
terminal
$ latex document.tex     # writes document.aux (cite keys)
$ bibtex document        # reads .aux + .bib + .bst, writes .bbl
$ latex document.tex     # pulls in .bbl
$ latex document.tex     # resolves all references

Beachte, dass du bibtex den Hilfsnamen (den Jobnamen ohne Endung) übergibst, nicht die .tex. Mit pdflatex ist das Rezept identisch; ersetze einfach latex durch pdflatex. Weil vier Befehle jedes Mal mühsam sind, delegiert man in der Praxis an latexmk. Es prüft den Inhalt der .aux, entscheidet automatisch, ob BibTeX laufen muss und wie viele Wiederholungen nötig sind, und ist meist mit einem Aufruf fertig.

terminal
$ latexmk -pdf document.tex   # runs latex/bibtex/latex as many times as needed

Standardstile (.bst)

Ein Stil legt die Sortierreihenfolge, das Label (eine Nummer oder Abkürzung) und die Abkürzung von Autorennamen und Zeitschriftentiteln fest. BibTeX bringt vier Standardstile mit; sie zu kennen reicht für viele Zwecke. Du wechselst einfach, indem du den Namen an \bibliographystyle{...} übergibst.

StilReihenfolgeLabel / Merkmal
plainAlphabetisch nach AutorNummeriert [1]; der übliche Standard
unsrtReihenfolge der ersten ZitierungNummeriert [1] (gleiches Format wie plain)
alphaNach Label (grob Autor, Jahr)Alphanumerische Labels wie [Knu84]
abbrvAlphabetisch nach AutorKürzt Vornamen und Zeitschriftentitel ab

Darüber hinaus sind mehrere fachbezogene Klassiker standardmäßig enthalten: ieeetr (IEEE-Transactions-Look, Nummern in Zitierreihenfolge), weit verbreitet im Ingenieurwesen; acm (ACM-Stil) in der Informatik; und siam (SIAM-Stil) in der angewandten Mathematik. Fachgesellschaften und Verlage verteilen außerdem eigene .bst-Dateien, die du gemäß Vorgabe austauschst. Der Nutzen von BibTeX ist, dass ein Stilwechsel keinerlei Änderung an der .bib oder an den \cite-Aufrufen im Text verlangt.

Japanisch: pbibtex / upbibtex

Das reine bibtex zielt auf westlichen Text und sortiert oder verarbeitet Felder mit japanischen Autorennamen oder Titeln nicht gut. Daher stellen pLaTeX/upLaTeX japanisch-bewusste Befehle bereit. pbibtex ist für pLaTeX und sortiert nach EUC-JP-Codepunkten; upbibtex ist für upLaTeX und sortiert nach Unicode-Codepunkten. Beide stammen von JBibTeX ab (entwickelt von Shouichi Matsui) und erweitern die eingebauten Funktionen, sodass japanische Felder nicht mitten im Zeichen getrennt werden.

Die Verwendung entspricht dem westlichen Fall: In der Build-Folge ersetzt du einfach latex durch platex (oder uplatex) und bibtex durch pbibtex (oder upbibtex). Auch japanische Gegenstücke der Stile existieren: jplain für plain, junsrt für unsrt, jalpha für alpha und jname, das den Familiennamen wie in „[Kin80] Kinoshita: …“ an den Anfang stellt (auch Gesellschaftsstile wie jipsj sind verfügbar).

terminal
$ uplatex  document.tex   # 1st pass: writes .aux
$ upbibtex document       # Japanese-aware: writes .bbl
$ uplatex  document.tex   # pulls in .bbl
$ uplatex  document.tex   # resolves references
$ dvipdfmx document.dvi   # DVI -> PDF

Da upLaTeX über DVI geht, wandelst du am Ende mit dvipdfmx nach PDF um (diese Pipeline wird auf den Seiten zu Japanisch und DVI-Konvertern genauer erklärt). latexmk kann so konfiguriert werden, dass es pbibtex/upbibtex aufruft; damit werden auch für Japanisch die vier manuellen Läufe automatisiert.

Grenzen von BibTeX und biber/biblatex

BibTeX ist ausgereift und weit verbreitet, aber sein Design ist alt und hat einige Grenzen: Es setzt 8-Bit-Kodierungen voraus und verarbeitet Unicode nicht sauber (mehrsprachige Autorennamen und Akzente sind umständlich), seine Sortierung ist unflexibel, und ein komplexes Format zu bauen bedeutet, .bst zu schreiben, eine eigenwillige stack-orientierte kleine Sprache.

Um diese Grenzen aufzuheben, entstanden biblatex (ein LaTeX-Paket) und sein Standard-Backend biber. Sie verarbeiten Unicode nativ, lassen Sortierung und Formatierung über Optionen auf der LaTeX-Seite genau steuern und ersparen das Schreiben von .bst. Für neue Projekte ist biblatex/biber eine starke Wahl; es wird auf einer eigenen Seite behandelt.