mathabx 包阻止 \not 在子部分标题内

mathabx 包阻止 \not 在子部分标题内

我正在写一篇文章,其中我希望其中一个小节的标题是 $n\not\equiv_41$。但是当我输入这个时,我得到了错误消息

Undefined control sequence.
\not #1->\let \@@not
                     =\not \let \@@n =\n \let \not =\relax \let \n =\relax \...

经过一番故障排除,我发现在子部分内使用 \not 与使用 mathabx 包之间存在一些冲突。

例如,我可以排版以下 3 项中的任何一项。

\documentclass{amsart} %not using mathabx
\begin{document}
\subsection{$n\not\equiv_41$}
\end{document}

\documentclass{amsart}
\usepackage{mathabx}
\begin{document}
$n\not\equiv_41$ %not putting this in a subsection title
\end{document}

\documentclass{amsart}
\usepackage{mathabx}
\begin{document}
\subsection{$n\equiv_41$} %erasing the \not
\end{document}

但我无法排版这个:

\documentclass{amsart}
\usepackage{mathabx}
\begin{document}
\subsection{$n\not\equiv_41$}
\end{document}

有没有其他方法可以删除小节标题中的 $\equiv$ 符号并继续使用 mathabx 包?还是我必须在我想要的标题和文章中使用 mathabx 的内容之间做出选择?

答案1

mathabx的版本很\not脆弱,因此应在移动参数(如章节标题和说明)中通过在其前面加上 来保护它\protect。所以

\section{$n\protect\not\equiv_41$}

然而,你可以在一开始就让它变得健壮:

\documentclass{amsart}

\usepackage{mathabx}

\MakeRobust{\not}

\begin{document}

$n\not\equiv_41$

\section{$n\not\equiv_41$}

\end{document}

为了完整性,以下是如何以更为稳健和有效的方式mathabx进行定义:\not

\makeatletter
\def\strip@bs{\expandafter\@gobble\string}
\DeclareRobustCommand\not[1]{%
  \@ifundefined{not\strip@bs#1}
    {%
     \@ifundefined{n\strip@bs#1}
       {\notsign#1}
       {\@nameuse{n\strip@bs#1}}%
    }
    {\@nameuse{not\strip@bs#1}}%
}
\makeatletter

答案2

我不知道为什么它不起作用,但使用预定义命令\notequiv或其别名更简单\nequiv

相关内容