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}
関連するトピックを検索してきましたが、これまでのところ解決策は見つかりませんでした。
(答えはこちら:renewcommand に問題がありますか?バーでは機能しませんでした)
助けてくれてありがとう。
答え1
かなり面白いですね!
fontspec
(によってロードされる)は、標準のLaTeXとは異なる数学記号フォントを使用してpolyglossia
再定義する必要があるため、(ドキュメントの先頭で)を呼び出すことになります。\bar
\DeclareMathAccent{\bar}{\mathalpha}{legacymaths}{22}
の動作は\DeclareMathAccent
複雑ですが、本質的には最初の引数 (ここでは\bar
) が未定義か、数学アクセントとして定義されているかをチェックします。この場合、要求どおりに (再) 定義します。コマンドがすでに数学アクセントとして定義されていない場合は、エラーが発生します。
を実行しているので\renewcommand{\bar}{\overline}
、 は数学アクセントではないため、2 番目の状況になります\overline
(TeX の観点から)。
解決:
\AtBeginDocument{\renewcommand{\bar}{\overline}}
によって実行される再定義よりも後で再定義が行われますfontspec
。これは標準の LaTeX でも機能します。