Передача возвращаемых значений из одной \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*для автоматического изменения размера (используйте с осторожностью).

введите описание изображения здесь

Связанный контент