Можно ли заменить \relax пробелом?

Можно ли заменить \relax пробелом?

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лучше подходит для конкретной задачи.

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