定理环境:与枚举/逐项列举的交互

定理环境:与枚举/逐项列举的交互

我的问题与此有关: 在定理环境中是否可以跳过第一行? 实际上,我正在寻找一种以系统的方式实现那里给出的解决方案的方法。

更准确地说:每当用列表开始定理时,列表的第一项都会出现在与定理标题(“定理”)相同的行上,即使在定理样式中指定 \newline。我想强制 Latex 跳过一行,即使在这种情况下。

上述问题中建议的最简单的解决方案之一是在列表开头添加一个空项:

\begin{thm}
\begin{enumerate}
\item[] 
\item First actual item
\item Second actual item
\end{enumerate}
\end{thm}

我的问题是:是否有系统的方法可以在开头添加此空白项每一个定理,通过将其添加到 theoremstyle 命令中?(或者在每个枚举环境的开头?)

这个想法是,当一个人输入:

\begin{thm}
Body of the theorem
\end{thm}

Latex 能够理解:

\begin{thm}
\begin{enumerate}
\item[]
\end{enumerate}
Body of the theorem
\end{thm}

我的代码和定理风格如下:

\documentclass{article}
\usepackage{amsmath}
\usepackage{amsthm}
\usepackage{amssymb}

\newtheoremstyle{exercisestyle}%                % Name
{}%                                     % Space above
{}%                                     % Space below
{}%                                     % Body font
{}%                                     % Indent amount
{\bfseries}%                            % Theorem head font
{}%                                     % Punctuation after theorem head
{\newline}%                             % Space after theorem head, ' ', or \newline
{\thmname{#1}\thmnumber{ #2} --- \thmnote{#3}}%            % Theorem head spec (can be left empty, meaning `normal')

\theoremstyle{exercisestyle}
\newtheorem{exercice}{Exercice}

\begin{document}

\begin{exercice}[Title]
\begin{enumerate}
\item First item
\item Second item
\end{enumerate}
\end{exercice}

\end{document}

答案1

软件包amsthm手册在 §2.1 中有介绍。您可以通过texdoc amsthm系统上的以下方式获取它:在 CTAN

我粗略地引用了该部分:

避免这些问题的最佳方法是允许列表从新行开始。实现此目的的一种方法是将命令跟在定理头(和\label,如果存在)后面\leavevmode。(有关更多信息,请参阅第 4.3.1 节。)但是,如果定理位于页面底部附近,列表可能会移动到下一页的顶部,留下一个孤立的标题。如果发生这种情况,必须将其作为例外处理,在文本最终确定后处理;此时,建议的修复方法是调用 needspace [NDS] 包,或插入显式分页符。

还:

在标题后开始新行的另一种方法是提供一个\newtheoremstyle{break};定义在第 9 页下面给出。与该\leavevmode方法一样,中断定理环境并不完美;已知的限制伴随着定义。

上述“第9页”的定义是:

这种风格将在定理标题后中断并开始新的一行。

\newtheoremstyle{break}%
{}{}%
{\itshape}{}%
{\bfseries}{}% % Note that final punctuation is omitted. 
{\newline}{}

此样式可用于以列表开头的定理。当与 enumerate 和 AMS 文档类一起使用时,所有项目都正确标记并链接。但是,垂直间距需要帮助;定义之间的冲突阻止第一个项目从新行开始 - 它看起来几乎与以枚举列表开头的默认定理相同。要修复此问题,请像这样开始定理:

 \begin{breakthm}[...]
 \leavevmode \vspace{-\baselineskip} 
 \begin{enumerate}

\leavevmode单独使用将在定理标题后留下一个完整的空白行。还可能出现一个问题:如果定理开始于页面末尾附近,列表可能会被拆分到新页面,留下一个孤立的标题。在文本最终定稿时记下这个问题;然后调用 needspace [NDS] 包,或插入一个明确的分页符。

为了自动达到你的目标,你可以尝试做这样的事情:

 \documentclass{article}
 \usepackage{amsmath}
 \usepackage{amsthm}
 \usepackage{amssymb}

 \newtheoremstyle{exercisestyle}%                % Name
 {}%                                     % Space above
 {}%                                     % Space below
 {}%                                     % Body font
 {}%                                     % Indent amount
 {\bfseries}%                            % Theorem head font
 {}%                                     % Punctuation after theorem head
 {\newline}%                             % Space after theorem head, ' ', or \newline
{\thmname{#1}\thmnumber{ #2} --- \thmnote{#3}}%            % Theorem head spec  (can be left empty, meaning `normal')

\theoremstyle{exercisestyle}
\newtheorem{exercice}{Exercice}
\newenvironment{breakingex}[1][]{% 
\begin{exercice}[#1]\leavevmode\vspace{-\baselineskip}%
}{\end{exercice}}
\begin{document}

\begin{breakingex}[Title]
\begin{enumerate}
\item First item
\item Second item
\end{enumerate}
\end{breakingex}
\end{document}

得出以下结果:

结果

请注意,您可能需要创建更多类似的环境,或使用默认设置并进行一些覆盖,以克服分页符问题。请参阅 amsthm 和您的判断手册来获得最佳解决方案。

答案2

问题建议在列表中添加一个空白的第一个项目。另一个简单的解决方案是在枚举环境之前添加一个零宽度空格。您可以自动执行此操作。

\begin{thm}
\hspace{0px} % This does it
\begin{enumerate}
   \item One.
   \item Two.
\end{enumerate}
\end{thm}

答案3

我可以提出一个简单的解决方案ntheorem:它的break样式似乎没有与分页符相同的问题,所以我对它进行了修补以执行您想要的操作:

\documentclass{article}
\usepackage{amsmath}
\usepackage[thmmarks, amsmath,  thref, hyperref]{ntheorem}
\usepackage{amssymb}
\usepackage{enumitem}
\usepackage{lipsum}
\makeatletter
\newtheoremstyle{exobreak}%
{\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
##1\ ##2\theorem@separator}\hbox{\strut}}}]}%
{\item[\rlap{\vbox{\hbox{\hskip\labelsep \theorem@headerfont
##1\ ##2\,\textemdash\,##3 \theorem@separator}\smallskip\hbox{\strut}}}]}
\makeatother
\theorempostwork{\vskip-0.5\topsep}
\theoremstyle{exobreak}
\theoremheaderfont{\bfseries}
\theorembodyfont{\normalfont}
\theoremseparator{}
\newtheorem{exercice}{Exercice}

\begin{document}

\vspace*{33\baselineskip}
\lipsum[3]
\begin{exercice}[Title]
  \begin{enumerate}[itemsep=0pt, font =\bfseries,  wide=0pt]
    \item First item
    \item Second item
    \item Third item
  \end{enumerate}
\end{exercice}
\lipsum[4]
\begin{exercice}[Another title]
  \begin{enumerate}[itemsep=0pt, font =\bfseries,  wide=0pt]
    \item First item
    \item Second item
    \item Third item
  \end{enumerate}
\end{exercice}
\lipsum[4]

\end{document} 

在此处输入图片描述

相关内容