![amsthm:\newtheoremstyle、headspace、\mbox{} 和列表](https://linux22.com/image/248373/amsthm%EF%BC%9A%5Cnewtheoremstyle%E3%80%81headspace%E3%80%81%5Cmbox%7B%7D%20%E5%92%8C%E5%88%97%E8%A1%A8.png)
问:如何定义一个newtheoremstyle
将在newline
将在标题后即使定理文本以列表开头,例如enumerate
?如果没有办法做到这一点,是否有任何合理的方法可以完成这项工作?
你可以在下面的定理 2.1 中看到,我的newtheoremstyle
,theorem-break
当定理文本确实如此时,不是从列表环境开始。但您可以在定理 2.2 中看到。从列表环境开始的定理文本将占用\newline
。\mbox{}
定理 2.3 中的 hack 有点管用,但添加了不必要的空白行(与定理 1.3 比较)。
\documentclass{article}
\usepackage{amsthm}
\theoremstyle{plain}
\newtheorem{theorem-plain}{Theorem}[section]
\newtheoremstyle{break} % follow `plain` defaults but change HEADSPACE.
{\topsep} % ABOVESPACE
{\topsep} % BELOWSPACE
{\itshape} % BODYFONT
{0pt} % INDENT (empty value is the same as 0pt)
{\bfseries} % HEADFONT
{.} % HEADPUNCT
{\newline} % HEADSPACE. `plain` default: {5pt plus 1pt minus 1pt}
{} % CUSTOM-HEAD-SPEC
\theoremstyle{break}
\newtheorem{theorem-break}{Theorem}[section]
\begin{document}
\section{Plain Theorems}
\begin{theorem-plain}[foo]
Lorem ipsum sit amet dolor.
\end{theorem-plain}
\begin{theorem-plain}[foo]
\begin{itemize}
\item foo
\item bar
\end{itemize}
Lorem ipsum sit amet dolor.
\end{theorem-plain}
\begin{theorem-plain}[foo]
\mbox{}
\begin{itemize}
\item foo
\item bar
\end{itemize}
Lorem ipsum sit amet dolor.
\end{theorem-plain}
\section{Theorems with Linebreaks after header}
\begin{theorem-break}[foo]
Lorem ipsum sit amet dolor.
\end{theorem-break}
\begin{theorem-break}[foo]
\begin{itemize}
\item foo
\item bar
\end{itemize}
Lorem ipsum sit amet dolor.
\end{theorem-break}
\begin{theorem-break}[foo]
\mbox{}
\begin{itemize}
\item foo
\item bar
\end{itemize}
Lorem ipsum sit amet dolor.
\end{theorem-break}
\end{document}
答案1
如果ntheorem
使用amsthm
(请参阅定理包:使用哪一个,哪些会冲突?),那么你就可以使用预定义的样式break
:
\documentclass{article}
\usepackage{ntheorem}
\newtheorem{theorem-plain}{Theorem}[section]
\theoremstyle{break}
\newtheorem{theorem-break}{Theorem}[section]
\begin{document}
\section{Plain Theorems}
\begin{theorem-plain}[foo]
Lorem ipsum sit amet dolor.
\end{theorem-plain}
\begin{theorem-plain}[foo]
\begin{itemize}
\item foo
\item bar
\end{itemize}
Lorem ipsum sit amet dolor.
\end{theorem-plain}
\section{Theorems with Linebreaks after header}
\begin{theorem-break}[foo]
Lorem ipsum sit amet dolor.
\end{theorem-break}
\begin{theorem-break}[foo]
\begin{itemize}
\item foo
\item bar
\end{itemize}
Lorem ipsum sit amet dolor.
\end{theorem-break}
\end{document}
答案2
代码如下 如何抑制定理头和枚举环境之间的垂直空间?在这种情况下几乎可以工作,但amsthm
似乎需要稍微不同的空间校正,否则第一项看起来太接近标题了,请尝试在加载包后将其添加到序言中
\makeatletter
\def\enumfix{%
\if@inlabel
\noindent \par\nobreak\vskip-\topsep\hrule\@height\z@
\fi}
\let\olditemize\itemize
\def\itemize{\enumfix\olditemize}
\makeatother
答案3
在标题后输入一个明确的空格(\
后跟一个空格),例如
\documentclass[10pt,a4paper]{article}
\usepackage{amsthm}
\newtheorem{proposition}{Proposition}
\begin{document}
\begin{proposition}[header]\
\begin{enumerate}
\item first
\item second
\end{enumerate}
\end{proposition}
\end{document}