在加载时还是稍后传递包选项?

在加载时还是稍后传递包选项?

(这实际上与 LaTeX 问题无关,而更多地与个人品味和争论有关。)

您是否希望在加载时传递包选项,例如,

\usepackage[something]{geoemtry}
\usepackage[something]{siunitx}

或者在序言中

\geometry{something}
\sisetup{something}

?我问这个问题是因为我还不知道该做什么。

在加载时执行此操作的一个理由是,并非所有包都有除加载时以外的其他方式来选择包选项(例如,“footmisc” 包的选项),那么第一个选择使得序言更加一致。

答案1

这主要取决于选项的作用。让我们看一些案例。

包裹babel

选项基本上是使用的语言。主要语言是最后指定的选项(或main=<language>babel3.9 开始给出的选项)。虽然语言列表原则上可以在序言中稍后指定,但没有必要说\babelsetup{<languages>},因为这必须放在序言中,因为它们对文档具有“全局”作用。

包裹geometry

可以使用\usepackage[<options>]{geometry}和 零个或多个\geometry{<options>}命令。这很有用,因为可以在需要时添加选项;如果多次指定某个选项,则最后一个指定有效。但是,我不建议使用多个\geometry命令,因为这会使前言难以管理。 的最新版本geometry有一个\newgeometry类似于 的命令\geometry,但这并不是必需的。

包裹footmisc

选项重新定义内部命令。重新定义基于指定的选项,并在处理包代码时执行。几乎不可能有命令\footmiscsetup

包裹hyperref

可以指定包选项或给出一个或多个\hypersetup命令。这是因为相关代码在文档开始时执行;其中一些也可以在文档中更改。

包裹caption

全部选项可以在文档中更改,因此\captionsetup欢迎使用命令来本地自定义标题。可以将“全局”选项作为包选项,然后\captionsetup在相关位置使用。

包裹siunitx

与持有的考虑相同caption

包裹imakeidx

可以指定全局选项(例如texindy使用 Xindy 作为排序引擎),但可以通过为 提供选项来覆盖特定索引的全局选项\makeindex\imakeidxsetup命令可能有意义,提供随后定义的索引隐式使用的选项。但超过三四个索引的情况很少见,为少数用例定义复杂的基础结构只会使代码更难维护。

最后的话

如果包的选项本质上是全局的,则提供命令毫无意义\...setup。处理不同包代码的选项只能作为包选项提供,否则代码维护会变得非常困难且容易发生冲突,因为管理代码的唯一方法\...setup是重载\AtBeginDocument,这只会减慢启动文档处理的速度。

如果可以在文档中本地设置选项,\...setup则需要一个命令。

相关内容