
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 gb4e
paquete (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 gb4e
paquete. Intenté agregar cosas como \nopagebreak
en el ejemplo mismo o \goodbreak
antes 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 minipage
entorno, 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 \nolistbreak
justo 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:
- Ambos
exe
creanxlist
unlist
entorno 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\par
para emitir siempre un\nobreak
mensaje posterior (puede ajustar esto); - El primer elemento también emite una reacción diferente cuando
\@nobreaktrue
establece 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 \nolistbreak
llamada tendrán un alcance local para el entorno dentro del cual se llama, por lo que puede que no sea tan malo.
\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}