Wann führt Tex eine Makroerweiterung durch?

Wann führt Tex eine Makroerweiterung durch?

Nachdem ich einige Kapitel des Texbuchs gelesen habe, weiß ich, dass Tex Eingabezeilen aus der Befehlszeile oder aus Dateien frisst und sie dann in Token umwandelt. Wenn diese Token in seinen Magen-Darm-Trakt gelangen, bereitet Tex sie auf die Verdauung vor, indem es sie in Boxen, Klebstoffe und anderes Zeug umwandelt und dann einige Listen erstellt.

Bezüglich Makros: In welchem ​​Stadium speichert Tex seine Makrodefinition, in welchem ​​Stadium führt Tex die Makroerweiterung für den Tex-Ersatz durch?

Antwort1

Das ist einfach! TeX führt immer eine Makroerweiterung durch, außer wenn es dies nicht tut.

Auf Seite 215, im zweiten doppelt gefährlichen Absatz, lesen wir

Die Expansion wird zu folgenden Zeitpunkten unterdrückt:

  • Wenn Token während der Fehlerbehebung gelöscht werden (siehe Kapitel 6).
  • Wenn Token übersprungen werden, weil bedingter Text ignoriert wird.
  • Wenn TeX die Argumente eines Makros liest.
  • Wenn TeX eine Steuersequenz liest, die durch \let, \futurelet, \def, \gdef, \edef, \xdef, \chardef, \mathchardef, \countdef, , \dimendef, \skipdef, \muskipdef, \toksdef, \read, und definiert wird \font.
  • \expandafterWenn TeX Argument-Token für , \noexpand, \string, \meaning, , \let, \futurelet, \ifx, \show, \afterassignment, liest \aftergroup.
  • Wenn TeX den Parametertext eines \def, \gdef, \edef, oder aufnimmt \xdef.
  • Wenn TeX den Ersetzungstext für ein \defoder \gdefoder aufnimmt \read; oder den Text einer Token-Variable wie \everypar oder \toks0; oder die Token-Liste für \uppercaseoder \lowercaseoder \write. (Die Token-Liste für \writewird später erweitert, wenn sie tatsächlich in eine Datei ausgegeben wird.)
  • Wenn TeX die Präambel einer Ausrichtung liest, außer nach einem Token für den primitiven Befehl \spanoder beim Lesen des „after“ \tabskip.
  • Starten Sie den Mathematikmodus direkt nach einem Token wie $3 , um zu sehen, ob ein weiteres Token der Kategorie 3 folgt.
  • Direkt nach einem `12- Token beginnt eine alphabetische Konstante.

Nicht unvernünftig, oder? Bei Definitionen wollen wir, dass nichts erweitert wird (außer \edefund \xdef), und der vierte, fünfte, sechste und siebte Aufzählungspunkt befasst sich damit. Ähnlich verhält es sich, wenn wir eine Tokenliste in einem Register oder in speichern wollen \write.

Ebenso darf das Token nach \expandafter, \noexpand, \afterassignmentoder \aftergroupaus offensichtlichen Gründen nicht erweitert werden; dies wird später geschehen, wenn TeX es zum gegebenen Zeitpunkt noch einmal untersucht.

Der letzte Punkt hat einen technischen Grund: Wenn Sie auf eine alphabetische Konstante verweisen möchten, die einem Zeichen mit \catcode0, 5, 9, 13, 14 oder 15 entspricht, kann diese mit einem Backslash davor „maskiert“ werden, aber das bildet eigentlich keine Steuersequenz. Sie können also tun, `\^^Mwenn Sie auf die Konstante 13 verweisen möchten, oder tun \chardef\%=`\%.

Der zweite Punkt kann durch eine wichtige Bemerkung ergänzt werden: Ungeachtet dessen, dass TeX beim Überspringen von bedingtem Text keine Erweiterung vornimmt,tutUntersuchen Sie die Token, um Bedingungen mit ihrem \elseoder abzugleichen \fi. Jeder Token, der \letzu einer primitiven Bedingung gehört, zählt in dieser Hinsicht zu \elseoder .\fi

Antwort2

Im TextTeX auf den Punkt gebrachtDie Befehle und ihre Parameter werden in blauer Farbe geschrieben, aber wenn ein Parameter nicht erweitert ist, wird er in roter Farbe geschrieben. Hier in blauer Farbe geschriebene Parameter werden nach der Erweiterung gelesen. Siehe diesen Text auf Seite 9, wo die Zusammenfassung der TeX-Grundkonstrukte beginnt.

verwandte Informationen