LaTeX selbst ist ein *Format* für die Maschine TeX. Ruft man das Programm `pdflatex` auf, so lädt dies zunächst das Format LaTeX. Ein Format ist sozusagen eine vorkompilierte Version einer Sammlung von TeX-Makros oder eine Art Speicherauszug. Dann wird die Hauptdatei gelesen und interpretiert. Die Hauptdatei besteht dabei aus einer Mischung aus Verarbeitungsanweisungen und Satzanweisungen. Die Verarbeitungsanweisungen können auch dazu dienen, neue Anweisungen zu definieren.
Ein LaTeX-Dokument ist aufgebaut in Vorspann oder Präambel und Hauptteil oder Körper. Die Präambel definiert in erster Linie die Form, während der Hauptteil maßgeblich für den Inhalt ist. In der Regel beginnt die Präambel mit dem Laden einer Dokumentklasse. In der Dokumentklasse werden Anweisungen definiert, die wesentlich für die Form des Dokuments sind. Darauf folgen Anweisungen zum Laden von Paketen. Pakete erweitern die Fähigkeiten von Klassen. Weitere Definitionen und Einstellungen können folgen.
Während der Verarbeitung des Hauptteils, dessen Satzanweisungen entfernt mit HTML-Anweisungen zu vergleichen sind, werden außerdem Informationen für zukünftige Verarbeitungsläufe aufgesammelt. Beispielsweise werden Informationen zu Querverweisen so konserviert, aber auch Informationen zu den Inhalten von Verzeichnissen. Auch Informationen zu verwendeten Quellen oder anzulegenden Stichworten im Stichwortverzeichnis werden in externen Dateien abgelegt. Gleichzeitig wird Seite für Seite die PDF-Datei geschrieben. Vorteil dieses Vorgehens ist, dass sie eher wenig Speicher benötigt. Nicht das gesamte Dokument muss im Speicher gehalten werden, nur die gültigen Definitionen, die aktuelle Seite und der aktuelle Absatz. Ein sehr wesentliches Merkmal von LaTeX ist auch, dass es keinen einfachen Zeilenumbruch durchführt, sondern immer komplette Absätze nach einstellbaren Parametern umbricht.
Wieviele und welche Hilfsdateien es gibt, hängt sehr maßgeblich von Dokument selbst bzw. den verwendeten Klassen und Paketen ab. Zwar kann LaTeX nur 16 Dateien gleichzeitig lesen und nur 16 Dateien gleichzeitig schreiben, die Gesamtzahl der (nacheinander geschriebenen oder gelesenen) Dateien ist jedoch unbegrenzt.
Der jeweils nächste LaTeX-Lauf arbeitet ganz genauso, wobei die Informationen einiger Hilfsdateien beim Übergang von der Präambel zum Hauptteil gelesen werden. Diese Hilfsdateien enthalten in dem Fall ebenfalls TeX-Anweisungen. Andere Hilfsdateien wie die für den Index, werden von externen Programmen zwischen den LaTeX-Läufen verarbeitet. Die externen Programme schreiben andere Hilfsdateien, die wiederum aus TeX-Anweisungen bestehen. Einige der Hilfsdateien werden auch erst bei bestimmten Aktionen beispielsweise durch die Anweisungen zur Ausgabe eines Verzeichnisses eingelesen.
Der internen Verarbeitung in TeX, also dem *Compiler*, der sowohl die LaTeX-Datei, als auch das Format verarbeitet, ist auf vielen Dutzend Seiten in *The TeXbook* dokumentiert. Dabei enthält TeX wie jeder Interpreter oder Compiler einen Scanner und einen Tokenize als Vorderteil (aka Mund). Daran knüpft sich bei TeX die eigentliche Satzmaschine an, die sozusagen den Bauch darstellt. Je nach TeX gibt es unterschiedliche Backends entweder für DVI-Dateien, PDF-Dateien oder erweiterte DVI-Dateien.
TeX liest Dateien immer sequentiell. Die Ausgabe erfolgt ebenfalls sequentiell. Allerdings erfolgt die Ausgabe einer Seite erst, wenn die Seite komplett aufgebaut ist. Weil Absätze immer im Ganzen umbrochen werden und Seitenumbrüche zwischen Absätzen auch verboten werden können, können dabei auch mehrere Seiten auf einmal ausgegeben werden und erst bei der Ausgabe selbst ist TeX bekannt, welche Teile welcher Absätze auf welchen Seiten ausgegeben werden. Man spricht deshalb von einer asynchronen Ausgabe. Da zum Zeitpunkt der Ausgabe die Absätze der Seite bereits fertig umbrochen sind, hat dies Auswirkungen auf jegliche Bezüge zur aktuellen Seitennummer. Diese benötigen ggf. einen Umweg über die bereits erwähnten Hilfsdateien uns stehen somit erst beim nächsten LaTeX-Lauf als Rückschau zur Verfügung. Davon ausgenommen sind lediglich Kopf und Fuß der Seite, die erst während des Seitenumbruchs erstellt werden. Daraus ergibt sich wiederum, dass Informationen, die vom Seiteninhalt in den Kopf gelangen sollen, über spezielle Mechanismen ausgetauscht werden müssen, um wirklich auf die richtige Seite zu gelangen.
Wichtig ist auch, dass LaTeX nicht von sich aus, so viele Läuft durchführt, bis ein Dokument einen unveränderlichen Zustand erreicht. Das wäre auch nicht wünschenswert, da ein Dokument nicht zwingend einen finalen Zustand erreichen muss. LaTeX gibt allerdings in der Log-Datei, die über auch über den Verlauf der Tätigkeit informiert, Hinweise, ob aus seiner Sicht ein weiterer LaTeX-Lauf erforderlich ist. Spezielle LaTeX-Editoren oder LaTeX-Build-Prozessoren verarbeiten solche Informationen üblicherweise.
Die Haupt-Hilfsdatei mit Endung `.aux` wird bei jedem LaTeX-Lauf beim Übergang zwischen Präambel und Hauptteil gelesen (wenn sie bereits existiert), dann neu zum Schreiben geöffnet und während des Hauptteils neu geschrieben. Ab Ende des Hauptteils wird sie geschlossen und erneut gelesen. Diese Datei wird außerdem zwischen den LaTeX-Läufen von `biber` oder `bibtex` verarbeitet, wenn eines dieser Programme verwendet wird. Die Indexrohdaten der Datei mit Endung `.idx` werden ggf. während des Hauptteils geschrieben, beispielsweise von `makeindex` zwischen den LaTeX-Läufen zu der Indexdatei mit Endung `.ind` verarbeitet, die dann zur Ausgabe des Index im Dokument wieder eingelesen wird. Viele Hilfsdateien wie die mit Endung `.toc` für das Inhaltsverzeichnis, `.lof` für das Abbildungsverzeichnis oder `.lot` für das Tabellenverzeichnis werden am Ende des Hauptteils beim Einlesen der `aux`-Datei erzeugt. Eingelesen werden sie durch die Anweisungen zur Ausgabe der entsprechenden Verzeichnisse im Hauptteil des Dokuments.
Vereinfacht als ASCII-Art dargestellt, wäre das also etwas wie:
<pre>
<code>
tex-Datei
|<----------------------------------------------------+
| |
|<------------------------------------------------+ |
| | |
|<----------------------------------------+ | |
| | | |
| bib-Datei | | |
| | | | |
| | | | |
|<-----------+ | | | |
v | | | | |
+-------+ | +--------+ | | |
| | --> aux-Datei --> | bibtex | --> bbl-Datei | |
| | | +--------+ | |
| | <------+ | |
| | | |
| | --> toc-Dateo, toc-Datei, lof-Datei, lot-Datei etc.----+ |
| LaTeX | |
| | +-----------+ |
| | --> idx-Datei --> | makeindex | --> ind-Datei --+
| | +-----------+
| |
| | --> log-Datei
+-------+
|
|
v
pdf/dvi-Datei
</code>
</pre>
Wird `biber` statt `bibtex` verwendet, kommen weitere Dateien hinzu. Ebenso kommen weitere Dateien und ggf. weitere Aufrufe von externen Programmen hinzu, falls zusätzliche Verzeichnisse beispielsweise für Listings, Namensindex, Glossar etc. verwendet werden. Wie die Grafik zeigt, entsteht also insbesondere bei jedem Lauf eine Ausgabedatei (`pdf` oder `dvi`). Bis zum finalen LaTeX-Lauf zeigt diese jedoch nur einen Zwischenstand an, in dem beispielsweise Querverweise oder Verzeichnisse noch nicht korrekt sind.
Als Literatur sei neben The TeXbook auch [TeX by Topic](https://www.ctan.org/pkg/texbytopic) erwähnt. In beiden Büchern ist neben den oben erwähnten drei Stufen der Verarbeitung auch noch sehr ausführlich die Stufe der Expansion erklärt, die noch vor der Satzmaschine stattfindet, und tatsächlich den Anwendern anfänglich oft die meisten Rätsel aufgibt.