ntheorem 的 fleqn 和 thmmarks 选项破坏 \if@display

ntheorem 的 fleqn 和 thmmarks 选项破坏 \if@display

以下 MCE 指出了ntheoremfleqn选项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

当你加载选项时thmmarksntheorem

\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结束证明来避免其使用。amsthmntheorem

答案2

这是 amsmath 兼容性的另一个问题。amsmath 兼容性从一开始就是一个问题。在开发早期阶段(当时由 Frank Mittelbach 建议)发给 amsmath 人员的邮件根本没有得到回复。

个人建议不要使用 amsmath,因为 amsmath 的版本兼容性体验不好。

Wolfgang(仍是 ntheorem 的部分活跃开发者)

相关内容