我获取了宏名称的一部分作为参数。我想使用它来形成完整的宏名称并调用它。我该怎么做?
这是一个测试用例,用于演示我想要实现的目标:
\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}
,它应该添加\type
到apple
以获得\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}