防止範例第一行後分頁

防止範例第一行後分頁

我想找到一種方法來防止以下程式碼中範例的第一行之間出現分頁符號。

\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

這裡發生了兩件事:

  1. 兩者都exe創建xlist了一個list環境,​​這些清單在開始時執行了一系列測試。其中之一是發布一個新段落(通過\par)。我們更新\par為始終\nobreak在其後發出 a (您可以對此進行調整);
  2. 第一項也發出了不同的反應\@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}

相關內容