我浏览了所有能找到的问题\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
。如果删除空格,它应该可以编译成功。