防止在乳胶文档中的 \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}
我更喜欢不那么复杂的东西,但至少它不需要手动分页就可以工作。
我有一个包含枚举的长文档。每个项目由几行组成,并且可能还包括其他元素,例如图形和列表。文档类型要求这些项目中的每一个都出现在单个页面上,项目内没有分页符。页面底部未使用的白色 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}
我更喜欢不那么复杂的东西,但至少它不需要手动分页就可以工作。