
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 gb4e
pacote (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 gb4e
pacote. Tentei adicionar coisas como \nopagebreak
no próprio exemplo ou \goodbreak
antes 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 minipage
ambiente, 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 \nolistbreak
antes 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:
- Ambos
exe
exlist
criam umlist
ambiente, e essas listas realizam vários testes desde o início. Uma delas é a edição de um novo parágrafo (via\par
). Atualizamos\par
para sempre emitir um\nobreak
depois (você pode ajustar isso); - 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 \nolistbreak
chamada terão escopo local para o ambiente em que sua chamada está inserida, portanto, pode não ser tão ruim.
\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}