\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@key
of package来定义keyval
。但是 packagekvoptions
提供了一些快捷方式:\DeclareBoolOption
, \DeclareStringOption
, ...
\DeclareOption
被 取代\DeclareVoidOption
,并被\DeclareOption*
取代\DeclareDefaultOption
。
有关更完整的示例,请参阅包的“3 示例”部分kvoptions
。
答案2
\ProcessOptions
在示例上测试这一点,和的顺序\ProcessKeyvalOptions
似乎并不重要,除非一组选项的代码直接影响另一组选项的代码。
对于\ProcessOptions\relax
vs. \ProcessOptions*
,分类指南解释选项的处理顺序不同:
\ProcessOptions*
:这很像\ProcessOptions
,但它按照调用命令中指定的顺序执行选项,而不是按照类或包中的声明顺序执行。对于包来说,这意味着首先处理全局选项。
至于你应该使用哪一个,如果你完全从头开始编写课程,我建议你只使用一种风格;要么用于kvoptions
你自己的所有选择,要么只使用经典风格。如果您在现有课程的基础上构建课程,那么这取决于细节:如果您只添加新选项,那么\LoadClassWithOptions
处理该课程的旧选项就足够了,并且您可以坚持使用kvoptions
您自己的添加风格。