\ProcessOptions和\ProcessKeyvalOptions

\ProcessOptions和\ProcessKeyvalOptions

\ProcessOptions\ProcessKeyvalOptions

哪个先来?这重要吗?

\ProcessOptions\relax或者\ProcessOptions*

有什么区别?显然,对于 keyval,只有带星号的版本。我应该使用哪个?我查看了文档,但它们并没有太大帮助。


我正在基于 创建自己的类article。我使用kvoptions它来轻松创建布尔选项(\DeclareBoolOption\DeclareComplementaryOption)。

答案1

无包装kvoptions

选项定义为

\DeclareOption{<option>}{<code>}

星号形式定义了未知选项的行为:

\DeclareOption*{<code>}

选项处理方式

\ProcessOptions\relax

按照包文件中声明的顺序处理选项(很少有用)或

\ProcessOptions*

按调用顺序处理选项(通常推荐)。

带包装kvoptions

使用包时kvoptions的替换\ProcessOptions*\ProcessKeyvalOptions。 和\ProcessOptions都不\ProcessOptions*应与 一起使用\ProcessKeyvalOptions

包选项现在被解释为键值选项。它们可以用\define@keyof package来定义keyval。但是 packagekvoptions 提供了一些快捷方式:\DeclareBoolOption, \DeclareStringOption, ...

\DeclareOption被 取代\DeclareVoidOption,并被\DeclareOption*取代\DeclareDefaultOption

有关更完整的示例,请参阅包的“3 示例”部分kvoptions

答案2

\ProcessOptions在示例上测试这一点,和的顺序\ProcessKeyvalOptions似乎并不重要,除非一组选项的代码直接影响另一组选项的代码。

对于\ProcessOptions\relaxvs. \ProcessOptions*分类指南解释选项的处理顺序不同:

\ProcessOptions*:这很像\ProcessOptions,但它按照调用命令中指定的顺序执行选项,而不是按照类或包中的声明顺序执行。对于包来说,这意味着首先处理全局选项。

至于你应该使用哪一个,如果你完全从头开始编写课程,我建议你只使用一种风格;要么用于kvoptions你自己的所有选择,要么只使用经典风格。如果您在现有课程的基础上构建课程,那么这取决于细节:如果您只添加新选项,那么\LoadClassWithOptions处理该课程的旧选项就足够了,并且您可以坚持使用kvoptions您自己的添加风格。

相关内容