我的标题出现在枚举列表中的项目之前。问题是,当标题出现在页面末尾而标题的内容出现在下一页时,我觉得它看起来很丑陋。我希望至少有一行来自项目内容的文本出现在标题之后。我试过\nopagebreak[4]
(似乎没有任何效果?)并begin{samepage}
换行标题和整个段落(在页面上留下大片空白)。我希望有一个好的方法来解决它!
以下是重现该问题的示例代码:
\documentclass[letterpaper]{article}
\usepackage{enumitem}
\usepackage{lipsum}
\begin{document}
\begin{enumerate}
\item[]{\Huge{Heading}}
\item{\lipsum[1]}
\item[]{\Huge{Heading}}
\item{\lipsum[1]}
\item[]{\Huge{Heading}}
\item{\lipsum[1]}
\item[]{\Huge{Heading}}
\item{\lipsum[1]}
\end{enumerate}
\end{document}
以及有问题的输出图像(见页面底部)。在这种情况下,我希望将标题推到下一页,或者至少将段落的第一行文本拉到第一页。
答案1
该needspace
包允许在执行下一项操作之前保留垂直空间。如果空间不存在,它会发出分页符。在这里,我重新定义\item
为在它之前执行\needspace
。您可以更改我使用的值(\baselineskip
),但它适用于您的 MWE。
\documentclass[letterpaper]{article}
\usepackage{enumitem}
\usepackage{lipsum}
\usepackage{needspace}
\let\svitem\item
\def\item{\needspace{\baselineskip}\svitem}
\begin{document}
\begin{enumerate}
\item[]{\Huge{Heading}}
\item{\lipsum[1]}
\item[]{\Huge{Heading}}
\item{\lipsum[1]}
\item[]{\Huge{Heading}}
\item{\lipsum[1]}
\item[]{\Huge{Heading}}
\item{\lipsum[1]}
\end{enumerate}
\end{document}
您可能仍会感到困惑,因为lipsum
段落也会发出 ,\needspace
并因此导致页面损坏。更好的方法是,\Hitem
定义一个单独的 ,它单独发出\needspace
:
\documentclass[letterpaper]{article}
\usepackage{enumitem}
\usepackage{lipsum}
\usepackage{needspace}
\def\Hitem#1{\needspace{\baselineskip}\item[]{\Huge{#1}}}
\begin{document}
\begin{enumerate}
\Hitem{Heading}
\item{\lipsum[1]}
\Hitem{Heading}
\item{\lipsum[1]}
\Hitem{Heading}
\item{\lipsum[1]}
\Hitem{Heading}
\item{\lipsum[1]}
\end{enumerate}
\end{document}
答案2
使用包的解决方案 stackengine
:根据构造,“标题”部分不能与内容的第一行分开,因为它属于第一行。它还具有大大简化代码的优势——除非您有特定的原因要使用自己的\item
命令输入标题:
\documentclass[a4paper]{article}
\usepackage{enumitem}
\usepackage{stackengine}
\usepackage{lipsum}
\usepackage[bottom=45mm]{geometry}
\clubpenalty = 3500
\setstackgap{S}{\baselineskip}
\begin{document}
\lipsum[1]
\begin{enumerate}[label =\arabic*.\stackon{}{\rlap{\hspace{\labelsep}\Huge Heading}}]%
\item \lipsum[1]
\item \lipsum[1]
\item \lipsum[1]
\item \lipsum[1]
\item \lipsum[1]
\end{enumerate}
\end{document}%