枚举列表内的分页符

枚举列表内的分页符

我正在编写一个包含大量编号项目的文档,我希望每个项目都包含在一页上(而不是分成两页)。有办法吗?samepage 似乎不起作用。

例如,如果以下两个项目太大而无法放在同一页面上,我希望项目 2 移动到下一页:

\begin{enumerate}

\item Blah blah blah ...
...

\item More babbling ...
...

\end{enumerate}

答案1

为了确保整个\item文本都在同一页上(当然假设它适合页面),您可以调整我以前使用的解决方案将 \item 替换为 \MyItem,以便用 mdframed 框住每个列表成员,而是将每个放置\item在一个内minipage

这是一个正常enumerate环境,其中项目 (c) 被拆分到多个页面:

在此处输入图片描述

并且使用MyEnumerate环境我们在新页面上获得项目(c),因为它不适合上一页。

在此处输入图片描述

笔记:

  • \addvspace{\baselineskip}在 之间添加了以minipage解决早期版本中的垂直间距问题。

  • geometry包仅用于调整纸张高度,以显示MyEnumerate如果不适合则实际上将列表成员移动到新页面。

代码:

\documentclass{article}
\usepackage{etoolbox}% for toggles
\usepackage{enumitem}

\usepackage[paperheight=5.8cm]{geometry}

\newcommand{\TextA}{%
        Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
        Sed accumsan hendrerit velit, vitae ultrices sapien porta nec.  
}%
\newcommand{\TextB}{%
        Duis blandit tempus placerat. 
        Nulla vitae erat ante. Nulla facilisi. 
        Aliquam tristique interdum suscipit. 
        Duis posuere orci vel velit suscipit in porttitor purus eleifend. 
}%
    
%  https://tex.stackexchange.com/questions/43002/how-to-preserve-the-same-parskip-in-minipage
\newlength{\currentparskip}
    
% https://tex.stackexchange.com/questions/56435/replace-item-with-myitem-to-box-each-list-member-with-an-mdframed
\newcommand{\MyItem}{\item}

\newtoggle{FirstItem}%
\toggletrue{FirstItem}

\toggletrue{FirstItem}%
\newenvironment{MyEnumerate}[1][]{%
    \renewcommand{\MyItem}{%
        \iftoggle{FirstItem}{%
            \global\togglefalse{FirstItem}
            \setlength{\currentparskip}{\parskip}% save the value
            %--------- start new minipage
            \par\addvspace{\baselineskip}\noindent
            \begin{minipage}{\textwidth}%
            \setlength{\parskip}{\currentparskip}% restore the value
            \begin{enumerate}[#1,series=MySeries]%
        }{%
            \end{enumerate}%
            \end{minipage}%
            %--------- end previous minipage and start new one
            \par\addvspace{\baselineskip}\noindent
            \begin{minipage}{\textwidth}%
            \setlength{\parskip}{\currentparskip}% restore the value
            \begin{enumerate}[#1,resume*=MySeries]%
        }%
        \item\mbox{}%
    }%
}{%
    \end{enumerate}%
    \end{minipage}% --------- end last minipage
    \global\toggletrue{FirstItem}%
}%

\begin{document}\noindent
\textbf{enumerate:}
\begin{enumerate}[label={(\alph*)}]
    \item \TextA
    \item \TextB
    \item \TextA\TextB
\end{enumerate}
%
\clearpage
\textbf{MyEnumerate:}
\begin{MyEnumerate}[label={(\alph*)}]
    \MyItem \TextA
    \MyItem \TextB
    \MyItem \TextA\TextB
    \MyItem \TextB
\end{MyEnumerate}
\end{document}

答案2

请确保仅在完成文档时添加此类调整。

在下面的示例文档中,第二项的第一行将排版在第一页。

\documentclass{article}
\usepackage{lipsum}

\begin{document}

\lipsum[1-4]

\begin{enumerate}

\item \lipsum*[2]

\begingroup\interlinepenalty=10000
\item \lipsum*[3]

\endgroup

\end{enumerate}

\end{document}

不要忘记\par之前的空行(或)\endgroup

答案3

这对我有用:

\begin{enumerate}
\begin{minipage}{\textwidth} \item Blah blah blah ... \end{minipage}
\begin{minipage}{\textwidth} \item Blah blah blah ... \end{minipage}
\end{enumerate}

相关内容