Passando valores de retorno de um \newcommand para outro \newcommand?

Passando valores de retorno de um \newcommand para outro \newcommand?

Gostaria de saber como passar a saída de um \newcommandpara a entrada de outro \newcommand. Por exemplo:

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

\comm{\bra{X},\bra{Y}}deveria retornar:

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

Parece bastante simples - exceto que não consigo descobrir a sintaxe correta ou encontrar uma pergunta semelhante para resolver.

Obrigado pela sua contribuição.

Brian

Responder1

Se você quiser usar uma lista de argumentos separados por vírgula para você, \commvocê pode fazer o seguinte:

\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} 

insira a descrição da imagem aqui

Responder2

Uma possível definição seria

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

Exemplo

\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}

insira a descrição da imagem aqui

Observe que quando você faz

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

você tem que chamá-lo como

\foo{first}{second}

e não como \foo{first,second}. Você não deveria usar $nas definições desses comandos, que deveriam ser usados ​​em uma fórmula.

Existem maneiras melhores para isso, no entanto.

\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}

Observe isso \comme \braaceite um argumento opcional para alterar o tamanho dos delimitadores; você também pode usar \comm*e \bra*para dimensionamento automático (use com cuidado).

insira a descrição da imagem aqui

informação relacionada