答案1
要回答你的问题,即是否ntheorem
明显优于amsthm
(或相反),答案是否定的,因为两者都有优点和缺点。
从功能上讲,ntheorem
显然领先于amsthm
,但amsthm
设计更为稳健,因此错误更少(当然,取决于您如何使用该ntheorem
包,您可能永远不会遇到这些错误,但最好还是注意它们)。
ntheorem 与 amsthm 特点比较
下表是根据法语常见问题解答关于定理的条目并显示了每个包的功能列表,清楚地表明ntheorem
可以做比更多的事情amsthm
。
ntheorem 错误示例
这里列出了 ntheorem 中可能出现的几个错误,在决定是否使用ntheorem
或 之前,您应该注意这些amsthm
错误。所有这些错误都是 特有的ntheorem
,不会出现在 中amsthm
。
打破风格与高材质的碰撞
当使用中断样式时,如果在定理的开始处放置某些内容太高,它将与定理标题重叠:
\documentclass{article}
\usepackage{ntheorem}
\theoremstyle{break}
\newtheorem{theorem}{Theorem}
\begin{document}
\begin{theorem}
$\displaystyle \sum_{n=1}^{+\infty}{\frac{1}{n^2}} = \frac{\pi^2}{6}$
\end{theorem}
\end{document}
定理注释中的脚注
虽然将脚注放在定理可选参数中可能不是一个很好的做法,但有时可能会需要它,但却不起作用ntheorem
(脚注文本将丢失;您必须使用 \footnotemark/\footnotetext 技巧):
\begin{theorem}[Fermat's little theorem\footnote{First stated in a letter dated October 18, 1640.}]
...
\end{theorem}
长定理注释
如果定理的可选参数太长(因为文档是双列模式,或者因为注释确实很长),它将超出边距。以下是双列模式下的示例:
\documentclass[twocolumn]{article}
\usepackage{lipsum}
\usepackage{ntheorem}
\newtheorem{theorem}{Theorem}
\begin{document}
\lipsum[1]
\begin{theorem}[A very very very very long optional argument]
\lipsum[2]
\end{theorem}
\lipsum[3-5]
\end{document}
amsthm 错误示例
虽然错误较少,但amsthm
并非完全没有错误。这是“定理可选参数太长”ntheorem
错误的变体,但只有amsthm
当列表紧跟在定理头之后时才会发生:
\documentclass[twocolumn]{article}
\usepackage{lipsum}
\usepackage{amsthm}
\newtheorem{theorem}{Theorem}
\begin{document}
\lipsum[1]
\begin{theorem}[A very very very very long optional argument]
\begin{enumerate}
\item Bla bla bla.
\item Bla bla bla.
\item Bla bla bla.
\end{enumerate}
\end{theorem}
\lipsum[3-6]
\end{document}
答案2
ntheorem
干扰,但如果您指定为选项,amsthm
它会提供一些兼容性。amsthm
ntheorem
ntheorem
在处理诸如框或符号之类的结束标记时效果更好\qed
,尤其是当环境以显示的公式结尾并且结束标记应放在一行中时。
thmtools
可以另外使用,它应该与其他定理包一起工作。
总结一下,使用thmtools
和ntheorem
可能是最好的选择,特别是当你需要结束标记的时候。虽然我更喜欢amsthm
,可能是因为我习惯了它的\newtheoremstyle
宏。
答案3
我喜欢和很多人ntheorem
在一起。有amsmath
是然而,据我所知,有些问题从未得到解决。我经常遇到的一个例子是,我已经学会了如何解决它:如果你(像我一样)喜欢将方程式数字放在左边(即使用leqno
),那么你必须将环境的内容equation
放在一个分割中,如下所示:
\begin{equation}
\begin{split} %% ntheorem kludge
2 + 3 = 5
\end{split}
\end{equation}
如果等式是证明的最后一行,你也必须做同样的事情。但除了一些类似的烦恼之外,我认为ntheorem
效果很好。