给出“漂亮” 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]{

在此处输入图片描述

相关内容