当一个软件包修补另一个软件包,然后重新加载原始软件包时会发生什么?

当一个软件包修补另一个软件包,然后重新加载原始软件包时会发生什么?

我正在清理我的类文件,但不清楚某些行的正确顺序。例如(替换\RequirePackage\usepackage放入 MWE 中):

\documentclass{article}
\usepackage{mathtools}
\usepackage{tabularray}
\UseTblrLibrary{amsmath}

\begin{document}
foo
\end{document}

第 2 行,mathtools加载并修补amsmath。此后,根据其文档,第 4 行将tabularray加载amsmath以提供附加功能。

amsmath我猜测对提供的修改mathtools不会被后者覆盖,但我还没有找到方法来确认让某些包amsmath再次尝试加载没有任何缺点。

这里使用的几个包只是一个例子,因为我对触发加载tikz或的包也有类似的担忧hyperref。所以我的问题不是(希望)关于那些具体的例子。提前致谢。

答案1

包永远不会被重新加载(除了fontenc,它相当特殊)。 中的代码\usepackage确保包只被加载一次,并且任何再次加载的尝试要么被忽略,要么引发错误。这意味着您对包的宏所做的任何更改都不会被覆盖。

如果您只执行\usepackage两次,第二次调用将被忽略。如果您使用\usepackage选项调用包,并且两次调用之间的选项不同,则会引发“选项冲突”错误(这还不够详细,但本质上就是这样的)。

相关内容