
私が書いた場合:
\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
が、効果はありませんでした。常に大文字が表示されています。これを修正するにはどうすればよいでしょうか?
答え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}