
Ich frage mich, wie man einen neuen Befehl A
mit 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 braket
Paket 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}