如果我写:
\documentclass[a4paper]{report}
\begin{document}
\lowercase{Norma}
\end{document}
我在输出中得到了“norma”,并按我的要求将其小写。但是,如果我写:
\documentclass[a4paper]{report}
\expandafter\def\csname mw@mu\endcsname{Norma}
\begin{document}
\lowercase{\csname mw@mu\endcsname}
\end{document}
我得到的是“Norma”,带有大写字母,这是我不想要的。我尝试在\noexpand
前面加上\lowercase
,并在周围\lowercase
加上\expandafter
s,但无济于事:大写字母始终在那里。我该如何解决这个问题?
答案1
命令\lowercase
不会\uppercase
扩展其内容;它们只是转换其参数中的字符标记并将标记列表放回到输入流中。
在您的代码中,可能发生大小写变化的是m
w
@
m
和u
;事实上,如果你尝试
\lowercase{\csname MW@MU\endcsname}
你会得到相同的结果
\lowercase{\csname mw@mu\endcsname}
为了使示例更简单:
\def\Norma{Norma}
\lowercase{\Norma}
将打印
诺玛
因为符号标记不受 的影响\lowercase
。如果你真的想把 的扩展小写,\Norma
你必须说
\lowercase\expandafter{\Norma}
但只有第一个标记会被扩展,后面的其他标记不会被扩展。对于给出的宏,\csname
您需要
\lowercase\expandafter\expandafter\expandafter{\csname mw@mu\endcsname}