
Olhando para \hline
, encontrei algumas peças complexas:
\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 }
Parece que o \@xhline
código está fechando a \ifnum
condicional. Alguém poderia fornecer uma explicação do que está acontecendo com{\ifnum 0=`}
Responder1
Aqui está a definição no arquivo de origem
% 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}}
A responsabilidade de \hline
é adicionar uma regra horizontal e esperar por outra \hline
. Para fazer isso, o TeX é temporariamente colocado fora do alinhamento, com a ajuda do \noalign
. O código
\noalign{\ifnum0=`}\fi
abre a lista de tokens para \noalign
e a chave de fechamento não é vista porque faz parte de um teste numérico que retorna falso. O TeX expande os tokens à medida que avança e executa as atribuições necessárias; em particular, \hrule
é executado e depois \futurelet
chamado para ver se \hline
segue outro comando (para adicionar um pequeno espaço vertical). Finalmente
\ifnum0=`{\fi}
é encontrado, o que fecha a lista de tokens \noalign
e faz com que o TeX volte a fazer o alinhamento.
Por que não \bgroup
e \egroup
? Eles funcionariam aqui, mas é preferível ter essas chaves explícitas, caso \hline
sejam expandidas prematuramente, para que o contador de chaves seja levado a pensar que elas aparecem em um par.