Evitar quebras de página entre linhas

Comumente, é necessário que um bloco de material tipografado seja mantido na mesma página; organizar isto se revela surpreendentemente complicado.

O LaTeX fornece um ambiente samepage , que alega fazer este tipo de coisa para você. Ele procede definindo infinitas penalidades para todo tipo de situações de quebra de página; mas em muitas situações em que você deseja evitar uma quebra de página, o samepage não ajuda. Se você estiver tentando continuar a executar o texto juntos, você precisa terminar o parágrafo dentro do ambiente (veja (see Preservando parâmetros de parágrafo). Além disso, se as coisas que você estiver tentando manter juntas inserirem suas próprias sugestões de quebra de página, o samepage não terá poder sobre eles (embora as tentativas de itens de lista — eles sugerem quebras de página entre itens — sejam subvertidas pelo samepage). Naturalmente, se o samepage funcionar , ele será capaz de deixar coisas ultrapassando a margem inferior da página.

Outro truque conveniente é definir todas as coisas relevantes em uma \parbox (ou em uma minipage se houver coisas como texto verbatim que não possa ser usado no argumento de uma \parbox). A caixa resultante certamente não vai se quebrar entre páginas, mas isso não quer dizer que ela vai fazer o que você quer que ela faça: novamente, a caixa pode ser deixada ultrapassando a margem inferior da página. Por que nenhuma dessas coisas óbvias funciona? — Porque o TeX não consegue decidir entre coisas infinitamente horríveis. O Samepage tornará qualquer possível ponto de quebra “infinitamente ruim” e as caixas nem mesmo oferecem a opção de quebras, mas se a alternativa for deixar alguns centímetros infinitamente ruins de papel em branco na parte inferior da página, o TeX tomará o caminho de menor resistência e não fará nada.

Este problema ainda surge mesmo se você tiver o \raggedbottom em vigor: o TeX não percebe o valor daquilo até que ele realmente comece a enviar uma página. Uma abordagem é definir:

\raggedbottom
\addtolength{\topskip}{0pt plus 10pt}
O 10pt dá a dica para a rotina de saída de que a coluna é extensível; isso fará com que o TeX seja mais tolerante com a necessidade de alongar ao construir a página. Se você estiver fazendo isto como uma medida temporária, cancele a alteração no \topskip com:
\addtolength{\topskip}{0pt plus-10pt}
bem como redefinindo o \flushbottom. (Perceba que o 10pt nunca aparece realmente, porque fica suplantado quando a página é enviada pela extensibilidade introduzida pelo \raggedbottom; contudo, ele poderia muito bem ter um efeito se o \flushbottom estivesse em vigor.)

Uma alternativa (que deriva de uma sugestão de Knuth no TeXbook) é o pacote needspace ou a classe memoir , que definem um comando \needspace cujo argumento diz a ele qual é o espaço necessário. Se o espaço não estiver disponível, a página atual será limpa e o material que precisa ser mantido junto será inserido na nova página. Por exemplo, se 4 linhas de texto precisam ser mantidas juntas, a sequência

\par
\needspace{4\baselineskip}
% the stuff that must stay together

% now stuff we don't mind about
Há ainda outro truque de Knuth que é útil se você tiver uma sequência de pequenos blocos de texto que precisam, individualmente, serem mantidos em sua própria página. Insira o comando \filbreak antes de cada pequeno bloco, e o efeito é alcançado. A técnica pode ser usada no caso de sequências de seções no estilo LaTeX incorporando \filbreak na definição de um comando (como em Adaptar comandos existentes). Um patch simples e eficaz seria:
\let\oldsubsubsection=\subsubsection
\renewcommand{\subsubsection}{%
  \filbreak
  \oldsubsubsection
}
Embora o truque funcione para sequências consecutivas de blocos, é um pouco complicado sair dessas sequências, a menos que a sequência seja interrompida por uma quebra de página forçada (tal como \clearpage, que pode ser introduzida por um comando \chapter , ou o fim do documento). Se a sequência não for interrompida, o último bloco provavelmente será forçado para uma nova página, mesmo que isso não seja necessário.

Aqueles que estiverem dispostos a aceitar que nem tudo pode ser realizado de forma totalmente automática, o caminho a percorrer é compor o documento e verificar as coisas que podem dar problema. Em um cenário assim (que tem o respaldo da autoridade de Knuth, desde que se acredite nas poucas palavras que ele diz sobre o assunto no TeXbook) pode-se decidir, caso a caso, como lidar com os problemas na última etapa de revisão. Nesse estágio, você pode alterar manualmente a quebra de página, usando tanto o \pagebreak quanto o \clearpage, ou colocar um comando \nopagebreak para suprimir as quebras infelizes. Além disso, você pode fazer pequenos ajustes na geometria da página, usando o \enlargethispage. Supondo que você tenha uma linha ou duas que se desviem: emita o comando \enlargethispage{2\baselineskip} e duas linhas serão adicionadas à página que você estiver compondo. Se isso parece impossivelmente horrível ou inteiramente aceitável depende do contexto do documento, mas o comando continua sendo um item útil no arsenal.

Observe que o \pagebreak e o \nopagebreakaceitam um argumento numérico opcional para ajustar a maneira com que o comando deve ser interpretado. Assim, o comando \pagebreak[0] ‘sugere’ que uma quebra de página pode valer a pena, enquanto \pagebreak[4] ‘exige’ uma quebra de página. Similarmente, \nopagebreak[0] dá uma sugestão, enquanto \nopagebreak[4] é uma exigência. Nos dois comandos, o valor padrão do argumento opcional é 4.

memoir.cls
memoir
needspace.sty
needspace


Do you have any question? Ask on: latex.net.br - we love qood questions!