我想创建一个新命令,使我能够快速写入运算符的期望值。它应该将文本放在其他命令之间,以执行以下操作:
$\langle \psi | text | \psi \rangle$
通过使用这样的新命令:
\newcommand{\expectation}{\langle \psi {text} \psi \rangle}
$\expectation{text}$
正确的格式化方法是什么?
答案1
自定义宏的语法可以是\newcommand{\<macroname>}[<number of arguments>]{<macro code with #1 as first argument, #2 second ...>}
。
在您的情况下,宏可以定义为\newcommand{\expectation}[1]{\langle \psi #1 \psi \rangle}
。
更多信息可从wikibooks/latex/宏。你还应该看看xparse
提供增强宏定义功能的包。
答案2
该mathtools
包提供了一种定义此类命令的方法。文档包含的定义\braket
,您可以在此基础上构建具有\expectation
类似属性的宏,即\expectation*
自动重新缩放,并且\expectation
、\expectation[\big]
、\expectation[\Big]
、\expectation[\bigg]
等产生特定大小:
\documentclass{article}
\usepackage{mathtools}
\DeclarePairedDelimiterX{\braket}[3]{\langle}{\rangle}{#1
\,\delimsize\vert\,\mathopen{} #2 \,\delimsize\vert\, \mathopen{}
#3}
\NewDocumentCommand{\expectation}{ s O{} m }{
\IfBooleanTF {#1}
{ \braket*{\psi}{#3}{\psi} }
{ \braket[#2]{\psi}{#3}{\psi} }
}
\begin{document}
\( \braket{\psi}{X}{\phi} \) \( \expectation{X} \)
\( \braket{\psi}{A^{2}}{\phi} \) \( \expectation{A^{2}} \)
Manual sizing
\begin{equation*}
\braket[\bigg]{\psi}{\sum_{i=1}^{n}}{\phi}
\expectation[\bigg]{\sum_{i=1}^{n} B_{i}}
\end{equation*}
\( \braket[\big]{\psi}{A^{2}}{\phi} \) \( \expectation[\big]{A^{2}} \)
Automatic sizing
\begin{equation*}
\braket*{\psi}{\sum_{i=1}^{n}}{\phi}
\expectation*{\sum_{i=1}^{n} B_{i}}
\end{equation*}
\end{document}
答案3
使用以下定义会更好:\newcommand{\expectation}[1]{\left\langle\psi\left\lvert{#1}\right\rvert\psi\right\rangle}
。这样,尖括号的大小就会适应参数的大小。