パッケージ mfirstuc \capitalisewords が正しく動作しません

パッケージ mfirstuc \capitalisewords が正しく動作しません

私はクラスファイルでこれを宣言しました

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

\fullname{john doe}

クラスファイルのフルネームを取得しようとしています。は\MakeUperrcase{\@fullname}動作しますが、は\capitalisewords動作しません。試してみました

\capitalisewords\@fullname

そして

\capitalisewords{\@fullname}

しかし、出力は常に

ジョン・ドウ

の代わりに

ジョン・ドウ

をチェックすると\@fullname

ジョン・ドウ

答え1

\capitalisewords議論を展開していないので、David がコメントで示唆したように、まず議論を展開する必要があります。

\expandafter\capitalisewords\expandafter{\@fullname}

\xcapitalisewordsまたは、同じことを実行するショートカット コマンドを使用します。

\xcapitalisewords{\@fullname}

引数が自動的に展開されない理由は、最初の文字を大文字にするメカニズムによって、単一の引数を取るセマンティック マークアップが可能になるためです。例:

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

これは事実上

\strong{\MakeUppercase lorem} \MakeUppercase ipsum

セマンティックマークアップは大文字小文字の変更を妨げません。引数が展開された場合、このインスタンスは壊れて、次のようになります。

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

\textcolor(も拡張された場合、実際にはこれよりも複雑になります。)

引数がグループに続かない制御シーケンスで始まる場合、 は\capitalisewordsそれを文字または記号コマンド( など\aa)と見なします。

\capitalisewords{\aa lorem ipsum}

なる

\MakeUppercase \aa lorem \MakeUppercase ipsum

これがあなたの例で起こったことであり、その結果、

\MakeUppercase\@fullname

関連情報