围绕选定文本执行新命令

围绕选定文本执行新命令

我想创建一个新命令,使我能够快速写入运算符的期望值。它应该将文本放在其他命令之间,以执行以下操作:

$\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}。这样,尖括号的大小就会适应参数的大小。

相关内容