![如何将命令名称复制为参数?](https://linux22.com/image/273589/%E5%A6%82%E4%BD%95%E5%B0%86%E5%91%BD%E4%BB%A4%E5%90%8D%E7%A7%B0%E5%A4%8D%E5%88%B6%E4%B8%BA%E5%8F%82%E6%95%B0%EF%BC%9F.png)
我已经搜索过但没有找到答案。
我使用两层\newcommand
s 来创建与文本内联的符号,使用\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
,以插入适当的图像。