Use los grupos locales {
... }
sabiamente
Como se señaló en esta respuesta , los caracteres activos como ~
pueden usarse como un nombre de macro. Desafortunadamente, ~
es el único carácter activo de forma predeterminada, y cambiar el código cat por otro carácter es costoso: \catcode`!13
toma 12 bytes. Si la nueva definición de macro solo es necesaria en una pequeña región de su código, los grupos locales pueden ser una solución.
Cuando TeX ingresa a un nuevo grupo local abierto por {
, crea un nuevo nivel de agrupación en la pila de guardado interna. Esto significa que se guardan todas las macros y registros actuales. Cualquier modificación a ellos (a menos que se marque explícitamente como \global
) ahora solo estará activa hasta que se cierre el grupo }
. Esto significa que ~
puede redefinirse dentro de un grupo, usarse allí con la nueva definición, y la definición anterior se restaurará automáticamente una vez que el grupo haya finalizado.
Aquí hay un ejemplo:
\def~{abc}
~ -- {\def~{123}~} -- ~
Esto salidas
abc - 123 - abc
Un efecto secundario interesante de este mecanismo de agrupación es que los valores antiguos todavía están disponibles dentro del grupo hasta que se cambien allí. Para ilustrar eso, imagine que queremos imprimir varios caracteres en función del valor de un contador, rellenarlos con espacios de una longitud fija y continuar con el valor del contador original. Esto podría lograrse de la siguiente manera:
\newcount\x
\x=3
Print a char \the\x\ times,
{\x=-\x \advance\x 10 pad with \the\x\ spaces,}
and go on with x=\the\x.
que salidas
Imprime un char 3 veces, rellena con 7 espacios y continúa con x = 3.
Este comportamiento de agrupación es especialmente importante si desea utilizar las macros estándar de TeX para bucles \loop ... \repeat
anidados. Estas macros definen comandos internos y los usan para determinar cómo proceder. Anidarlos sin poner el lazo interno entre llaves confundirá los comandos internos y conducirá a un comportamiento inesperado.