使用 \hrule 和 \hfill 防止节与小节之间出现分页符

使用 \hrule 和 \hfill 防止节与小节之间出现分页符

看来我是众多试图避免不恰当分页符的人之一。在这种情况下,我的部分和后续子部分之间出现了分页符。我知道如果我删除,\hrule然后\hfillLaTeX 会将它们拉到一起,但是由于中间有分页线,子部分将孤立在下一页中。

以下是 MWE:

\documentclass{article}
\begin{document}
Lots\\of\\text\\here\\to\\fill\\space\\so\\that\\the\\new\\section\\is\\right\\near\\the\\bottom.\\
Almost\\there.\\
I\\bet\\there's\\a\\better\\way\\to\\do\\this...\\
Hopefully\\someday\\I'll\\know\\how\\but\\for\\now\\I'm\\stuck\\with\\this\\mess.\\

\section*{Section title}
\hrule
\hfill
\subsection*{\underline{Subsection title}}

\end{document}

休息

我不想\pagebreak在节前硬编码,因为其上方的文本量会有所不同。我尝试过将所有四行换行\begin{samepage}\end{samepage}但似乎没有帮助。

我如何确保该小节在下一页上不会变得孤立?

答案1

我不推荐你使用这种方法:如果你想要自定义分节标题的外观,可以使用例如包titlesec。但是,即使你坚持自己动手,也没有必要求助于环境minipage:只需在正确的位置插入惩罚项即可,这可以通过命令来完成\nobreak。不过,还有一点需要注意:你说的事实\hfill会导致 TeX 开始一个新段落,这会将开关重置\if@nobreak\iffalse,以便在标题上方插入 -300 的惩罚\subsection。简单地说,你让 TeX 认为段落介于和之间\section\subsection所以它不再将两者视为连续的分节标题,在两者之间禁止分页。如果你说是\hfill为了在输出中获得一个空行,请注意这是不是要走的路。

以下是如何修复代码的示例:

\documentclass{article}
\begin{document}
Lots\\of\\text\\here\\to\\fill\\space\\so\\that\\the\\new\\section\\is\\right\\near\\the\\bottom.\\
Almost\\there.\\
I\\bet\\there's\\a\\better\\way\\to\\do\\this...\\
Hopefully\\someday\\I'll\\know\\how\\but\\for\\now\\I'm\\stuck\\with\\this\\mess.\\

\makeatletter

\section*{Section title}
\hrule
% \hfill % why do you use "\hfill" here?
\nobreak\vspace{\baselineskip} % is it this what you want?
\subsection*{\underline{Subsection title}}
Some text after the title.

% \showboxbreadth = 1000
% \showboxdepth = 10
% \showlists

\end{document}

但是,我再说一遍,不要这样做:使用titlesec

相关内容