我目前无法创建能够简化某些数学符号的宏。我使用两个单独的宏。一个
\usepackage{xargs}
\usepackage{xifthen}
\newcommandx\vecidx[3][2= , 3= ]{
\mathbf{#1}^{
\ifthenelse{\isempty{#2}}{}{\scriptscriptstyle (#2)}
}_{
\ifthenelse{\isempty{#3}}{}{\scriptscriptstyle #3}
}
}
帮助我写矢量符号。\vecidx{z}[1]
给出
$\mathbf_{z}^{\scriptscriptstyle (1)}$
,\vecidx{z}[1][ij]
给出$\mathbf_{z}^{\scriptscriptstyle (1)}_{ij}$
。另一个宏用于偏导数
\newcommandx\pd[2][1= ]{
\frac{\partial #1}{\partial #2}
}
只要我不将\vecidx{z}[1]
其作为参数传递给,事情就会按预期工作\pd
,就像\pd[\vecidx{x}[1]]{\vecidx{z}[1]}
这会导致错误一样Missing } inserted ...
。
我发现转义\pd[{\vecidx{x}[1]}]{\vecidx{z}[1]}
有帮助,但所有这些括号都很难阅读。我可以做些什么来简化语法?
答案1
看起来像一份工作xparse
\documentclass{article}
\usepackage{xparse}
\NewDocumentCommand{\vecidx}{moo} %
{%
\mathbf{#1}%
\IfNoValueF{#2}{^{\scriptscriptstyle (#2)}}%
\IfNoValueF{#3}{_{\scriptscriptstyle (#3)}}%
}
\NewDocumentCommand{\pd}{O{}m}
{\frac{\partial #1}{\partial #2}}
\begin{document}
$\pd[\vecidx{x}[1]]{\vecidx{z}[1]}$
\end{document}
(我不确定我自己是否热衷于使用这种语法:倾向于隐藏正在发生的事情。)
这作为xparse
使用括号匹配的可选参数的实现:它不会被嵌套的方括号“混淆”。
请注意指定参数的语法:
m
: 括号中的强制参数o
:方括号中的可选参数,-NoValue-
如果未给出参数,则返回特殊标记O{<default>}
:方括号中的可选参数,<default>
如果未给出参数,则返回