
看著\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
過早展開,這樣大括號計數器就會被愚弄,認為它們成對出現。