我想知道如何将一个的输出传递\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*
进行自动调整大小(小心使用)。