我正在处理一个amsbook
文档,我想使用包。这毫不奇怪地导致对 documentclass 隐式加载的包ntheorem
的投诉。amsthm
amsbook
amsthm
和之间没有明显更好的选择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}