在 \DeclareStringOption 中,和?

在 \DeclareStringOption 中,和?

kvoptions包中定义了以下宏:

\DeclareStringOption [⟨init⟩] {⟨key⟩} [⟨default⟩]

以下为相关文献:

创建一个宏来记住键 ⟨key⟩ 的值。宏的名称由选项名称 ⟨key⟩ 加上前缀组成(参见 2.1.3)。宏的初始内容可以由第一个可选参数 ⟨init⟩ 给出。默认值为空。选项 ⟨key⟩ 已定义。选项代码只是将其值存储在宏中。如果给出了末尾的可选参数\DeclareStringOption,则选项 ⟨key⟩ 定义为默认值 ⟨default⟩。

我不明白defaultvalue 和initone 之间有什么区别。有人能解释一下吗?

答案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>

相关内容