扩展 \csname 中的参数

扩展 \csname 中的参数

我浏览了所有能找到的问题\csname,发现很多代码都在宏中使用它,并将里面的参数作为名称的一部分传递,但仅限于定义宏时。我需要用它来调用宏。

\documentclass{book}
\newcommand{\other}{pass}
\newcommand{\test}[1]{\csname #1 \endcsname}
\newcommand{\anothertest}[1]{\expandafter\csname #1 \endcsname}

\begin{document}

\test{other}
\anothertest{other}
I see nothing.

\end{document}

这应该调用\other twice,对吧?但是当我用 pdflatex 编译它时,它不起作用。我做错了什么?

或者,还有其他方法可以完成以下操作:我的代码定义了一系列\callme命令:\callmeFrank\callmeAnne。在我的文本中,我希望能够从另一个宏中动态调用这些命令(该宏也执行很多其他操作)。。\newcommand{\BigFunction}[1]{dostuff\csname\callme#1\endcsname}do more stuff}显然,这对我来说不起作用,如上面的 MWE 所示。

答案1

\documentclass{book}
\newcommand{\other}{pass}
\newcommand{\test}[1]{\csname #1\endcsname}
\newcommand{\anothertest}[1]{\expandafter\csname #1\endcsname}

\begin{document}

\test{other}
\anothertest{other}
I see \emph{something}.

\end{document}

您有一个空格,#1 \endcsname这意味着您正在调用带有尾随空格的宏在名字里。你定义了\other不是 \other•。然后结果是\relax。如果删除空格,它应该可以编译成功。

相关内容