![如何在 LaTeX 中将 \MakeUppercase 与 bm 包结合使用 2022-11-01](https://linux22.com/image/472162/%E5%A6%82%E4%BD%95%E5%9C%A8%20LaTeX%20%E4%B8%AD%E5%B0%86%20%5CMakeUppercase%20%E4%B8%8E%20bm%20%E5%8C%85%E7%BB%93%E5%90%88%E4%BD%BF%E7%94%A8%202022-11-01.png)
我正在尝试将 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
,但它似乎对我的用例来说已经足够好了。