Estoy intentando renovar \overline en \bar en un documento de Xelatex pero Xelatex no compila y no entiendo por qué aparece el error "\bar ya está definido".
Aquí está mi código Xelatex:
\documentclass{book}
\usepackage{polyglossia}
\setmainlanguage{french}
\renewcommand{\bar}{\overline}
\begin{document}
$\bar{ABCD}$\\
$\overline{ABCD}$
\end{document}
Pero cuando estoy en modo Latex normal, este código se compila perfectamente:
\documentclass{book}
\usepackage[francais]{babel}
\usepackage[T1]{fontenc}
\renewcommand{\bar}{\overline}
\begin{document}
$\bar{ABCD}$\\
$\overline{ABCD}$
\end{document}
He estado buscando un tema relacionado pero hasta ahora no he encontrado ninguna solución.
(La respuesta aquí:¿Problema con el comando de renovación?no funcionó para el bar)
Gracias por su ayuda.
Respuesta1
¡Bastante interesante!
Lo que sucede es que fontspec
(que se carga mediante polyglossia
) tiene que redefinir \bar
usando una fuente de símbolo matemático diferente a la del LaTeX estándar, por lo que llama (al comienzo del documento)
\DeclareMathAccent{\bar}{\mathalpha}{legacymaths}{22}
El funcionamiento de \DeclareMathAccent
es complejo, pero en esencia comprueba si su primer argumento (aquí \bar
) no está definido o está definido como un acento matemático; en este caso lo (re)define según lo solicitado. Si el comando ya está definido para que no sea un acento matemático, genera un error.
Como lo estás haciendo \renewcommand{\bar}{\overline}
, estamos en la segunda situación, porque \overline
no es un acento matemático (desde el punto de vista de TeX).
Solución:
\AtBeginDocument{\renewcommand{\bar}{\overline}}
que hará la redefinición posterior a la realizada por fontspec
. Esto también funcionará en LaTeX estándar.