Передача новой команды с одним аргументом в другую новую команду

Передача новой команды с одним аргументом в другую новую команду

Мне интересно, как определить новую команду Aс другой новой командой B(которая имеет один аргумент x) в качестве аргумента A.

Вот простой пример:

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

Результат, который я хотел получить |Hc(5)>, но на деле он показал |Hc(5>). Очень странно.

Что не так с кодом выше?

решение1

Вам необходимо сгруппировать (точнее, разграничить) внутреннюю команду, имеющую необязательный аргумент, с помощью {...}, в противном случае вся команда развалится, и содержимое аргументов будет набрано в неправильном порядке!

Примечание: Существует braketпакет для таких векторов состояния Дирака/Гильберта.

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

введите описание изображения здесь

Связанный контент