amsthm:\newtheoremstyle、headspace、\mbox{} 和列表

amsthm:\newtheoremstyle、headspace、\mbox{} 和列表

问:如何定义一个newtheoremstyle将在newline将在标题后即使定理文本以列表开头,例如enumerate?如果没有办法做到这一点,是否有任何合理的方法可以完成这项工作?

你可以在下面的定理 2.1 中看到,我的newtheoremstyletheorem-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}

相关内容