将返回值从一个 \newcommand 传递到另一个 \newcommand?

将返回值从一个 \newcommand 传递到另一个 \newcommand?

我想知道如何将一个的输出传递\newcommand给另一个的输入\newcommand。例如:

\newcommand{\bra}[1]{$\langle{#1}|$}
\newcommand{\comm}[2]{$ \left[{#1},{#2}\right]={#1}{#2}-{#2}{#1}$}

\comm{\bra{X},\bra{Y}}应该返回:

$\langle X|\langle Y| - \langle Y|\langle X|$

看起来很简单——只是我无法找出正确的语法或找到类似的问题来解决。

感谢您的输入。

布赖恩

答案1

如果您想使用逗号分隔的参数列表,您\comm可以这样做:

\documentclass{article}
\newcommand{\bra}[1]{\langle{#1}|}
\newcommand{\comm}[1]{\tempcomm(#1)}
\def\tempcomm(#1,#2){\left[{#1},{#2}\right]={#1}{#2}-{#2}{#1}}

\begin{document}
\[
\comm{\bra{X},\bra{Y}}
\]
\end{document} 

在此处输入图片描述

答案2

一个可能的定义是

\newcommand{\bra}[1]{\langle#1\mathclose{|}}
\newcommand{\comm}[2]{[#1,#2]=#1#2-#2#1}

例子

\documentclass{article}

\newcommand{\bra}[1]{\langle#1\mathclose{|}}
\newcommand{\comm}[2]{[#1,#2]=#1#2-#2#1}

\begin{document}

$\bra{X}$

$\comm{X}{Y}$

$\comm{\bra{X}}{\bra{Y}}$

\end{document}

在此处输入图片描述

请注意,当你这样做

\newcommand{\foo}[2]{...#1...#2...}

你必须称它为

\foo{first}{second}

而不是像\foo{first,second}。您不应该$在这些命令的定义中使用,这些命令应该在公式中使用。

然而,还有更好的方法可以解决此问题。

\documentclass{article}

\usepackage{mathtools}

\DeclarePairedDelimiter{\bra}{\langle}{|}
\DeclarePairedDelimiterX{\comm}[2]{[}{]}{#1,#2}
\newcommand{\commx}[2]{#1#2-#2#1}

\begin{document}

$\bra{X}$

$\comm{X}{Y}=\commx{X}{Y}$

$\comm[\big]{\bra{X}}{\bra{Y}}=\commx{\bra{X}}{\bra{Y}}$

\end{document}

请注意\comm\bra接受用于更改分隔符大小的可选参数;您也可以使用\comm*\bra*进行自动调整大小(小心使用)。

在此处输入图片描述

相关内容