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:
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\raggedbottom \addtolength{\topskip}{0pt plus 10pt}
\topskip
com:
bem como redefinindo o\addtolength{\topskip}{0pt plus-10pt}
\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
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\par \needspace{4\baselineskip} % the stuff that must stay together% now stuff we don't mind about
\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:
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\let\oldsubsubsection=\subsubsection \renewcommand{\subsubsection}{% \filbreak \oldsubsubsection }
\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
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.
\baselineskip
}
Observe que o \pagebreak
e o \nopagebreak
aceitam 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.
This question on the Web: http://latex.net.br/faq/FAQ-nopagebrk.html
Do you have any question? Ask on: latex.net.br - we love qood questions!