
Die Hälfte der Qualen beim Programmieren von TeX ist der Unterschied zwischen erweiterbaren und nicht erweiterbaren Befehlen, wobei letztere normalerweise das Ergebnis einer Zuweisung innerhalb der Befehlsdefinition sind. Das lässt mich fragen, warum weder Knuths TeX noch spätere TeX-Engines eine Konstruktion \local\def
(oder mit einem anderen Namen) hinzufügen, die dieses Problem ein für alle Mal löst? Dann könnten Sie
\def\mycmd{%
\local\def\tempa{<something>}%
\local\def\tempb{<something>}%
\local\def\tempc##1##2{<something>}%
\tempc{\tempa}{\tempb}%
}
und trotzdem einen erweiterbaren Befehl haben. (Ich weiß, dass Sie eine Konstruktion wie verwenden können, \group_begin: ... \tl_set:Nn \l__gaussler_temp_tl { ... } \exp_args:NV \group_end: \l__gaussler_temp_tl
um einen Workaround zu finden, aber dieser wird nicht erweiterbar sein). Mit anderen Worten würde es genau wie eine Funktion in einer moderneren Programmiersprache funktionieren. Die Verwendung \local
außerhalb einer Befehlsdefinition könnte einen Fehler ergeben. Dies würde viele der Kopfschmerzen bei der TeX-Programmierung lösen.
Warum wurde dies noch nicht getan?
Antwort1
luatex hat, was Sie (vielleicht) suchen
\documentclass{article}
\begin{document}
{
\edef\zz{ ab \immediateassignment\def\zzz{this} cd \zzz}
zz: [\zz]
zzz: [\zzz]
\meaning\zzz
}
\meaning\zzz
\end{document}
Hier \immediateassignment\def\zzz
ist eine erweiterbare Zuweisung von , die daher in der Einbeziehung mit dem definierten Befehl innerhalb desselben \zzz
zulässig ist . Es handelt sich um eine lokale Zuweisung, aber lokal für die aktuelle Gruppe, nicht für die aktuelle . Es ist nicht klar, ob Sie das gemeint haben.\edef
\edef
\edef
„so“ \zzz
wird in verwendet \edef
und ist auch nach dem definiert, \edef
verlässt aber den Gültigkeitsbereich bei dem, }
das die aktuelle Gruppe beendet, und wird deshalb \meaning
in der letzten Zeile wieder als undefiniert angezeigt.