
Gostaria de saber como passar a saída de um \newcommand
para 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ê, \comm
você 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}
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}
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 \comm
e \bra
aceite um argumento opcional para alterar o tamanho dos delimitadores; você também pode usar \comm*
e \bra*
para dimensionamento automático (use com cuidado).