如何在 LaTeX 中将 \MakeUppercase 与 bm 包结合使用 2022-11-01

如何在 LaTeX 中将 \MakeUppercase 与 bm 包结合使用 2022-11-01

我正在尝试将 LaTeX 源提交给 arXiv,但遇到了一些问题。我的项目位于 overleaf 中,我使用的是 TeX Live 2021,所有内容都可以编译,没有任何错误或警告(除了框过满或未满的情况)。但是,当我尝试在 arXiv 上处理源文件时,会\MakeUppercase导致编译错误。

我能够复制这个错误本地bm使用以下代码片段,表明包和的组合\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}

但是,我无法在 overleaf 中复制此问题(尝试了 TeX Live 2022 和 2023)。经过进一步挖掘,我发现我的 TeX Live (2023) 发行版使用 LaTeX2e 2022-11-01,而 overleaf 使用 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。这是一个迭代过程,因为无法在一个地方一步完成。最新版支持的 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此命令与或 一起使用时不会引起问题,\bm并允许我编译我的文档。我不确定 是否存在(细微的)差异\MakeUppercase,但它似乎对我的用例来说已经足够好了。

相关内容