Comment modifier un changement de page ?
* \newpage impose un changement brutal de page.
* \pagebreak[n] où n représente l'autorité avec laquelle on veut
changer de page (n compris entre 1 et 5). Cette commande garde
la justification, 1 impose une contrainte faible, 5 impose une
contrainte sévère.
* \nopagebreak[n] idem pour empêcher une coupure de page.
* \clearpage agit comme un \newpage mais libère le buffer de
flottants.
* \cleardoublepage fait la même chose et force un redémmarrage
sur une page impaire.
* \enlargethispage{lgr} impose à LaTeX2e de comprimer (lgr
négatif) ou d'expanser (lgr positif) le contenu d'une page.
Ceci pour éviter que la page suivante contienne trop peu de
texte.
Exemples :
\enlargethispage{1cm} % ajoute un cm
\enlargethispage{-2\baselineskip} % supprime deux lignes dans la
% page
%%%% fin exemple %%%%
Remarque : \enlargethispage*{lgr} donne une autorité plus grande
à la commande \enlargethispage en l'obligeant à agir
sur les espacements élastiques verticaux contenus
dans la page courante.
* J.P. Drucbert donne ci-dessous un petit papier décrivant un
style block.sty bricolé à partir de macro de diverses origines
(dont D. Arseneau, assez connu). Si vous passez LaTeX sur ce
papier, block.sty sera créé. Les macros les plus intéressantes
sont \need{dim} et \lneed{N}, qui provoquent un saut de page
s'il reste moins que la dimension dim (ou N fois \baselinskip)
verticalement sur la page. Ce n'est pas parfait, mais cela m'a
rendu des services.
%%%% debut macro %%%%
\begin{filecontents}{block.sty}
\ifx\endBlock\undefined
\def\block{\begingroup%
\def\endblock{\egroup\endgroup}%
\vbox\bgroup}%
\long\def\Block{\begingroup%
\def\endBlock{\unskip\egroup\endgroup}%
\pagebreak[2]\vspace*{\parskip}\vbox\bgroup%
\par\noindent\ignorespaces}
\long\def\IBlock{\begingroup%
\def\endIBlock{\unskip\egroup\endgroup}%
\pagebreak[2]\vspace*{\parskip}\vbox\bgroup\par\ignorespaces}
\def\need#1{\ifhmode\unskip\par\fi \penalty-100 \begingroup
% preserve \dimen@, \dimen@i
\ifdim\prevdepth>\maxdepth \dimen@i\maxdepth
\else \dimen@i\prevdepth\fi
\kern-\dimen@i
\dimen@\pagegoal \advance\dimen@-\pagetotal % space left
\ifdim #1>\dimen@
\vfill\eject\typeout{WARNING- EJECT BY NEED}
\fi
\kern\dimen@i
\endgroup}
\def\lneed#1{\need{#1\baselineskip}}
% \begin{block} ... \end{block} delimite un bloc qui restera,
% si possible, sur une seule page.
\long\def\TBlock{\begingroup%
\def\endTBlock{\unskip\egroup\endgroup}%
\pagebreak[2]\vspace*{\parskip}\vtop\bgroup%
\par\noindent\ignorespaces}
\else
\typeout{block.sty already loaded}
\fi
\endinput
\def\need#1{\par \penalty-100 \begingroup
% preserve \dimen@, \dimen@i
\ifdim\prevdepth>\maxdepth \dimen@i\maxdepth
\else \dimen@i\prevdepth\fi
\kern-\dimen@i
\dimen@\pagegoal \advance\dimen@-\pagetotal % space left
\ifdim #1>\dimen@ \vfil \eject \fi
\kern\dimen@i
\endgroup}
\end{filecontents}
\documentclass[12pt,a4paper]{article}
\def\bs{\texttt{\char'134}}
\parskip=12pt plus1pt minus0.5pt
\usepackage[english,francais]{babel}
\usepackage[T1]{fontenc}
\usepackage[isolatin]{inputenc}
\begin{document}
\clearpage
\section{Paquetage \texttt{block}}\label{BLOCK+}
Ce paquetage offre divers outils permettant d'empêcher qu'une
rupture de page se produise à un certain endroit.
\subsection{Blocs Protégés}
Vous pouvez protéger une zone contre la rupture de page. Il
suffit pour cela de la placer dans un environnement
\texttt{Block} ou dans un environnement \texttt{IBlock}. Dans le
premier cas (\texttt{Block}), le premier paragraphe se trouvant
dans la zone ne sera pas indenté, mais le sera dans le second
cas (\texttt{IBlock}). Ceci est utile en particulier pour
éviter de séparer un texte et un exemple qui l'accompagne. Les blocs ainsi
protégés doivent, bien entendu, rester assez petits. La syntaxe
est (vous pouvez remplacer \texttt{Block} par \texttt{IBlock}):
\begin{quote}\tt
%\begin{tabular}{l}
\bs begin\{Block\}\\
\qquad\ldots\\
zone protégée\\
\qquad\ldots\\
\bs end\{Block\}
%\end{tabular}
\end{quote}
Cette méthode, très simple, a l'inconvénient de ne pas pouvoir
s'appliquer lorsque la zone à protéger doit contenir une
commande de sectionnement (c'est-à-dire du même type que
\verb|\section|), une note en bas de page, une note marginale ou
un corps mobile (figure ou table). Dans ce cas, il faudra
utiliser une des commandes du paragraphe suivant.
\subsection{Réservations Verticales}
Vous pouvez aussi demander de changer de page (ou de colonne, si votre
document est sur deux colonnes) s'il ne reste pas verticalement assez
de place sur la page. Deux commandes de réservation verticale sont
disponibles: \verb|\need{|{\em dimension\/}\verb|}|, dont le paramètre est une
longueur, et \verb|\lneed{|{\em nombre\/}\verb|}|, dont le paramètre est
le nombre de lignes équivalant à l'espace vertical demandé (avec cette forme
le paramètre est plus facile à estimer).
\end{document}
%%%% fin macro %%%%
* Pour éviter les coupures de page (ou les coupures de colonnes
avec multicol.sty) à l'intérieur des \item dans une description
(et d'ailleurs dans toute liste), solution simple sortie du
TeXbook:
\begin{description}\interlinepenalty 10000