ntheorem 字幕产生的过满 \hbox

ntheorem 字幕产生的过满 \hbox

我从使用标准 AMS 定理包切换到ntheorem这样我就可以在定理环境中放置替代的结束标记(我希望我的示例有一个结束标记,但与证明的结束标记不同)。然而,这似乎导致了另一个问题。

我的许多示例都有副标题,我的意思是我以 开始它们
\begin{example}[subtitle],其中副标题是示例的一些描述。其中一些副标题很长,需要多行,这在标准 AMS 环境中可以正常工作。另一方面,ntheorem 似乎试图将副标题全部放在一行上,\hbox当它足够长以至于需要跨越多行时,就会给出一个 overfull(我不是说比它知道如何处理的字符更宽一两个字符,就像通常的 overfull 一样\hbox,我的意思是它们会穿过整个边距并超出页面)。

这可以通过以下方式复制

\documentclass[12pt]{article}  
\usepackage{amsmath}
\usepackage[thmmarks,amsmath,amsthm,thref]{ntheorem}
\newtheorem{example}{Example}
\begin{document}
\begin{example}[blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah]
Content
\end{example}
\end{document}

这是错误ntheorem还是我做错了?也许这是对字幕字段的滥用。有简单的解决方法吗?

答案1

不;这不是一个错误,尽管它可能被认为是一个糟糕的设计选择;ntheorem使用可选参数来\item排版定理标题(名称、编号和注释),这会导致问题(我猜包作者认为注释不应该太长)。您可以定义自己的风格,模仿现有风格plain但修改不良行为,这样您现在可以拥有跨越多行的注释;定义应该是这样的,我使用复选标记(\Checkmark来自bbding)作为结束标记:

\documentclass[12pt]{article}
\usepackage{bbding}
\usepackage{amsmath}
\usepackage[thmmarks,amsmath,amsthm,thref]{ntheorem}

\makeatletter
\newtheoremstyle{Myplain}%
  {\item[\hskip\labelsep \theorem@headerfont ##1\ ##2\theorem@separator]}%
  {\item[\hskip\labelsep \theorem@headerfont ##1\ ##2]\theorem@headerfont (##3)\theorem@separator\newline\normalfont\itshape}
\newtheoremstyle{nonumberMyplain}%
  {\item[\theorem@headerfont\hskip\labelsep ##1\theorem@separator]}%
  {\item[\theorem@headerfont\hskip \labelsep ##1]\theorem@headerfont (##3)\theorem@separator\newline\normalfont\itshape}
\makeatother

\theoremstyle{Myplain}
\theoremsymbol{\Checkmark}
\newtheorem{example}{Example}

\begin{document}
\begin{example}[blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah]
Content
\end{example}

\end{document}

另一个选择是使用thm工具包不用于\item构建其类似定理的结构,从而提供了一个更简单的解决方案(在这个例子中使用了相同的复选标记):

\documentclass[12pt]{article}
\usepackage{amsthm}
\usepackage{thmtools}
\usepackage{bbding}
\declaretheoremstyle[
  spaceabove=6pt, spacebelow=6pt,
  headfont=\normalfont\bfseries,
  notefont=\mdseries\bfseries,
  qed=\Checkmark,
  notebraces={(}{)},
  bodyfont=\itshape,
]{mystyle}
\declaretheorem[style=mystyle]{Example}


\begin{document}
\begin{Example}[blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah blah]
Content
\end{Example}

\end{document}

相关内容