\relax 可以用空格代替嗎?

\relax 可以用空格代替嗎?

LaTeX 定義\vec

\DeclareMathAccent{\vec}{\mathord}{letters}{"7E}

最終擴展到

\mathaccent"017E\relax

而 plainTeX 則將其定義為

\def\vec{\mathaccent"017E }

替換\relax為空格。

有什麼實際差異嗎?

答案1

的語法\mathaccent是 (TeXbook, p. 291)

\mathaccent⟨15 位數⟩⟨數學場⟩

⟨15 位數字⟩ 是一個 0–2 15範圍內的整數(LaTeX 允許的任何表示形式)。什麼是⟨數學場⟩?我們在第289頁找到它

⟨數學場⟩ → ⟨填充物⟩⟨數學符號⟩ | ⟨填充物⟩ {⟨數學模式素材⟩}

⟨filler⟩ 是任何空格標記和\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更適合這項工作的事實。

相關內容