> For the complete documentation index, see [llms.txt](https://overleaf-pro.ayaka.space/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://overleaf-pro.ayaka.space/latex/de/weitere-themen/19-how-tex-macros-actually-work-part-1.md).

# Wie TeX-Makros eigentlich funktionieren: Teil 1

[Teil 1](/latex/de/weitere-themen/19-how-tex-macros-actually-work-part-1.md) [Teil 2](/latex/de/weitere-themen/20-how-tex-macros-actually-work-part-2.md) [Teil 3](/latex/de/weitere-themen/21-how-tex-macros-actually-work-part-3.md) [Teil 4](/latex/de/weitere-themen/22-how-tex-macros-actually-work-part-4.md) [Teil 5](/latex/de/weitere-themen/23-how-tex-macros-actually-work-part-5.md) [Teil 6](/latex/de/weitere-themen/24-how-tex-macros-actually-work-part-6.md)

## Einleitung: Ziele dieser Reihe

Diese Artikelreihe hat ein ehrgeiziges Ziel: zu erklären *wie* wie TeX-Makros (etwa LaTeX-Befehle) tatsächlich funktionieren – auf der grundlegendsten Ebene, im eigentlichen TeX-Engine-Softwarekern. Statt sich ausschließlich *ausschließlich* auf eine Reihe von Beispielmakros zu stützen, die verschiedene Funktionen, Randfälle und Verhaltensweisen von TeX demonstrieren sollen, schauen wir in TeX selbst hinein, um zu sehen *wie* und *warum* warum seine Makroprogrammiermethoden so funktionieren, wie sie es tun.

Um unser Ziel zu erreichen, müssen wir damit beginnen, Themen zu besprechen, die ziemlich niedrig auf der Abstraktionsebene liegen, und zunächst mag dies etwas weit entfernt von der Aufgabe erscheinen, Ihre Dokumente zu setzen. Hoffentlich kommen Sie nach einem tieferen Eintauchen mit einer Grundlage heraus, auf der Sie ein besseres Verständnis aufbauen können, was Ihnen am Ende viel Zeit sparen und vielleicht auch die Frustration verringern wird.

### Die TeX-Programmiersprache: Kommt Ihnen das bekannt vor?

Es ist nicht übermäßig hart, die TeX-Programmiersprache als etwas geheimnisvoll zu beschreiben, denn sie ist es – zumindest nach den Maßstäben der meisten heute verwendeten gängigen Programmiersprachen. Wenn Sie sich auf den Weg machen, mehr über TeX/LaTeX zu lernen, insbesondere wenn Sie nichttriviale Makros schreiben wollen, stoßen Sie schnell auf Begriffe wie Kategoriecodes, Token/Tokenisierung und die „Expansion“ von Befehlen oder Makros. Diese Flut an Konzepten dürfte recht fremd wirken und Sie möglicherweise verwirrt zurücklassen und zeitweise vielleicht leicht frustriert, da Ihr Weg zum Erfolg nicht immer durch einige der nahezu undurchdringlichen Fehlermeldungen von TeX/LaTeX unterstützt wird.

## Also, wo fangen wir an? Mit Kategoriecodes.

TeX-Engines gehören zu einer Softwareklasse namens [Compiler](https://en.wikipedia.org/wiki/Compiler): Programme, die eine Datei einlesen, die in einer *Quell-* sprache geschrieben ist, und sie *kompilieren* (umwandeln) in eine Ausgabedatei, die in einer *Ziel-* sprache. Genauer gesagt ist TeX ein *Dokument-Compiler*. Für TeX-Engines (Compiler) ist die Eingabedatei in der TeX-Setzsprache geschrieben und das Ziel ist eine Ausgabedatei, die in einer anderen „Sprache“ geschrieben ist, etwa [DVI](https://en.wikipedia.org/wiki/Device_independent_file_format) oder PDF – obwohl wir unseren Begriff von „Sprache“ etwas locker verwenden.

Sehen wir uns die Quell- oder Eingabe-„Sprache“, die zum Schreiben Ihrer TeX-Datei verwendet wird, genauer an. Eine `.tex` Datei ist letztlich eine lange Zeichenfolge (einschließlich Zeilenumbruchzeichen): bestehend aus für das Setzen bestimmten Texten, durchsetzt mit `\`, `}`, `$`, `[` und allerlei Zeichen, die in scheinbar nahezu unendlichen Kombinationen auftreten können. Jeder, der TeX/LaTeX nicht verwendet, könnte auf eine typische `.tex` Datei schauen und ihm verziehen werden, wenn er sie als eher verwirrendes Durcheinander von Zeichen mit wenig oder gar keiner sichtbaren Dateistruktur wahrnimmt. Das LaTeX-Makropaket trägt zwar durchaus dazu bei, einer .tex-Eingabedatei eine gewisse Grundstruktur „aufzuzwingen“. Zwischen den `\begin{document}` und `\end{document}` liegt es jedoch am Autor des Dokuments, was dort hineinkommt. Wenn Sie `.tex` Dateien betrachten, die mit Knuths ursprünglichem Plain-TeX-Makropaket geschrieben wurden, werden Sie sehen, dass die Dokumentstruktur fast vollständig fehlt.

Im Allgemeinen kann eine TeX-Eingabedatei also ziemlich unstrukturiert erscheinen, eine scheinbar willkürliche Mischung aus zu setzendem Inhalt, durchsetzt mit Anweisungen (Befehlen), die das Setzen dieses Inhalts steuern. Wie ist es TeX überhaupt möglich, aus einer typischen `.tex` Eingabedatei Sinn zu machen: dieses hereinströmende Durcheinander von Zeichen in ausführbare Anweisungen für die Satzmaschine und in Inhalt, der gesetzt werden soll, zu filtern?

### Das Durcheinander filtern: Begrüßen Sie die Kategoriecodes

Jeder menschliche Beobachter, der nichts über TeX weiß, könnte auf eine `.tex` Datei schauen und bestimmte Zeichen wie `$` $ erkennen und wissen, dass dies das Zeichen für eine Währung ist, oder ein `&` sehen und es als kaufmännisches Und identifizieren. Dieser Beobachter leitet für jedes Zeichen, das er sieht, eine *Bedeutung* Bedeutung ab – eine Bedeutung, die auf der Rolle beruht, die dieses Zeichen in der menschlichen Kommunikation spielt. Außerdem könnte er Zeichen wie `a`, `e`, `oder` sehen und wissen, dass sie als Vokale klassifiziert werden, während andere wie `b`, `c` oder `d` als Konsonanten klassifiziert werden. Als Menschen haben wir so etwas wie eine eingebaute Nachschlagetabelle (in unserem Gedächtnis), anhand derer wir jedem Zeichen, das wir sehen, eine Bedeutung zuweisen – eine Bedeutung, die auf der Rolle beruht, die dieses Zeichen in den Sprachen spielt, in denen wir kommunizieren können.

Um eine `.tex` Datei zu verarbeiten, muss die TeX-Software ebenfalls jedes Zeichen in Ihrer Eingabe betrachten, und auch sie muss jedem einzelnen Zeichen, das sie „sieht *Bedeutung* “, eine Bedeutung zuweisen. TeX ist jedoch lediglich eine softwarebasierte Maschine, die Text verarbeitet – gespeichert als eine Folge von Integern (Zeichencodes) in einer Eingabedatei. Als Maschine muss TeX mit den relevanten Daten programmiert werden, die ihm sagen, wie es die Bedeutung eines Zeichens, auf das es „blickt“, bestimmen soll und was es anschließend damit tun muss. Wie erreicht TeX das?

Die Antwort ist eines dieser nur bei TeX vorkommenden Konzepte: *Kategoriecodes,* von denen es 16 gibt, von 0 bis 15. Soweit TeX betroffen ist, hat jedes Zeichen, das es jemals in einer `.tex` Datei zu sehen erwartet, einen sogenannten *Kategoriencode* vorab zugewiesen bekommen. Im Inneren von TeX gibt es eine Art „Nachschlagetabelle“, die den Kategoriecode *derzeit* zu jedem Zeichen auflistet, das TeX in einer Eingabedatei .tex sehen könnte. Sie sollten sich TeX-Kategoriecodes so vorstellen, dass sie jedem einzelnen Zeichen im Eingabestrom, den TeX untersuchen (scannen) muss, eine *Bedeutung* zuweisen.

Um Ihr Dokument zu setzen, muss eine TeX-Engine jedes einzelne Zeichen lesen (scannen), aber TeX interessiert sich dabei zunächst nicht für die eigentlichen Zeichen (Zeichencodes): der *Kategoriencode* Kategoriecode ist beim Scannen der Eingabe von größerer Bedeutung. Der *aktuellen* Kategoriecode eines Zeichens bestimmt die *aktuelle Bedeutung* dieses Zeichens *zum Zeitpunkt, an dem TeX es liest*: dieser Kategoriecode bestimmt, wie TeX jedes Zeichen behandeln/verarbeiten wird – wir werden erklären, warum wir von „aktuellem Kategoriecode“ und „aktueller Bedeutung“ sprechen. Durch Kategoriecodes kann TeX das eingehende Durcheinander von Zeichen filtern, um zwischen Zeichen (Inhalt), die für das Setzen bestimmt sind, und Zeichen zu unterscheiden, die Anweisungen bilden, die verarbeitet werden müssen –*Befehle* die TeX ausführen muss.

Die folgende Tabelle listet diese 16 Kategoriecodes auf: was sie jeweils bedeuten, zusammen mit Beispielen von Zeichen, die typischerweise jeder Kategorie zugeordnet werden.

| **Kategoriecode** | **Beschreibung**                                                  | **Standard-LATEX/TEX**                                             |
| ----------------- | ----------------------------------------------------------------- | ------------------------------------------------------------------ |
| 0                 | Escape-Zeichen—veranlasst TEX, nach einem Befehl zu suchen        | `\`                                                                |
| 1                 | Eine Gruppe beginnen                                              | {                                                                  |
| 2                 | Eine Gruppe beenden                                               | }                                                                  |
| 3                 | Mathe-Umschaltung—wechselt in/aus dem Mathemodus                  | $                                                                  |
| 4                 | Ausrichtungs-Tabulator                                            | &                                                                  |
| 5                 | Zeilenende                                                        | ASCII-Code 13 (`\\r`)                                              |
| 6                 | Makroparameter                                                    | #                                                                  |
| 7                 | Hochstellung—für den mathematischen Satz: `$y=x^2$` $$y=x^2$$     | ˆ                                                                  |
| 8                 | Tiefstellung—für den mathematischen Satz: `$y=x_2$` $$y=x\_2$$    | \_                                                                 |
| 9                 | Ignoriertes Zeichen                                               | ASCII 0 `<null>`                                                   |
| 10                | Leerzeichen                                                       | ASCII-Codes 32 (Leerzeichen) und 9 (Tabulatorzeichen)              |
| 11                | Buchstabe                                                         | A...Z, a...z, (und Tausende von Unicode-Zeichen)                   |
| 12                | Andere                                                            | 0...9 plus ,.;?" und viele andere                                  |
| 13                | Aktives Zeichen                                                   | Spezialer Kategoriecode zum Erstellen von Ein-Zeichen-Makros wie ˜ |
| 14                | Kommentarzeichen—alles Folgende bis zum Zeilenende ignorieren     | %                                                                  |
| 15                | Ungültiges Zeichen, darf nicht in der .tex-Eingabedatei vorkommen | ASCII-Code 127 (`DEL`)                                             |

Der Einsatz von Kategoriecodes ist TeXs grundlegender Mechanismus, um seinen eingehenden Zeichenstrom zu filtern und Ihre Eingabe so zu verstehen, dass Folgendes bestimmt werden kann:

* Zeichen, die den zu setzenden Text bilden;
* Inhalt abzugrenzen, der als Mathematik gesetzt werden soll;
* Zeichenfolgen, die Namen von Befehlen sind, die verarbeitet oder ausgeführt werden sollen;
* … und viele andere Satzoperationen.

Anfangs könnten Sie denken, dass der Kategoriecode (die Bedeutung) jedes Zeichens eine feste Zuordnung ist: unveränderlich und dauerhaft in den innersten Grundlagen der TeX-Software verankert, aber das ist nicht so. Wie erwähnt, führt TeX intern eine Nachschlagetabelle, in der Details darüber gespeichert werden, welcher Kategoriecode *derzeit* zu jedem Zeichen zugewiesen ist – wir sagen ganz bewusst *derzeit zugewiesen* weil der Kategoriecode eines beliebigen Zeichens (das noch nicht eingelesen wurde) mit Hilfe eines primitiven (eingebauten) Befehls namens `\catcode`geändert werden kann. Das bringt beträchtliche Flexibilität mit sich, weil Sie bei Bedarf die Art und Weise, wie TeX die Bedeutung eines später aus der Eingabe gelesenen Zeichens behandelt oder interpretiert, vollständig ändern können, was enorme Möglichkeiten für anspruchsvolle Satzanwendungen eröffnet.

Wenn Sie sich vor allem dafür interessieren, LaTeX zu verwenden, um „die Arbeit zu erledigen“, dann ist die Wahrscheinlichkeit groß, dass Sie Kategoriecodes nicht direkt begegnet sind – außer vielleicht über Fehlermeldungen, die Sie gesehen haben. Aber seien Sie versichert: Kategoriecodes sind ein Kernbestandteil der Abläufe einer TeX-Engine – sie ermöglichen es LaTeX (und LaTeX-Paketen), die eigentliche Arbeit des Satzes Ihres Dokuments zu leisten.

Wenn Ihre TeX-Engine startet („[hochfährt](https://en.wikipedia.org/wiki/Bootstrapping)“), verwendet sie einen Satz Standardzuordnungen von Zeichen zu Kategoriecodes, aber über den `\catcode` Befehl können diese Standardwerte durch den Kerncode (Makros) von LaTeX und/oder durch die von Ihnen geladenen LaTeX-Pakete geändert werden – oder sogar durch Ihren eigenen TeX-Code oder Ihre eigenen Makros. Im Laufe der Zeit und durch Tradition/Gebrauch sind bestimmte Zeichen, die bestimmten Kategoriecodes zugeordnet sind, jedoch als „Standards“ akzeptiert worden, und die Einhaltung dieser Standards ist sicherlich wünschenswert, wenn Sie möchten, dass Ihre Dokumente portabel sind und sich leicht mit Kollegen oder anderen Benutzern teilen lassen. Zum Beispiel ist das `\` Zeichen dem Kategoriecode 0 zugeordnet, um den Beginn eines TeX/LaTeX-Befehls anzuzeigen – siehe die [obige Tabelle](#tbl-0).

### Einlesen der Eingabe (scannen)

Wenn TeX das nächste Zeichen aus Ihrer Eingabedatei liest (scannt), schaut es als allererstes auf seinen Kategoriecode, also sehen wir uns genauer an, was passiert, wenn TeX eine typische Eingabezeile liest.

Nehmen wir an, wir haben eine .tex-Datei, die den Text `Hello World \jobname` irgendwo innerhalb eines Absatzes enthält. Wenn wir in die `.tex` Datei mit einem [Hex-Editor](https://en.wikipedia.org/wiki/Hex_editor)hineinschauen, sehen wir, dass die Zeichenfolge `Hello World \jobname` in unserer `.tex` Datei einfach eine Reihe von Integern oder *Zeichencodes*ist, wie in der folgenden Abbildung als hexadezimale Sequenz gezeigt:

`48, 65, 6C, 6C, 6F, 20, 57, 6F, 72, 6C, 64, 20, 5C, 6A, 6F, 62, 6E, 61, 6D, 65, 20`

![Hexadezimale Zeichencodes in einer TeX-Datei](/files/da03c67f997e3b1f47bfa35d1a7db14517ddbe21)

Wenn wir von Hexadezimal (Basis 16) zu Dezimal (Basis 10) umrechnen, lautet die Folge der Zeichencodes:

![Dezimale Zeichencodes in einer TeX-Datei](/files/ab1b37e06ac4d3b69b98af2714ae1e1e9ae1cb90)

Wir wissen auch, dass für TeX jedes Zeichen einen entsprechenden Kategoriecode hat; auf Grundlage des [obige Tabelle](#tbl-0) wissen wir, dass wahrscheinlich auch die folgenden Standardzuordnungen von Kategoriecodes verwendet werden:

![TeX-Kategoriecodes](/files/aeb226d7d098f0dbe7584d1e994b27f13cb8a0b4)

Für TeX wird also jedes Zeichen in der Eingabedatei durch *zwei* numerische Werte dargestellt – seinen Zeichencode und seinen Kategoriecode:

![Zeichencodes und entsprechende TeX-Kategoriecodes](/files/18bf4d1941674ba7e83df4d45e3dd12a56d62733)

An dieser Stelle betrachten wir nur die allererste Stufe bei der Verarbeitung Ihrer Datei durch TeX: das Scannen der einzelnen Zeichen. Was macht TeX eigentlich mit diesen Paaren aus Zeichencodes und Kategoriecodes? Nachdem TeX ein einzelnes Zeichen gescannt und seinen entsprechenden Kategoriecode nachgeschlagen hat, wie genau verwendet TeX diese Informationen, um die eingehenden Zeichen zu „filtern“?

## Teil 2

In Teil 2 sehen wir uns genauer an, wie TeX Ihre Eingabe liest: indem wir uns als TeXs „Augen“ verhalten, während es Ihre Eingabe Zeichen für Zeichen betrachtet.

[Teil 1](/latex/de/weitere-themen/19-how-tex-macros-actually-work-part-1.md) [Teil 2](/latex/de/weitere-themen/20-how-tex-macros-actually-work-part-2.md) [Teil 3](/latex/de/weitere-themen/21-how-tex-macros-actually-work-part-3.md) [Teil 4](/latex/de/weitere-themen/22-how-tex-macros-actually-work-part-4.md) [Teil 5](/latex/de/weitere-themen/23-how-tex-macros-actually-work-part-5.md) [Teil 6](/latex/de/weitere-themen/24-how-tex-macros-actually-work-part-6.md)


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://overleaf-pro.ayaka.space/latex/de/weitere-themen/19-how-tex-macros-actually-work-part-1.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
