我从使用标准 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}