当使用 kvoptions 时,\ExecuteOptions 的等效性是什么?

当使用 kvoptions 时,\ExecuteOptions 的等效性是什么?

考虑以下简短的.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},选项myoptiononemyoptiontwo将默认执行。

现在,我想添加一个键值选项foo=<value>mypackage.sty使用kvoptions包,采用以下默认设置:foo=bar并保持原有的myoptiononemyoptiontwo

到目前为止,我得到了

%% 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

\ExecuteOptionswhen的等价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

相关内容