我在序言中写了下面这段代码,它应该可以防止章节从不同的页面开始,但是,同时,当我读到第 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}