\relax pode ser substituído por um espaço?

\relax pode ser substituído por um espaço?

LaTeX define \veccomo

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

que eventualmente é expandido para

\mathaccent"017E\relax

enquanto o plainTeX o define como

\def\vec{\mathaccent"017E }

substituindo \relaxpor um espaço.

Existe alguma diferença prática?

Responder1

A sintaxe para \mathaccenté (TeXbook, p. 291)

\mathaccent⟨número de 15 bits⟩⟨campo matemático⟩

Um número de ⟨15 bits⟩ é um número inteiro (em qualquer denotação permitida pelo LaTeX) no intervalo 0–2 15 . O que é um ⟨campo matemático⟩? Encontramos na página 289

⟨campo matemático⟩ → ⟨preenchimento⟩⟨símbolo matemático⟩ | ⟨preenchimento⟩ {⟨material do modo matemático⟩}

Um ⟨filler⟩ é qualquer sequência de tokens de espaço e \relaxtokens que são ignorados (fazendo expansão) ao processar o fluxo de entrada em busca de algo que se encaixe na regra de sintaxe.

Assim, no LaTeX, o espaço \relaxserá engolido como um ⟨preenchimento⟩, enquanto no TeX simples o espaço encerra a especificação do número e também é ignorado.

Por que o LaTeX usa \relax? A resposta está na definição \DeclareMathAccentque usa internamente \set@mathaccent:

% latex.ltx, line 3596:
\def\set@mathaccent#1#2#3#4{%
  \xdef#2{\mathaccent"\mathchar@type#3\hexnumber@#1#4\relax}}

A escolha pode depender do fato de que ao gravar em um arquivo auxiliar \relaxé mais adequado ao trabalho.

informação relacionada