
LaTeX define \vec
como
\DeclareMathAccent{\vec}{\mathord}{letters}{"7E}
que eventualmente é expandido para
\mathaccent"017E\relax
enquanto o plainTeX o define como
\def\vec{\mathaccent"017E }
substituindo \relax
por 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 \relax
tokens 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 \relax
será 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 \DeclareMathAccent
que 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.