etoolbox 在需要时没有中断页面

etoolbox 在需要时没有中断页面

我在序言中写了下面这段代码,它应该可以防止章节从不同的页面开始,但是,同时,当我读到第 3 章时,它已经有足够的文本来分页,但是却没有,我该如何修复它呢?

\usepackage{etoolbox}
\makeatletter
\patchcmd{\chapter}{\if@openright\cleardoublepage\else\clearpage\fi}{}{}{}
\makeatother

不幸的是,我无法构建具有与原始相同规格的 MWE,因此我仅允许查看指向 overleaf 项目的链接。

项目

正如下面的评论所指出的,LaTeX 不能很好地处理部分内的大量文本,因此我从部分更改为枚举环境,然后使用 enumitem 包更改了项目的显示方式。

答案1

我把一些说明放入了 MWE 本身。

顺便说一句,etoolkit 只是一个代码编辑器。 \patchcmd用其他东西替换一些现有的代码。

\documentclass{book}
\usepackage{needspace}

\def\chapterspace{184.87657pt}% reserving a length register seemed a bit wasteful

\usepackage{etoolbox}
\makeatletter
\patchcmd{\chapter}{\if@openright\cleardoublepage\else\clearpage\fi}{\needspace{\chapterspace}}{}{}
\makeatother

\usepackage{lipsum}% MWE only

\begin{document}

First you must find out how much space you need.  
Unless you use long chapter titles, the following should do.

\setbox0=\vbox{\chapter{\strut}\strut\newline\strut}%
\def\chapterspace{\the\ht0}%
\addtocounter{chapter}{-1}%
%\hrule
%\usebox0
%\hrule
Then copy \chapterspace{} into the definition of \verb|\chapterspace| and remove this code.

\noindent\rule{\textwidth}{15\baselineskip}% worst case

\lipsum[1]

\chapter{Test}
\lipsum[2]

\end{document}

相关内容