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