Was ist die Schnittstelle zwischen LaTeX und BibTeX?

Was ist die Schnittstelle zwischen LaTeX und BibTeX?

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:

  1. LaTeX generiert die Datei foo.aux.
  2. BibTeX liest die Datei foo.aux. Es beachtet nur Zeilen der Form \citation{...}, \bibstyle{...}, und \bibdata{...}.
  3. BibTeX generiert die Datei foo.bbl.
  4. Wenn LaTeX erkennt, dass foo.bblvorhanden ist, \bibliographyverhä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 biblatexwird 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.bblanders wäre).

Antwort1

Ihre Vermutung ist mehr oder weniger richtig, einschließlich der Tatsache, dass biblatexder Ansatz dadurch etwas verändert wird (andere Pakete modifizieren ihn ebenfalls, aber nicht im gleichen Maße). Nehmen wir den einfachsten Fall einer einzelnen .texDatei ohne die Anforderung mehrerer Bibliografien oder Ähnlichem:

  • \bibliographystyleschreibt die \bibstyle{...}Zeile in die .auxDatei: diese kann also in der Präambel angegeben werden
  • \bibliographyschreibt die \bibdata{...}Zeile in die .auxDatei und gibt auch die .bblDatei ein, wenn sie verfügbar ist.
  • \citeschreibt eine \citation{...}Zeile in die .auxDatei und erstellt auch das Zitat im LaTeX-Dokument
  • \nociteschreibt eine \citations{...}Zeile in die .auxDatei, tut aber nichts im LaTeX-Dokument.

Wenn BibTeX die .auxDatei liest, sucht es nach einer \bibstyleZeile und einer \bibdataZeile sowie mehreren \citationZeilen. Anschließend wird eine .bblDatei geschrieben, aber was dort hineinkommt, hängt von den Anweisungen in der .bstDatei ab. Normalerweise .bblenthält die Datei nur die bibliographyUmgebung, 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 biblatexdefiniert , \bibliographydass es in der Präambel verwendet werden soll, da esnichtArbeiten Sie mit einer .bblDatei, die Daten zum direkten Drucken enthält. Mehrere Bibliografien können erstellt werden, indem Sie mehr als eine .auxDatei verwenden, um einen Satz von .bblDateien zu erstellen. Ich habe auch eine Implementierung gesehen, bei der eine XML-Version der Bibliografie als LaTeX-Kommentar in die .bblDatei geschrieben wird. Diese Ansätze verwenden immer noch dieselbe zugrunde liegende Schnittstelle, in dem Sinne, dass BibTeX immer noch nach denselben Befehlen in der .auxDatei sucht und eine Datei schreibt .bbl.


Am Beispiel von multibibdefiniert 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 .auxDatei, was bedeutet, dass BibTeX zweimal ausgeführt werden muss, einmal auf der \jobname.auxDatei und einmal auf der sec.auxDatei. Dies erzeugtzwei .bblDateien \jobname.bblund sec.bbl, die dann wie gewohnt von \bibliographybzw. 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 multibiboder chapterbiboder ... Bei multibibmüssen Sie die Haupt-AUX-Datei und die vom Benutzer definierte Datei ausführen; sie hat ebenfalls die Erweiterung .aux Bei chapterbibhaben Sie eine AUX-Datei pro Kapitel. Beide Fälle sind leicht zu handhaben: bibtex *.aux. Dasselbe gilt für das Paket bibunits.

verwandte Informationen