Mando de renovación de Xelatex

Mando de renovación de Xelatex

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 \barusando 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 \DeclareMathAccentes 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 \overlineno 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.

información relacionada