
TeX 程式設計的一半痛苦在於可擴展指令和不可擴充指令之間的差異,後者通常是指令定義內發生賦值的結果。這讓我想知道為什麼 Knuth 的 TeX 和任何後來的 TeX 引擎都沒有添加一個結構\local\def
(或其他名稱)來一勞永逸地解決這個問題?那你可以做
\def\mycmd{%
\local\def\tempa{<something>}%
\local\def\tempb{<something>}%
\local\def\tempc##1##2{<something>}%
\tempc{\tempa}{\tempb}%
}
並且仍然有一個可擴展的命令。 (我知道您可以使用類似的構造\group_begin: ... \tl_set:Nn \l__gaussler_temp_tl { ... } \exp_args:NV \group_end: \l__gaussler_temp_tl
來獲得解決方法,但它不可擴展)。換句話說,它的工作方式就像更現代的程式語言中的函數一樣。在命令定義之外使用\local
可能會產生錯誤。這將解決 TeX 程式設計的許多難題。
為什麼這件事還沒完成?
答案1
luatex 有你(也許)想要的東西
\documentclass{article}
\begin{document}
{
\edef\zz{ ab \immediateassignment\def\zzz{this} cd \zzz}
zz: [\zz]
zzz: [\zzz]
\meaning\zzz
}
\meaning\zzz
\end{document}
這\immediateassignment\def\zzz
是一個可擴展的分配\zzz
,因此允許\edef
在同一\edef
.它是本地分配,但對於當前群組而言是本地的,而不是當前的\edef
。不清楚這是否是你的意思。
so\zzz
在 the 中使用,\edef
也在 the 之後定義,但在結束目前組的 the\edef
處超出了範圍,因此在最後一行再次將其顯示為未定義。}
\meaning