Как использовать \MakeUppercase в сочетании с пакетом bm в LaTeX 2022-11-01

Как использовать \MakeUppercase в сочетании с пакетом bm в LaTeX 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, похоже, предполагается, что лучше/проще исправить код, чем создавать обходной путь. Однако (насколько мне известно) я не могу изменить версию LaTeX на серверах arXiv. Поэтому, похоже, мне все-таки понадобится какой-то обходной путь.

Одно из решений, которое я мог бы придумать, это заменить \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), поддерживаемая up-to-date, expl3использует улучшенный подход, который не требует \kernel@saved@oe: вместо этого она сохраняет «традиционную» группировку внутри \MakeUppercase. Таким образом, лучший совет здесь — обновиться до текущей версии LaTeX или использовать механизм latexreleaseисправления старого ядра, чтобы добиться того же эффекта.

решение2

Довольно неплохой обходной путь был предоставлен egreg вотвечатьна другой мой вопрос.

Можно определить новую команду, \ToUppercaseиспользуя язык кодирования LaTeX3:

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

Эта команда не вызывает проблем при использовании с \boldsymbolили \bmи позволяет мне компилировать мои документы. Я не уверен, есть ли (тонкие) различия с \MakeUppercase, но, похоже, она работает достаточно хорошо для моего варианта использования.

Связанный контент