Evitar quebra de página após a primeira linha do exemplo

Evitar quebra de página após a primeira linha do exemplo

Gostaria de encontrar uma maneira de evitar uma quebra de página entre a primeira linha do exemplo no código a seguir.

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

Não tenho problemas com quebra de página após o primeiro item real (ou seja, entre os itens (a) e (b)). Só não quero que o título/título do exemplo seja separado dos itens reais do exemplo.

É importante que o exemplo seja formatado com o gb4epacote (em vez de um ambiente de lista mais genérico), pois tenho muitos exemplos com glosas linguísticas complexas que requerem um pacote dedicado ao assunto. Eu preferiria usar este pacote, pois tenho muitos exemplos já formatados para este pacote (ao contrário de outros pacotes para exemplos linguísticos).

Eu sei que há muitas perguntas neste site sobre como prevenir ou forçar quebras de página em pontos específicos, mas não encontrei uma resposta que funcione com os exemplos feitos usando o gb4epacote. Tentei adicionar coisas como \nopagebreakno próprio exemplo ou \goodbreakantes do exemplo, mas a quebra de página permanece no mesmo lugar.

Finalmente, consegui forçar todo o exemplo para a próxima página, colocando-o em um minipageambiente, mas isso tem duas desvantagens. Primeiro, não permite uma quebra entre (a) e (b) no exemplo, quando isso seria aceitável. Em segundo lugar, seria necessária a verificação manual desses órfãos. Isto não é muito prático para documentos longos (por exemplo, uma dissertação).

Responder1

Tente usar o seguinte \nolistbreakantes do seu (aninhado) xlist:

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

Duas coisas estão acontecendo aqui:

  1. Ambos exee xlistcriam um listambiente, e essas listas realizam vários testes desde o início. Uma delas é a edição de um novo parágrafo (via \par). Atualizamos \parpara sempre emitir um \nobreakdepois (você pode ajustar isso);
  2. O primeiro item também emite uma reação diferente quando \@nobreaktrue, estabelecendo alguma penalidade arbitrariamente alta.

Não tenho certeza se isso pode quebrar alguma outra coisa, então use com cuidado. As alterações iniciadas por meio de uma \nolistbreakchamada terão escopo local para o ambiente em que sua chamada está inserida, portanto, pode não ser tão ruim.

insira a descrição da imagem aqui

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

informação relacionada