如果包自动加载,如果我明确需要它的功能,我还应该手动加载它吗?

如果包自动加载,如果我明确需要它的功能,我还应该手动加载它吗?

许多软件包都是由其他软件包作为先决条件加载的,而这些软件包在内部使用了该软件包的一些功能。

如果我需要使用某个特定的包,而这个包已经被另一个包(或文档类)加载,我是否还应该loadpackage在序言中加载该包?或者我应该简单地使用它的命令而不显式加载,因为它有效?

答案1

如果同一个包自动和手动加载,且选项有冲突,则会产生问题。但是,如果您不这样做,并且包稍后发生变化,不会自动包含另一个包,您也会遇到问题。

在许多情况下,包含另一个包的包将能够将选项传递给它。例如,\usepackage[leqno]{mathtools}leqno选项传递给amsmath。如果可用,您应该使用该接口。如果有一个特殊选项可以从另一个类或包加载包,例如hyperref对于其他几个包,这可能是有原因的。

否则,如果您需要另一个类所基于的特定选项,则最好先自己加载基础包。通常,第二个包不会再次加载它。

如果基础包在加载后有打开选项的命令,那么需要该选项集的编写良好的包应该使用该命令,您也可以这样做。这应该可以避免因使用不同选项两次加载包而产生的冲突。

如果您不关心基础包的选项,我通常(但并非总是)仍会将其包括在内。考虑一下它是否是接口的稳定部分(一个包构建在另一个包之上),还是可能发生变化的实现细节。

例如,mathtools旨在扩展amsmathunicode-math旨在扩展fontspec,因此我只会包含顶级包。另一方面,如果出版商的类或样式表包含字体包,或者twocolumn,我认为如果论文重印,这可能会发生变化。

相关内容