O pacote mfirstuc \capitalisewords não funciona corretamente

O pacote mfirstuc \capitalisewords não funciona corretamente

Eu declarei isso no arquivo de classe

\newcommand{\fullname}[1]{\gdef\@fullname{#1}}

Com\fullname{john doe}

Estou tentando obter o nome completo no arquivo de classe. As \MakeUperrcase{\@fullname}obras, mas as \capitalisewordsnão. eu tentei

\capitalisewords\@fullname

e

\capitalisewords{\@fullname}

Mas a saída é sempre

JOÃO DOE

em vez de

John Doe

Quando eu verifiquei o \@fullname, ele imprime

Joãozinho

Responder1

\capitalisewordsnão expande seu argumento, então você precisa expandi-lo primeiro, como David sugeriu nos comentários:

\expandafter\capitalisewords\expandafter{\@fullname}

ou use o comando de atalho \xcapitalisewordsque faz a mesma coisa:

\xcapitalisewords{\@fullname}

A razão pela qual o argumento não é expandido automaticamente é porque o mecanismo de colocação da primeira letra em maiúscula permite a marcação semântica que utiliza um único argumento. Por exemplo:

\newcommand*{\strong}[1]{\textcolor{red}{\textbf{#1}}}
\capitalisewords{\strong{lorem} ipsum}

Isto se torna efetivamente

\strong{\MakeUppercase lorem} \MakeUppercase ipsum

portanto, a marcação semântica não interfere na mudança de caso. Se o argumento fosse expandido, esta instância seria interrompida e você acabaria com

\textcolor{\MakeUppercase red}{\textbf{lorem}} \MakeUppercase ipsum

(Na verdade, seria mais complicado do que isso se \textcolortambém fosse expandido.)

Se o argumento começar com uma sequência de controle que não é seguida por um grupo, então \capitalisewordsassume que é um comando de caractere ou símbolo (como \aa), então

\capitalisewords{\aa lorem ipsum}

torna-se

\MakeUppercase \aa lorem \MakeUppercase ipsum

Isto é o que aconteceu no seu exemplo, e é por isso que você acaba com

\MakeUppercase\@fullname

informação relacionada