macros – ¿Cuál es la diferencia entre \ let y \ def?

Pregunta:

¿Cuál es la diferencia entre los comandos \let y \def en TeX / LaTeX?

Idealmente, proporcione un ejemplo simple que ilustre la diferencia entre ellos.

Respuesta:

La diferencia está en el momento en que se evalúa el "lado derecho".

Por lo tanto, \let\foo\bar define \foo para que tenga el valor que \bar tenía en el punto de definición . Por otro lado, \def\foo{\bar} en efecto define \foo para que tenga el valor que \bar tiene en el punto de uso .

Considerar:

\def\bar{hello}
\let\fooi\bar
\def\fooii{\bar}
\fooi +\fooii

\def\bar{goodbye}
\fooi +\fooii

Esto produce

hello+hello
hello+goodbye

Este es un proceso simple.

Sin embargo, también es sutil, por lo que podría valer la pena destacar algunos puntos clave:

  • Cuando TeX encuentra secuencias de control como \fooi , las evalúa; si estas son macros (es decir, han sido definidas por \def , o \let igual a algo que fue definido por \def ), entonces el resultado es que se expandirán a otros tokens, que TeX examinará a su vez, y así sucesivamente, de forma recursiva, hasta que lo que queda son secuencias de control 'primitivas' o letras (estoy simplificando un poco).

  • \fooi expande directamente a los caracteres hello (porque \bar lo hizo inicialmente y \fooi se definió para tener el mismo valor ).

  • \fooii , por el contrario, se expande a \bar , que luego se vuelve a examinar y expandir inmediatamente . En el primer caso, \bar expande a hello y en el segundo caso a goodbye . La definición de \fooii no ha cambiado, pero \bar se ha redefinido en el medio.

  • Tener una idea clara del proceso de esta expansión recursiva es muy útil para aprender a desarrollar y depurar macros TeX.

Leave a Comment

Your email address will not be published. Required fields are marked *

web tasarım