Passando um novo comando com um argumento para outro novo comando

Passando um novo comando com um argumento para outro novo comando

Estou me perguntando como definir um novo comando Acom outro novo comando B(que tem um argumento x) como o argumento de A.

Aqui está um exemplo simples:

\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\begin{document}
\newcommand\ket[1][usedefault, addprefix=\global, 1=1]{|#1>}
\newcommand\hc[1][usedefault, addprefix=\global, 1=2]{Hc(#1)}
\newcommand\kc[1][usedefault, addprefix=\global, 1=3]{\ket[\hc[#1]]}

$$\kc[5]$$

\end{document}

O resultado que eu queria é |Hc(5)>, mas na verdade deu |Hc(5>). Muito estranho.

O que há de errado com o código acima?

Responder1

Você tem que agrupar (bem delimitar) o comando interno, que tem um argumento opcional, com {...}, caso contrário, todo o comando se desfaz e o conteúdo dos argumentos é escrito na ordem errada!

Observação: Existe um braketpacote para esses vetores de estado Dirac/Hilbert.

\documentclass[english]{article}
\usepackage[T1]{fontenc}
\usepackage[latin9]{inputenc}
\usepackage{babel}
\begin{document}
\newcommand\ket[1][usedefault, addprefix=\global, 1=1]{|#1\rangle}
\newcommand\hc[1][usedefault, addprefix=\global, 1=2]{Hc(#1)}
\newcommand\kc[1][usedefault, addprefix=\global, 1=3]{\ket[{\hc[#1]}]}

\[\kc[5]\]

\end{document}

insira a descrição da imagem aqui

informação relacionada