将 ntheorem 与 amsbook 结合使用

将 ntheorem 与 amsbook 结合使用

我正在处理一个amsbook文档,我想使用包。这毫不奇怪地导致对 documentclass 隐式加载的包ntheorem的投诉。amsthmamsbookamsthm和之间没有明显更好的选择ntheorem,每个都有其优点和缺点。因此,最好的选择似乎是使用

\usepackage[amsthm]{ntheorem}

近似值为两全其美的(第 3.2.2 节)。但这只有在您可以删除amsthm包的情况下才有效。如何使用amsbook文档类实现此结果?

下面的代码交替展示了最小工作示例和损坏的示例:

\documentclass{article}%{amsbook}
\usepackage[amsthm]{ntheorem}

\begin{document}
Test
\end{document}

这里隐含地给出的一个答案是,它们就是不融合但我希望相信这是可以做到的。

编辑:@david-carlisle 和 @barbara-beeton纠正我的误解;显然它不是amsthm包含在中的包amsbook,而是amsbook类包含与类中提供的代码等效的代码amsthm

答案1

通常,阻止包加载并不太难(如果有必要,可以滥用 latex 用来防止包被加载两次的机制)。但是,amsbook不加载amsthml它在 的主体内联了定理机制的定义amsbook.cls。该amsthm.sty包是代码子集的提取,amsbook用于非 AMS 类。

因此,从不同的类开始并添加所需的任何 AMS 功能会比从amsbook定理处理开始并删除定理处理更简单。

答案2

我不同意那ntheorem比更好amsthm

然而,一种尚未经过彻底测试的删除方法amsthm如下amsbook

\makeatletter
\let\latex@newtheorem\newtheorem
\let\latex@thm\@thm
\let\latex@xthm\@xthm
\let\latex@ythm\@ythm
\makeatother

\documentclass{amsbook}

\makeatletter
\let\newtheorem\latex@newtheorem
\let\@thm\latex@thm
\let\@xthm\latex@xthm
\let\@ythm\latex@ythm
\let\theoremstyle\relax
\let\th@plain\relax
\let\openbox\relax
\let\proofname\relax
\let\proof\relax
\let\endproof\relax
\makeatother

\usepackage[amsthm]{ntheorem}

\newtheorem{theorem}{Theorem}

\begin{document}

\begin{theorem}
Test
\end{theorem}

\end{document}

相关内容