在kvoptions
包中定义了以下宏:
\DeclareStringOption [⟨init⟩] {⟨key⟩} [⟨default⟩]
以下为相关文献:
创建一个宏来记住键 ⟨key⟩ 的值。宏的名称由选项名称 ⟨key⟩ 加上前缀组成(参见 2.1.3)。宏的初始内容可以由第一个可选参数 ⟨init⟩ 给出。默认值为空。选项 ⟨key⟩ 已定义。选项代码只是将其值存储在宏中。如果给出了末尾的可选参数
\DeclareStringOption
,则选项 ⟨key⟩ 定义为默认值 ⟨default⟩。
我不明白default
value 和init
one 之间有什么区别。有人能解释一下吗?
答案1
与许多 keyval 方法一样,默认如果在使用时只给出了键名,则将使用值。因此
\DeclareStringOption{foo}[bar]
在选项列表中给予foo
没有值/=
符号的等同于给予foo = bar
。
相反,初始值用于确保在选项处理之前已经存储了某个值。因此
\ProvidesPackage{mypkg}
\DeclareStringOption[baz]{foo}
baz
将存储键“now”的值foo
。这相当于给予
\ProvidesPackage{mypkg}
\DeclareStringOption{foo}
\newcommand*{\mypkg@foo}{baz}
如果用户随后设置该foo
选项,则初始值将被“丢弃”,并且不再对结果产生影响。相反,默认值仍然很重要,就像以下情况一样
\ProvidesPackage{mypkg}
\DeclareStringOption[baz]{foo}[bar]
如果用户没有给出foo
选项,那么\mypkg@foo
将具有值baz
。如果用户给出了foo
没有值的选项,则使用默认值,并将\mypkg@foo
具有值bar
。最后,如果用户给出了,foo = <some value>
那么当然\mypkg@foo
将包含<some value>
。