Xelatex-Erneuerungsbefehl

Xelatex-Erneuerungsbefehl

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 \DeclareMathAccentist 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.

verwandte Informationen