\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。為了做到這一點,在\noalign.程式碼

\noalign{\ifnum0=`}\fi

開啟 的標記列表\noalign,並且看不到右大括號,因為它是傳回 false 的數字測試的一部分。 TeX 會擴展標記,執行必要的分配;特別是,\hrule被執行,然後\futurelet被呼叫以查看是否有另一個\hline命令跟隨(用於添加一個小的垂直空間)。最後

\ifnum0=`{\fi}

找到,這將關閉標記清單\noalign並讓 TeX 重新對齊。

為什麼不\bgroup\egroup?它們在這裡可以工作,但最好有那些明確的大括號,以防\hline過早展開,這樣大括號計數器就會被愚弄,認為它們成對出現。

相關內容