我正在编写一个包含大量编号项目的文档,我希望每个项目都包含在一页上(而不是分成两页)。有办法吗?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}