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 \MakeUppercase
ein Kompilierungsfehler auf.
Ich konnte den Fehler reproduzierenörtlichmithilfe des folgenden Snippets, das darauf schließen lässt, dass die Kombination aus bm
Paket und \MakeUppercase
das 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, \MakeUppercase
die dazu führten,Problememit dem microtype
Paket. 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 \MakeUppercase
es in letzter Zeit so viele Probleme gibt. Gibt es beispielsweise eine Liste der Pakete, bei denen bekannt ist, dass sie Probleme haben, \MakeUppercase
und gibt es eine allgemeinere Lösung?
aktualisieren: Auf Version 2022-11-01, Patchlevel 1, \MakeUppercase
schlägt auch mit \boldsymbol
den 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, expl3
verwendet 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 latexrelease
Mechanismus 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.
\ToUppercase
Es 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 \boldsymbol
oder 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.