
를 보면서 \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
만 닫는 중괄호는 false를 반환하는 숫자 테스트의 일부이기 때문에 표시되지 않습니다. TeX는 진행되는 동안 토큰을 확장하고 필요한 할당을 수행합니다. 특히, \hrule
실행된 후 \futurelet
다른 명령이 뒤따르는지 확인하기 위해 호출됩니다 \hline
(작은 수직 공간을 추가하기 위해). 마지막으로
\ifnum0=`{\fi}
토큰 목록을 닫고 \noalign
TeX를 다시 정렬 작업으로 가져옵니다.
왜 안 \bgroup
되고 \egroup
? 여기서는 작동하지만 \hline
조기에 확장되어 중괄호 카운터가 쌍으로 나타나는 것으로 생각하도록 속이는 경우를 대비하여 명시적인 중괄호를 갖는 것이 좋습니다.