Übergeben eines neuen Befehls mit einem Argument an einen anderen neuen Befehl

Übergeben eines neuen Befehls mit einem Argument an einen anderen neuen Befehl

Ich frage mich, wie man einen neuen Befehl Amit einem anderen neuen Befehl B(der ein Argument hat x) als Argument definiert A.

Hier ist ein einfaches Beispiel:

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

Das gewünschte Ergebnis ist |Hc(5)>, aber tatsächlich wurde angezeigt |Hc(5>). Sehr seltsam.

Was ist falsch am obigen Code?

Antwort1

Sie müssen den inneren Befehl, der ein optionales Argument hat, mit gruppieren (oder besser gesagt abgrenzen), {...}sonst bricht der ganze Befehl auseinander und die Inhalte der Argumente werden in der falschen Reihenfolge gesetzt!

Notiz: Es gibt ein braketPaket für solche Dirac/Hilbert-Zustandsvektoren.

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

Bildbeschreibung hier eingeben

verwandte Informationen