
Beim Betrachten \hline
bin ich auf ein paar komplexe Teile gestoßen:
\meaning\hline
macro:->\noalign {\ifnum 0=`}\fi \hrule \@height \arrayrulewidth \futurelet
\reserved@a \@xhline
\meaning\@xhline
macro:->\ifx \reserved@a \hline \vskip \doublerulesep
\vskip -\arrayrulewidth \fi \ifnum 0=`{\fi }
Es scheint, dass der \@xhline
Code die Bedingung schließt \ifnum
. Könnte jemand eine Erklärung dafür geben, was mit{\ifnum 0=`}
Antwort1
Hier ist die Definition in der Quelldatei
% latex.ltx, line 5351:
\def\hline{%
\noalign{\ifnum0=`}\fi\hrule \@height \arrayrulewidth \futurelet
\reserved@a\@xhline}
\def\@xhline{\ifx\reserved@a\hline
\vskip\doublerulesep
\vskip-\arrayrulewidth
\fi
\ifnum0=`{\fi}}
Die Aufgabe von \hline
besteht darin, eine horizontale Linie hinzuzufügen und nach einer weiteren Ausschau zu halten \hline
. Dazu wird TeX mithilfe von vorübergehend außerhalb der Ausrichtung platziert \noalign
. Der Code
\noalign{\ifnum0=`}\fi
öffnet die Tokenliste für \noalign
, und die schließende Klammer wird nicht gesehen, da sie Teil eines numerischen Tests ist, der false zurückgibt. TeX erweitert Tokens während des Vorgangs und führt die erforderlichen Zuweisungen durch. Insbesondere \hrule
wird ausgeführt und dann \futurelet
aufgerufen, um zu sehen, ob ein weiterer \hline
Befehl folgt (zum Hinzufügen eines kleinen vertikalen Leerzeichens). Schließlich
\ifnum0=`{\fi}
gefunden, wodurch die Token-Liste geschlossen wird \noalign
und TeX wieder mit der Ausrichtung beginnt.
Warum nicht \bgroup
und \egroup
? Sie würden hier funktionieren, aber es ist vorzuziehen, diese expliziten Klammern zu haben, falls \hline
vorzeitig erweitert wird, sodass der Klammernzähler denkt, sie stünden als Paar auf.