能否从小写字符串参数构建大写控制序列并为其赋予定义?我测试了两个代码,但都运行不佳。
代码1:
\def\makecs#1#2{%
\expandafter\def\csname \uppercase{#1}\endcsname{#2}
}
\makecs{macroname}{definition}
\MACRONAME
代码2:
\def\makeCS#1#2{%
\expandafter\def\uppercase{\csname #1\endcsname}{#2}
}
\makeCS{macro}{def}
\MACRO
现在我明白了为什么它们效果不好,但我不知道其他解决方案。我应该怎么做才能从小写字符串参数构建大写控制序列并为其定义?
答案1
\uppercase
不可扩展。因此它不会在 内部扩展\csname
,从而导致\uppercase
名称阻塞。
也\expandafter\def\uppercase
无法展开\uppercase
,因此\expandafter
没有效果,其余的\def\uppercase
会改变的定义\uppercase
。
\uppercase
外面应该有:
\def\makecs#1#2{%
\uppercase{\expandafter\def\csname #1\endcsname}{#2}%
}
\makecs{macroname}{definition}
\MACRONAME
调用First \uppercase
,将小写标记转换为#1
大写(其他标记是命令标记)。调用 Then,\def
将大写字母保留原位。
一步步:
\makecs{macroname}{definition}
\uppercase{\expandafter\def\csname macroname\endcsname}{definition}
\expandafter\def\csname MACRONAME\endcsname{definition}
\def\MACRONAME{definition}