\newcommand 的参数本身也是 \newcommands

\newcommand 的参数本身也是 \newcommands

我目前无法创建能够简化某些数学符号的宏。我使用两个单独的宏。一个

\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>如果未给出参数,则返回

相关内容