\meaning\hline

\meaning\hline

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 \@xhlinecódigo está fechando a \ifnumcondicional. 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 \noaligne 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 \futureletchamado para ver se \hlinesegue outro comando (para adicionar um pequeno espaço vertical). Finalmente

\ifnum0=`{\fi}

é encontrado, o que fecha a lista de tokens \noaligne faz com que o TeX volte a fazer o alinhamento.

Por que não \bgroupe \egroup? Eles funcionariam aqui, mas é preferível ter essas chaves explícitas, caso \hlinesejam expandidas prematuramente, para que o contador de chaves seja levado a pensar que elas aparecem em um par.

informação relacionada