> 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/ausfuhrliche-artikel/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md).

# Wie funktioniert \expandafter: Eine detaillierte Untersuchung aufeinanderfolgender \expandafter-Befehle

&#x20;[Teil 1](/latex/de/ausfuhrliche-artikel/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md)   [Teil 2](/latex/de/ausfuhrliche-artikel/22-how-does-expandafter-work-the-meaning-of-expansion.md)   [Teil 3](/latex/de/ausfuhrliche-artikel/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md)   [Teil 4](/latex/de/ausfuhrliche-artikel/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md)   [Teil 5](/latex/de/ausfuhrliche-artikel/17-how-does-expandafter-work-a-detailed-macro-case-study.md)   [Teil 6](/latex/de/ausfuhrliche-artikel/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.md)&#x20;

## Fallstudie: Verständnis von \\\expandafter\\\expandafter\\\expandafter...

Fortgeschrittene Makros, wie sie in LaTeX-Paketen zu finden sind, machen oft umfangreichen Gebrauch mehrerer aufeinanderfolgender `\expandafter` Befehle, um ausgeklügeltes Token-„Jonglieren“ zu bewerkstelligen. Für die meisten von uns können solche Makros schwer zu verstehen oder einschüchternd zu schreiben sein. In diesem Abschnitt überprüfen wir die Mechanik, die TeXs Verarbeitung aufeinanderfolgender `\expandafter` Befehle zugrunde liegt:

```
\\expandafter\\expandafter\\expandafter...
```

Zur Unterstützung unserer Erklärung fügen wir jedem `\expandafter`—zur Kennzeichnung, auf welchen wir uns beziehen:

```
        \\expandafter1\\expandafter2\\expandafter3...
```

Außerdem erweitern wir die Notation für Tokens, die von jedem `\expandafter` Befehl verarbeitet werden, um $$\mathrm{T^i\_1}$$ und $$\mathrm{T^i\_2}$$ die Tokens $$\mathrm{T\_1}$$ und $$\mathrm{T\_2}$$ die von `\expandafter` mit Index `i`: `\expandafter`<sub>i</sub> $$\mathrm{T^i\_1T^i\_2}$$. Wir nehmen außerdem an, dass zwei Tokens $$\mathrm{T\_X}$$ und $$\mathrm{T\_Y}$$ auf `\\expandafter<sub>3</sub>` folgen, sodass unsere Eingabe so aussieht: `\\expandafter<sub>1</sub>\\expandafter<sub>2</sub>\\expandafter<sub>3</sub>` $$\mathrm{T\_{X}T\_{Y}}$$.

Wenn TeX mit der Verarbeitung dieser Eingabe beginnt, wird es für `\\expandafter<sub>1</sub>` sehen

* $$\mathrm{T^1\_1} =$$`\\expandafter<sub>2</sub>` das für später gespeichert wird *erneuten Einfügung* zurück in die Eingabe
* $$\mathrm{T^1\_2} =$$`\\expandafter<sub>3</sub>`, das erweitert wird

Wenn wir auf unsere frühere Diskussion des [Codes in TeX](/latex/de/ausfuhrliche-artikel/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md) zurückkommen, der `\expandafter`implementiert, ist es bei der Erweiterung von `\\expandafter<sub>3</sub>` dass wir Rekursion am Werk sehen. Um `\\expandafter<sub>1</sub>` zu verarbeiten, hat TeX seine interne Funktion bereits aufgerufen `expand()`, also um (zu) verarbeiten (zu erweitern) `\\expandafter<sub>3</sub>` macht einen *zweite* Aufruf an `expand()`—aus der `expand()` Funktion selbst heraus.

Für `\\expandafter<sub>3</sub>` haben wir

* $$\mathrm{T^3\_1 = T\_X}$$, das für später gespeichert wird *erneuten Einfügung* zurück in die Eingabe
* $$\mathrm{T^3\_2 = T\_Y}$$, das wir als erweiterbar annehmen werden

