Comando de renovação Xelatex

Comando de renovação Xelatex

Estou tentando renovar \overline em \bar em um documento Xelatex, mas o Xelatex não compila e não entendo porque recebo o erro "\bar já está definido".

Aqui está meu código Xelatex:

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

\renewcommand{\bar}{\overline}

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

Mas quando estou no modo Latex normal, este código compila perfeitamente:

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

\renewcommand{\bar}{\overline}

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

Tenho pesquisado um tópico relacionado, mas até agora não encontrei nenhuma solução.

(A resposta aqui:Problema com comando de renovação?não funcionou para bar)

Obrigado pela ajuda.

Responder1

Muito interessante!

O que acontece é que fontspec(que é carregado por polyglossia) tem que redefinir \barusando uma fonte de símbolo matemático diferente do LaTeX padrão, então ele chama (no início do documento)

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

O funcionamento de \DeclareMathAccenté complexo, mas em essência verifica se seu primeiro argumento (aqui \bar) é indefinido ou definido como um acento matemático; neste caso (re)define-o conforme solicitado. Se o comando já estiver definido para não ter acento matemático, ocorrerá um erro.

Já que você está fazendo \renewcommand{\bar}{\overline}, estamos na segunda situação, pois \overlinenão é sotaque matemático (do ponto de vista do TeX).

Solução:

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

que fará a redefinição posteriormente àquela realizada por fontspec. Isso também funcionará no LaTeX padrão.

informação relacionada