![使用 \hrule 和 \hfill 防止节与小节之间出现分页符](https://linux22.com/image/338082/%E4%BD%BF%E7%94%A8%20%5Chrule%20%E5%92%8C%20%5Chfill%20%E9%98%B2%E6%AD%A2%E8%8A%82%E4%B8%8E%E5%B0%8F%E8%8A%82%E4%B9%8B%E9%97%B4%E5%87%BA%E7%8E%B0%E5%88%86%E9%A1%B5%E7%AC%A6.png)
看来我是众多试图避免不恰当分页符的人之一。在这种情况下,我的部分和后续子部分之间出现了分页符。我知道如果我删除,\hrule
然后\hfill
LaTeX 会将它们拉到一起,但是由于中间有分页线,子部分将孤立在下一页中。
以下是 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
。