如何强制使用 enumitem 包的项目在新页面上开始

如何强制使用 enumitem 包的项目在新页面上开始

我有以下 MWE:

\documentclass{article}
\usepackage{enumitem}
\begin{document}
    
\begin{enumerate}[label=\textbf{\arabic*}\hspace{4mm}]
    
\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm
\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\end{enumerate}
\end{document}

如果您注意到第 5 部分需要从新的页面开始。

第 5 部分

第 9 部分也需要从新的一页开始。

第九部分

我如何从序言中修改 \item 环境,以便强制任何超过两页的项目自动开始新页面而不影响其他项目。

我知道如何使用 needspace 包对部分进行操作。但我无法让它修改项目。

\usepackage{needspace}
\usepackage{xpatch}
\xpretocmd{\section}{\needspace{6\baselineskip}}{}{}

答案1

您可以更改惩罚的定义,以告诉 LaTeX 何时需要分页符。添加beginpenalty=10000,midpenalty=10000到枚举选项中。

这不是序言中的改变,但对于任何列表,只需定义一次就足够了,并且所有子列表也将被定义。

梅威瑟:

\documentclass{article}
\usepackage{enumitem}

\begin{document}
    
\begin{enumerate}[label=\textbf{\arabic*}\hspace{4mm},beginpenalty=10000,midpenalty=10000]
    
\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm
\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}\vskip 9mm

\end{enumerate}
\end{document}

LaTex 将文本放在块中。方框之间的空间称为粘连。惩罚用于告诉 LaTeX 何时可以中断粘连。10000 表示不中断。

如果您告诉 LaTeX 不要在列表中间断行,则整个列表将是一个不可断行的框。当出现分页符时,LaTeX 会将列表中的所有项目推送到新页面。但是,由于这是一个嵌套列表,如果您仅定义中间惩罚,则 LaTeX 可能会在列表开始之前断行,这意味着您将得到

  1. 等等等等等等

- 分页符 -

(A)啦啦啦啦

(B)胡说……

当你告诉 LaTeX 不要在开始时断开并且不要在中间断开时,整个列表及其父列表将被视为一个单独的框并且不会被断开。

请注意,结束惩罚未定义为不中断。如果您定义了结束惩罚,当某些列表溢出到边距之外(例如图像太大)时,您将在一页内获得列表,而不会中断。

答案2

一个尴尬的解决方案是将每个都封装\item在一个中\vbox

\documentclass{article}
\usepackage{enumitem}


\begin{document}
    
\begin{enumerate}[label={\textbf{\arabic*}\hspace{4mm}}]
    
\vbox{\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}}\vskip 9mm

\vbox{\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}}\vskip 9mm

\vbox{\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}}\vskip 9mm
\vbox{\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}}\vskip 9mm

\vbox{\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}}\vskip 9mm

\vbox{\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}}\vskip 9mm

\vbox{\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}}\vskip 9mm

\vbox{\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}}\vskip 9mm

\vbox{\item BLAH BLAH BLAH \begin{enumerate}[label=(\Alph*),leftmargin=0.85cm,itemsep=2ex] \item BLAH BLAH BLAH  \item BLAH BLAH BLAH \item BLAH BLAH BLAH \item BLAH BLAH BLAH \end{enumerate}}\vskip 9mm

\end{enumerate}
\end{document}

相关内容