Evitar saltos de página después de la primera línea del ejemplo

Evitar saltos de página después de la primera línea del ejemplo

Me gustaría encontrar una manera de evitar un salto de página entre la primera línea del ejemplo en el siguiente código.

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

No tengo ningún problema con un salto de página después del primer elemento real (es decir, entre los elementos (a) y (b)). Simplemente no quiero que el título/encabezado del ejemplo se separe de los elementos reales del ejemplo.

Es importante que el ejemplo esté formateado con el gb4epaquete (en lugar de un entorno de lista más genérico), ya que tengo muchos ejemplos con glosas lingüísticas complejas que requieren un paquete dedicado al tema. Preferiría usar este paquete, ya que ya tengo muchos ejemplos formateados para este paquete (a diferencia de otros paquetes para ejemplos lingüísticos).

Sé que hay muchas preguntas en este sitio sobre cómo prevenir o forzar saltos de página en puntos específicos, pero no he encontrado una respuesta que funcione con los ejemplos creados con el gb4epaquete. Intenté agregar cosas como \nopagebreaken el ejemplo mismo o \goodbreakantes del ejemplo, pero el salto de página permanece en el mismo lugar.

Finalmente, pude forzar el ejemplo completo a la página siguiente colocándolo en un minipageentorno, pero esto tiene dos desventajas. Primero, no permite una interrupción entre (a) y (b) en el ejemplo cuando eso estaría bien. En segundo lugar, sería necesario comprobar manualmente si hay estos huérfanos. Esto no es muy práctico para documentos largos (por ejemplo, una disertación).

Respuesta1

Intente utilizar lo siguiente \nolistbreakjusto antes de su (anidado) xlist:

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

Aquí están sucediendo dos cosas:

  1. Ambos execrean xlistun listentorno y estas listas realizan un montón de pruebas desde su inicio. Uno de los cuales es emitir un nuevo párrafo (vía \par). Actualizamos \parpara emitir siempre un \nobreakmensaje posterior (puede ajustar esto);
  2. El primer elemento también emite una reacción diferente cuando \@nobreaktrueestablece alguna penalización arbitrariamente alta.

No estoy seguro de si esto puede romper algo más, así que utilícelo con precaución. Los cambios iniciados a través de una \nolistbreakllamada tendrán un alcance local para el entorno dentro del cual se llama, por lo que puede que no sea tan malo.

ingrese la descripción de la imagen aquí

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

información relacionada