如何更改此 \renewcommand\section 以防止在标题后立即分页?

如何更改此 \renewcommand\section 以防止在标题后立即分页?

我在我的课堂上使用以下命令(感谢这个答案):

\renewcommand\section{\@startsection{section}{1}{\z@}%
                                {3.25ex \@plus1ex \@minus.2ex}%
                                {-1em}%
                                {\normalfont\large\bfseries}*}

现在我遇到的问题是,章节标题恰好是页面上的最后一项,而其对应的文本最终出现在下一页。如何更改此定义以防止发生此问题?我尝试\nopagebreak在之前添加一个作为最后一项},但没有成功...

答案1

您可以使用标题安全包来重新定义\section命令。例如,它说:

*n如果您不喜欢输入完整的跳过值(包括加号和减号参数),可以使用缩写(其中 n 是整数)。在beforesep参数中,这相当于n ex 具有一定的可拉伸性和微小的可收缩性。在aftersep 一定的可拉伸性(较小)和无可收缩性的情况下。因此,您可以编写

\titlespacing*{command}{left}{beforesep}{aftersep}[right]
\titlespacing{\section}{0pt}{*4}{*1}

编辑:我相信下面的例子成功地保留了\section下面的文本。

\documentclass[letterpaper]{article}

\usepackage{lipsum} % generate filler text
\usepackage{titlesec}

\titleformat{\section}[runin]
{\large\bfseries}
{}{0pt}{}
\titlespacing{\section}
{0pt}{*2}{*1}

\begin{document}

\section{Section 1}

\lipsum[1-5]

\section{Section 2}

\lipsum[1-5]

\end{document}

答案2

我不明白它为什么会起作用,但我设法做到了。我只需要\leavevmode在定义的开头添加:

\renewcommand\section{\leavevmode\@startsection{section}{1}{\z@}%
                                {3.25ex \@plus1ex \@minus.2ex}%
                                {-1em}%
                                {\normalfont\large\bfseries}*}

如果您知道它为什么有效或者它是否是“正确”的解决方案,请告诉我!

编辑:它似乎不会影响所有可能发生分页的情况,因此它不是一个完整的解决方案。

相关内容