
프로젝트를 진행하면서 다음과 같은 일을 하면 도움이 된다는 것을 깨달았습니다. 다양한 명령 목록이 있다고 가정해 보겠습니다(단순화).
\newcommand{\AA}{...}
\newcommand{\AB}{...}
\newcommand{\AC}{...}
...
\newcommand{\AZ}{...}
이제 입력에 따라 다음 명령 중 하나를 호출할 수 있는 명령이 필요합니다.
\newcommand{\caller}[1]{\A#1}
위의 예는 작동하지 않습니다. 하지만 그러한 기능이 있는 작업을 어떻게 수행할 수 있습니까?
답변1
로 매크로 이름을 구성해야 합니다 \csname A#1\endcsname
.
실제로 많은 패키지 또는 클래스 코드에서 이 구성을 사용하며 두 매크로 모두 실제로 기본 형식 이므로 \csname ...\endcsname
에만 국한되지 않습니다 .LaTeX
TeX
참고: \AA
는 이미 정의되어 있으며 스칸디나비아 문자를 제공합니다. 즉 Å와 같습니다(그러나 명령 이름이 단순화된 것처럼 보이므로 문제가 되지 않을 것 같습니다).
\A#1
정의되지 않은 경우 \csname A#1\endcsname
로 확장됩니다 \relax
. 즉, 아무 작업도 수행하지 않습니다.
\documentclass{article}
\newcommand{\AB}{bar}
\newcommand{\AC}{foobar}
\newcommand{\caller}[1]{%
\csname A#1\endcsname%
}
\begin{document}
\caller{A}
\caller{B}
\caller{C}
\caller{Z}
\end{document}
보시다시피 \caller{A}
작동하고( \AA
정의되었기 때문에) \caller{Z}
아무것도 하지 않습니다( \AZ
정의되지 않았기 때문에).