强制将诗歌标题和图形放在同一页上

强制将诗歌标题和图形放在同一页上

我一直使用\needspace{4\baselineskip}lilypond-book(音乐排版引擎)制作的图形来保存诗歌标题。在 184p 的文档中,有 79 个不同的诗歌标题和图形,这条规则被打破了大约四次,标题留在一页的底部,音乐留在下一页。有没有办法进一步坚持这条规则永远不会被打破?

错误的分页符

另外,如果将 \verselength 设置为长行断开和缩进的位置,则断开缩进的行部分偶尔会发现自己位于分页符的另一侧,这也是不行的。 又一个糟糕的分页符

诗歌的行间交替出现 \\* 和 \\,而每节的最后一行是 \\! - 此规则在极少数情况下也会被打破(在此示例中可能是因为诗歌标题前的 \needspace{4\baseline}):

再次出现错误页面中断

考虑到所有不同的元素,重现此问题所需的最少代码有点困难。完整代码可在此处获取:http://code.google.com/p/lypsautierant/source/browse/#svn%2Ftrunk%2Fpsautier,如果代码的某个特定部分有用,我会提供它。我希望有某种全局的东西可以强制 latex (xetex) 始终无一例外地遵守已明确规定的分页规则 - 也许在 latex 认为绝对不可取的其他地方出现分页规则。

答案1

您的链接中的代码太多,无法尝试,但您可能不需要 needspace,只需在标题后设置无限(即 10000)惩罚,并且(根据样式)音乐/诗歌的前几行应该就足够了,只要页面上有足够的灵活性来补偿不在该点中断的情况。例如,如果\flushbottom有效。

如果每一个可能的断点非常糟糕,TeX 会选择其中一个。最好不要这样安排,但事实就是如此,而且你想阻止 TeX 破坏页面,你可以将标题和第一行放在一个框中。框永远不会中断。

答案2

有几种方法可以解决这个问题。使用哪种方法取决于你的布局优先级以及你对内容的了解程度。

你可以用一把大锤子:

\begin{samepage}
    % poem  title stuff
    % music
    % extra verses
\end{samepage}

这应该很容易理解。您将需要保留在同一页面上的内容包装在一个环境中。这种方法既快捷又粗糙,而且在很多情况下都能完成工作;但我不建议在您的文档中使用它。使用如此大的锤子会对您的内容和输出选项施加任意限制。

  • 如果您添加的篇幅足够长,并且确实需要跨越两页,该怎么办?
  • 如果您想用半尺寸页面以小册子格式打印怎么办?或者打印大字版?

在这样的情形下,大锤法可能会造成很大的混乱。

通过更巧妙的方法,您可以通过提供乳胶格式建议来调整内容,这些建议会考虑您的偏好,但允许布局引擎在真正需要时做出一些妥协。

使用\needspace意味着在每种情况下知道接下来的内容。您提到了知道附加诗中有四行但有时一行会换行的情况。这种情况和许多其他情况使其成为布局大型文档的变幻莫测的工具。相反,我会查看各种与分页符相关的惩罚值。这个答案对基础知识进行了有用的概述

我建议按如下方式布局你的内容:

% Redefine lilypond function to highly suggest
% _not_ breaking pages between systems
\newcommand{\betweenLilyPondSystem}[1]{\linebreak\nopagebreak[3]}

% If we are going to break, best to get it over with before we start
\pagebreak[3]
\section{poem title}

% Don't ever break between a poem title and the first system
\nopagebreak[4]
\lilypondfile{poem.ly}

% Keep extra verses together, but allow breaks between verses
% only if they _must_ happen somewhere
\nopagebreak[3]
\begin{samepage}
  \begin{verse}
    % verse data
  \end{verse}
\end{samepage}

\nopagebreak[3]
\begin{samepage}
  \begin{verse}
    % verse data
  \end{verse}
\end{samepage}

% Once we get through a whole poem would be a great place to break
\pagebreak[3]

您可以根据自己的喜好进行调整,但使用3建议值和惩罚值作为休息时间,会强烈倾向于将诗歌的所有部分保持在一起,同时仍允许布局引擎分离出否则会超出页面的部分。

相关内容