Я прочитал в "В чем разница между TeX и LaTeX?" что LaTeX представляет собой набор макросов (расширение), построенных поверх TeX. Предположительно, примитивы TeX должны вести себя в LaTeX так же, как они ведут себя в TeX. Однако, похоже, это не всегда так. В "Как обрабатывается \char в математическом режиме?", объясняется, почему \char
ведет себя в текстовом режиме иначе, чем в математическом. Но это только в TeX. В LaTeX, однако, \char
ведет себя одинаково в текстовом и математическом режимах, как это видно из следующего примера:
\documentclass{article}
\begin{document}
In text mode, we obtain \char"5. In math mode, we also obtain $\char"5$.
\end{document}
В TeX результат другой:
In text mode, we obtain \char"5. In math mode, we obtain $\char"5$.
\bye
Кажется, что некоторые примитивы TeX (по крайней мере один: \char
) переопределены в LaTeX. Я хотел бы узнать, должны ли примитивы TeX переопределяться в LaTeX. Если да, то почему? Существуют ли другие примитивы TeX, которые переопределены в LaTeX? Разве TeX и LaTeX не должны выдавать одинаковый результат на таком простом фрагменте кода (как в примере)?
решение1
LaTeX переопределяет примитивы \input
, \end
, \-
, \/
, \underline
и, в некоторых контекстах, \par
. Он не переопределяет \char
, но использует другие математические коды.
В простом TeX мы видим
\mathcode`\^^E="023A % \lnot
но LaTeX не присваивает математический код ^^E
(ASCII 5), поэтому значение остается таким же, как и изначально, то есть 5.
Когда TeX обрабатывает \char<number>
в математическом режиме, он использует математический код символа, как если бы символ был введен напрямую. Таким образом, в простом TeX вы получаете символ "3A
в семействе 2 ( \lnot
); в LaTeX вы получаете символ "5
в семействе 0.
Переопределенные примитивы
\input
переопределено, чтобы разрешить\input{<filename>}
;\end
переопределяется, чтобы обозначить конец сред;\-
и\/
переопределены по техническим причинам;\underline
переопределен для использования также в текстовом режиме.
Что касается \par
переопределений, то они необходимы для сред, подобных спискам.
Почему обычный TeX присваивает математический код ASCII 5?
Потому что Кнут использовал расширенные наборы символов, а его клавиатура позволяла напрямую вводить ¬ и другие символы. Поэтому он посчитал удобным задать математические коды для расширенного набора символов.