在其他宏系统(尤其是 Lisp 的宏系统)中,人们经常需要将结果存储到“临时”变量中,这些变量不应与调用宏的环境中的任何变量发生冲突。在 Lisp 中,声明此类变量的机制是“gensym”---基本上它是一个返回新变量名的函数,该变量名保证不会在其他任何地方使用。
它本质上是通过在变量名前缀上附加一个递增的整数来实现这一点的。[这本质上是正确的,但有点谎言。Lisp 必须做一些符号魔法来确保变量不能在其他任何地方引用。]
Plain TeX 有这样的功能吗?
答案1
TeX 中没有这种东西。但是,组内定义的任何宏(可以通过多种不同的方式启动)都无法在该组外访问,除非使用\gdef
或\xdef
(或 if\globaldefs
为正)定义。所以
{\def\temp{something}...}
可能会破坏组内部的含义\temp
,但该含义将在组末尾恢复,或者,如果\temp
一开始就未定义,它将完全消失。