Nehmen wir ferner an, dass die Erweiterung von $$\mathrm{T\_Y}$$ die folgende Folge von Tokens ergibt: $$\mathrm{{T^1\_Y}{T^2\_Y}{T^3\_Y}}\cdots\mathrm{T^N\_Y}$$. Wir haben nun das Ende des von der Befehlssequenz begonnenen Erweiterungsprozesses erreicht `\\expandafter<sub>1</sub>\\expandafter<sub>2</sub>\\expandafter<sub>3</sub>` $$\mathrm{T\_{X}T\_{Y}}$$ und TeX fährt fort, den mit `\\expandafter<sub>1</sub>`.

begonnenen Rekursionsprozess „abzuwickeln“ `\\expandafter<sub>3</sub>` Nach der Verarbeitung von $$\mathrm{T\_Y\text{: }{T^1\_Y}{T^2\_Y}{T^3\_Y}}\cdots\mathrm{T^N\_Y}$$hat TeX in seinem Speicher eine Tokenliste, die Tokens aus der Erweiterung von `\expandafter` Befehle zugrunde liegt:

1. TeX beginnt mit der erneuten Einfügung von Token $$\mathrm{T\_X}$$ gespeichert von `\\expandafter<sub>3</sub>`. $$\mathrm{T\_X}$$ wird wieder eingefügt *vor* der Erweiterung von $$\mathrm{T\_Y}$$, was zu einer Tokenfolge führt: $$\mathrm{{{T\_X}T^1\_Y}{T^2\_Y}{T^3\_Y}}\cdots\mathrm{T^N\_Y}$$.
2. Allerdings müssen wir den von `\\expandafter<sub>1</sub>` begonnenen Prozess noch vervollständigen, der den Token gespeichert hat, der `\\expandafter<sub>2</sub>`
3. Die von TeX zusammengesetzte endgültige Tokenfolge, bereit für das Einlesen in der nächsten Phase von TeXs Verarbeitung, lautet `\\expandafter<sub>2 (token)</sub>` $$\mathrm{T\_{X}T^1\_{Y}T^2\_{Y}T^3\_{Y}\cdots T^N\_Y}$$
4. TeX hat nun die „erste Runde“ der Verarbeitung beendet und wechselt zum Einlesen der von ihm erzeugten Tokenlistenfolge—diese Folge beginnt mit `\\expandafter<sub>2 (token)</sub>` die TeX nun verarbeitet. Für `\\expandafter<sub>2</sub>` haben wir
   * $$\mathrm{T^2\_1} =\ \mathrm{T\_X}$$ das für später gespeichert wird *erneuten Einfügung* zurück in die Eingabe
   * $$\mathrm{T^2\_2} = \mathrm{T^1\_Y}$$ das das erste Token ist, das aus der Erweiterung von $$\mathrm{T\_Y}$$; falls erweiterbar, wird es erweitert
5. Nehmen wir an, Token $$\mathrm{T^1\_Y}$$, das erste Token aus der Erweiterung von $$\mathrm{T\_Y}$$, erweitert sich zu $$\mathrm{{T^A\_{Y1}}{T^B\_{Y1}}{T^C\_{Y1}}}$$ dann würde nach der erneuten Einfügung von $$\mathrm{T\_X}$$, die resultierende, von TeX erneut zu verarbeitende Tokenfolge lauten: $$\mathrm{{T\_X}{T^A\_{Y1}}{T^B\_{Y1}}{T^C\_{Y1}}{T^2\_Y}{T^3\_Y}\cdots{T^N\_Y}}$$

   was wir auch so formulieren können

   $$\mathrm{T\_X}\text{\<expansion of the first token in }\mathrm{T\_Y}\text{>\<remaining tokens in }\mathrm{T\_Y}\text{>}$$

Das folgende Diagramm veranschaulicht die von dem TeX-Code erzeugten Tokenlisten

```
    \\expandafter1\\expandafter2\\expandafter3TXTY
```

![Bild, das die Verarbeitung mehrerer \\\expandafter-Befehle durch TeX zeigt](/files/fbd1bfb8f6388eed118f05c599e091485e691c02)

