\meaning\hline

\meaning\hline

Al mirar \hline, me encontré con un par de piezas complejas:

\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 el \@xhlinecódigo está cerrando el \ifnumcondicional. ¿Alguien podría dar una explicación de lo que está pasando con{\ifnum 0=`}

Respuesta1

Aquí está la definición en el archivo fuente.

% 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}}

La responsabilidad de \hlinees añadir una norma horizontal y esperar otra \hline. Para hacer esto, TeX se coloca temporalmente fuera de la alineación, con la ayuda de \noalign. El código

\noalign{\ifnum0=`}\fi

abre la lista de tokens para \noaligny la llave de cierre no se ve porque es parte de una prueba numérica que devuelve falso. TeX expande los tokens a medida que avanza, realiza las tareas necesarias; en particular, \hrulese ejecuta y luego \futureletse llama para ver si \hlinesigue otro comando (para agregar un pequeño espacio vertical). Finalmente

\ifnum0=`{\fi}

se encuentra, lo que cierra la lista de tokens \noaligny hace que TeX vuelva a realizar la alineación.

¿Por qué no \bgroupy \egroup? Funcionarían aquí, pero es preferible tener esas llaves explícitas en caso de que \hlinese expandan prematuramente para que el contador de llaves se engañe y piense que aparecen en un par.

información relacionada