Seitenumbruch nach der ersten Beispielzeile verhindern

Seitenumbruch nach der ersten Beispielzeile verhindern

Ich würde gerne einen Weg finden, einen Seitenumbruch zwischen der ersten Zeile des Beispiels im folgenden Code zu verhindern.

\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}

Ich habe kein Problem mit einem Seitenumbruch nach dem ersten eigentlichen Element (also zwischen den Elementen (a) und (b)). Ich möchte nur nicht, dass der Titel/die Überschrift des Beispiels von den eigentlichen Elementen des Beispiels getrennt wird.

Es ist wichtig, dass das Beispiel mit dem Paket formatiert wird gb4e(und nicht mit einer allgemeineren Listenumgebung), da ich viele Beispiele mit komplexen linguistischen Glossen habe, die ein spezielles Paket für das Problem erfordern. Ich würde dieses Paket bevorzugen, da ich viele Beispiele habe, die bereits für dieses Paket formatiert sind (im Gegensatz zu anderen Paketen für linguistische Beispiele).

Ich weiß, dass es auf dieser Site viele Fragen zum Verhindern oder Erzwingen von Seitenumbrüchen an bestimmten Stellen gibt, aber ich habe keine Antwort gefunden, die mit den mit dem Paket erstellten Beispielen funktioniert . Ich habe versucht, Dinge wie im Beispiel selbst oder vor dem Beispiel gb4ehinzuzufügen , aber der Seitenumbruch bleibt an derselben Stelle.\nopagebreak\goodbreak

Schließlich konnte ich das ganze Beispiel auf die nächste Seite zwingen, indem ich es in eine minipageUmgebung einfügte, aber das hat zwei Nachteile. Erstens erlaubt es keinen Umbruch zwischen (a) und (b) im Beispiel, obwohl das in Ordnung wäre. Zweitens müsste man manuell nach diesen Waisen suchen. Das ist bei langen Dokumenten (z. B. einer Dissertation) nicht sehr praktisch.

Antwort1

Versuchen Sie, Folgendes \nolistbreakdirekt vor Ihrem (verschachtelten) zu verwenden xlist:

\makeatletter
\newcommand{\nolistbreak}{%
  \let\oldpar\par\def\par{\oldpar\nobreak}% Any \par issues a \nobreak
  \@nobreaktrue% Don't break with first \item
}
\makeatletter

Hier passieren zwei Dinge:

  1. Sowohl als exeauch xlisterstellen eine listUmgebung, und diese Listen führen bei ihrer Einführung eine Reihe von Tests durch. Einer davon besteht darin, einen neuen Absatz auszugeben (über \par). Wir aktualisieren, \parum immer ein \nobreakdanach auszugeben (Sie können dies anpassen);
  2. Der erste Punkt gibt auch ein Problem aus, bei dem anders reagiert wird \@nobreaktrue, und legt eine beliebig hohe Strafe fest.

Ich bin nicht sicher, ob dies etwas anderes beschädigen könnte, also mit Vorsicht verwenden. Die über einen \nolistbreakAufruf initiierten Änderungen sind lokal auf die Umgebung beschränkt, in der der Aufruf stattfindet, also ist es vielleicht nicht so schlimm.

Bildbeschreibung hier eingeben

\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}

verwandte Informationen