El paquete mfirstuc \capitalisewords no funciona correctamente

El paquete mfirstuc \capitalisewords no funciona correctamente

Declaré esto en el archivo de clase

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

Con\fullname{john doe}

Estoy intentando obtener el nombre completo en el archivo de clase. Funciona \MakeUperrcase{\@fullname}, pero \capitalisewordsno. Yo he tratado

\capitalisewords\@fullname

y

\capitalisewords{\@fullname}

Pero la salida es siempre

JUAN DOE

en lugar de

Juan Pérez

Cuando revisé \@fullname, se imprime.

juan doe

Respuesta1

\capitalisewordsno amplía su argumento, por lo que primero debe ampliar el argumento, ya sea como sugirió David en los comentarios:

\expandafter\capitalisewords\expandafter{\@fullname}

o use el comando de acceso directo \xcapitalisewordsque hace lo mismo:

\xcapitalisewords{\@fullname}

La razón por la cual el argumento no se expande automáticamente es porque el mecanismo de mayúsculas de la primera letra permite un marcado semántico que toma un solo argumento. Por ejemplo:

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

Esto se vuelve efectivamente

\strong{\MakeUppercase lorem} \MakeUppercase ipsum

por lo que el marcado semántico no interfiere con el cambio de mayúsculas y minúsculas. Si el argumento se expandiera, esta instancia se rompería ya que terminaría con

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

(En realidad, sería más complicado que esto si \textcolortambién se ampliara).

Si el argumento comienza con una secuencia de control que no es seguida por un grupo, entonces \capitalisewordsasume que es un comando de carácter o símbolo (como \aa), entonces

\capitalisewords{\aa lorem ipsum}

se convierte

\MakeUppercase \aa lorem \MakeUppercase ipsum

Esto es lo que sucedió en tu ejemplo, por lo que terminas con

\MakeUppercase\@fullname

información relacionada