So verwenden Sie \MakeUppercase in Kombination mit dem bm-Paket in LaTeX 2022-11-01

So verwenden Sie \MakeUppercase in Kombination mit dem bm-Paket in LaTeX 2022-11-01

Ich versuche, LaTeX-Quellen an arXiv zu senden, und bin dabei auf einige Probleme gestoßen. Mein Projekt befindet sich in Overleaf, wo ich TeX Live 2021 verwende, und alles wird ohne Fehler oder Warnungen kompiliert (außer bei über- oder untervollen Boxen). Als ich jedoch versuchte, die Quelldateien auf arXiv zu verarbeiten, trat \MakeUppercaseein Kompilierungsfehler auf.

Ich konnte den Fehler reproduzierenörtlichmithilfe des folgenden Snippets, das darauf schließen lässt, dass die Kombination aus bmPaket und \MakeUppercasedas Problem ist:

\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}

Ich konnte dieses Problem jedoch nicht in Overleaf reproduzieren (ich habe sowohl TeX Live 2022 als auch 2023 ausprobiert). Nach etwas mehr Recherche fand ich heraus, dass meine TeX Live (2023)-Distribution LaTeX2e 2022-11-01 verwendet, während Overleaf 2022-06-01 verwendet. Außerdem scheint arXiv 2022-11-01 zu verwenden.

Als ich mich umsah, bemerkte ich, dass es einige Änderungen gegeben hat, \MakeUppercasedie dazu führten,Problememit dem microtypePaket. Außerdem fand ich diesGithub-Problemzu Problemen mit dem griechischen Alphabet. Ich bin nicht sicher, ob diese Probleme zusammenhängen, aber sie scheinen definitiv relevant zu sein.

Dieser Kommentarim Github-Problem scheint darauf hinzudeuten, dass es besser/einfacher ist, den Code zu reparieren, als einen Workaround zu erstellen. Allerdings kann ich (soweit ich weiß) die LaTeX-Version auf den arXiv-Servern nicht ändern. Daher scheint es, als ob ich doch eine Art Workaround brauche.

Eine Lösung, die mir einfällt, wäre, \usepackage{bm}durch etwas wie zu ersetzen \let\bm\boldsymbol, aber ich bin mir nicht sicher, ob dies unerwünschte Auswirkungen auf den Satz hätte. Ist das eine vernünftige Lösung oder gibt es andere Optionen, die ich in Betracht ziehen sollte, um mein Projekt auf arXiv hochzuladen?

Ganz allgemein würde mich auch interessieren, warum \MakeUppercasees in letzter Zeit so viele Probleme gibt. Gibt es beispielsweise eine Liste der Pakete, bei denen bekannt ist, dass sie Probleme haben, \MakeUppercaseund gibt es eine allgemeinere Lösung?


aktualisieren: Auf Version 2022-11-01, Patchlevel 1, \MakeUppercaseschlägt auch mit \boldsymbolden folgenden Fehlern fehl:

/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}}
                                                $.

Antwort1

Die Funktionsweise der Groß-/Kleinschreibung wurde aktualisiert, um UTF-8 und babel/ zu unterstützen polyglossia. Dies war ein iterativer Prozess, da er nicht an einer Stelle in einem Schritt durchgeführt werden konnte. Die neueste Version von LaTeX (2023-11-01), die von up-to-date unterstützt wird, expl3verwendet einen verbesserten Ansatz, der kein \kernel@saved@oe: erfordert, sondern die „traditionelle“ Gruppierung innerhalb beibehält \MakeUppercase. Daher ist der beste Ratschlag hier, auf das aktuelle LaTeX zu aktualisieren oder den latexreleaseMechanismus zum Patchen eines älteren Kernels zu verwenden, um denselben Effekt zu erzielen.

Antwort2

Ein ziemlich guter Workaround wurde von egreg in einemAntwortauf eine andere Frage von mir.

\ToUppercaseEs ist möglich , mit der Programmiersprache LaTeX3 einen neuen Befehl zu definieren :

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

Dieser Befehl verursacht keine Probleme, wenn er mit \boldsymboloder verwendet wird \bm, und ermöglicht mir das Kompilieren meiner Dokumente. Ich bin nicht sicher, ob es (subtile) Unterschiede zu gibt \MakeUppercase, aber für meinen Anwendungsfall scheint es gut genug zu funktionieren.

verwandte Informationen