> 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/23-how-tex-macros-actually-work-part-5.md).

# Wie TeX-Makros eigentlich funktionieren: Teil 5

[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)

## Einführung und Überblick

In Teil 4 haben wir einige grundlegende Eigenschaften von TeX-Makros als Vorbereitung für die nächsten beiden Artikel besprochen, in denen wir uns die zugrunde liegende Mechanik von TeX-Makros genauer ansehen: spezielle Token-Listen. In diesen letzten beiden Artikeln verwenden wir Diagramme, sogenannte Knotenlisten, die aus Daten erstellt wurden, die mit einer speziell modifizierten Version von Knuths ursprünglicher TeX-Software generiert wurden – diese Änderungen dienten dazu, auf interne TeX-Datenstrukturen zuzugreifen, die dem Benutzer normalerweise nicht zugänglich sind. Durch das „Einklinken“ in TeXs interne Makroverarbeitungs- und Ausführungsroutinen war es möglich, grafische Daten auszugeben, die eine detailliertere und genauere Diskussion des Makroverhaltens von TeX ermöglichen. Overleaf hofft, dass diese Diagramme den Lesern helfen, besser zu verstehen, wie TeX-Makros wirklich funktionieren.

### Mögliche zusätzliche Hintergrundlektüre

Overleaf hat bereits zwei Artikel zu Tokens veröffentlicht, die zusätzliche Hintergrundinformationen zu TeX-Tokens und TeX-Token-Listen liefern. Bitte nehmen Sie sich Zeit, sie anzusehen, wenn Sie Lücken in Ihrem Verständnis schließen und das Beste aus den Teilen 5 und 6 dieser Reihe herausholen möchten.

* [Was ist ein „TeX-Token“?](/latex/de/ausfuhrliche-artikel/53-what-is-a-tex-token.md)
* [Was ist eine TeX-Token-Liste?](/latex/de/ausfuhrliche-artikel/54-what-is-a-tex-token-list.md)

## Makros als Token-Listen

Wenn TeX einen Makro-Erzeugungsbefehl erkennt (`\def`, `\edef`, `\gdef` oder `\xdef`) innerhalb des Eingabestroms, löst es einen Prozess aus, der beide Abschnitte `<parameter text><replacement text>` unserer Makrodefinition in eine einzige lange Token-Liste umwandelt – allerdings in eine ganz bestimmte Art von Token-Liste.

Token-Listen für Makros unterscheiden sich geringfügig von anderen Token-Listen, die in TeX verwendet werden, weil sie „spezielle“ Tokenwerte enthalten, die nur Prozesse erzeugen können, die innerhalb von TeX selbst ablaufen: Diese speziellen Tokens können nicht direkt durch Befehle erzeugt werden, die Sie in Ihrer .tex-Datei einfügen können. TeX erstellt und verwendet diese „speziellen“ Tokenwerte, um bei der Verarbeitung Ihres Makroaufrufs zu helfen, wie wir weiter unten untersuchen und erklären werden.

### Ein kurzes Wort darüber, wie Token-Listen gespeichert werden: Knoten

