Na primeira página do livro de Stephan BechtolsheinArtigo do rebocadorsobre \expandafter
, ele descreveu as regras de execução de \expandafter
.
Acho que o caso iii não deve ser listado aqui, pois a chave de abertura deve ser token e em vez de token 1 . Isso quer dizer que o autor deveria ter colocado iii na etapa mais externa 1. Estou certo?
Responder1
Infelizmente, o tutorial não é muito preciso. Na verdade, o ponto 2.iii está completamente errado: se ⟨token 1 ⟩ for {
, então ele simplesmente não é expandido, porque nenhum token de caractere é expansível.
Mas o item 2. geralmente está errado sob muitos aspectos. Outras primitivas são expansíveis, não apenas \expandafter
e . Por exemplo, todos\csname
\the
condicionaissão expansíveis, incluindo \else
, \fi
e \or
entre eles. Este é o recurso que torna possível fazer
⟨primitive if⟩⟨condition⟩
\expandafter\@firstoftwo
\else
\expandafter\@secondoftwo
\fi
{⟨first⟩}{⟨second⟩}%
que é um código muito útil que Bechtolsheim parece ignorar (até onde me lembro, nem está descrito em seu livro de quatro volumes sobre TeX). Também \number
é expansível, só para citar outro primitivo.
É muito mais simples: quando o TeX está expandindo tokens (ou seja, sempre, a menos que a expansão esteja sendo suprimida, como ao ler o texto de substituição em uma definição de macro com \def
) e encontra \expandafter
, ele salta para o próximo token, vamos chamá-lo de ⟨tokene⟩, e tenta expandir o seguinte. Se o token for expansível, ele será substituído pela sua expansão (possivelmente com busca de argumentos). A expansão de \expandafter
é anulada e o processo reinicia a partir de ⟨tokene⟩ que será expandido (se for expansível) ou executado.
Não há diferença alguma quando ⟨tokene⟩ {
refere-se a todos os outros tokens possíveis.
Além disso, o exemplo 8 é um pouco enganador, porque ignora um recurso fundamental, ou seja, que na atribuição a um registrador de token, o (opcional) =
pode ser seguido por um ⟨filler⟩, o que significa que o TeX expandirá os tokens ignorando o espaço e \relax
os tokens até encontrar {
. Isto torna possível fazer
\tb=\expandafter{\the\ta}
Possivelmenteminúcias. Minha opinião é que ou a regra acima é mencionada ou o caso não deve ser tratado como um exemplo, mas como uma característica por si só.