Xelatex 更新命令

Xelatex 更新命令

我试图在 Xelatex 文档中将 \overline 更新为 \bar,但 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}

我一直在搜索相关主题,但到目前为止,我还没有找到任何解决方案。

(答案在这里:renew 命令有问题?不适用于酒吧)

感谢您的帮助。

答案1

很有趣!

所发生的情况是fontspec(由 加载polyglossia)必须\bar使用与标准 LaTeX 不同的数学符号字体​​重新定义,因此它调用(在开始文档时)

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

的工作\DeclareMathAccent原理很复杂,但本质上它会检查其第一个参数(此处\bar)是否未定义或定义为数学重音符号;在这种情况下,它会根据要求(重新)定义它。如果命令已被定义为非数学重音符号,则会引发错误。

由于您正在执行\renewcommand{\bar}{\overline},我们处于第二种情况,因为\overline不是数学重音(从 TeX 的角度来看)。

解决方案:

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

它将比 执行的重新定义更晚执行fontspec。这也适用于标准 LaTeX。

相关内容