Frage zur Übung 21.10 im TeXbook

Frage zur Übung 21.10 im TeXbook

In dieser Übung wird gefragt, wie die Erweiterung von gespeichert werden soll , \chapnowenn \writeverarbeitet wird, aber \the\count0zum Zeitpunkt von erweitert werden muss \shipout. Hier ist ein vollständiges Beispiel:

\def\chapno{5}
\newwrite\cont \openout\cont=out.txt
\edef\next{\write\cont{\chapno,\noexpand\the\count0}}\next
\def\chapno{6}
\count0=100
\bye

Bei der Antwort wird eine merkwürdige Technik verwendet:

{\let\the=0\edef\next{\write\cont{<token list>}}\next}

Ist die Verwendung \noexpandgleichwertig mit dem \let-Trick? Und warum \noexpandwird in der Antwort nicht verwendet – nur um die Möglichkeiten aufzuzeigen?

Antwort1

So \protected@writefunktioniert im Wesentlichen auch das Latex:

\long\def \protected@write#1#2#3{%
      \begingroup
       \let\thepage\relax
       #2%
       \let\protect\@unexpandable@protect
       \edef\reserved@a{\write#1{#3}}%
       \reserved@a
      \endgroup
      \if@nobreak\ifvmode\nobreak\fi\fi
}

Normalerweise können Sie in einer solchen Konstruktion \noexpandvor Token verwenden, über die Sie beim Schreiben des Makros Kontrolle haben, aber das <token list>in Ihrem Beispiel stammt normalerweise #1aus einem Abschnittstitelargument im Dokument, Sie möchten jedoch die Erweiterungen aller Register unterdrücken, bis \shipoutund der Text auf eines davon verweisen kann. Wenn Sie es also \thenicht erweiterbar machen (es spielt keine große Rolle, worauf Sie \let es setzen, 0oder \relaxoder ein anderes nicht erweiterbares Token, bleibt es in der erhalten, \edefhat aber in der seine normale erweiterbare Definition \write.

Beachten Sie, dass die Übung den einfachen Fall hat, in dem die Kapitelnummer ein erweiterbares Makro ist. In den meisten Formaten würden Kapitel automatisch nummeriert, sodass ein Zählregister verwendet und möglicherweise auch letztendlich darauf zugegriffen werden würde . \theIn diesem Fall wäre das Unterdrücken aller \theErweiterungen möglicherweise zu viel. (Beachten Sie, dass LaTeX nur \thepagedas Erweitern anderer Zähler zum Zeitpunkt der Verwendung unterdrückt, nicht beim endgültigen Versand.)

verwandte Informationen