Код для создания «красивой» xbar-панели работает нормально, но не работает, если находится в заголовке раздела

Код для создания «красивой» xbar-панели работает нормально, но не работает, если находится в заголовке раздела

Я искал лучший xbar и нашел ответ здесь, примерно 11-летней давности:

Можно ли получить \widebar без использования пакета mathabx?

Я использовал сокращенный код, и он отлично работает. Однако, когда я помещаю его в заголовок раздела, я получаю ошибку компиляции. Вот код, который я использую:

\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]{.

введите описание изображения здесь

Связанный контент