
LaTeX определяет \vec
как
\DeclareMathAccent{\vec}{\mathord}{letters}{"7E}
который в конечном итоге расширяется до
\mathaccent"017E\relax
тогда как plainTeX определяет его как
\def\vec{\mathaccent"017E }
заменив \relax
пробелом.
Есть ли какая-то практическая разница?
решение1
Синтаксис для \mathaccent
(TeXbook, стр. 291)
\mathaccent
⟨15-битное число⟩⟨математическое поле⟩
⟨15-битное число⟩ — это целое число (в любой форме, допускаемой LaTeX) в диапазоне 0–2 15 . Что такое ⟨математическое поле⟩? Мы находим его на странице 289
⟨математическое поле⟩ → ⟨заполнитель⟩⟨математический символ⟩ | ⟨заполнитель⟩
{
⟨материал математического режима⟩}
⟨Заполнитель⟩ — это любая последовательность пробельных токенов и \relax
токенов, которые игнорируются (выполняют расширение) при обработке входного потока в поисках чего-либо, что соответствует правилу синтаксиса.
Таким образом, в LaTeX пробел \relax
будет проглочен как ⟨заполнитель⟩, тогда как в простом TeX пробел завершает спецификацию числа и также игнорируется.
Почему LaTeX использует \relax
? Ответ в определении , \DeclareMathAccent
который внутри использует \set@mathaccent
:
% latex.ltx, line 3596:
\def\set@mathaccent#1#2#3#4{%
\xdef#2{\mathaccent"\mathchar@type#3\hexnumber@#1#4\relax}}
Выбор может зависеть от того, какой вариант записи \relax
лучше подходит для конкретной задачи.