包 mfirstuc \capitalisewords 無法正常運作

包 mfirstuc \capitalisewords 無法正常運作

我在類別文件中聲明了這一點

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

\fullname{john doe}

我正在嘗試獲取類文件的全名。有效\MakeUperrcase{\@fullname},但\capitalisewords無效。我努力了

\capitalisewords\@fullname

\capitalisewords{\@fullname}

但輸出總是

約翰·多伊

代替

約翰·多伊

當我檢查時\@fullname,它會列印

約翰·多伊

答案1

\capitalisewords沒有擴展它的論點,所以你需要先擴展論點,或者像大衛在評論中建議的那樣:

\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

相關內容