
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 gb4e
hinzuzufü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 minipage
Umgebung 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 \nolistbreak
direkt 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:
- Sowohl als
exe
auchxlist
erstellen einelist
Umgebung, 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,\par
um immer ein\nobreak
danach auszugeben (Sie können dies anpassen); - 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 \nolistbreak
Aufruf initiierten Änderungen sind lokal auf die Umgebung beschränkt, in der der Aufruf stattfindet, also ist es vielleicht nicht so schlimm.
\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}