Избегайте разрыва страницы между абзацами с помощью \medskip между ними

Избегайте разрыва страницы между абзацами с помощью \medskip между ними

Рассмотрим этот пример.

\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}

Связанный контент