макросы - вызов команды с использованием входной переменной

макросы - вызов команды с использованием входной переменной

В процессе работы над проектом я понял, что было бы полезно, если бы я мог сделать следующее. Допустим, у меня есть список различных команд (упрощенно):

\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не определено)

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

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