我正在定义自己的 latex 包mypackage.sty
。如何定义本地命令,以便:mycommand
- 如果
mycommand
已经在其他地方定义,它将在包内部重新定义 - 如果
mycommand
尚未定义,它将在包内部本地定义,并且无法从包外部获得
相同的问题,长度将使用\newlength
和进行局部定义\setlength
。
答案1
您可能正在考虑一种编译或解释语言,其中函数定义提供本地作用域,从而隐藏调用代码的实现。该习语不适用于 TeX 等宏扩展语言。
\foo
如果你的包根据一些仅与包内部代码相关的辅助命令来定义用户命令,那么
\newcommand\foo{zzz \internalfoohelper zzz}
然后当\foo
在文档中使用时,它只会扩展为 zzz \internalfoohelper zzz
,因此\internalfoohelper
需要定义在那时候您不能仅在包代码中本地定义它。
通常的解决方案是选择一些唯一的前缀,例如longtable
启动所有内部命令\LT@...
。