我正在嘗試向 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
,但它似乎適合我的用例。