¿Por qué TeX no permite definiciones locales expandibles dentro de los comandos?

¿Por qué TeX no permite definiciones locales expandibles dentro de los comandos?

La mitad del dolor de programar TeX es la diferencia entre comandos expandibles y no expandibles, estos últimos generalmente son el resultado de una asignación que tiene lugar dentro de la definición del comando. Eso me hace preguntarme por qué ni el TeX de Knuth ni ningún motor TeX posterior agregan una construcción \local\def(o con algún otro nombre) que resuelva este problema de una vez por todas. Entonces podrías hacer

\def\mycmd{%
    \local\def\tempa{<something>}%
    \local\def\tempb{<something>}%
    \local\def\tempc##1##2{<something>}%
    \tempc{\tempa}{\tempb}%
}

y todavía tengo un comando expandible. (Sé que puedes usar una construcción como \group_begin: ... \tl_set:Nn \l__gaussler_temp_tl { ... } \exp_args:NV \group_end: \l__gaussler_temp_tlpara obtener una solución alternativa, pero no será ampliable). En otras palabras, funcionaría como una función en un lenguaje de programación más moderno. El uso \localfuera de una definición de comando podría generar un error. Esto solucionaría muchos de los dolores de cabeza de la programación TeX.

¿Por qué no se ha hecho esto todavía?

Respuesta1

luatex tiene lo que (quizás) estás pidiendo

\documentclass{article}

\begin{document}

{
\edef\zz{ ab \immediateassignment\def\zzz{this} cd \zzz}

zz: [\zz]

zzz: [\zzz]

\meaning\zzz
}

\meaning\zzz


\end{document}

Aquí \immediateassignment\def\zzzhay una asignación expandible \zzzque, por lo tanto, está permitida en el \edefuso del comando definido dentro de la misma \edef. Es una asignación local, pero local para el grupo actual, no para el actual \edef. No está claro si eso es lo que quisiste decir.

so \zzzse usa en \edefy también se define después de \edefpero sale del alcance en el }que finaliza el grupo actual, por lo que \meaningse muestra como indefinido nuevamente en la línea final.

ingrese la descripción de la imagen aquí

información relacionada