
Se eu escrever:
\documentclass[a4paper]{report}
\begin{document}
\lowercase{Norma}
\end{document}
Recebo "norma" na saída, em letras minúsculas como desejo. No entanto, se eu escrever:
\documentclass[a4paper]{report}
\expandafter\def\csname mw@mu\endcsname{Norma}
\begin{document}
\lowercase{\csname mw@mu\endcsname}
\end{document}
Recebo "Norma", com letra maiúscula, o que não quero. Tentei colocar \noexpand
antes \lowercase
e cercar \lowercase
com \expandafter
s, mas sem sucesso: a letra maiúscula está sempre lá. Como faço para corrigir isso?
Responder1
Os comandos \lowercase
e \uppercase
não expandem seu conteúdo; eles apenas convertem tokens de caracteres em seus argumentos e colocam de volta a lista de tokens no fluxo de entrada.
No seu código, o que está sujeito a possíveis alterações de caso é m
w
@
m
and u
; na verdade, se você tentar
\lowercase{\csname MW@MU\endcsname}
você obterá o mesmo resultado que
\lowercase{\csname mw@mu\endcsname}
Apenas para tornar o exemplo mais simples:
\def\Norma{Norma}
\lowercase{\Norma}
irá imprimir
norma
porque os tokens simbólicos não são tocados por \lowercase
. Se você realmente deseja diminuir a expansão de \Norma
você tem que dizer
\lowercase\expandafter{\Norma}
mas apenas o primeiro token será expandido, e não os outros tokens que o seguem. Para a macro fornecida com \csname
você precisa
\lowercase\expandafter\expandafter\expandafter{\csname mw@mu\endcsname}