(这实际上与 LaTeX 问题无关,而更多地与个人品味和争论有关。)
您是否希望在加载时传递包选项,例如,
\usepackage[something]{geoemtry}
\usepackage[something]{siunitx}
或者在序言中
\geometry{something}
\sisetup{something}
?我问这个问题是因为我还不知道该做什么。
在加载时执行此操作的一个理由是,并非所有包都有除加载时以外的其他方式来选择包选项(例如,“footmisc” 包的选项),那么第一个选择使得序言更加一致。
答案1
这主要取决于选项的作用。让我们看一些案例。
包裹babel
选项基本上是使用的语言。主要语言是最后指定的选项(或main=<language>
从babel
3.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
则需要一个命令。