考虑以下简短的.sty
包:
%% This is file `mypackage.sty'
\NeedsTeXFormat{LaTeX2e}[1997/06/01]
\ProvidesPackage{mypackage}
\DeclareOption{myoptionone}{Do something}
\DeclareOption{myoptiontwo}{Do some other things}
\DeclareOption{myoptionthree}{Do something awesome}
\ExecuteOptions{myoptionone,myoptiontwo}
\ProcessOptions\relax
\endinput
当使用 加载时\usepackage{mypackage}
,选项myoptionone
和myoptiontwo
将默认执行。
现在,我想添加一个键值选项foo=<value>
来mypackage.sty
使用kvoptions
包,采用以下默认设置:foo=bar
并保持原有的myoptionone
和myoptiontwo
。
到目前为止,我得到了
%% This is file `mypackage.sty'
\NeedsTeXFormat{LaTeX2e}[1997/06/01]
\ProvidesPackage{mypackage}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=hmm,
prefix=hmm@
}
\DeclareVoidOption{myoptionone}{Do something}
\DeclareVoidOption{myoptiontwo}{Do some other things}
\DeclareVoidOption{myoptionthree}{Do something awesome}
\DeclareStringOption[bar]{foo}[bar]
%\ExecuteOptions{myoptionone,myoptiontwo}% This doesn't work.
\ProcessKeyvalOptions*
\endinput
\ExecuteOptions
when的等价kvoptions
用法是什么?我觉得我不明白Google 网上论坛上的此讨论。
答案1
该包kvoptions
基于keyval
,提供\setkeys
。您必须传递系列名称和选项:
%% This is file `mypackage.sty'
\NeedsTeXFormat{LaTeX2e}[1997/06/01]
\ProvidesPackage{mypackage}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=hmm,
prefix=hmm@
}
\DeclareVoidOption{myoptionone}{Do something}
\DeclareVoidOption{myoptiontwo}{Do some other things}
\DeclareVoidOption{myoptionthree}{Do something awesome}
\DeclareStringOption[bar]{foo}[bar]
\setkeys{hmm}{myoptionone,myoptiontwo}% This does work.
\ProcessKeyvalOptions*
\endinput
软件包kvoptions
还加载了kvsetkeys
提供替代方案的程序\kvsetkeys
。默认情况下不使用,kvoptions
但您可以使用以下setkeys
选项启用它\SetupKeyvalOptions
:
%% This is file `mypackage.sty'
\NeedsTeXFormat{LaTeX2e}[1997/06/01]
\ProvidesPackage{mypackage}
\RequirePackage{kvoptions}
\SetupKeyvalOptions{
family=hmm,
prefix=hmm@,
setkeys=\kvsetkeys
}
\DeclareVoidOption{myoptionone}{Do something}
\DeclareVoidOption{myoptiontwo}{Do some other things}
\DeclareVoidOption{myoptionthree}{Do something awesome}
\DeclareStringOption[bar]{foo}[bar]
\kvsetkeys{hmm}{myoptionone,myoptiontwo}
\ProcessKeyvalOptions*
\endinput
有关的所有详细信息\kvsetkeys
都可以在手册中找到kvsetkeys
,但在这种情况下,最重要的优点\kvsetkeys
是可重入:
这意味着在\kvsetkeys
执行时(例如在执行 中给出的代码期间\DeclareVoidOption
),仍然可以使用其他命令\kvsetkeys
(可能是内部命令)。这为 中的代码提供了更多的自由\Declare...Option
。