Was genau ist das „Protokoll“ zwischen LaTeX und BibTeX?
Das heißt, wenn ich latex foo
, bibtex foo
, und ausführe latex foo
, wie genau erfolgt der Informationsfluss von LaTeX zu BibTeX und zurück?
Meine jetzigeerratenist, dass die Datenflüsse wie folgt sind:
- LaTeX generiert die Datei
foo.aux
. - BibTeX liest die Datei
foo.aux
. Es beachtet nur Zeilen der Form\citation{...}
,\bibstyle{...}
, und\bibdata{...}
. - BibTeX generiert die Datei
foo.bbl
. - Wenn LaTeX erkennt, dass
foo.bbl
vorhanden ist,\bibliography
verhält sich der Befehl wie\input{foo.bbl}
.
Ist das richtig oder steckt da noch mehr dahinter? Handelt es sich beispielsweise \citation{...}
immer um genau eine Textzeile?
Gibt es häufig verwendete Dokumentklassen und Pakete, die das Protokoll irgendwie beeinflussen? Natürlich biblatex
wird es anders sein, aber gibt es etwas weniger Offensichtliches, das man beachten sollte?
Hintergrund: Ich bin daran interessiert, ein Skript zu schreiben, das ich als Drop-In-Ersatz für BibTeX verwenden könnte (in dem Sinne, dass sich auf der LaTeX-Seite nichts ändern würde, aber die Dateigenerierung foo.bbl
anders wäre).
Antwort1
Ihre Vermutung ist mehr oder weniger richtig, einschließlich der Tatsache, dass biblatex
der Ansatz dadurch etwas verändert wird (andere Pakete modifizieren ihn ebenfalls, aber nicht im gleichen Maße). Nehmen wir den einfachsten Fall einer einzelnen .tex
Datei ohne die Anforderung mehrerer Bibliografien oder Ähnlichem:
\bibliographystyle
schreibt die\bibstyle{...}
Zeile in die.aux
Datei: diese kann also in der Präambel angegeben werden\bibliography
schreibt die\bibdata{...}
Zeile in die.aux
Datei und gibt auch die.bbl
Datei ein, wenn sie verfügbar ist.\cite
schreibt eine\citation{...}
Zeile in die.aux
Datei und erstellt auch das Zitat im LaTeX-Dokument\nocite
schreibt eine\citations{...}
Zeile in die.aux
Datei, tut aber nichts im LaTeX-Dokument.
Wenn BibTeX die .aux
Datei liest, sucht es nach einer \bibstyle
Zeile und einer \bibdata
Zeile sowie mehreren \citation
Zeilen. Anschließend wird eine .bbl
Datei geschrieben, aber was dort hineinkommt, hängt von den Anweisungen in der .bst
Datei ab. Normalerweise .bbl
enthält die Datei nur die bibliography
Umgebung, die formatierte Zitate enthält, obwohl dies nicht immer der Fall ist.
Es gibt viele Ergänzungen, die zu diesem Workflow hinzugefügt werden können. Beispielsweise biblatex
definiert , \bibliography
dass es in der Präambel verwendet werden soll, da esnichtArbeiten Sie mit einer .bbl
Datei, die Daten zum direkten Drucken enthält. Mehrere Bibliografien können erstellt werden, indem Sie mehr als eine .aux
Datei verwenden, um einen Satz von .bbl
Dateien zu erstellen. Ich habe auch eine Implementierung gesehen, bei der eine XML-Version der Bibliografie als LaTeX-Kommentar in die .bbl
Datei geschrieben wird. Diese Ansätze verwenden immer noch dieselbe zugrunde liegende Schnittstelle, in dem Sinne, dass BibTeX immer noch nach denselben Befehlen in der .aux
Datei sucht und eine Datei schreibt .bbl
.
Am Beispiel von multibib
definiert es am LaTeX-Ende eine Reihe von Befehlen für jeden neuen Bibliographietyp, zum Beispiel
\newcites{sec}{Secondary Literature}
erstellt einen neuen Zitierbefehl
\citesec{...}
Diese neuen Befehle schreiben in eine separate .aux
Datei, was bedeutet, dass BibTeX zweimal ausgeführt werden muss, einmal auf der \jobname.aux
Datei und einmal auf der sec.aux
Datei. Dies erzeugtzwei .bbl
Dateien \jobname.bbl
und sec.bbl
, die dann wie gewohnt von \bibliography
bzw. gelesen werden \bibliographysec
. Somit ist der Gesamtprozess gegenüber dem Standardfall fast unverändert, es sind jedoch einfach mehr Dateien beteiligt.
Antwort2
ja, für den Standardfall mit einer AUX-Datei. Es können aber auch 2 oder mehr AUX-Dateien vorhanden sein, z. B. mit multibib
oder chapterbib
oder ... Bei multibib
müssen Sie die Haupt-AUX-Datei und die vom Benutzer definierte Datei ausführen; sie hat ebenfalls die Erweiterung .aux Bei chapterbib
haben Sie eine AUX-Datei pro Kapitel. Beide Fälle sind leicht zu handhaben: bibtex *.aux
. Dasselbe gilt für das Paket bibunits
.