![根据指定选项应用不同代码表达式的参数字符串](https://linux22.com/image/470175/%E6%A0%B9%E6%8D%AE%E6%8C%87%E5%AE%9A%E9%80%89%E9%A1%B9%E5%BA%94%E7%94%A8%E4%B8%8D%E5%90%8C%E4%BB%A3%E7%A0%81%E8%A1%A8%E8%BE%BE%E5%BC%8F%E7%9A%84%E5%8F%82%E6%95%B0%E5%AD%97%E7%AC%A6%E4%B8%B2.png)
我想传递一个参数字符串,\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}