\newcommand 的参数数量可变

\newcommand 的参数数量可变

我使用以下命令来编写矩阵变量

\newcommand{\mymat}[3]{\ensuremath{\mathbf{#1}^{#2}_{#3}}}

因此 #1 是矩阵变量,#2是上标,#3是下标。例如,\mymat{A}{T}{i}将产生输出$\mathbf{A}^{T}_{i}$。最常见的情况是我不需要下标和上标参数,最终我写成\mymat{A}{}{}。有没有办法让最后两个括号成为可选的?

答案1

您可以使用xparse为定义用户命令提供了很大可能性的包:

我的第一次尝试:

\usepackage{xparse}
\DeclareDocumentCommand{\mymat}{o m o}  
{%
  \IfNoValueTF{#1}
  {\IfNoValueTF{#3}{\mathbf{#2}}{\mathbf{#2}^{#3}}}
  {\IfNoValueTF{#3}{\mathbf{#2}_{#1}}{\mathbf{#2}_{#1}^{#3}}}
}

Egregs 更简单的解决方案IfValueT

\usepackage{xparse}
\DeclareDocumentCommand{\mymat}{o m o}  
  {%
    \mathbf{#2}\IfValueT{#1}{_{#1}}\IfValueT{#3}{^{#3}}
  }

m代表强制参数,o代表可选参数。

IfValueT{argument}{true code}检查参数是否给出并调用true code或不执行任何操作。

IfNoValueTF{argument}{true code}{false code}检查参数是否未给出,并调用 {true code} 或 {false code}

结果(\!如果你有A矩阵。: \mymat{A}[\!\top]):

\begin{document}
\begin{equation}
  \mymat{A}
  \mymat[1]{A}
  \mymat{A}[\top]
  \mymat[1]{A}[\top]
\end{equation}
\end{document}

在此处输入图片描述

相关内容