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?
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 \expandafter
y \csname
. \the
Por ejemplo, todoscondicionalesson ampliables, incluyendo \else
y \fi
entre \or
ellos. 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 \number
es 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 \expandafter
es 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 \relax
los 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.