Paket mfirstuc \capitalisewords funktioniert nicht richtig

Paket mfirstuc \capitalisewords funktioniert nicht richtig

Ich habe dies in der Klassendatei deklariert

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

Mit\fullname{john doe}

Ich versuche, den vollständigen Namen der Klassendatei zu erhalten. Das \MakeUperrcase{\@fullname}funktioniert, aber das \capitalisewordsfunktioniert nicht. Ich habe versucht

\capitalisewords\@fullname

Und

\capitalisewords{\@fullname}

Aber die Ausgabe ist immer

JOHN DOE

anstatt

John Doe

Als ich das überprüfte \@fullname, druckte es

John Doe

Antwort1

\capitalisewordserweitert sein Argument nicht, also müssen Sie das Argument zuerst erweitern, entweder wie David in den Kommentaren vorgeschlagen hat:

\expandafter\capitalisewords\expandafter{\@fullname}

oder verwenden Sie den Kurzbefehl \xcapitalisewords, der dasselbe bewirkt:

\xcapitalisewords{\@fullname}

Der Grund, warum das Argument nicht automatisch erweitert wird, liegt darin, dass der Mechanismus zur Großschreibung des ersten Buchstabens eine semantische Auszeichnung ermöglicht, die ein einzelnes Argument akzeptiert. Beispiel:

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

Dies wird effektiv

\strong{\MakeUppercase lorem} \MakeUppercase ipsum

so dass die semantische Auszeichnung nicht mit der Änderung der Groß- und Kleinschreibung kollidiert. Wenn das Argument erweitert würde, würde diese Instanz abbrechen, da Sie am Ende Folgendes erhalten würden:

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

(Es wäre tatsächlich noch komplizierter, wenn \textcolores auch erweitert würde.)

Wenn das Argument mit einer Steuersequenz beginnt, auf die keine Gruppe folgt, dann \capitalisewordswird angenommen, dass es sich um einen Zeichen- oder Symbolbefehl handelt (wie \aa), also

\capitalisewords{\aa lorem ipsum}

wird

\MakeUppercase \aa lorem \MakeUppercase ipsum

Dies ist, was in Ihrem Beispiel passiert ist, weshalb Sie am Ende haben

\MakeUppercase\@fullname

verwandte Informationen