如何使用包“options”定义一个能够调用其默认参数的新命令类型选项?

如何使用包“options”定义一个能够调用其默认参数的新命令类型选项?

我正在尝试使用该包options来定义一个新的命令类型选项,当没有提供参数时,该选项将调用默认参数。我尝试了以下 MWE,它定义了新的选项类型myopttype。它适用于案例 I 中的示例,但不适用于案例 II 中的示例,其中 xxx 应该以斜体排版。

我不太熟悉该软件包的内部工作原理options。有人能帮我吗?

\documentclass{article}
\usepackage{options}

\makeatletter

\options{
   /handlers/new myopttype/.new handler = [\itshape]\optionsalso{%
      #1/.new cmd = \option@set{#1}{##1}\optionvalue,
      #1/.type    = mypottype,
      #1/.initial = {#2},
   },
}

\options{
   /mycommand/.new family,
   /mycommand/myoption/.new myopttype
}

\newcommand{\mycommand}[1][]{%
   \options{/mycommand,#1}%
}

\makeatother

\begin{document}

{\bfseries Testing the option:}
\vspace{1.5mm}

{\bfseries Case I:} Using \texttt{\textbackslash mycommand[myoption=\textbackslash bfseries]}

aaa {\mycommand[myoption=\bfseries] xxx}.
\vspace{1.5mm}

{\bfseries Case II:} Using \texttt{\textbackslash mycommand}

aaa {\mycommand xxx}.

\end{document}

答案1

我对该包一无所知options,但看起来您必须为键设置一个值才能声明默认值。定义

\newcommand{\mycommand}[1][myoption=\itshape]{%
   \options{/mycommand,#1}%
}

似乎解决了这个问题,但整个事情似乎相当复杂。如果你在最初的部分添加一些东西,你可以简化定义。使用

\options{
   /handlers/new myopttype/.new handler = [\itshape]\optionsalso{%
      #1/.new cmd = \option@set{#1}{##1}\optionvalue,
      #1/.type    = mypottype,
      #1/.initial = {#2},
      #1/.default = \itshape,
   },
}

定义可以更简单

\newcommand{\mycommand}[1][myoption]{%
   \options{/mycommand,#1}%
}

这要好得多,因为它避免了代码重复。

相关内容