【问题标题】:How can one keep a \section from being at the end of a page?如何防止 \section 出现在页面末尾?
【发布时间】:2009-02-04 19:43:09
【问题描述】:

鉴于 LaTeX 喜欢这样:

\section{Heading}

Here is some text after the heading.

如何防止标题显示在页面的最底部?

换句话说,如何防止在标题之后和以下文本之前出现分页符?

这似乎发生在我拥有的文档中。如果有更多有用的信息,我很乐意发布更多完整的 LaTeX 文档。

【问题讨论】:

  • 这也发生在我身上。我有一个小文件,我没有重新定义任何东西。我什至不使用 \usepackage!我正在使用 \documentclass{article} 并且其中有 \sections。可能是因为这些部分中的所有内容都是表格,所以可能很难对表格进行布局,以便它们不会跨页面拆分(哪种乳胶不会这样做?)并保持部分标题与内容?
  • @LimitedAtonement:也许可以试一试回忆录课——它为我解决了问题:ctan.org/tex-archive/macros/latex/contrib/memoir
  • 在我的文档中,这只是由于人物位置不当造成的。

标签: sectioning page-breaking


【解决方案1】:

这应该很少发生在标准文档类(以及更知名的类,例如 memoirkoma)中。您是在使用自制的文档类还是自己重新定义\section 命令?

【讨论】:

  • 使用 \documentclass[oneside,12pt]{article}。正在考虑转向回忆录——这可能会推动我更多。 :) 谢谢。
  • Memoir 课程的问题消失了。
  • @Will Robertson:它仍然会发生,例如在book 类中,如果您在新部分的开头下方有一个脚注...
【解决方案2】:

您应该使用该选项

\usepackage[nobottomtitles*]{titlesec}

这将阻止您的标题标题显示在页面底部,并将您的标题放置在下一页中。

【讨论】:

  • \usepackage[nobottomtitles*]{titlesec} 对我不起作用。我不得不删除这颗星。 \usepackage[nobottomtitles]{titlesec} 工作。
  • \usepackage[nobottomtitles]{titlesec} 也为我工作
【解决方案3】:

正如 Will Robertson 所说,这确实不应该发生在标准文档类和包中。您可能想尝试使用 titlesec 包重新定义切片命令;无论如何,我通常都会这样做以获得我想要的部分标题样式,并且titlesec 具有控制部分标题的中断和定位的功能。

关于\widowpenalty 和扩大页面​​的其他建议在这里没有帮助;它们用于解决常规流动文本的问题,并且节标题用它们的间距命令弄乱了正常的流动。

编辑:可能发生的情况是,您有一章包含非文本材料,这迫使 TeX 选择它可以选择的“最坏”中断,在这种情况下恰好是拆分一个部分从其内容出发;这真的很糟糕,但如果这是唯一的选择,那就是唯一的选择。通常这是由浮动引起的;如果您在问题航向附近有浮动,您可以尝试使用它们。或者不和他们玩;乳胶花车是可怕的野兽,只有最勇敢的人才能与之真正战斗。

如需快速修复,您可以尝试我之前提到的titlesec 包。 titlesec manual 给出(第 9.2 节,第 26 页,共 27 页)titlesec 标准 LaTeX 标题的版本。众所周知,LaTeX 分段命令在内部和外部都很丑陋(非章节标题还不错,但有传言称标准类被设计得如此丑陋以至于人们有义务创建自己的类因为某种原因)。将以下内容粘贴到您的序言中(\begin{document} 之前),并在重新运行 LaTeX 直到稳定后查看它是否有帮助:

\usepackage{titlesec}
\titleformat{\chapter}[display]
{\normalfont\huge\bfseries}{\chaptertitlename\ \thechapter}{20pt}{\Huge}
\titleformat{\section}
{\normalfont\Large\bfseries}{\thesection}{1em}{}
\titleformat{\subsection}
{\normalfont\large\bfseries}{\thesubsection}{1em}{}
\titleformat{\subsubsection}
{\normalfont\normalsize\bfseries}{\thesubsubsection}{1em}{}
\titleformat{\paragraph}[runin]
{\normalfont\normalsize\bfseries}{\theparagraph}{1em}{}
\titleformat{\subparagraph}[runin]
{\normalfont\normalsize\bfseries}{\thesubparagraph}{1em}{}
\titlespacing*{\chapter} {0pt}{50pt}{40pt}
\titlespacing*{\section} {0pt}{3.5ex plus 1ex minus .2ex}{2.3ex plus .2ex}
\titlespacing*{\subsection} {0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
\titlespacing*{\subsubsection}{0pt}{3.25ex plus 1ex minus .2ex}{1.5ex plus .2ex}
\titlespacing*{\paragraph} {0pt}{3.25ex plus 1ex minus .2ex}{1em}
\titlespacing*{\subparagraph} {\parindent}{3.25ex plus 1ex minus .2ex}{1em}

有了这些定义,您的部分标题应该看起来几乎相同,但在内部是由titlesec 更简洁的代码生成的,并希望表现出更理智的行为。如果没有看到有问题的文档,很难预测它们是否会有所帮助,但修复很容易,值得一试。此外,这公开了用于调整的命令定义——如果您在该块中调整 \section 的间距值,我相信您将能够找到 something 工作(但它可能比破头还丑!)。您也可以雄心勃勃地尝试定义自己的标题样式,但这是 1) 对短于书本长度的文档浪费时间,以及 2) 如果没有排版和/或设计方面的经验,可能会出现严重错误。

希望对您有所帮助。

【讨论】:

  • 我也明白这不会发生。唉,我错了。我非常感谢有关从哪里开始寻找正在发生的事情的建议。
  • 我添加了一个冗长的编辑,使用titlesec 提供了潜在的修复;我会把它作为评论发布,但是这个 300 个字符的限制让我很恼火。
