Pregunta en el artículo TUGboat de Stephan sobre \expandafter

Pregunta en el artículo TUGboat de Stephan sobre \expandafter

En la primera página del libro de Stephan BechtolsheinArtículo de remolcadorAl respecto \expandafter, describió las reglas de ejecución \expandafter.

Creo que el caso iii no debería incluirse aquí ya que la llave de apertura debería ser token e en lugar de token 1 . Es decir, el autor debería haber puesto iii en el paso 1 más externo. ¿Estoy en lo cierto? ingrese la descripción de la imagen aquí

Respuesta1

Desafortunadamente, el tutorial no es muy preciso. En realidad, el punto 2.iii es completamente incorrecto: si ⟨token 1 ⟩ es {, entonces simplemente no se expande, porque ningún token de carácter es expandible.

Pero el punto 2. es generalmente erróneo en muchos aspectos. Otras primitivas son expandibles, no solo \expandaftery \csname. \thePor ejemplo, todoscondicionalesson ampliables, incluyendo \elsey \fientre \orellos. Esta es la característica que hace posible hacer

⟨primitive if⟩⟨condition⟩
  \expandafter\@firstoftwo
\else
  \expandafter\@secondoftwo
\fi
{⟨first⟩}{⟨second⟩}%

que es un fragmento de código muy útil que Bechtolsheim parece ignorar (que yo recuerde, ni siquiera se describe en su libro de cuatro volúmenes sobre TeX). También \numberes ampliable, sólo por mencionar otra primitiva.

Es mucho más simple: cuando TeX expande tokens (es decir, siempre, a menos que se suprima la expansión, como cuando se lee el texto de reemplazo en una definición de macro con \def) y encuentra \expandafter, salta sobre el siguiente token, llamémoslo ⟨tokenmi⟩, e intenta ampliar el siguiente. Si el token es expandible, se reemplaza por su expansión (posiblemente con búsqueda de argumentos). La expansión de \expandafteres nula y el proceso se reinicia desde ⟨tokenmi⟩ que será expandido (si es expandible) o ejecutado.

No hay ninguna diferencia cuando ⟨tokenmi⟩ es {con respecto a cualquier otro token posible.

Además, el ejemplo 8 es un poco engañoso, porque omite una característica fundamental, a saber, que en la asignación a un registro de token, (opcional) =puede ir seguido de un ⟨filler⟩, lo que significa que TeX expandirá los tokens ignorando el espacio y \relaxlos tokens. hasta encontrar {. Esto hace posible hacer

\tb=\expandafter{\the\ta}

Posiblementeminucias. Mi opinión es que o se menciona la regla anterior o el caso no debe tratarse como un ejemplo, sino como una característica en sí misma.

información relacionada