「適切な」XBAR を提供するコードは正常に動作しますが、セクションの見出しの場合は失敗します。

「適切な」XBAR を提供するコードは正常に動作しますが、セクションの見出しの場合は失敗します。

私はより良い xbar を探していたのですが、約 11 年前の答えをここで見つけました。

mathabx パッケージを使用せずに \widebar を取得できますか?

短縮されたコードを使用しましたが、問題なく動作します。ただし、セクションの見出しに配置すると、コンパイラ エラーが発生します。私が使用しているコードは次のとおりです。

\documentclass{amsbook}
\usepackage{amsmath}
\usepackage{mathtools}
\usepackage{amssymb}
%%%%%%%%%%%% Code to make a nicer xbar %%%%%%
\makeatletter
\newcommand*\rel@kern[1]{\kern#1\dimexpr\macc@kerna}
\newcommand*\Xbar[1]{%
  \begingroup
  \def\mathaccent##1##2{%
    \rel@kern{0.8}%
    \overline{\rel@kern{-0.8}\macc@nucleus\rel@kern{0.2}}%
    \rel@kern{-0.2}%
  }%
  \macc@depth\@ne
  \let\math@bgroup\@empty \let\math@egroup\macc@set@skewchar
  \mathsurround\z@ \frozen@everymath{\mathgroup\macc@group\relax}%
  \macc@set@skewchar\relax
  \let\mathaccentV\macc@nested@a
  \macc@nested@a\relax111{#1}%
  \endgroup
}
\makeatother
%%%%%%%%%%%%%%% End of Code %%%%%%%%%%%%%%%%

\begin{document}
$\Xbar{X}$
\section{All about $\Xbar{X}$}
\end{document}

最初のインスタンスは問題ありませんが、\section 内のインスタンスは失敗します。これは私のスキル レベルをはるかに超えています。\makeatletter と \makeatother の間のコードが何を行うのかまったくわからないので、デバッグについて考えることすらできません。この質問にどのようなタグを使用すればよいのかさえわかりません。

答え1

のように の\protect前に追加します。\Xbar{X}\section{All about $\protect\Xbar{X}$}

または\NewDocumentCommand{\Xbar}{m}{の代わりにを使用します\newcommand*\Xbar[1]{

ここに画像の説明を入力してください

関連情報