Ceci est une ancienne révision du document !


\question{Comment modifier un changement de page ?}\label{forcer-saut-page}

\reponse \cmd{newpage} impose un changement brutal de page.

\reponse \cmd{pagebreak}\oarg{n} où \targ{n} représente l'autorité avec laquelle on veut changer de page (\targ{n} compris entre 1 et 5). Cette commande garde la justification, 1 impose une contrainte faible, 5 impose une contrainte sévère.

\reponse \cmd{nopagebreak}\oarg{n} idem pour empêcher une coupure de page.

\reponse \cmd{clearpage} termine la page en cours, comme \cmd{newpage}, puis fait en sorte de placer tous les flottants qui seraient encore en attente, puis fait en sorte de commencer une nouvelle page. C'est utilis\'e, par exemple, en fin de chapitre.

\reponse \cmd{cleardoublepage} fait la même chose et force un redémmarrage sur une page impaire.

\reponse \cmd{enlargethispage}\marg{lgr} impose à \LaTeXe 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.

Par exemple: \begin{noexemple} % ajoute un cm \enlargethispage{1cm} % supprime deux lignes dans la page \enlargethispage{-2\baselineskip} \end{noexemple}

\begin{Rq} \cmd{enlargethispage*}\marg{lgr} donne une autorité plus grande à la commande \cmd{enlargethispage} en l'obligeant à agir sur les espacements élastiques verticaux contenus dans la page courante. \end{Rq}

\reponse Le fichier \fichier{block.sty} (source~\vref{block-sty}), de J.P. Drucbert, bricol\'e \`a partir de macros de diverses origines (dont D. Arseneau), permet certains controles.

Ce n'est pas parfait, mais cela a rendu service par le pass\'e.

\begin{file}{block.sty}{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 \end{file}

Vous pouvez protéger une zone contre la rupture de page. Il suffit pour cela de la placer dans un environnement \env{Block} ou dans un environnement \env{IBlock}. Dans le premier cas (\env{Block}), le premier paragraphe se trouvant dans la zone ne sera pas indenté, mais le sera dans le second cas (\env{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 \env{Block} par \env{IBlock}): \begin{noexemple} \begin{Block} … zone protégée … \end{Block} \end{noexemple}

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 \cmd{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.

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: \cmd{need}\marg{dimension}, dont le paramètre est une longueur, et \cmd{lneed}\marg{nombre}, dont le paramètre est le nombre de lignes équivalant à l'espace vertical demandé (avec cette forme le paramètre est plus facile à estimer).

\reponse Pour éviter les coupures de page (ou les coupures de colonnes avec le package \pack{multicol}) à l'intérieur des \cmd{item} dans une description (et d'ailleurs dans toute liste), solution simple sortie du \TeX{}book: \begin{noexemple} \begin{description}\interlinepenalty 10000 \end{noexemple}

3_composition/texte/pages/forcer_ou_empecher_un_saut_de_page.1033862709.txt.gz · Dernière modification: 2002/10/06 02:05 par benjamin
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0