Frage in Stephans TUGboat-Artikel zu \expandafter

Frage in Stephans TUGboat-Artikel zu \expandafter

Auf der ersten Seite von Stephan BechtolsheinsTUGboat-ArtikelÜber \expandafterbeschrieb 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? Bildbeschreibung hier eingeben

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, \csnameund \the. Zum Beispiel alleKonditionalesind erweiterbar, einschließlich \elseund \fiunter \orihnen. 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 \numberist 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 \expandafterist 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.

verwandte Informationen