如何让一个包与其他包很好地兼容?

如何让一个包与其他包很好地兼容?

我有一个不断增长的序言,它包含\su如下\so命令s特别一元化和s特别o正交群代数,只是\mathfrak{SU}。后来我想用这个soul包删除一些文字。它的命令\sos三轮车out。这两个缩写确实有意义,当我尝试 lo load 时soul,当然出现了错误。

在编程语言中通常有命名空间(Python,C ++),但我的命令必须更长并且输入起来很麻烦。

还有其他方法可以预先防止这种情况发生吗?或者这是 LaTeX 的一个根本困难?

答案1

对于内部包名,许多包都有一个伪命名空间方案,即在命令前加上一个(希望)唯一的前缀,因此longtable内部包名都是\LT@...tabularx内部包名都是\TX@...

对于使用expl3约定的包,内部前缀更加正式,并且有一个前缀名称寄存器以避免冲突。

https://github.com/latex3/latex3/blob/master/l3kernel/l3prefixes.csv

在顶层,您可以这样做(不使用非字母分隔符),例如longtable有一些长度\LT 以不带字母分隔符开头@ \LTpre,但大多数情况下,您只是不这样做并“抓取”一些有用的简短名称。

通常顶级命令较少,而且更容易为它们添加别名:如果两个包定义,\foo通常(并非总是:-)使用类似的东西就足够了

\usepackage{pkga}
\let\fooa\foo
\let\foo\undefined
\usepackage{pkgb}
\let\foob\foo

这样,您就可以同时使用这两种功能,但名称为\fooa\foob

再次,底层编程模型expl3试图将其形式化,其思想是,您使用前缀名称和expl3语法约定编写您的功能,但随后可以使用调用底层代码来定义一个或多个顶级用户界面命令xparse,因此如果您需要不同的名称,您最多必须更改声明xparse,所有主要功能都应该在唯一前缀的包代码中。

相关内容