如何将命令名称复制为参数?

如何将命令名称复制为参数?

我已经搜索过但没有找到答案。

我使用两层\newcommands 来创建与文本内联的符号,使用\includegraphics。 (它用于音乐符号。)

目前,我有这个作为通用命令:

\newcommand*{\inlineImage}[2]{\raisebox{#1pt}{\fbox{\includegraphics{__#2__}}}}

然后是许多如下形式的命令:

\newcommand*{\Eighth}{\inlineImage{0}{Eighth}}
\newcommand*{\Sixteenth}{\inlineImage{-1.5}{Sixteenth}}

这可行,但在设置过程中输入两次相同的文本很麻烦。当然,我可以在文档主体中使用带参数的命令,但我不想这样做。有没有办法用以下形式的命令替换特定命令:

\newcommand*{\Sixteenth}{\inlineImage{-1.5}{<thecommandname>}}

答案1

etoolbox包提供了以下\csdef命令:

\newcommand*{\inlineImage}[2]{\raisebox{#1pt}{\fbox{\includegraphics{__#2__}}}}
\newcommand*\defnote[2]{\csdef{#1}{\inlineImage{#2}{#1}}}

然后使用

\defnote{Eighth}{0}
\defnote{Sixteenth}{-1.5}

创建宏\Eighth\Sixteenth按照您的需要进行操作。

答案2

要从文本创建命令,请使用\csname .. \endcsname宏。例如,如果您要写

\def\newnote#1{\expandafter\def\csname #1\endcsname{\inlineImage{-1.5}{#1}}}

然后命令如下

\newnote{Fourth}
\newnote{Eighth}
\newnote{Sixteenth}

将定义注释\Fourth\Eighth\Sixteenth,以插入适当的图像。

相关内容