\meaning\hline

\meaning\hline

Глядя на \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они будут раскрыты преждевременно, чтобы счетчик скобок думал, что они появляются в паре.

Связанный контент