Я пытаюсь обновить \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.