Xelatex renewcommand

Xelatex renewcommand

Я пытаюсь обновить \overline в \bar в документе Xelatex, но Xelatex не компилируется, и я не понимаю, почему возникает ошибка «\bar уже определен».

Вот мой код Xelatex:

\documentclass{book}
\usepackage{polyglossia}
\setmainlanguage{french}

\renewcommand{\bar}{\overline}

\begin{document}
$\bar{ABCD}$\\
$\overline{ABCD}$
\end{document}

Но когда я работаю в обычном режиме Latex, этот код компилируется отлично:

\documentclass{book}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}

\renewcommand{\bar}{\overline}

\begin{document}
$\bar{ABCD}$\\
$\overline{ABCD}$
\end{document}

Я искал похожую тему, но пока не нашел решения.

(Ответ здесь:Проблема с renewcommand?не сработало для бара)

Спасибо за помощь.

решение1

Довольно интересно!

Происходит следующее: fontspec(который загружается polyglossia) приходится переопределять, \barиспользуя другой шрифт математических символов, чем в стандартном LaTeX, поэтому он вызывает (в начале документа)

\DeclareMathAccent{\bar}{\mathalpha}{legacymaths}{22}

Работает \DeclareMathAccentсложно, но по сути он проверяет, \barявляется ли его первый аргумент (здесь ) либо неопределенным, либо определен как математический акцент; в этом случае он (пере)определяет его по запросу. Если команда уже определена как не математический акцент, она выдает ошибку.

Поскольку вы делаете \renewcommand{\bar}{\overline}, мы находимся во второй ситуации, поскольку \overlineэто не математический акцент (с точки зрения TeX).

Решение:

\AtBeginDocument{\renewcommand{\bar}{\overline}}

который выполнит переопределение позже, чем то, которое выполнил fontspec. Это также будет работать в стандартном LaTeX.

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