防止在乳胶文档中的 \item 内分页

prevent page break within \item in latex document

我有一个包含枚举的长文档。每个项目由几行组成,并且可能还包括其他元素,例如图形和列表。文档类型要求这些项目中的每一个都出现在单个页面上,项目内没有分页符。页面底部未使用的白色 space 是可以接受的。

这是一个例子

\documentclass[a5paper,12pt]{article}
\usepackage{blindtext}

\begin{document}
\begin{enumerate}
  \item \blindtext
  \item \blindtext % don't break this apart
  \item very long text here 
\end{enumerate}
\end{document}

我知道 samepage 环境和 minipage 的解决方案。问题是我无法将个人 \item 包装到这些我需要的环境中。

needspace 可行,但我需要手动确定每个项目的垂直范围(至少我是这么认为的)。

这可能对您有所帮助:调整 enumerate 环境的边距,使文本不会乱七八糟。

这是一个关于如何在分项环境中进行这种操作的答案:https://tex.stackexchange.com/questions/170525/itemize-left-margin

您可以通过以下自动化对每个 \item 发出 \clearpage

\documentclass[a5paper,12pt]{article}

\usepackage{blindtext}

\let\oldenumerate\enumerate% Store \begin{enumerate} in \begin{oldenumerate}
\let\endoldenumerate\endenumerate% Store \end{enumerate} in \end{oldenumerate}
\renewenvironment{enumerate}
  {\let\olditem\item% Store \item in \olditem
   \renewcommand{\item}{\clearpage\olditem}% Update \item
   \oldenumerate}% \begin{enumerate}
  {\endoldenumerate}% \end{enumerate}

\begin{document}

\begin{enumerate}
  \item \blindtext
  \item \blindtext % don't break this apart
  \item very long text here 
\end{enumerate}

\end{document}

以上代码更新 enumerate 环境的方式是将 \item 代码更改为等效于 \clearpage\item。这确保每个 \item 都将在新页面上开始,可能会在底部留下空白 space。

我最后做的是使用 enumitem 包并将枚举分解成小页面中的部分:

\documentclass[a5paper,12pt]{article}
\usepackage{blindtext}
\usepackage{enumitem}           % modified itemize

\begin{document}
\begin{minipage}{\linewidth}
\begin{enumerate}[series=task,start=1,leftmargin=*,resume]
  \item \blindtext
\end{enumerate}
\end{minipage}

\begin{minipage}{\linewidth}
  \begin{enumerate}[resume*=task]
     \item \blindtext
  \end{enumerate}
\end{minipage}

\end{document}

我更喜欢不那么复杂的东西,但至少它不需要手动分页就可以工作。