\newcommand 的用法

\newcommand 的用法

我不确定为什么这个命令对我来说不起作用。

\newcommand{\sprod}[2]{\left|\left< {#1} \right| \! \left. \! {#2} \right>\right|}

当我$\sprod{\psi,\phi}$在正文中时,我的编译器说“缺少}插入”

有人可以解释一下这个问题吗?

答案1

您正在\sprod使用两个参数进行定义,但只提供了一个参数;调用应该是\sprod{\psi}{\phi}

然而,通过更多的工作,我们可以定义一个更好的设置,使用带有逗号的语法。

\documentclass{article}
\usepackage{mathtools,xparse}

\DeclarePairedDelimiter{\abs}{\lvert}{\rvert}

\DeclarePairedDelimiterX{\iprod}[1]{\langle}{\rangle}{\splitprod{#1}}

\NewDocumentCommand{\splitprod}{>{\SplitArgument{1},}{m}}{\dosplitprod#1}
\NewDocumentCommand{\dosplitprod}{mm}{%
  #1\nonscript\;\delimsize|\nonscript\;#2%
}

\NewDocumentCommand{\sprod}{sO{}m}{%
  \IfBooleanTF{#1}
    {\abs*{\iprod*{#3}}}
    {\abs[#2]{\iprod[#2]{#3}}}%
}

\begin{document}
\[
\sprod{\psi,\phi}+\sprod[\big]{\psi,\phi}+\sprod*{\frac{\psi}{2},\phi}
\]
\end{document}

在此处输入图片描述

\iprod执行相同的操作,但没有外面的条。

和 的可选参数\sprod指定\iprod大小;使用 可以自动调整大小。这种方式比用和\sprod*填充宏更好,因为后者很少能达到预期效果。\left\right


需要做一些解释。让我们检查一下\iprod宏;使用如下语法\iprod{a}{b},它会更简单:

\DeclarePairedDelimiterX{\iprod}[1]{\langle}{\rangle}{%
  #1\nonscript\;\delimsize|\nonscript\;#2%
}

(请参阅的文档mathtools)。但是,正如您所希望的那样,\iprod{a,b}我使用xparse逗号来拆分参数,并将其传递给\dosplitprod提供位的宏#1\nonscript\;\delimsize|\nonscript\;#2

因为\sprod我只是\iprod在里面嵌套\abs,并向两个宏传递相同的参数。

相关内容