Um eine Liste von Tokens (Ganzzahlwerten) zu speichern, verwendet TeX eine Datenstruktur namens [verkettete Liste](https://en.wikipedia.org/wiki/Linked_list), die im Fall von TeX aus einer Liste sogenannter *Knoten*besteht. Man kann sich einen Knoten als ein kleines Paket Computerspeicher vorstellen, das zum Speichern einer Sammlung von Datenelementen verwendet werden kann. Um ein Makro zu speichern, werden diese Knoten wie eine Kette aneinandergereiht, wobei jeder Knoten (jedes Glied in der Kette) mehrere Informationen speichern kann – darunter einen Tokenwert und die Speicheradresse des nächsten Knotens in der Liste. Für weitere Informationen können Sie den Artikel [Was ist eine TeX-Token-Liste](/latex/de/ausfuhrliche-artikel/54-what-is-a-tex-token-list.md) lesen; das folgende Diagramm fasst jedoch die wichtigsten Merkmale eines als Token-Liste gespeicherten Makros zusammen:

![Diagramm einer TeX-Makro-Token-Liste, gespeichert als verkettete Knotenliste](/files/85c285de48776d58b86c057f9e61e66c0cbdc731)

### Erinnerung: die 4 Teile einer Makrodefinition

Wie in Teil 4 besprochen, kann die Struktur jedes Makros wie folgt geschrieben werden:

```
<TeX macro primitive><macro name><parameter text>{<replacement text>}
```

wobei:

* `<TeX macro primitive>` = eines von `\def`, `\edef`, `\gdef` oder `\xdef`;
* `<macro name>`= der Name Ihres Makros, z. B. `\foo`;
* `<parameter text>` kann „null“ (nicht vorhanden) sein oder eine Zeichenkette aus Trennertokens und Makro-Parametertokens;
* `<replacement text>` ist der eigentliche Inhalt Ihres Makros: der Abschnitt, der „ausgeführt“ wird, wenn Sie das Makro aufrufen.

**HINWEIS**: (Wie auch in Teil 4 beobachtet) gehen wir in der gesamten Diskussion davon aus, dass `<macro name>` von einem Leerzeichen mit Kategoriencode 10 gefolgt wird, das als Trennzeichen dient, um das `<macro name>`. Wir *haben nicht* dieses Leerzeichen in unserem Text/ unserer Diskussion ausdrücklich gezeigt, gehen aber davon aus, dass es vorhanden ist. Streng genommen sollten wir es etwa so darstellen:

```
<TeX macro primitive><macro name><space><parameter text>{<replacement text>}
```

Wir werden jedoch die explizite Angabe eines `<space>` Zeichens weglassen und seine Anwesenheit implizit annehmen.

**HINWEIS**: Die Zeichen `{` und `}` *werden nicht* Teil der Makro-Token-Liste: Ihr Zweck besteht lediglich darin, dem Eingabescanner von TeX (der Tokens erzeugt) mitzuteilen, wo der `<replacement text>` beginnt und endet.

Wenn TeX ein Makro definiert, werden die Abschnitte `<parameter text><replacement text>` in eine einzige lange, zusammenhängende Token-Liste umgewandelt – die Gesamtzahl der Tokens in dieser Liste hängt von der Komplexität des Makros ab. Wie wir gesehen haben, hat der Abschnitt eine besondere Funktion als „Token-Vorlage“ oder „Bauplan“, den TeX verwendet, um die Tokens herauszupicken, aus denen die Argumente (Werte) für das eigentliche Makro bestehen: also die Tokens, die in die `<replacement text>`.

Um diese Ideen zu festigen, nehmen wir ein Beispielmakro, halten es aber kurz, damit die nachfolgenden Diagramme nicht zu unübersichtlich werden:

```
\def\foo A#1\fake{123 #1}
```

Für unser Makro, `\foo`

* `<parameter text>` = `A#1\fake`
* `<replacement text>` = `123 #1`

Obwohl dieses Beispiel ein einfaches Makro ist, enthält es alle Merkmale, die wir untersuchen müssen.

Wie erwähnt, wird TeX `<parameter text><replacement text>` in eine einzige lange Token-Liste umwandeln, die Sie im folgenden Diagramm sehen können. In unserem Beispiel wurden die aus `A#1\fake{123 #1}` gebildeten Tokens in eine aufeinanderfolgende Folge von Tokens umgewandelt, die in einer Token-Liste gespeichert sind (als verkettete Liste von Knoten).

## Grafik, die eine echte Makro-Token-Liste zeigt

Das folgende Diagramm, das zeigt, wie das Makro `\def\foo A#1\fake{123 #1}` gespeichert ist, verwendet echte Daten aus dem Inneren einer TeX-Engine. Es wurde mit einer [angepassten Version von Knuths TeX](/latex/de/ausfuhrliche-artikel/01-a-new-series-of-articles-tex-tokens-and-related-concepts-but-why-and-how.md#how-can-you-study-tex-tokens3f) erstellt, die mit zusätzlichem Code modifiziert wurde, um Makroaufrufe abzufangen, TeXs interne Daten zu untersuchen und sie in ein Format zu exportieren, das mit einem quelloffenen Grafikprogramm namens [Graphviz](https://www.graphviz.org/).

Sie können die folgende Grafik als [PDF-Datei](https://assets.ctfassets.net/nrgyaltdicpt/N6gT757eXCxRV3FtdPPga/7ce120dc05ed05962bb911ff1124734b/annotatednodelist-plain.pdf) (675 KB) oder [SVG-Datei](https://images.ctfassets.net/nrgyaltdicpt/4PkmtHDhO8KF892ZDWuLHP/2c9c8385c6948fd122b228c5c780a3a6/annotatednodelist-plain.svg) (1,8 MB) herunterladen.

![Diagramm einer annotierten TeX-Token-Liste](/files/ca282a7634cff1a5a21d6c696f35574d8a858e24)

#### Die Knoten verstehen

Im obigen Diagramm sehen Sie, dass jeder Knoten zwei Datenelemente enthält, die **nächster Knoten** und **aktueller Knoten**genannt werden. Dabei handelt es sich lediglich um Ganzzahlwerte, die Speicherorte innerhalb von TeX darstellen – Orte, an denen andere Knoten gespeichert sind. Die Werte von **nächster Knoten** und **aktueller Knoten** sind nicht wichtig; sie speichern lediglich die Orte (Speicheradressen), die es ermöglichen, Knoten in einer Liste miteinander zu verknüpfen.

![Die Bedeutung von nächster Knoten und aktueller Knoten](/files/65efd4cd68076982038f6e716234082daea5a02b)

#### Zurück zum Beispiel

Im Knotendiagramm enthält die aus `A#1\fake{123 #1}` gebildete Token-Liste mehrere „spezielle Tokens“, die am Anfang dieses Artikels eingeführt wurden. Außerdem beginnt die unsere Makro repräsentierende Knotenliste mit einem „speziellen ersten Knoten“: Wir werden untersuchen, was das ist und was er tut.

Das allererste Element in einer Makro-Token-Liste (und einigen anderen Token-Listentypen) speichert keinen Tokenwert, sondern ein Datenelement namens den *Referenzzähler* , den TeX verwendet, um die Verwendung des Makros nachzuverfolgen.

![Ein Referenzzähler-Knoten ist der erste in einer Token-Liste](/files/d1b2d103f0f55e46bf943dae3f60d293397b6684)

Das erste Token der `<parameter text>` wird in dem Knoten gespeichert, der unmittelbar nach dem Referenzzähler folgt: Sie können sehen, dass es sich um ein Token handelt, das den Buchstaben `Ein` mit Kategoriencode 11 repräsentiert. Aus den Erklärungen in Teil 2 und 3 wissen wir, dass ein Zeichen-Token mithilfe von

$$\text{token value}=256\times \text{category code} + \text{character code}$$

berechnet wird, was für einen Buchstaben `Ein` mit Kategoriencode 11

$$\text{token value}=256\times 11 + 65$$

ergibt und den Wert 2881 liefert, wie im Knoten dargestellt.

#### Der in \foo verwendete „Befehl“ \fake

Innerhalb unserer Makrodefinition `\def\foo A#1\fake{123 #1}` ist einer der Trenner ein *undefinierter* Befehl `\fake` , der innerhalb der Token-Liste als Teil des `<parameter text>` Abschnitts gespeichert ist. Wie Sie sehen, ist innerhalb der gesamten Makro-Token-Liste `\fake` ein Token, dessen Wert `19491`ist – ein Ganzzahlwert, der von TeX mithilfe der in Teil 3 besprochenen Formel berechnet wird. Wenn TeX versucht, `\foo` auszuführen, wird es erwarten, den `\fake` Tokenwert am Ende des `<parameter text>` Abschnitts zu finden. TeX *wird nicht* versuchen, den `\fake` Befehl auszuführen, da seine Rolle lediglich darin besteht, eine Art „Satzzeichen“ innerhalb der `<parameter text>` „Token-Vorlage“ zu liefern.

![Ein Befehls-Token als Makro-Trenner verwenden](/files/7145f57e80ce3b9c293fec48f42c1f63a488c9d8)

#### Spezielle Tokens in der Token-Liste

**Das Token „End-Match“**

Beim Aufruf eines Makros besteht TeXs erste Aufgabe darin, das vom Benutzer eingegebene Makro zu scannen und die Tokens im `<parameter text>` Abschnitt des Benutzers mit den Tokens zu vergleichen, die in der Vorlage `<parameter text>` im Speicher gespeichert sind (zur Zeit der Makrodefinition erzeugt). Da die vollständige Makrodefinition, die aus `<parameter text><replacement text>` gebildet wird, als eine lange, zusammenhängende Token-Liste gespeichert ist, muss TeX wissen, wo in dieser Token-Liste `<parameter text>` *endet* und wo `<replacement text>` *beginnt*. Um dies zu erreichen, fügt TeX bei der Definition des Makros (beim Aufbau der Token-Liste) ein spezielles Abschluss-Token ein, das als **End-Match** Token bezeichnet wird und als allerletztes Token in der aus `<parameter text>`. Das **End-Match** gebildeten Token-Menge steht. Dieses Token kann nicht aus Benutzerbefehlen erzeugt werden; nur TeX selbst kann es erstellen, daher ist TeX sicher, das Ende des `<parameter text>`.

![Das End-Match-Token in einer TeX-Token-Liste zeigen](/files/f208cc3e2ebc39edb6d96bc0504fee377162f209)

Hier sehen wir, dass das erste Token nach **End-Match** ein Token ist, das die Ziffer `1` mit Kategoriencode 12 repräsentiert. Das ist zu erwarten, weil der `<replacement text>` für unser Makro `\foo` ist `123 #1`– also beginnt er mit dem Token, das die Ziffer `1` (mit Kategoriencode 12) repräsentiert.

Aus der Diskussion in Teil 2 und 3 wissen wir, dass ein Zeichen-Token mithilfe von

$$\text{token value}=256\times \text{category code} + \text{character code}$$

berechnet wird, was für eine Ziffer `1` mit Kategoriencode 12

$$\text{token value}=256\times 12 + 49$$

ergibt und den Tokenwert 3121 liefert, wie im Knoten dargestellt.

**„Match-Parameter“-Tokens**

Wenn TeX die Makrodefinition speichert, wandelt es alle Parameter-Tokens (`#1`, `#2`… `#9`) innerhalb `<parameter text>` in ein sogenanntes **Match-Parameter** Token um. Diese Tokens zeigen TeX an, dass es innerhalb des Makroaufrufs des Benutzers nach Tokens suchen muss, die die Argumente des Makros sind.

![Das Match-Parameter-Token in einer TeX-Token-Liste zeigen](/files/72cb2a7f466f2087bf950ac8bbe963225da1b1c2)

### Spezielle Tokens in der Token-Liste

#### „Ausgabeparameter“-Tokens

Wenn TeX alles verarbeitet hat und bereit ist, das Makro tatsächlich auszuführen (zu expandieren), weisen die **Ausgabeparameter** Tokens TeX auf Stellen innerhalb des `<replacement text>` hin, an denen es die Tokens einfügen muss, die die vom Benutzer beim Aufruf des Makros bereitgestellten Argumente darstellen. Im Wesentlichen: „Füge an dieser Stelle die Tokens ein, die das Argument n des Benutzers darstellen, wobei n=1...9“.

Innerhalb des `<replacement text>` Abschnitts der gespeicherten Makrodefinitions-Token-Liste wird es ein **Ausgabeparameter** Token geben, das jedem `#1`, `#2`... `#9` entspricht, das in der ursprünglichen Definition vorhanden ist.

![Das Ausgabeparameter-Token in einer TeX-Token-Liste zeigen](/files/20aa163ff299a1918650e21bca0bfda5f504b6ad)

Wenn wir uns unsere Definition von `\foo` (`\def\foo A#1\fake{123 #1}`) ansehen, sehen wir, dass es nur 1 Makroparameter (`#1`) in den `<parameter text>` (`A#1\fake`) gibt und folglich auch nur 1 Makroparameter (`#1`) im `<replacement text>` (`123 #1`) erscheint: Dies führt dazu, dass nur 1 **Ausgabeparameter** Token in der Token-Liste vorhanden ist, die den `<replacement text>`.

Beachten Sie Folgendes in der Knotenliste, die `\foo`s `<replacement text>`:

* repräsentiert: Das Token unmittelbar vor dem **Ausgabeparameter** Token stellt ein Leerzeichen dar (Kategoriencode 10, Zeichencode 32), weil zwischen dem `123` und dem Makroparameter (`#1`) in der ursprünglichen Definition von `\foo`;
* Der Stil **Ausgabeparameter** das letzte Token in der Liste ist: Das **nächster Knoten** hat einen besonderen Wert von „null“ (bedeutet „leer“), der verwendet wird, um die Liste zu beenden: Nach **Ausgabeparameter** gibt es keine weiteren Knoten, weil es das letzte Token ist und damit das Ende des `<replacement text>` und somit das Ende der Makrodefinition markiert.

## Teil 6

In Teil 6 verwenden wir einige detaillierte Grafiken, um die genaue Bedeutung der Makroexpansion und die Folgen von TeXs Tokenisierung von Makroargumenten zu erklären und zu untersuchen, bevor sie in das Makro eingefügt werden `<replacement text>`.

[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/23-how-tex-macros-actually-work-part-5.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.
