Auf der ersten Seite von Stephan BechtolsheinsTUGboat-ArtikelÜber \expandafter
beschrieb er die Regeln der Ausführung von \expandafter
.
Ich denke, der Fall iii sollte hier nicht aufgeführt werden, da die öffnende geschweifte Klammer das Token e und nicht das Token 1 sein sollte . Das heißt, der Autor hätte iii in den äußersten Schritt 1 setzen sollen. Habe ich Recht?
Antwort1
Leider ist das Tutorial nicht sehr präzise. Tatsächlich ist Punkt 2.iii völlig falsch: Wenn ⟨Token 1 ⟩ ist {
, dann wird es einfach nicht erweitert, weil kein Zeichen-Token erweiterbar ist.
Aber Punkt 2 ist in vielerlei Hinsicht falsch. Andere Primitive sind erweiterbar, nicht nur \expandafter
, \csname
und \the
. Zum Beispiel alleKonditionalesind erweiterbar, einschließlich \else
und \fi
unter \or
ihnen. Dies ist die Funktion, die es ermöglicht,
⟨primitive if⟩⟨condition⟩
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{⟨first⟩}{⟨second⟩}%
Das ist ein sehr nützlicher Code, den Bechtolsheim anscheinend ignoriert (soweit ich mich erinnere, wird er in seinem vierbändigen Buch über TeX nicht einmal beschrieben). Außerdem \number
ist erweiterbar, um nur ein weiteres Primitiv zu nennen.
Es ist viel einfacher: Wenn TeX Token erweitert (das heißt immer, es sei denn, die Erweiterung wird unterdrückt, z. B. beim Lesen des Ersetzungstexts in einer Makrodefinition mit \def
) und findet \expandafter
, überspringt es das nächste Token, nennen wir es ⟨Tokent⟩, und versucht, das folgende zu erweitern. Wenn das Token erweiterbar ist, wird es durch seine Erweiterung ersetzt (ggf. mit Suche nach Argumenten). Die Erweiterung von \expandafter
ist ungültig und der Prozess beginnt erneut mit ⟨Tokent⟩ das entweder erweitert (sofern erweiterbar) oder ausgeführt wird.
Kein Unterschied, wenn ⟨tokent⟩ gilt {
in Bezug auf jedes mögliche andere Token.
Auch Beispiel 8 ist ein wenig irreführend, da es eine grundlegende Funktion überspringt, nämlich dass bei der Zuweisung zu einem Token-Register auf (optional) ein ⟨Füllzeichen⟩ folgen kann, was bedeutet, dass TeX Tokens unter Berücksichtigung von Leerzeichen und Tokens =
erweitert, bis gefunden wird . Dies ermöglicht Folgendes:\relax
{
\tb=\expandafter{\the\ta}
MöglicherweiseKleinigkeiten. Meiner Meinung nach wird entweder die obige Regel erwähnt oder der Fall sollte nicht als Beispiel, sondern als eigenständiges Merkmal behandelt werden.