如何使用字符串参数创建宏名并调用生成的宏名?

如何使用字符串参数创建宏名并调用生成的宏名?

我获取了宏名称的一部分作为参数。我想使用它来形成完整的宏名称并调用它。我该怎么做?

这是一个测试用例,用于演示我想要实现的目标:

\documentclass{article}
\newcommand{\typeapple}{fruit}
\newcommand{\typecar}{vehicle}
\newcommand{\typeeagle}{bird}
\newcommand{\printtype}[1]{\type#1} % Help me implement this \printtype macro.
\begin{document}
Type of apple is: \printtype{apple}.

Type of car is: \printtype{car}.

Type of eagle is: \printtype{eagle}.
\end{document}

我需要实现\printtype宏,使其接受一个参数,将其\type作为前缀添加到该参数,然后调用生成的宏名称。例如,如果我们调用\printtype{apple},它应该添加\typeapple以获得\typeapple,然后调用\typeapple

这能做到吗?

答案1

您正在寻找\csname...\endcsname

\documentclass{article}
\newcommand{\typeapple}{fruit}
\newcommand{\typecar}{vehicle}
\newcommand{\typeeagle}{bird}
\newcommand{\printtype}[1]{\csname type#1\endcsname} % Help me implement this \printtype macro.
\begin{document}
Type of apple is: \printtype{apple}.

Type of car is: \printtype{car}.

Type of eagle is: \printtype{eagle}.
\end{document}

在此处输入图片描述

该方法也可以扩展到定义。

\documentclass{article}
\newcommand\settype[2]{\expandafter\def\csname type#1\endcsname{#2}}
\newcommand{\printtype}[1]{\csname type#1\endcsname}
\settype{apple}{fruit}
\settype{car}{vehicle}
\settype{eagle}{bird}
\begin{document}
Type of apple is: \printtype{apple}.

Type of car is: \printtype{car}.

Type of eagle is: \printtype{eagle}.
\end{document}

相关内容