这是不是重复的预防分页符。
我想要实现的目标
考虑这样一个itemize
环境,其中一个\item
s 被拆分在一页的底部和下一页的开头:
我希望\item
(或者整个itemize
环境)位于下一页的顶部,而不是分成两页。
但是,如果有任何(合理的)方法可以将其放在当前页面上,那么它应该优先考虑这一点。
我希望这件事能够完成自动地,因此没有例如needspace
包。
我尝试过的方法
我怀疑这会受到惩罚。我一直在研究\samepage
定义中的那些以及列出的那些在这个答案中。
例如\@itempenalty\@M
不起作用,这让我有点困惑。
可能我不太明白惩罚实际上起什么作用。我理解的是,如果某个惩罚很高,那么解释器将试图避免因这个惩罚而中断。我不明白的是,当它无法插入内容时(在正常限制下),如何鼓励分页。
代码
我正在处理一个包,这只是一个 MWE。
项目拆分到各个页面,在这个例子中没有空间,所以我想让itemize
环境(我只需要有\item
问题的)跳转到下一页。 (我添加了一个,\makeatletter
所以你不必这样做。
\documentclass{article}
\usepackage{lipsum}
\setlength{\parindent}{0em}
\makeatletter
\begin{document}
\lipsum[1-4]
\bgroup
%\bgroup is okay here, right?
% (Then the penalties should go back at \egroup?)
%% Magic, amazing penalty code can go here. %%
%% ... or wherever it fits best ... %%
\begin{itemize}
\item\lipsum[10-12]
\end{itemize}
\egroup
\end{document}
这实际上不是一个关于惩罚的问题,尽管我不介意提供链接或解释来阐明编译器(即 pdftex)如何处理惩罚。
提前谢谢大家 :)
请随意建议或修改标题,使其更切中问题的核心。我觉得这个标题有点不靠谱?
答案1
您可以使用\filbreak
(参见https://tex.stackexchange.com/a/72787/4427)
\documentclass{article}
\usepackage{lipsum}
\usepackage{etoolbox}
\begin{document}
\lipsum[1-4]
\begin{itemize}\preto\item{\filbreak}
\item test\\on\\three lines
\item test
\item\lipsum[10-12]
\end{itemize}
\lipsum[1-4]
\end{document}