\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 位数⟩ 是介于 0–2 15之间的整数(以 LaTeX 允许的任何表示法表示) 。什么是 ⟨数学字段⟩?我们在第 289 页找到它

⟨数学字段⟩ → ⟨填充⟩⟨数学符号⟩ | ⟨填充⟩ {⟨数学模式材料⟩}

⟨填充符⟩ 是任意的空格标记和标记序列,\relax在处理输入流寻找符合语法规则的内容时,这些序列会被忽略(进行扩展)。

因此,在 LaTeX 中,\relax将被吞噬为 ⟨filler⟩,而在纯 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更适合该工作这一事实。

相关内容