这似乎很明显,但我似乎无法通过搜索找到我需要的内容(我想我无法想出一个好的搜索词)。
因此,我正在寻找一个命令,该命令接受一个字符串,然后调用名称包含该字符串的命令。作为参考,该命令将位于 sty 文件中。
梅威瑟:
麦粒肿文件:
\newcommand{\foo@tempinput}
{This works I hope!}
\newcommand{\DesiredMacro}[1]
{\csname \foo@#1\endcsname}
实际文件:
\documentclass{article}
\usepackage{Customstyfile}
\begin{document}
\DesiredMacro{tempinput}
\end{document}
理想情况下会输出“我希望这有效!”
我知道上述方法不起作用,因为 \csname 没有扩展 #1,但我不确定 \csname 是否可以用作执行命令的方式,或者它是否仅用于定义命令?
我想这样做,这样我就可以拥有大量的命令,用户可以通过输入名称来执行他们需要的命令,从而保护命令本身不被用户知道(并避免让用户需要知道更复杂的命令名称。我希望能够让用户输入只是命令名称的一部分)。
谢谢!
答案1
通过使用 ,就像 OP 所做的那样\csname \foo@#1\endcsname
,一个宏被调用,其名称由替换 的定义\foo
和参数 1形成#1
。但是 OP 的主代码表明的并不是\foo
所需的值,而是字母“foo”本身,因此被调用的宏具有“名称”“foo#1”,其中 的#1
值被替换。
foo
因此,消除定义中的之前的反斜杠\DesiredMacro
即可解决问题。
\documentclass{article}
%\usepackage{Customstyfile}
\makeatletter
\newcommand{\foo@tempinput}
{This works I hope!}
\newcommand{\DesiredMacro}[1]
{\csname foo@#1\endcsname}
\makeatother
\begin{document}
\DesiredMacro{tempinput}
\end{document}