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 \capitalisewords
no. 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
\capitalisewords
no 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 \xcapitalisewords
que 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 \textcolor
también se ampliara).
Si el argumento comienza con una secuencia de control que no es seguida por un grupo, entonces \capitalisewords
asume 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