【解决方案4】:

我曾经遇到过类似的问题,用了一个tip也找到了here

\widowpenalty=1000
\clubpenalty=1000

【讨论】:

  • 这也可以防止长段落中的单行被搁置在页面的顶部或底部。这有可能导致其他奇怪的布局决策,但我所做的一切都是生成大块空白...... +1
  • 与公认的答案不同,这实际上回答了问题。
【解决方案5】:

如果您已完成 LaTeX 文件的编辑,或者您确定标题的位置(现在位于页面底部)不会改变,您可以在 @987654322 之前添加一个 pagebreak @。我知道这很粗糙,但这是一个快速的解决方案。

【讨论】:

  • 我认为这是一个很好的解决方案,我自己做。在完成所有编辑并最终确定格式之后,您只需要记住最后执行此操作。
【解决方案6】:

查看 TeX 常见问题解答中的这些页面:

我通常做的是添加\clearpage 以在必要时强制分页,或添加\enlargethispage{\baselineskip} 以将当前页面的高度增加一行,或添加\enlargethispage{-\baselineskip} 以降低页面的高度。但是,最好等到文档内容完成后再进行这些外观更改,以避免在编辑文档时不断地重新调整布局。

【讨论】:

    【解决方案7】:

    这是一个示例,表明默认情况下不应发生这种情况。也许您可以尝试根据您的文档创建类似的东西来最终演示问题,尽管我知道这些问题可能难以重现和调试。

    在下面的示例中,我们在章节标题之前有 25 行文本。取消注释 \oneline 以仅添加一行文本 - 尽管如果节标题下方的文本量减少它可能适合 - 整个节标题被推送到下一页以避免出现问题'在您自己的文档中遇到。

    \documentclass[oneside,12pt]{article}
    \def\oneline{%
      text text text text abc def ghi text 
      text text text text abc def ghi text 
      text
    }
    \def\fiveline{\oneline\oneline\oneline\oneline\oneline\par}
    \def\twentyfiveline{\fiveline\fiveline\fiveline\fiveline\fiveline}
    \begin{document}
    \section{one}
    \twentyfiveline
    %\oneline
    \section{two}
    \twentyfiveline
    \end{document}
    

    【讨论】:

      【解决方案8】:

      处理这些问题的一种简单而可靠的方法是使用\needspace{<length>} 命令,该命令在needspace package 中可用,也由memoir 类提供。

      该命令将检查所提供的<length> 是否可用作当前页面/当前列中的垂直空间 - 如果没有,它将刷新新页面/列之后的任何内容。

      例子:

      \documentclass{article}
      \usepackage{needspace}
      
      \begin{document}
      
      Lorem ipsum dolor sit amet, consectetur adipiscing elit,
      sed do eiusmod tempor incididunt ut labore et dolore
      magna aliqua.
      
      \needspace{2 \baselineskip}
      \section{My heading}
      
      Paragraph text which should be on the same page/in the same column as the heading above.
      
      \end{document}
      

      您可以像上面一样手动提供\needspace 命令,或者通过重新定义或通过其他方式将其合并到\section 命令中。

      如果您使用memoir 类,可以使用一些高级命令来实现此目的,例如\setsecheadstyle。在序言中,使用例如以下:

      \setsecheadstyle{%
      \needspace{3.0 \baselineskip}%
      \Large% heading formatting
      }
      

      【讨论】:

      • 但是“这些问题”是什么?你能举一个例子,乳胶在节标题后打破页面,\needspace 阻止了这种情况吗? \needspace 在这里的示例代码中没有做任何事情,所以不清楚这是否回答了问题。
      • 要在节标题后获得分页符,您需要 \section{My heading} \clearpage Paragraph text...\needspace 之类的内容在这种情况下不会阻止分页符。
      • @david-carlisle “这些问题”(即标题后的分页符或分栏符)由该问题中的 7 位用户报告 + 仅其答案,或者包括我自己在内的 8 位用户报告。当它最近发生在我身上时,我正在使用带有预定义页面样式的memoir 类,我肯定没有手动更改任何惩罚。 有时会在标题后出现分页some 可以用粗心的用户凌驾惩罚来解释吗?是的。全部?肯定没有。如果挖掘得足够深,是否可以用其他东西来解释全部或大部分?可能。尽管如此,解决方案还是有用的。
      • @david-carlisle 你说得对,我上面的例子没有说明问题——这不是我的本意。 \needspace 解决方案为我解决了这个问题,其他用户在其他地方报告了成功。显然在某些情况下,没有在标题后插入\clearpage 就发生了中断(我同意\needspace 无济于事)。
      • 您不是该主题中第一个说发生此问题的人,但没有人发布任何示例。 LaTeX 在标题后设置了无限高的中断惩罚,所以据我所知,它确实中断的任何情况都相当于我的\clearpage 示例。当然,除非在某个地方存在我们可以调查的错误,但如果没有人提供示例,则不然。你说“它为我解决了”,但这意味着问题发生在你身上,你能添加那个例子吗?
      【解决方案9】:

      如果您不在节命令(即 \section{Heading})和其后的文本之间放置空行(相当于 TeX/LaTeX 中的分节符),它将永远不会发生。而不是您输入的内容,包括一个空行,即,

      \section{Heading}
      
      Here is some text after the heading.
      

      类型

      \section{Heading}
      Here is some text after the heading.
      

      或者,如果您认为空白行可以帮助您在编辑时引导您的视线,请键入

      \section{Heading} 
      %
      Here is some text after the heading.
      

      【讨论】:

      • 这在我的情况下不起作用:(
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-02
      • 1970-01-01
      • 2014-05-11
      • 2016-03-01
      • 2020-05-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多