\meaning\hline

\meaning\hline

を見てみると\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早期に展開され、中括弧カウンターがそれらがペアで出現すると勘違いする可能性があるため、明示的な中括弧を使用することが望ましいです。

関連情報