I have a long document consisting of an enumeration. Each item consists of several lines, and possibly also includes other elements such as graphics and lists. The document type requires that each of these items appears on a single page, with no page break within item. Unused white space at the bottom of the page is acceptable.
Here is an example
\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}
I know of solutions with the samepage
environment, and also with minipage
. The problem is that I can't wrap the individual \item
s into these environments, which I would need.
needspace
works, but then I need to determine the vertical extent of each item manually (at least that is what I think).
The \nopagebreak command prevents LaTeX form breaking the current page at the point of the command. With the optional argument, number, you can convert the \nopagebreak command from a demand to a request. The number must be a number from 0 to 4. The higher the number, the more insistent the request is.
You have to do it manually: \kern-\parskip\begin{itemize} then your \items and then \end{itemize}\kern-\parskip.
What I did in the end is use the enumitem package and break up the enumeration into parts which are in minipages:
\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}
I'd prefer something less complicated, but at least it worked without manual pagination.
You can issue a \clearpage
with each \item
via the following automation:
\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}
The above code updates the enumerate
environment in a way that changes the \item
code to be equivalent to \clearpage\item
instead. This ensures that each \item
will start on a new page, possibly leaving blank space at the bottom.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With