从小写字符串构建大写 CS 并赋予它定义

从小写字符串构建大写 CS 并赋予它定义

能否从小写字符串参数构建大写控制序列并为其赋予定义?我测试了两个代码,但都运行不佳。

代码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}

相关内容