¿Cuándo hace tex una macro expansión?

¿Cuándo hace tex una macro expansión?

Después de leer algunos capítulos del libro de texto, sé que tex toma líneas de entrada de la línea de comando o archivos y luego las convierte en tokens. Cuando estas fichas entran en su tracto gastrointestinal, tex se prepara para digerirlas convirtiéndolas en cajas, pegamentos y otras cosas, y luego construye algunas listas.

Con respecto a las macros, ¿en qué etapa tex guarda su definición de macro, en qué etapa tex realiza la expansión macro para el reemplazo de tex?

Respuesta1

¡Eso es fácil! TeX siempre realiza macroexpansiones, excepto cuando no lo hace.

En la página 215, segundo párrafo doblemente peligroso, leemos

La expansión se suprime en los siguientes momentos:

  • Cuando los tokens se eliminan durante la recuperación de errores (consulte el Capítulo 6).
  • Cuando se omiten tokens porque se ignora el texto condicional.
  • Cuando TeX lee los argumentos de una macro.
  • Cuando TeX está leyendo una secuencia de control que será definida por \let, \futurelet, \def, \gdef, \edef, \xdef, \chardef, \mathchardef, \countdef, \dimendef, \skipdef, \muskipdef, y .\toksdef\read\font
  • Cuando TeX lee tokens de argumento para \expandafter, \noexpand, \string, \meaning, \let, \futurelet, \ifx, \show, \afterassignment.\aftergroup
  • Cuando TeX absorbe el texto del parámetro de a \def, \gdef, \edefo \xdef.
  • Cuando TeX está absorbiendo el texto de reemplazo de a \defor \gdefor \read; o el texto de una variable token como \everypar o \toks0; o la lista de tokens para \uppercaseo \lowercaseo \write. (La lista de tokens \writese ampliará más adelante, cuando realmente se envíe a un archivo).
  • Cuando TeX lee el preámbulo de una alineación, excepto después de un token para el comando primitivo \spano cuando lee el after \tabskip.
  • Justo después de un token como $el 3 que comienza el modo matemático, para ver si le sigue otro token de categoría 3.
  • Justo después de una ficha `de 12 comienza una constante alfabética.

No es descabellado, ¿verdad? Al hacer definiciones, queremos que nada se expanda (excepto \edefy \xdef) y los puntos cuarto, quinto, sexto y séptimo tratan de esto. De manera similar, si queremos almacenar una lista de tokens en un registro o en \write.

De manera similar, el token después de \expandafter, \noexpando \afterassignmentno \aftergroupdebe expandirse por razones obvias; lo hará más tarde, cuando TeX lo examine nuevamente en el momento apropiado.

La última viñeta tiene una razón técnica: si desea hacer referencia a una constante alfabética que corresponde a un carácter con \catcode0, 5, 9, 13, 14 o 15, puede "escaparse" con una barra invertida delante, pero En realidad, esto no forma una secuencia de control. Entonces puedes hacerlo `\^^Msi quieres referirte a la constante 13 o hacerlo \chardef\%=`\%.

El segundo punto se puede complementar con una observación importante: a pesar de que TeX no se expande al omitir texto condicional, síhaceExamine las fichas para hacer coincidir los condicionales con sus \elseo \fi. Cualquier token que sea \letcondicional primitivo \elseo \ficuente a este respecto.

Respuesta2

En el textoTeX en pocas palabrasLos comandos y sus parámetros están escritos en color azul, pero si un parámetro no está expandido, se escribe en color rojo. Los parámetros escritos aquí en color azul se leen después de la expansión. Vea este texto de la página 9 donde comienza el resumen de las construcciones primitivas de TeX.

información relacionada