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 \bar
usando 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 \overline
nã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.