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}

我一直在搜尋相關主題,但到目前為止,我還沒有找到任何解決方案。

(答案在這裡:更新指令有問題嗎?不適用於酒吧)

感謝您的幫助。

答案1

很有趣!

發生的情況是fontspec(由 載入polyglossia)必須\bar使用與標準 LaTeX 中不同的數學符號字體重新定義,因此它調用(在開始文件中)

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

的工作\DeclareMathAccent很複雜,但本質上它檢查其第一個參數(此處\bar)是否未定義或定義為數學重音;在這種情況下,它會根據要求(重新)定義它。如果該指令已定義為不是數學重音,則會引發錯誤。

由於您正在執行\renewcommand{\bar}{\overline},我們處於第二種情況,因為\overline不是數學口音(從 TeX 的角度來看)。

解決方案:

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

這將晚於 執行的重新定義fontspec。這也適用於標準 LaTeX。

相關內容