### Theorie in die Praxis

Anhand eines Beispiels definieren wir die folgenden Makros, die als $$\mathrm{T\_X}$$ und $$\mathrm{T\_Y}$$

* $$\mathrm{T\_X}=$$`\foo` wobei wir definieren `\foo` als `\\def\\foo#1{\\textbf{#1}}`
* $$\mathrm{T\_Y}=$$`\\bar` wobei wir zuerst definieren `\\def\\abc{Hallo}`, `\\def\\xyz{, Welt!}` und dann `\\def\\bar{\\abc\\xyz}`

Wir verwenden das folgende Codefragment, um unsere vorherige Analyse zu demonstrieren:

\\\expandafter\\\expandafter\\\expandafter\\\foo\\\bar

Aus unserer Diskussion ergibt sich `\\expandafter<sub>1</sub>\\expandafter<sub>2</sub>\\expandafter<sub>3</sub>` $$\mathrm{T\_X}\mathrm{T\_Y}$$ liefert eine Folge von Tokens der Form:

$$\mathrm{T\_X}\text{\<expansion of the first token in }\mathrm{T\_Y}\text{>\<remaining tokens in }\mathrm{T\_Y}\text{>}$$

wobei die genaue Folge von der Natur des Tokens $$\mathrm{T\_Y}$$. Wenn wir unsere Beispielbefehle mit $$\mathrm{T\_X}=$$`\foo` und $$\mathrm{T\_Y}=$$`\\bar`definiert ist als `\\def\\bar{\\abc\\xyz}`, sehen wir:

* das erste Token in $$\mathrm{T\_Y}$$ ist `\\abc` und seine Erweiterung ist eine Folge von Zeichentokens: `Hello`
* die verbleibenden Tokens in $$\mathrm{T\_Y}$$ ist das einzelne Token, das `\\xyz`.

darstellt

$$\begin{align\*} &\mathrm{T\_X}\text{\<expansion of the first token in }\mathrm{T\_Y}\text{>\<remaining tokens in }\mathrm{T\_Y}\text{>}\ &=\text{foo}*{\text{token}}\text{\<expansion of \abc>}*\text{token list (characters)}\text{xyx}*\text{token}\ &=\text{foo}*\text{token}\text{Hello}*\text{token list (characters)}\text{xyx}*\text{token}\\\[10pt] \end{align\*}$$

Beachten Sie, dass die Indizes <sub>Token</sub> und <sub>Tokenliste (Zeichen)</sub> verwendet werden, um zu verdeutlichen (uns daran zu erinnern), dass TeX *Ganzzahl-Tokenwerte*, nicht *Textzeichen*, liest; daher ist es nicht nötig, nach `\foo`: irgendwelche Leerzeichen oder anderen Trennzeichen zu zeigen: Solche Trennzeichen sind längst verarbeitet oder verworfen worden; hier befinden wir uns fest in TeXs Innenwelt aus Tokenlisten und Ganzzahl-Tokenwerten.

Wenn TeX die von unseren `\expandafter` Befehlen erzeugte Tokenlistenfolge verarbeitet, wird es `**H**allo, Welt!`—nur `H` wird fett gesetzt. Wir könnten dasselbe Ergebnis erzielen, indem wir den entsprechenden TeX-Code schreiben `\\foo Hallo\\xyz`. Beachten Sie, dass die Definition von `\foo` einen einzelnen Parameter verwendete; folglich `\foo` nimmt den einzelnen `H` Zeichentoken als sein Argument auf und lässt die verbleibenden Zeichentokens (`ello`) unberührt.

**Hinweise:**

