我想传递一个参数字符串,\NewDocumentCommand
以便我根据指定的选项应用不同的代码表达式。
例如,考虑一个product
以名为 的参数命名的命令type
,其中后者可以是"direct"
(在这种情况下是 打印$#2 \times #3$
)或"tensor"
(在这种情况下是 打印$#2 \otimes #3$
)。
答案1
您可以使用该xstring
包来执行此类条件:
下面的定义\Product
采用了一个参数选项(如果未指定,则默认为“direct”。您需要决定如何处理错误情况。
代码:
\documentclass{article}
\usepackage{amsmath}
\usepackage{xstring}
\NewDocumentCommand{\Product}{O{direct} m m}{%
\IfStrEqCase{#1}{%
{direct}{#2 \times #3}%
{tensor}{#2 \otimes #3}%
}[%
\text{Unsupported case: #1.}%
]%
}
\begin{document}
$\Product{a}{b}$
$\Product[direct]{a}{b}$
$\Product[tensor]{a}{b}$
$\Product[wacky]{a}{b}$
\end{document}
答案2
最好的选择是使用 l3 层来texdoc interface3
获取用户指南。
这是一个例子。
\documentclass{article}
\begin{document}
\ExplSyntaxOn
\cs_new:Npn \l_my_command:n #1
{
\tl_set:Nn \l_tmpa_tl{#1}
\str_case_e:nnTF {\l_tmpa_tl}
{
{ none } { }
{ rmfamily } { \rmfamily }
{ serif } { \rmfamily }
{ sans-serif } { \sffamily }
{ sans } { \sffamily }
{ sffamily } { \sffamily }
{ ttfamily } { \ttfamily }
{ mono } { \ttfamily }
}
{ TRUE~ }
{ FALSE~ }
}
\l_my_command:n {mono } some~text\par
\l_my_command:n {rmfamily} some~text
\NewDocumentCommand{\MyCommand}{ m }
{
\l_my_command:n{#1}
}
\ExplSyntaxOff
\MyCommand{mono} Some other text
\end{document}