將回傳值從一個 \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*來自動調整大小(小心使用)。

在此輸入影像描述

相關內容