根据指定选项应用不同代码表达式的参数字符串

根据指定选项应用不同代码表达式的参数字符串

我想传递一个参数字符串,\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}




相关内容