我正在嘗試將 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。