测试页面上剩余的行数

测试页面上剩余的行数

我正在写一个剧本,格式规则相当严格。如果页面末尾少于三行,我需要强制换页参数的行数多于一行。

宏是:

\newcommand{\dialogue}[2]{%
  \begin{center}#1\end{center}
  #2
}

我想要的一个不起作用的说明:

\newcommand{\dialogue}[2]{%
  \iflinesleftonpageis{<3}{%
    \iflinesinargument#1is{>1}{%
      \newpage}{}
    }{}
  }
  \begin{center}#1\end{center}
  #2
}

关于如何实现这一点有什么想法吗?

编辑

@DavidCarlisle 建议使用该needspace包。通过将我的宏修改为以下内容,我能够产生正确的结果:

\newcommand{\dialogue}[2]{%
  \needspace{3em}%
  \begin{center}#1\end{center}%
  #2
}

3em 大约代表三行文本;如果该空间不存在,它会在下一页打印宏。

非常感谢大卫!

答案1

TeX 实际上并不是按照“剩余行数”来工作的,分页(概念上)发生在稍后,在所有宏都已扩展之后,并且在所有行都已换行之后,因此首先将文本设置在一个长的无限滚动上,然后将其切成页面。

如果你指定页面可以留短,并且页面不能在居中标题后或段落第一行后断开,那么你的要求是,如果没有空间容纳至少一行以下文本,标题将移动到下一页,因此

\raggedbottom
\clubpenalty=10000
\newcommand{\dialogue}[2]{%
  \begin{center}#1\end{center}%
  \nopagebreak
  #2%
}

如果你更愿意考虑“页面上的空间量”,这个needspace包提供了一个命令来提供这个功能,尽管它与 TeX 的工作模型不太吻合。如果你添加类似

\needspace{3cm}

在您的标题之前,如果您(可能)距离页面底部不到 3 厘米,则会强制分页。(未经测试,因为您没有提供测试文件)

相关内容