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 \capitalisewords
funktioniert 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
\capitalisewords
erweitert 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 \textcolor
es auch erweitert würde.)
Wenn das Argument mit einer Steuersequenz beginnt, auf die keine Gruppe folgt, dann \capitalisewords
wird 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