\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ページにあります。

⟨数式フィールド⟩ → ⟨フィラー⟩⟨数式記号⟩ | ⟨フィラー⟩ {⟨数式モードマテリアル⟩}

\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ジョブに適しているかどうかによって決まる場合があります。

関連情報