Ich versuche, in einem Xelatex-Dokument \overline in \bar zu erneuern, aber Xelatex wird nicht kompiliert und ich verstehe nicht, warum ich die Fehlermeldung „\bar ist bereits definiert“ erhalte.
Hier ist mein Xelatex-Code:
\documentclass{book}
\usepackage{polyglossia}
\setmainlanguage{french}
\renewcommand{\bar}{\overline}
\begin{document}
$\bar{ABCD}$\\
$\overline{ABCD}$
\end{document}
Aber wenn ich mich im normalen Latex-Modus befinde, wird dieser Code perfekt kompiliert:
\documentclass{book}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\renewcommand{\bar}{\overline}
\begin{document}
$\bar{ABCD}$\\
$\overline{ABCD}$
\end{document}
Ich habe nach einem verwandten Thema gesucht, aber bisher keine Lösung gefunden.
( Die Antwort hier:Problem mit dem Erneuerungsbefehl?hat nicht für Bar funktioniert)
Ich danke Ihnen für Ihre Hilfe.
Antwort1
Ziemlich interessant!
Was passiert, ist, dass fontspec
(das von geladen wird polyglossia
) mit einer anderen Schriftart für mathematische Symbole als in Standard-LaTeX neu definiert werden muss \bar
, sodass es (am Anfang des Dokuments) aufruft.
\DeclareMathAccent{\bar}{\mathalpha}{legacymaths}{22}
Die Funktionsweise von \DeclareMathAccent
ist komplex, aber im Wesentlichen prüft es, ob sein erstes Argument (hier \bar
) entweder undefiniert oder als mathematischer Akzent definiert ist; in diesem Fall definiert es es wie gewünscht (neu). Wenn der Befehl bereits als kein mathematischer Akzent definiert ist, wird ein Fehler ausgelöst.
Da Sie dies tun \renewcommand{\bar}{\overline}
, befinden wir uns in der zweiten Situation, da dies \overline
(aus Sicht von TeX) kein mathematischer Akzent ist.
Lösung:
\AtBeginDocument{\renewcommand{\bar}{\overline}}
Dadurch wird die Neudefinition später durchgeführt als die von fontspec
. Dies funktioniert auch in Standard-LaTeX.