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}

関連するトピックを検索してきましたが、これまでのところ解決策は見つかりませんでした。

(答えはこちら: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 でも機能します。

関連情報