以下 MCE 指出了ntheorem
和fleqn
选项thmmarks
中断\if@display
:例如,一旦thmmarks
取消注释,第一个“等式”包含“非显示数学”。
你知道发生了什么吗?
\documentclass[fleqn]{article}
\usepackage{amsmath}
\usepackage[
amsmath,
fleqn,
% thmmarks
]{ntheorem}
%
\makeatletter
\newcommand\testdisplaymath{%
\if@display
\text{Display math}
\else
\text{Non-display math}
\fi
}
\makeatother
%
\begin{document}
\[
\testdisplaymath
\]
$\testdisplaymath$
\end{document}
编辑
无论如何,我发现区分显示和非显示数学的更好方法是依靠\mathchoice
和,如下面的 MWE 所示,这个宏(与不同\if@display
)不会被ntheorem
和选项fleqn
破坏thmmarks
:
\documentclass[fleqn]{article}
\usepackage{amsmath}
\usepackage[
amsmath,
fleqn,
thmmarks
]{ntheorem}
%
\makeatletter
\newcommand\testdisplaymath{%
\mathchoice{%
\text{Display math}%
}{%
\text{Non-display math}%
}{%
\text{Non-display math}%
}{%
\text{Non-display math}%
}
}
\makeatother
%
\begin{document}
\[
\testdisplaymath
\]
$\testdisplaymath$
\end{document}
答案1
当你加载选项时thmmarks
,ntheorem
\gdef\[{%
<code adding to the corresponding in the LaTeX kernel>
}
\gdef\]{%
<code adding to the corresponding in the LaTeX kernel>
}
但amsmath
有一个
\DeclareRobustCommand{\[}{\begin{equation*}}
\DeclareRobustCommand{\]}{\end{equation*}}
由于 LaTeX 内核代码没有提供,因此您无法使用和\if@display
获得支持,除非您重新进行后面的声明。但是,另请参阅\[
\]
https://tex.stackexchange.com/a/329209/4427
个人评论:该thmmarks
选项进行了许多更改是为了在需要时做一些简单的事情,并且可以通过不以显示或枚举列表(当然是用和不是)\qedhere
结束证明来避免其使用。amsthm
ntheorem
答案2
这是 amsmath 兼容性的另一个问题。amsmath 兼容性从一开始就是一个问题。在开发早期阶段(当时由 Frank Mittelbach 建议)发给 amsmath 人员的邮件根本没有得到回复。
个人建议不要使用 amsmath,因为 amsmath 的版本兼容性体验不好。
Wolfgang(仍是 ntheorem 的部分活跃开发者)