如何在 LaTeX 中結合使用 \MakeUppercase 和 bm 套件 2022-11-01

如何在 LaTeX 中結合使用 \MakeUppercase 和 bm 套件 2022-11-01

我正在嘗試向 arXiv 提交 LaTeX 原始程式碼,但遇到了一些問題。我的專案位於背面,我使用 TeX Live 2021,所有內容都可以編譯,沒有任何錯誤或警告(除了過滿或未滿的框)。然而,當我嘗試在 arXiv 上處理原始檔時,導致\MakeUppercase編譯錯誤。

我能夠複製該錯誤本地bm使用以下程式碼片段,表明package 和 the 的組合\MakeUppercase是問題所在:

\documentclass{standalone}

\usepackage{amsmath}
\usepackage{bm}

\begin{document}
Test plain: $\bm{x}$.

%replacing \bm by \boldsymbol resolves the issue
Test upper: $\bm{\MakeUppercase{x}}$.
\end{document}

但是,我無法在背面複製此問題(嘗試了 TeX Live 2022 和 2023)。經過更多挖掘,我發現我的 TeX Live (2023) 發行版使用 LaTeX2e 2022-11-01,而背面則使用 2022-06-01。此外,arXiv 似乎正在使用 2022-11-01。

環顧四周,我發現發生了一些變化\MakeUppercase變化問題microtype包裹。此外,我發現這個Github問題關於希臘字母的問題。我不確定這些問題是否相關,但它們看起來確實相關。

這則評論Github 問題中的問題似乎表明修復程式碼比創建解決方法更好/更容易。但是,(據我所知)我無法更改 arXiv 伺服器上的 LaTeX 版本。因此,看來我畢竟需要某種解決方法。

我能想到的解決方案是\usepackage{bm}用類似的內容替換\let\bm\boldsymbol,但我不確定這是否會對排版產生任何不良影響。這是一個合理的解決方案,還是我應該考慮其他選項來將我的專案上傳到 arXiv?

更一般地說,我也有興趣了解為什麼\MakeUppercase最近會導致這麼多問題。例如,是否有已知存在問題的軟體包清單\MakeUppercase以及是否有更通用的解決方案?


更新:在版本 2022-11-01 補丁等級 1 上,\MakeUppercase也會失敗並\boldsymbol出現以下錯誤:

/home/hoedt/Downloads/tmp/test.tex:10: Undefined control sequence.
\MakeUppercase    [#1]#2->\let \kernel@saved@oe 
                                                \oe \let \oe \OE \@@text@cas...
l.10 Test upper: $\boldsymbol{\MakeUppercase{x}}
                                                $.
/home/hoedt/Downloads/tmp/test.tex:10: Undefined control sequence.
\MakeUppercase    ...#2}\let \oe \kernel@saved@oe 
                                                  
l.10 Test upper: $\boldsymbol{\MakeUppercase{x}}
                                                $.
/home/hoedt/Downloads/tmp/test.tex:10: Extra }, or forgotten $.
\bm@command ...\space \@spaces \@spaces \@spaces }
                                                  {LaTeX Warning: Command \p...
l.10 Test upper: $\boldsymbol{\MakeUppercase{x}}
                                                $.

答案1

已更新大小寫變更的工作方式以支援 UTF-8 和babel/ polyglossia。這是一個迭代過程,因為它不可能在一個地方一步完成。 up-to-date 支援的最新版本的 LaTeX (2023-11-01)expl3使用了一種改進的方法,不需要\kernel@saved@oe:而是保留了內部的「傳統」分組\MakeUppercase。因此,這裡最好的建議是更新到目前的 LaTeX 或使用該latexrelease機制修補舊核心以達到相同的效果。

答案2

egreg 提供了一個非常好的解決方法回答我的另一個問題。

可以\ToUppercase使用 LaTeX3 編碼語言定義新指令:

\ExplSyntaxOn
\cs_new_eq:NN \ToUppercase \text_uppercase:n
\ExplSyntaxOff

\boldsymbol該命令與or一起使用時不會引起問題\bm,並且允許我編譯我的文檔。我不確定是否存在(細微的)差異\MakeUppercase,但它似乎適合我的用例。

相關內容