调用一个命令,其中命令名称的一部分作为输入?

调用一个命令,其中命令名称的一部分作为输入?

这似乎很明显,但我似乎无法通过搜索找到我需要的内容(我想我无法想出一个好的搜索词)。

因此,我正在寻找一个命令,该命令接受一个字符串,然后调用名称包含该字符串的命令。作为参考,该命令将位于 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}

在此处输入图片描述

相关内容