
を見てみると\hline
、いくつか複雑な部分に遭遇しました。
\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 }
\@xhline
コードが条件文を閉じているようです\ifnum
。何が起こっているのか説明してもらえますか?{\ifnum 0=`}
答え1
ソースファイル内の定義は次のとおりです
% 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}}
の役割は、\hline
水平線を追加し、次の を探すことです\hline
。これを行うために、 の助けを借りて、TeX は一時的に配置の外側に配置されます\noalign
。コード
\noalign{\ifnum0=`}\fi
は のトークンリストを開きます\noalign
が、閉じ括弧は偽を返す数値テストの一部であるため表示されません。TeX はトークンを展開しながら必要な割り当てを実行します。特に、\hrule
が実行され、次に\futurelet
が呼び出されて別のコマンド (小さな垂直スペースを追加するため) が続くかどうかを確認します\hline
。最後に
\ifnum0=`{\fi}
が見つかると、トークン リストが閉じられ\noalign
、TeX がアライメントの実行に戻ります。
なぜ と ではないのでしょう\bgroup
か\egroup
? ここでは機能しますが、 が\hline
早期に展開され、中括弧カウンターがそれらがペアで出現すると勘違いする可能性があるため、明示的な中括弧を使用することが望ましいです。