有没有办法提供(xkeyval)布尔(类)选项的星号变体

有没有办法提供(xkeyval)布尔(类)选项的星号变体

对于我正在研究的一个类,我想定义两个相当相似的布尔键,并且不给它们不同的名称,而是让后者成为前者的带星号变体。

让我举一个例子,用一个最小的类文件来定义这样一个带星号的布尔值。通过将角色的 catcode 更改*11,我设法使其工作:

\begin{filecontents*}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesClass{myclass}
\RequirePackage{xkeyval}
\define@boolkey{myclass.cls}[MYC@]{land*}[false]{}
\ProcessOptionsX
\LoadClass{article}
\begingroup
\catcode`\*=11\relax
\ifMYC@land*
\endgroup
\RequirePackage[landscape]{geometry}
\else
\RequirePackage{geometry}
\fi
\endinput
\end{filecontents*}
%
\documentclass[land*=true]{myclass}
\begin{document}
Test.
\end{document}

但它不稳定,因为它只对true值有效。对于false值,我得到了一个错误,\providecommand*其中显然不知道是否*是字母。

因此我的问题是:如何定义 (xkeyval) 布尔(类)选项的强大星号变体?

答案1

使用\@nameuse

\RequirePackage{filecontents}
\begin{filecontents*}{myclass.cls}
\NeedsTeXFormat{LaTeX2e}[1999/12/01]
\ProvidesClass{myclass}
\RequirePackage{xkeyval}
\define@boolkey{myclass.cls}[MYC@]{land*}[false]{}
\ProcessOptionsX
\LoadClass{article}
\@nameuse{ifMYC@land*}
  \RequirePackage[landscape]{geometry}
\else
  \RequirePackage{geometry}
\fi
\endinput
\end{filecontents*}
%
\documentclass[land*=true]{myclass}
\begin{document}
Test.
\end{document}

相关内容