我想找到一种方法来防止在下面的代码中示例的第一行之间出现分页符。
\documentclass{article}
\usepackage{lipsum}
\usepackage{gb4e}
\begin{document}
\lipsum[3-7]
Some extra text to get the page break in the right place.
\begin{exe}
\ex\label{Label} Some description of this example
\begin{xlist}
\ex[*] {
First sentence.}
\ex[] {
First sentence.}
\ex[*] {
Third sentence.}
\end{xlist}
\end{exe}
\end{document}
我不介意在第一个实际项目之后(即项目 (a) 和 (b) 之间)进行分页。我只是不希望示例的标题与示例的实际项目分开。
重要的是,示例必须使用gb4e
软件包进行格式化(而不是更通用的列表环境),因为我有许多带有复杂语言注释的示例,需要专门用于该问题的软件包。我更愿意使用此软件包,因为我已经为此软件包格式化了许多示例(而不是其他语言示例软件包)。
我知道这个网站上有很多关于防止或强制在特定点分页的问题,但我没有找到适用于使用该gb4e
包制作的示例的答案。我尝试\nopagebreak
在示例本身或\goodbreak
示例之前添加内容,但分页符仍然在同一个位置。
最后,我能够通过将整个示例放入环境中来强制将其移至下一页minipage
,但这有两个缺点。首先,它不允许在示例中的 (a) 和 (b) 之间中断,而这是可以的。其次,它需要手动检查这些孤立行。这对于长文档(例如论文)来说不太实用。
答案1
\nolistbreak
尝试在 (嵌套) 之前使用以下内容xlist
:
\makeatletter
\newcommand{\nolistbreak}{%
\let\oldpar\par\def\par{\oldpar\nobreak}% Any \par issues a \nobreak
\@nobreaktrue% Don't break with first \item
}
\makeatletter
这里发生了两件事:
exe
和都xlist
创建了一个list
环境,这些列表在开始时执行了一系列测试。其中之一是发布一个新段落(通过\par
)。我们更新\par
为始终在它之后发布一个\nobreak
(您可以调整这一点);- 第一项也发出了在时做出不同反应的指令
\@nobreaktrue
,设置了一些任意高的惩罚。
我不确定这是否会破坏其他东西,因此请谨慎使用。通过\nolistbreak
调用发起的更改将在其调用所在的环境中局部起作用,因此可能不会太糟糕。
\documentclass{article}
\usepackage{lipsum,gb4e}
\makeatletter
\newcommand{\nolistbreak}{%
\let\oldpar\par\def\par{\oldpar\nobreak}% Any \par issues a \nobreak
\@nobreaktrue% Don't break with first \item
}
\makeatletter
\begin{document}
\lipsum[3-7]
Some extra text to get the page break in the right place.
\begin{exe}
\ex\label{Label} Some description of this example
\nolistbreak
\begin{xlist}
\ex[*] {
First sentence.}
\ex[] {
First sentence.}
\ex[*] {
Third sentence.}
\end{xlist}
\end{exe}
\end{document}