為什麼 TeX 不允許在指令中使用本地的、可擴充的定義?

為什麼 TeX 不允許在指令中使用本地的、可擴充的定義?

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

在此輸入影像描述

相關內容