* das Schreiben von `\\foo\\bar` erzeugt eine ganz andere Ausgabe: Das Token für `\\bar` würde als Argument für `\foo` verwendet werden, was dazu führt, dass **`Hallo, Welt`**—alles wird fett gesetzt.
* das Schreiben von `\\expandafter\\foo\\bar` bewirkt `\\bar` , dass $$\text{abc}*\text{token}\text{xyz}*\text{token}$$erweitert wird, wodurch zwei Tokens erzeugt werden: $$\text{foo}*\text{token}$$ wird dann von `\expandafter` TeX verarbeitet die Tokenfolge $$\text{foo}*\text{token}\text{abc}*\text{token}\text{xyz}*\text{token}$$ schreiben, was `**Hallo**, Welt`—nur **`Hello`** wird fett gesetzt. Hier wird das einzelne Token $$\text{abc}*\text{token}$$ als Argument für das Makro-Token $$\text{foo}*\text{token}$$verarbeitet, während das Token $$\text{xyz}\_\text{token}$$ unberührt bleibt und sein Inhalt in der aktuellen Schrift gesetzt wird.

## Hinweis zu \\\expandafter und Makros mit Argumenten

Beim Verwenden von `\expandafter` Um die Erweiterung von Makros zu erzwingen, ist es nützlich zu wissen, wie Makroerweiterung funktioniert—insbesondere bei Makros, die Argumente annehmen. Bevor TeX ein Makro ausführen kann—d. h. die in der Definition des Makros enthaltenen Tokens lesen und verarbeiten—muss TeX das Makro zunächst „startklar“ machen, indem es den anfänglichen Makro-Erweiterungsprozess durchführt. Wenn die Definition eines Makros die Verwendung von Parametern (`#1`, `#2`, ... `#9`) enthält, verlangt ein Teil des Makro-Erweiterungsprozesses, dass TeX die Eingabe nach Tokens durchsucht, aus denen die vom Benutzer bereitgestellten Argument(e) bestehen: Diese Argumenttokens werden aus der Eingabe absorbiert (entfernt). Während der Makroerweiterung liest TeX Tokens aus der Eingabe und absorbiert sie, um kleine Tokenlisten zu erzeugen, eine Liste pro Argument; diese Tokenlisten werden anschließend an der passenden Stelle im Rumpf des Makros eingefügt—wenn TeX es ausführt. Der letzte Schritt der Makroerweiterung besteht darin, dass TeX die im Speicher abgelegte Makrodefinition lokalisieren und dafür sorgen muss, dass diese Stelle zur Quelle wird, aus der TeX seinen nächsten Satz von Eingabetokens liest. Die Makroausführung beginnt, wenn TeX diese Tokens zu lesen und zu verarbeiten beginnt und dabei die zuvor erzeugten Tokenlisten für die Argumente einfügt.

### Trennertokens werden ebenfalls absorbiert

Wenn die ursprüngliche Makrodefinition auch Tokens verwendet hätte, die als Trennzeichen dienen, müsste TeX auch die ursprüngliche Makrodefinition mit der Verwendung (dem Aufruf) dieses Makros durch den Benutzer vergleichen, um Trennertokens zu finden und abzugleichen. Sobald sie abgeglichen/gefunden sind, werden Trennertokens anschließend ignoriert, weil ihr einziger Zweck darin besteht, als „Interpunktion“ zu dienen und TeX dabei zu helfen, die tatsächlichen Tokens herauszupicken und zu identifizieren, aus denen jedes Argument gebildet werden soll.

&#x20;[Teil 1](/latex/de/ausfuhrliche-artikel/19-how-does-expandafter-work-an-introduction-to-tex-tokens.md)   [Teil 2](/latex/de/ausfuhrliche-artikel/22-how-does-expandafter-work-the-meaning-of-expansion.md)   [Teil 3](/latex/de/ausfuhrliche-artikel/21-how-does-expandafter-work-tex-uses-temporary-token-lists.md)   [Teil 4](/latex/de/ausfuhrliche-artikel/20-how-does-expandafter-work-from-basic-principles-to-exploring-tex-s-source-code.md)   [Teil 5](/latex/de/ausfuhrliche-artikel/17-how-does-expandafter-work-a-detailed-macro-case-study.md)   [Teil 6](/latex/de/ausfuhrliche-artikel/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.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/ausfuhrliche-artikel/18-how-does-expandafter-work-a-detailed-study-of-consecutive-expandafter-commands.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.
