Использование \строчных букв

Использование \строчных букв

Если я напишу:

\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, и окружать \lowercases \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}

Связанный контент