考虑这个例子
\documentclass{report}
\begin{document}
Some text
\medskip
\textbf{Mini title}
\medskip
\nopagebreak
Some more text
\end{document}
如何避免“小标题”和“更多文本”之间出现分页符。我\nopagebreak
为此探索了很久,但无济于事?
答案1
我\medbreak
从 LaTeX 复制了命令并制作了一个\mednobreak
。它执行了\nopagebreak
和\medskip
。它会将以下段落的第一行附加到\textbf{Mini title}
。注释掉标记的行以查看效果。
\documentclass{report}
\usepackage{lipsum}
\def\mednobreak{\par\ifdim\lastskip<\medskipamount
\removelastskip\nopagebreak\medskip\fi}
\begin{document}
\lipsum[1-4]
\lipsum[2]
another line % comment to see difference
\medskip
\textbf{Mini title}
\mednobreak
\lipsum[1]
\end{document}
答案2
避免使用明确的字体更改命令。
如果你使用节标题命令,标记会更加灵活,并且 LaTeX 会自动处理不允许在标题后分页的情况
\documentclass{report}
\begin{document}
Some text
\vspace{40\baselineskip}% heading and text stay on this page
%\vspace{41\baselineskip}% heading and text go to next page
Some text
\subsection*{Mini title}
Some more text
\end{document}
答案3
我建议你加载needspace
包并发出指令
\Needspace*{3\baselineskip}
紧接在第一\medskip
条指令之前。
完整的 MWE (最小工作示例):
\documentclass{report}
\usepackage{needspace}
\begin{document}
\dots
Some text
\Needspace*{3\baselineskip}
\medskip
\textbf{Mini title}
\medskip
Some more text
\end{document}