xkeyval 声明作为选择键或布尔键的包选项键

xkeyval 声明作为选择键或布尔键的包选项键

xkeyval提供\DeclareOptionX有效地定义了一个键\define@key,但它可以用作包选项。

我怎么能够\DeclareOptionX表现出这样的行为\define@choicekey\define@boolkey会怎样?

我已经完成了以下操作,但并不理想。

\documentclass{article}
\usepackage{xkeyval}
\newcounter{testcounter}
\usepackage{filecontents}
\begin{filecontents}{testpackage.sty}
\define@boolkey{testpackage}{ffoo}{}
\DeclareOptionX{foo}{\setkeys{testpackage}{ffoo=#1}}
\ProcessOptionsX
\ifKV@testpackage@ffoo
\def\foo{Foo}
\else
\def\foo{Fail}
\fi
\end{filecontents}
\usepackage[foo=true]{testpackage}
\begin{document}
\foo
\end{document}

这不是很好,因为错误并不涉及它所针对的键应该指用户设置的密钥。

是否存在一些我所忽略的明显方法?

答案1

您不必使用\DeclareOptionX来设置选项xkeyval。与任何其他 LaTeX 的 keyval 包一样,任何设置为键的内容都可以作为相应系列的选项。因此,您可以直接使用\define@choicekey或:\define@boolkey

\define@choicekey*{fam}{key}{val1,Val2,VAL3}{You chose: #1}
\ProcessOptionsX<fam>

key在加载包含代码的包或类时,可将其作为选择键使用。

相关内容