Pergunta no artigo do TUGboat de Stephan sobre \expandafter

Pergunta no artigo do TUGboat de Stephan sobre \expandafter

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? insira a descrição da imagem aqui

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 \expandaftere . Por exemplo, todos\csname\thecondicionaissão expansíveis, incluindo \else, \fie \orentre 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 \relaxos 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ó.

informação relacionada