![\newcommand 的参数数量可变](https://linux22.com/image/300606/%5Cnewcommand%20%E7%9A%84%E5%8F%82%E6%95%B0%E6%95%B0%E9%87%8F%E5%8F%AF%E5%8F%98.png)
我使用以下命令来编写矩阵变量
\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}