我正在尝试用一个简单的 替换单个选项(例如,width=2mm
或colour=green
或dotted
)\newcommand
。我设想使用诸如\w2
、\cg
或之类的简短选项\qst
,只是为了提高打字速度(尤其是使用option=something
个位)。
我具体想做的事情是:
\usepackage{todonotes}
\newcommand{\q}{color=green}
\todo[\q]{my text goes here}
我收到一条错误,内容为“包 xkeyval 错误:'color=green' 在 todonotes 系列中未定义”。
现在,该软件包提供了一种替代方法,即将整行完全写出为一个新命令,即:
\newcommand{\q}{\todo[color=green]{my text goes here}}
\newcommand{\q}[1]{\todo[color=green]{#1}}
这并不可怕,但现在我只是好奇如何将一个选项设置为命令,因为我无法在任何地方找到它,而且我确信我将来会想这样做。
更新 看起来我最快的版本是这样做:
\newcommand{\q}[2][]{\todo[color=green, #1]{#1}}
所以我仍然可以正常更改其他选项。
答案1
keyval 解析器做了一些改进不是扩展宏,以便您可以在值中使用它们,而不会在错误的时间扩展它们。
因此,你可以\q
在传入之前强制扩展
\expandafter\todo\expandafter[\q]
但这不太方便,
\newcommand\q{\todo[color=green]}
可能是最简单的版本。
答案2
您可以定义新的键。
\documentclass{article}
\usepackage{todonotes}
\makeatletter
\newcommand\newtodooption[2]{%
\define@key{todonotes}{#1}[]{%
\setkeys{todonotes}{#2}%
}%
}
\makeatother
\newtodooption{q}{color=green}
\begin{document}
Abc \todo[q]{text goes here}
Abc \todo[color=green]{text goes here}
\end{document}