% This is part of the book TeX for the Impatient. % Copyright (C) 2003 Paul W. Abrahams, Kathryn A. Hargreaves, Karl Berry. % Copyright (C) 2004 Marc Chaudemanche pour la traduction française. % See file fdl.tex for copying conditions. \input fmacros \chapter {Commandes pour \linebreak composer des pages} \chapterdef{pages} Cette section couvre des commandes qui concernent les pages, leurs composants et la routine de sortie. Pour une explication des conventions utilis\'ees dans cette section, voir \headcit{Descriptions des commandes}{cmddesc}. \begindescriptions %========================================================================== \section {Espaces inter-ligne et inter-paragraphe} \begindesc \cts baselineskip {\param{ressort}} \cts lineskiplimit {\param{dimension}} \cts lineskip {\param{ressort}} \explain ^^{espacement de ligne} \bix^^{ressort inter-ligne} \bix^^|\baselineskip| \bix^^|\lineskip| \bix^^|\lineskiplimit| Ces trois param\`etres d\'eterminent ensemble combien d'espace \TeX\ laisse entre des \minref{bo\^\i te}s cons\'ecutives d'une \minref{liste verticale} ordinaire, c'est-\`a-dire, les lignes d'un paragraphe. Cet espace est appel\'e ``\minref{ressort inter-ligne}''. Il est aussi ins\'er\'e entre les bo\^\i tes composant une vbox construite en mode vertical interne. ^^{vbox//ressort inter-ligne pour} Dans le cas courant, quand les bo\^\i tes ne sont pas anormalement hautes ou profondes, \TeX\ rend la distance de la ligne de base d'une bo\^\i te \`a la ligne de base de la suivante \'egale \`a |\baselineskip|. Il fait cela en ins\'erant un ressort inter-ligne \'egal \`a |\baselineskip| moins la profondeur de la bo\^\i te sup\'erieure (ainsi donn\'e par ^|\prevdepth|) et la hauteur de la bo\^\i te du dessous. Mais si ce ressort inter-ligne doit \^etre inf\'erieur \`a |\lineskiplimit|, indiquant que les deux bo\^\i tes sont trop rapproch\'ees, \TeX\ ins\`ere le ressort |\lineskip| \`a la place.\footnote {\TeX\ d\'ebute normalement le d\'ebut d'une liste verticale en mettant |\prevdepth| \`a $-1000$\pt\ et en testant |\prevdepth| avant \emph{toutes} les bo\^\i tes. Si |\prevdepth|$\>\le-1000$\pt\ il ne doit ins\'erer aucun ressort inter-ligne.} Voir les \knuth{pages~79--80}{93} pour une description pr\'ecise. Notez que |\baselineskip| et |\lineskip| mesurent des \emph{choses diff\'e\-rentes}~: La distance entre des lignes de base d'un cot\'e et la distance entre le bas d'une bo\^\i te et le haut de la bo\^\i te suivante d'un autre cot\'e. Voir la \knuth{page~78}{91--92} pour d'autres d\'etails. Le premier exemple ci-dessous montre les effets de |\lineskiplimit|. Vous pouvez obtenir l'effet d'un ^{double espacement} en doublant la valeur de |\baselineskip| comme illustr\'e dans le second exemple ci-des\-sous. Une modification de |\baselineskip| \`a n'importe quel endroit pr\'ec\'e\-dent la fin d'un paragraphe affecte le paragraphe entier. \example \baselineskip = 11pt \lineskiplimit = 1pt \lineskip = 2pt plus .5pt Sometimes you'll need to typeset a paragraph that has tall material, such as a mathematical formula, embedded within it. An example of such a formula is $n \choose k$. Note the extra space above and below this line as compared with the other lines. (If the formula didn't project below the line, we'd only get extra space above the line.) | \produces \baselineskip = 11pt \lineskiplimit = 1pt \lineskip = 2pt plus .5pt Sometimes you'll need to typeset a paragraph that has tall material, such as a mathematical formula, embedded within it. An example of such a formula is $n \choose k$. Note the extra space above and below this line as compared with the other lines. (If the formula didn't project below the line, we'd only get extra space above the line.) \endexample \example \baselineskip = 2\baselineskip % Start double spacing. | \endexample \eix^^{ressort inter-ligne} \eix^^|\baselineskip| \eix^^|\lineskip| \eix^^|\lineskiplimit| \enddesc \begindesc \cts prevdepth {\param{dimension}} \explain Quand \TeX\ ajoute une bo\^\i te \`a une liste verticale, il r\`egle |\prevdepth| \`a la hauteur de cette bo\^\i te. \TeX\ met |\prevdepth| \`a $-10000$\pt\ au d\'ebut d'une liste verticale, indiquant que le ressort inter-ligne normal doit \^etre supprim\'e. \enddesc \begindesc \cts normalbaselineskip {\param{ressort}} \cts normallineskiplimit {\param{dimension}} \cts normallineskip {\param{ressort}} \cts normalbaselines {} \explain Ces trois param\`etres contiennent des valeurs pour |\base!-line!-skip|, |\li!-neskip| et |\line!-skip!-limit| respectivement. ^^|\baselineskip| ^^|\lineskip| ^^|\lineskiplimit| La commande |\normal!-base!-lines| met |\base!-line!-skip|, |\line!-skip| et |\line!-skip!-limit| aux va\-leurs contenues dans les trois param\`etres. \enddesc \begindesc \cts offinterlineskip {} \explain Cette commande demande \`a \TeX\ d'arr\^eter d'ins\'erer des ressorts inter-ligne \`a partir de maintenant. \`A moins que vous vouliez qu'il soit effectif pour le reste du document (ce que vous ne voulez probablement pas), vous devez l'englober dans un groupe avec le texte que vous voulez qu'il affecte. Son principal usage est de vous laisser faire l'espacement inter-ligne vous-m\^eme, c'est-\`a-dire, en utilisant ^{struts}, sans interf\'erence du ressort inter-ligne normal de \TeX. |\offinterlineskip| est souvent utile quand vous construisez un \minref{alignement} horizontal. ^^{alignements//utiliser \b\tt\\offinterlineskip\e\ dans des} \example \def\entry#1:#2 {\strut\quad#1\quad&\quad#2\quad\cr} \offinterlineskip \tabskip = 0pt \halign{% \vrule\quad\hfil#\hfil\quad\vrule& \quad\hfil#\hfil\quad\vrule\cr \noalign{\hrule} \vphantom{\vrule height 2pt}&\cr \noalign{\hrule} \entry \it Opera:\it Composer \vphantom{\vrule height 2pt}&\cr \noalign{\hrule} \vphantom{\vrule height 2pt}&\cr \entry Fidelio:Beethoven \entry Peter Grimes:Britten \entry Don Giovanni:Mozart \vphantom{\vrule height 2pt}&\cr \noalign{\hrule}} | \produces \medskip \def\entry#1:#2 {\strut\quad#1\quad&\quad#2\quad\cr} \offinterlineskip \tabskip = 0pt \halign{% \vrule\quad\hfil#\hfil\quad\vrule& \quad\hfil#\hfil\quad\vrule\cr \noalign{\hrule} \vphantom{\vrule height 2pt}&\cr \noalign{\hrule} \entry \it Opera:\it Composer \vphantom{\vrule height 2pt}&\cr \noalign{\hrule} \vphantom{\vrule height 2pt}&\cr \entry Fidelio:Beethoven \entry Peter Grimes:Britten \entry Don Giovanni:Mozart \vphantom{\vrule height 2pt}&\cr \noalign{\hrule}} \endexample \enddesc \begindesc \cts nointerlineskip {} \explain Cette commande demande \`a \TeX\ de ne pas ins\'erer de ressort inter-ligne devant la prochaine ligne. Elle n'a aucun effet sur les lignes suivantes. \enddesc \begindesc \cts openup {\} \explain Cette commande augmente ^|\baselineskip| de \. Une commande |\openup| avant la fin d'un paragraphe affecte tout le paragraphe, donc vous ne devez pas utiliser |\openup| pour changer |\baseline!-skip| dans un paragraphe. |\openup| est plus utile pour composer des tables et des affichages math\'ematiques---un petit espace suppl\'ementaire entre des rang\'ees les rend souvent plus lisibles. ^^{alignements//espace entre rang\'ees d'} \example Alice picked up the White King very gently, and lifted him across more slowly than she had lifted the Queen; but before she put him on the table, she thought she might well dust him a little, he was so covered with ashes. \openup .5\baselineskip % 1.5 linespacing. | \produces Alice picked up the White King very gently, and lifted him across more slowly than she had lifted the Queen; but before she put him on the table, she thought she might well dust him a little, he was so covered with ashes. \openup .5\baselineskip %1.5 linespacing \endexample\enddesc %========================================================================== \section {Coupures de page} %========================================================================== \subsection {Encourager ou d\'ecourager des coupures de page} \begindesc \bix^^{coupures de page} \bix^^{coupures de page//encourager ou d\'ecourager} \ctspecial break {} \xrdef{vbreak} \explain % \margin{Four commands identical to ones for line breaks (\xref{hbreak}) have been added to correct an omission. The descriptions are exactly parallel.} % Cette commande force une coupure de page. \`a moins que vous ne fassiez quelque chose pour compl\'eter la page, Vous obtiendrez s\^urement un ``underfull vbox''. |\break| peut aussi \^etre utilis\'e en mode horizontal. \enddesc \begindesc \ctspecial nobreak {} \xrdef{vnobreak} \explain Cette commande emp\^eche une coupure de page l\`a o\`u elle aurait du arriver autrement. |\nobreak| peut aussi \^etre utilis\'e en mode horizontal. \enddesc \begindesc \ctspecial allowbreak {} \xrdef{vallowbreak} \explain Cette commande demande \`a \TeX\ d'autoriser une coupure de page l\`a o\`u elle ne pourrait normalement pas arriver. |\allowbreak| peut aussi \^etre utilis\'e en mode horizontal. \enddesc \begindesc \ctspecial penalty {\} \xrdef{vpenalty} \explain Cette commande produit un \'el\'ement de \minref{p\'enalit\'e}. L'\'el\'ement de p\'enalit\'e rend \TeX\ plus ou moins d\'esireux de couper une page \`a l'endroit o\`u cet \'el\'ement arrive. Une p\'enalit\'e n\'egative, c'est-\`a-dire, un bonus, encourage une coupure de page~; Une p\'enalit\'e positive d\'ecourage une coupure de page. Une p\'enalit\'e de $10000$ ou plus emp\^eche toute coupure, tandis qu'une p\'enalit\'e de $-10000$ ou moins force une coupure. |\penalty| peut aussi \^etre utilis\'e en mode horizontal. \example \def\break{\penalty-10000 } % as in plain TeX \def\nobreak{\penalty10000 } % as in plain TeX \def\allowbreak{\penalty0 } % as in plain TeX | \endexample \enddesc \begindesc \cts goodbreak {} \explain Cette commande termine un paragraphe et indique aussi \`a \TeX\ que c'est un bon endroit pour couper la page. \enddesc \begindesc \cts smallbreak {} \cts medbreak {} \cts bigbreak {} \explain Ces commandes indiquent des endroits de plus en plus d\'esirables pour \TeX\ de couper une page. Elles demande aussi \`a \TeX\ d'ins\'erer respectivement un ^|\smallskip|, ^|\medskip| ou ^|\bigskip| (\xref \smallskip) si la coupure de page ne se produit pas l\`a. \TeX\ supprime ce saut s'il se produit juste apr\`es un saut \'egal ou plus grand. \enddesc \begindesc \easy\cts eject {} \cts supereject {} \explain Ces commandes forcent une coupure de page \`a la position courante et terminent le paragraphe courant. Si vous ne les pr\'ec\'edez pas de |\vfil| (\xref \vfil), ^^|\vfil//n\'ecessaire avec {\tt\\eject}| \TeX\ essayera d'\'etirer le contenu de la page (et se plaindra probablement d'un ``underfull vbox''). La commande |\supereject|, en plus, enclenche la routine de sortie de \plainTeX\ pour faire sortir toutes insertions en surplus, ^^{insertions//forc\'es par \b\tt\\supereject\e} telles que de longues notes de pied de page, ainsi elle sont produites avant que toute autre entr\'ee soit ex\'ecut\'ee. Donc |\supereject| est un bonne commande \`a utiliser \`a la fin de chaque chapitre ou autre division majeure de votre document. \enddesc \begindesc \cts filbreak {} \explain Cette commande procure une sorte de coupure de page conditionnelle. Elle demande \`a \TeX\ de couper la page---sauf si le texte d'une autre |\filbreak| se trouve aussi sur la m\^eme page. En englobant un paragraphe dans une paire de |\filbreak|, vous pouvez vous assurer que \TeX\ gardera un paragraphe sur une seule page s'il le peut. Vous ne devez pas utiliser |\filbreak| dans un paragraphe, car il force \TeX\ en mode vertical et ainsi termine la paragraphe. Voir \xrefpg{filbreak} pour plus de conseil sur ce sujet. \enddesc \begindesc \cts raggedbottom {} \cts normalbottom {} \explain Normalement \TeX\ essaye fortement de s'assurer que toutes les pages aient la m\^eme profondeur, c'est-\`a-dire, que leurs marges du bas soient \'egales. La commande |\raggedbottom| demande \`a \TeX\ d'autoriser quelques variations parmi les marges du bas sur diff\'erentes pages. Il est souvent appropri\'e d'utiliser |\raggedbottom| quand vous avez du mat\'eriel qui contient de larges blocs de mat\'eriel qui ne doivent pas \^etre s\'epar\'es sur deux pages. La commande |\normalbottom| efface l'effet de |\raggedbottom|. \eix^^{coupures de page//encourager ou d\'ecourager} \enddesc %========================================================================== \subsection {Param\`etres de coupure de page} \bix^^{coupures de page//param\`etres de} \begindesc \cts interlinepenalty {\param{nombre}} \explain Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une coupure de page entre les lignes d'un paragraphe. En le mettant \`a $10000$ vous pouvez forcer toutes les coupures de page \`a se faire entre les paragraphes, en esp\'erant que les pages aient assez d'\'etirement pour que \TeX\ puisse les composer d\'ecemment. \PlainTeX\ laisse |\inter!-linepenalty| \`a~$0$. \enddesc \begindesc \cts clubpenalty {\param{nombre}} \explain ^^{ligne orpheline} Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une coupure de page juste apr\`es la premi\`ere ligne d'un paragraphe. Une ligne seule en bas d'une page est appel\'ee une ``ligne orpheline''. \PlainTeX\ met |\clubpenalty| \`a $150$. \enddesc \begindesc \cts widowpenalty {\param{nombre}} \explain ^^{ligne veuve} Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une coupure de page juste avant la derni\`ere ligne d'un paragraphe. Une ligne seule en haut d'une page est appel\'ee une ``ligne veuve''. \PlainTeX\ met |\widowpenalty| \`a $150$. \enddesc \begindesc \cts displaywidowpenalty {\param{nombre}} \explain ^^{ligne veuve}^^{math\'ematiques affich\'ees} Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une coupure de page juste avant la derni\`ere ligne d'un paragraphe partiel qui pr\'ec\`ede imm\'ediatement un affichage math\'ematique. \PlainTeX\ met |\displaywidowpenalty| \`a $50$. \enddesc \begindesc \cts predisplaypenalty {\param{nombre}} \explain ^^{math\'ematiques affich\'ees} Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une coupure de page juste avant un affichage math\'ematique. \PlainTeX\ met |\predisplaypenalty| \`a $10000$. \enddesc \begindesc \cts postdisplaypenalty {\param{nombre}} \explain ^^{math\'ematiques affich\'ees} Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une coupure de page juste apr\`es un affichage math\'ematique. \PlainTeX\ laisse |\postdisplaypenalty| \`a $0$. \enddesc \begindesc \cts brokenpenalty {\param{nombre}} \explain Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} pour une coupure de page juste apr\`es une ligne se terminant par une \'el\'ement optionnel (habituellement une c\'esure). ^^{c\'esure} |\brokenpenalty| s'applique aux coupure de page, tandis que ^|\hyphenpenalty| \ctsref{\hyphenpenalty} s'applique aux coupure de ligne. \PlainTeX\ met |\brokenpenalty| \`a $100$. \enddesc \begindesc \cts insertpenalties {\param{nombre}} \explain \bix^^{insertions//p\'enalit\'es pour} \bix^^{mat\'eriel flottant} Ce param\`etre contient la somme de certaines p\'enalit\'es \minrefs{p\'enalit\'e} que \TeX\ accumule quand il place des insertions sur la page courante. Ces p\'enalit\'es encourent une plainte quand \TeX\ ex\'ecute une commande |\insert| et d\'ecouvre qu'une insertion pr\'ec\'edente du m\^eme type sur cette page a \'et\'e s\'epar\'ee, laissant une partie pour les page suivantes. Voir les \knuth{pages~123--125}{143--146} pour les d\'etails de ce calcul. \margin{Material moved from a footnote to the main text.} |\insertpenalties| a une signification enti\`erement diff\'erente pendant une ^^{routine de sortie//signification de \b\tt\\insertpenalties\e\ dans la} routine de sortie---c'est le nombre d'insertions qui ont \'et\'e vues mais qui ne tiennent pas sur la page courante (voir la \knuth{page~125}{146}). \enddesc \begindesc \cts floatingpenalty {\param{nombre}} \explain Ce param\`etre sp\'ecifie la \minref{p\'enalit\'e} que \TeX\ ajoute \`a |\insertpenalties| ^^|\insertpenalties| quand le constructeur de page ajoute une insertion \`a la page courante et d\'ecouvre qu'une insertion pr\'ec\'edente du m\^eme type sur cette page a \'et\'e coup\'ee, en laissant une partie d'elle pour des pages suivantes. \PlainTeX\ laisse |\floatingpenalty| \`a~$0$. \eix^^{insertions//p\'enalit\'es pour} \eix^^{mat\'eriel flottant} \enddesc \begindesc \cts pagegoal {\param{dimension}} \explain Ce param\`etre sp\'ecifie la hauteur d\'esir\'ee pour la page courante. \TeX\ met |\pagegoal| \`a la valeur courante de |\vsize| quand il met en premier une bo\^\i te ou une insertion sur la page courante. Vous pouvez raccourcir une page tant que \TeX\ travaille sur elle en changeant la valeur de |\pagegoal|---m\^eme si la nouvelle valeur est inf\'erieure \`a la hauteur du mat\'eriel d\'ej\`a sur cette page. \TeX\ mettra juste le mat\'eriel en plus sur la page suivante. Mais souvenez-vous---|\pagegoal| est remis \`a |\vsize| quand \TeX\ commence la page suivante. \enddesc \begindesc \cts pagetotal {\param{dimension}} \explain Ce param\`etre sp\'ecifie la hauteur naturelle accumul\'ee sur la page courante. \TeX\ met \`a jour |\pagetotal| quand il ajoute des \'el\'ements \`a la \minref{liste verticale} principale. \enddesc \begindesc \cts pagedepth {\param{dimension}} \explain Ce param\`etre sp\'ecifie la profondeur de la page courante. \TeX\ met \`a jour |\pagedepth| quand il ajoute des \'el\'ements \`a la \minref{liste verticale} principale. \enddesc \begindesc \cts pageshrink {\param{dimension}} \explain Ce param\`etre sp\'ecifie le montant de \minref{r\'etr\'ecissement} dans les \minref{ressort} accumul\'es sur la page courante. \TeX\ met \`a jour |\pageshrink| quand il ajoute des \'el\'ements \`a la \minref{liste verticale} principale. \enddesc \begindesc \cts pagestretch {\param{dimension}} \cts pagefilstretch {\param{dimension}} \cts pagefillstretch {\param{dimension}} \cts pagefilllstretch {\param{dimension}} \explain Ces quatre param\`etres sp\'ecifient ensemble le montant d'\minref{\'etirement} dans les \minref{ressort}s de la page courante. Le montant d'\'etirement a la forme {\def\f#1{\hbox{\tt fi#1}}% $n_0 + n_1\f{l} + n_2\f{ll} + n_3\f{lll}$}, avec les quatre param\`etres donnant les valeurs des quatre $n_i$. \TeX\ met \`a jour ces param\`etres quand il ajoute des \'el\'ements \`a la \minref{liste verticale} principale. \eix^^{coupures de page//param\`etres de} \eix^^{coupures de page} \enddesc %========================================================================== \section{Gabarit de page} \subsection {Param\`etres de description de page} \begindesc \bix^^{dimensions de page} \margin{This command was also described in the `Paragraphs' section. The combined description now appears there.} \aux\cts hsize {\param{dimension}} \explain Ce param\`etre sp\'ecifie la longueur de la ligne courante. Voir \xrefpg{\hsize} pour une plus compl\`ete explication. \enddesc \begindesc \cts vsize {\param{dimension}} \explain Ce param\`etre sp\'ecifie l'extension verticale courante d'une page. \TeX\ ne l'examine qu'en commen\c cant une page. Donc si vous changez |\vsize| dans le milieu d'une page, votre changement n'affectera rien avant la page suivante. Si vous voulez changer l'extension verticale d'une page quand vous en \^etes au milieu, vous pouvez assigner la nouvelle hauteur \`a ^|\pagegoal| (\xref \pagegoal) \`a la place. (Si vous voulez que le changement affecte aussi les pages suivantes, vous devez changer \emph{ensemble} |\vsize| et |\pagegoal|.) \PlainTeX\ met |\vsize| \`a |8.9in|. \eix^^{dimensions de page} \enddesc \begindesc \cts hoffset {\param{dimension}} \cts voffset {\param{dimension}} \margin{These commands were moved up from later in the subsection.} ^^{origine de la page} \idxsee{origine}{origine de la page} \explain \TeX\ prend normalement l'``origine'' d'une page, qui est le point o\`u il d\'ebute l'impression, comme \'etant \`a un pouce sous le haut de la page et \`a un pouce \`a droite du bord gauche de la page.\footnote{ \TeX\ lui-m\^eme est indiff\'erent d'o\`u est l'origine de la page, mais cette information doit \^etre inscrite pour les drivers du syst\`eme ^^{drivers de p\'eriph\'erique//origine de la page connu des} qui convertissent les \dvifile\ en forme imprimable, ainsi ces diff\'erents syst\`emes donneront les m\^eme r\'esultats.} Les valeurs de |\hoffset| et |\voffset| donnent l'offset horizontal et vertical de l'origine actuelle \`a partir de ce point. Ainsi si |\hoffset| et |\voffset| sont tous les deux \`a z\'ero, \TeX\ utilise son origine normale. \example \hoffset = -.3in % Start printing .7 inches from left edge of paper. \voffset = 1in % Start printing 2 inches from top edge of paper. | \endexample \enddesc \begindesc \cts topskip {\param{ressort}} \explain \TeX\ ins\`ere un ressort en haut de chaque page pour s'assurer que la ligne de base de la premi\`ere bo\^\i te de la page soit toujours \`a la m\^eme distance $d$ du haut de la page. |\topskip| d\'etermine le montant de ce ressort, appel\'e le ``ressort |\topskip|'', en sp\'ecifiant ce que $d$ doit \^etre (pr\'evoyez que la premi\`ere bo\^\i te de la page ne soit pas trop haute). $d$ est donn\'e par la taille naturelle du ressort |\topskip|. Si la hauteur de la premi\`ere bo\^\i te sur la page d\'epasse $d$, et que le ressort devrait \^etre n\'egatif, \TeX\ n'ins\`ere simplement pas de ressort |\topskip| du tout sur cette page. Pour mieux comprendre l'effet de ces r\`egles, supposez que |\topskip| n'a ni \'etirement ni r\'etr\'ecissement et que le premier \'el\'ement sur la page soit vraiment une bo\^\i te. Alors si la hauteur de cette bo\^\i te n'est pas plus grande que |\topskip|, sa ligne de base sera \`a |\topskip| du haut de la page ind\'ependamment de sa hauteur. D'un autre cot\'e, si la hauteur de la bo\^\i te est $e$, plus grande que |\topskip|, sa ligne de base sera \`a |\topskip|\tplus$e$ du haut de la page. Voir les \knuth{pages~113--114}{132} pour les autres d\'etails sur le fonctionnement de |\topskip|. \PlainTeX\ met |\topskip| \`a |10pt|. \enddesc \begindesc \cts parskip {\param{ressort}} \explain Ce param\`etre sp\'ecifie le ``^{saut de paragraphe}'', c'est-\`a-dire, le ressort vertical que \TeX\ ins\`ere au d\'ebut d'un paragraphe. ^^{paragraphes//ressort entre} Voir |\par| (\xref{\@par}) pour plus d'information sur ce qui se passe quand \TeX\ d\'ebute un paragraphe. \PlainTeX\ met |\parskip| \`a |0pt plus 0.1pt|. \enddesc \begindesc \cts maxdepth {\param{dimension}} \explain Ce param\`etre sp\'ecifie la profondeur maximum de la \minref{bo\^\i te} du bas d'une page. Il est reli\'e \`a |\boxmaxdepth| (\xref \boxmaxdepth). Si la profondeur de la bo\^\i te du bas d'une page d\'epasse |\maxdepth|, \TeX\ descend le point de r\'ef\'erence de la bo\^\i te pour qu'il soit \`a |\maxdepth| du bas de cette bo\^\i te. Sans cet ajustement, la bo\^\i te du bas d'une page pourrait bien s'\'etendre dans la marge du bas ou m\^eme recouvrir la page enti\`erement. \PlainTeX\ met |\maxdepth| \`a |4pt|. \enddesc %========================================================================== \subsection{Num\'eros de page} \begindesc \bix^^{num\'erotation de page} \cts pageno {\param{nombre}} \explain Ce param\`etre contient le num\'ero de page courant sous la forme d'un entier. Le num\'ero de page est normalement n\'egatif pour les pages d'intro\-duction qui sont num\'erot\'ees avec des petits chiffres romains au lieu des nombres arabes. Si vous changez le num\'ero de page dans une page, le num\'ero modifi\'e sera utilis\'e dans tous les ent\^etes ou pieds de page qui apparaissent sur cette page. L'impression actuelle des num\'eros de page est prise en main par la \minref{routine de sortie} de \TeX, que vous pouvez modifier. \PlainTeX\ garde le num\'ero de page dans le \minref{registre} ^|\count0|. (|\pageno| est, en fait, un synonyme de |\count0|.) \`a chaque fois qu'il envoie une page vers le \dvifile, ^^|\shipout//registres {\tt\\count} affich\'es avec| \TeX\ affiche la valeur courante de |\count0| sur votre terminal pour que vous puissiez dire sur quelle page il est en train de travailler. Il est possible d'utiliser des registres |\count1|--|\count9| pour embo\^\i ter des niveaux de num\'eros de page (vous devez programmer cela vous-m\^eme). Si un de ces registres est diff\'erent de z\'ero, \TeX\ l'affiche aussi sur votre terminal.\footnote{ Plus pr\'ecis\'ement, il affiche tous les registres en s\'equence de |\count0| \`a |\count9|, mais omet les registres restants \`a z\'ero. Par exemple, si les valeurs de |\count0|--|\count3| sont $(17, 0 , 0, 7)$ et que les autres sont \`a $0$, \TeX\ affiche le num\'ero de page ainsi {\tt [17.0.0.7]}.} \example This explanation appears on page \number\pageno\ of our book. | \produces This explanation appears on page \number\pageno\ of our book. \nextexample \pageno = 30 % Number the next page as 30. Don't look for this explanation on page \number\pageno. | \produces Don't look for this explanation on page 30. \endexample \enddesc \begindesc \cts advancepageno {} \explain Cette commande ajoute $1$ au num\'ero de page $n$ dans |\pageno| si $n\ge0$ et lui soustrait $1$ si $n<0$. \enddesc \begindesc \easy\cts nopagenumbers {} \explain Par d\'efaut, \plainTeX\ produit un pied de page contenant un num\'ero de page centr\'e. Cette commande demande \`a \TeX\ de produire un pied de page blanc \`a la place. \enddesc \begindesc \cts folio {} \explain Cette commande produit le num\'ero de page courant, dont la valeur est le num\'ero $n$ contenu dans ^|\pageno|. Si $n\ge0$, \TeX\ produit $n$ comme un nombre d\'ecimal, tandis que si $n<0$, \TeX\ produit $-n$ en chiffre romain minuscule. \example This explanation appears on page \folio\ of the book. | \produces This explanation appears on page \folio\ of the book. \endexample \eix^^{num\'erotation de page} \enddesc %========================================================================== \subsection{Lignes d'ent\^ete et de pied de page} \begindesc%\secondprinting{\vglue-.75\baselineskip\vskip0pt} \cts headline {\param{liste de token}} \cts footline {\param{liste de token}} \explain Ces param\`etres contiennent, respectivement, la ligne de t\^ete courante (ent\^ete) et la ligne de pied de page courante (pied de page). La routine de sortie de \plainTeX\ place la ligne de t\^ete en haut de chaque page et ligne de pied de page en bas de chaque page. La ligne de t\^ete par d\'efaut est vide et la ligne de pied de page par d\'efaut est un num\'ero de page centr\'e. Les lignes de t\^ete et de pied de page doivent \^etre toutes les deux aussi large que |\hsize| (utilisez |\hfil|, \xref{\hfil}, pour cela si n\'ecessaire). Vous devez toujours inclure une commande de s\'election de police dans ces lignes, sinon la police courante est impr\'evisible quand \TeX\ appelle la routine de sortie. Si vous ne s\'electionnez la police explicitement, vous obtiendrez n'importe quelle police que \TeX\ utilisait quand il a coup\'e la page. N'essayez pas d'utiliser |\headline| ou |\footline| pour produire des ent\^etes ou des pieds de page multi-lignes. Bien que \TeX\ ne se plaindra pas, cela vous donnera quelque chose de tr\`es laid. Voir \xrefpg{bighead} pour une m\'ethode de cr\'eation d'ent\^ete ou de pied de page multi-ligne. \example \headline = {\tenrm My First Reader\hfil Page \folio} | \produces \pageno = 10 \line{\tenrm \noindent My First Reader\hfil Page \folio} \par ({\it at the top of page \folio}\/) \nextexample \footline = {\tenit\ifodd\pageno\hfil\folio \else\folio\hfil\fi} % Produce the page number in ten-point italic at % the outside bottom corner of each page. | \endexample\enddesc %\secondprinting{\vfill\eject} %========================================================================== \subsection {Marques} \begindesc \cts mark {\rqbraces{\}} \explain \bix^^{marques} Cette commande fait que \TeX\ attache une marque contenant \ \`a toute liste qu'il est en train de construire. G\'en\'eralement vous ne devez pas utiliser |\mark| dans une construction ``interne'' comme une formule math\'ematique ou une \minref{bo\^\i te} que vous avez construit avec une commande |\hbox|, |\vbox| ou |\vtop|, parce que \TeX\ ne verra pas la marque quand il construira la bo\^\i te principale de la page. Mais si vous utilisez |\mark| en \minref{mode} horizontal ordinaire ou directement dans une hbox qui fait partie de la liste verticale principale, la marque migrera vers la \minref{liste verticale} principale. Voir les \knuth{pages~259--260}{304--305} pour des exemples montrant comment |\mark| peut \^etre utilis\'e. \enddesc \begindesc \cts firstmark {} \cts botmark {} \cts topmark {} \explain Ces commandes d\'eveloppent le texte de la marque dans un \'el\'ement g\'en\'er\'e par une pr\'ec\'edente commande ^|\mark|. Le texte de la marque a la forme d'une liste de token. \TeX\ met la valeur de ces commandes quand il termine le placement du contenu d'une page dans ^|\box255|, juste avant d'appeler la \minref{routine de sortie} comme une partie de son action de \minref{coupure de page}. \TeX\ d\'etermine ces valeurs comme suit~: \ulist\compact \li |\firstmark| contient les tokens de la premi\`ere marque de la page. \li |\botmark| contient les tokens de la derni\`ere marque de la page. \li |\topmark| contient les tokens de la marque qui est effective tout en haut de la page. Cette marque est la derni\`ere marque qui \emph{pr\'ec\`ede} la page, c'est-\`a-dire, le |\botmark| de la page pr\'ec\'edente. Il est vide si aucune page ne pr\'ec\`ede la page. \endulist \noindent Si une page n'a aucune marque sur elle, \TeX\ mettra |\firstmark| et |\botmark| avec la m\^eme marque que |\topmark|, c'est-\`a-dire, la plus r\'ecente marque pr\'ec\'edente. La table en bas de la \knuth{page~258}{303} illustre la relation entre |\firstmark|, |\botmark| et |\topmark|. \enddesc \begindesc \cts splitfirstmark {} \cts splitbotmark {} \explain ^^{marques//pour listes d\'edoubl\'ees} Ces commandes d\'eveloppent le ^{texte de marque} g\'en\'er\'e par une commande ^|\mark| pr\'ec\'edente qui produisent un \'el\'ement dans la liste d'\'el\'ement d'une vbox $V$. Le texte de marque a la forme d'une liste de token. Quand \TeX\ s\'epare $V$ en r\'eponse \`a une commande ^|\vsplit| (\xref \vsplit), il met les valeurs de ces commandes comme suit~: \ulist\compact \li |\splitfirstmark| contient les tokens de la premi\`ere marque dans la liste d'\'el\'ement de $V$. \li |\splitbotmark| contient les tokens de la derni\`ere marque dans la liste d'\'el\'ement de $V$. \endulist Ces commandes ne produisent aucun token s'il n'y a pas de |\vsplit| pr\'ec\'edent ou si le plus r\'ecent |\vsplit| pr\'ec\'edent ne contient aucune marque. \eix^^{marques} \enddesc %========================================================================== \section {Insertions} \subsection {Pieds de page} \begindesc \easy\cts footnote {\ \} \cts vfootnote {\ \} \explain Ces commandes produisent des notes de pied de page. \ est la ``^{marque de r\'ef\'erence}'' pour la note de pied de page et \ est son texte. Le texte peut faire plusieurs paragraphes de long si n\'ecessaire et peut contenir des constructions comme des affichages math\'ematiques, mais ne peut contenir aucune \minref{insertion} (comme d'autres notes de pied de page). Vous ne pouvez pas utiliser ces commandes \`a l'int\'erieur d'une sous-formule d'une formule math\'ematique, dans une bo\^\i te \`a l'int\'erieur d'une bo\^\i te contribuant \`a une page ou dans une insertion de toute sorte. Si vous n'\^etes pas s\^ur de la mani\`ere dont ces restrictions s'appliquent, il peut \^etre sage de n'utiliser |\footnote| et |\vfootnote| que directement dans un paragraphe ou entre des paragraphes. Ces restrictions ne sont pas aussi s\'ev\`eres qu'elles ne le semblent parce que vous pouvez utiliser |\vfootnote| pour mettre en note de pied de page la plupart des choses. |\foot!-note| et |\vfoot!-note| ins\`erent tous les deux des marques de r\'ef\'erence en t\^ete de la note de pied de page elle-m\^eme, mais |\vfoot!-note| n'ins\`ere pas la marque de r\'ef\'erence dans le texte. Ainsi, quand vous utilisez |\vfoot!-note| vous pouvez ins\'erer explicitement la marque de r\'ef\'erence n'importe o\`u, sans que cela concerne le contexte et placer le |\vfootnote| dans le paragraphe suivant. Si vous trouvez que la note de bas de page atterrit sur la page suivant celle o\`u elle devrait, d\'eplacez le |\vfootnote| vers le paragraphe pr\'ec\'edent. Il y a de rares circonstances o\`u vous devez alt\'erer le texte de votre document pour qu'une note de bas de page apparaisse sur la m\^eme page que sa marque de r\'ef\'erence. \example To quote the mathematician P\'olya is a ploy.\footnote *{This is an example of an anagram, but not a strict one.} | \produces To quote the mathematician P\'olya is a ploy.* \par\line{\hskip .5in \vdots\hfil} \nointerlineskip \bigskip \footnoterule\par\parindent = 12pt \textindent{*}This is an example of an anagram, but not a strict one. \endexample \example $$f(t)=\sigma\sigma t\;\raise 1ex \hbox{\dag}$$ \vfootnote \dag{The $\sigma\sigma$ notation was explained in the previous section.} | \produces $$f(t)=\sigma\sigma t\>\raise 1ex \hbox{\dag}$$ \par\line{\hskip .5in \vdots\hfil} \nointerlineskip \bigskip \footnoterule\par\parindent = 12pt \textindent{\dag}{The $\sigma\sigma$ notation was explained in the previous section.} \endexample \enddesc %========================================================================== \subsection {Insertions g\'en\'erales} \begindesc \bix^^{insertions//commandes pour} \cts topinsert {\ {\bt \\endinsert}} \cts midinsert {\ {\bt \\endinsert}} \cts pageinsert {\ {\bt \\endinsert}} \explain Ces commandes produisent diff\'erentes formes d'insertions qui informent (ou autorisent) \TeX\ \`a d\'elocaliser le \~: \ulist \li |\topinsert| essaye de mettre le mat\'eriel en haut de la page courante. S'il ne peut pas s'y ajuster, |\topinsert| d\'eplacera le mat\'eriel vers le prochain haut de page possible. \li |\midinsert| essaye de mettre le mat\'eriel \`a la position courante. S'il ne peut pas s'y ajuster, |\midinsert| d\'eplacera le mat\'eriel vers le prochain haut de page possible. \li |\pageinsert| met le mat\'eriel lui-m\^eme sur la page suivante. Pour \'eviter une page pas assez pleine, assurez vous de terminer le mat\'eriel ins\'er\'e avec |\vfil| ou remplissez l'espace excessif d'une autre mani\`ere. % Knuth doesn't say this, but I tried an experiment that verified it. % Nor does he say explicitly that an insertion does a \par. \endulist \noindent Le \ est dit \^etre ``flottant'' ^^{mat\'eriel flottant} parce que \TeX\ peut le d\'eplacer d'une place \`a une autre. Des insertions sont tr\`es pratiques pour du mat\'eriel tel que des figures et des tables parce que vous pouvez positionner ce mat\'eriel o\`u vous voulez sans savoir o\`u les coupures de page tomberont. Chacune de ces commandes termine implicitement le paragraphe cou\-rant, donc vous ne devez les utiliser qu'entre des paragraphes. Vous ne devez pas les utiliser dans une bo\^\i te ou dans d'autres insertions. Si vous avez plusieurs insertions en comp\'etition pour le m\^eme espace, \TeX\ conservera leur ordre relatif. \example \pageinsert % This text will appear on the following page, by itself. This page is reserved for a picture of the Queen of Hearts sharing a plate of oysters with the Walrus and the Carpenter. \endinsert | \endexample \enddesc \begindesc \cts endinsert {} \explain Cette commande termine une insertion d\'ebut\'ee par |\topinsert|, |\mid!-insert| ou |\pageinsert|. \enddesc \begindesc \cts insert {\ \rqbraces{\}} \explain \minrefs{insertion} Cette commande primitive fournit le m\'ecanisme sous-jacent la construction des insertions, mais elle n'est presque jamais utilis\'ee en dehors d'un d\'efinition de \minref{macro}. Les d\'efinitions des commandes |\foot!-note|, |\vfoot!-note|, |\top!-insert|, |\mid!-insert| et |\page!-insert| sont toutes construites autour d'|\insert|. ^^|\topinsert| ^^|\midinsert| ^^|\pageinsert| ^^|\footnote| ^^|\vfootnote| Quand vous concevez des insertions pour un document, vous devez assigner un code entier diff\'erent\footnote {\texbook{} utilise le terme ``classe'' pour un code. Nous pr\'ef\'erons un terme diff\'erent pour \'eviter toute confusion avec l'autre signification de ``classe'' (\xref{classe}).} $n$ pour chaque type d'insertion, utilisez la commande ^|\newinsert| (\xref{\@newinsert}) pour obtenir les codes entiers. La commande |\insert| elle-m\^eme annexe le \ \`a la \minref{liste verticale} ou horizontale courante. Notre \minref{routine de sortie} est responsable de d\'eplacer le mat\'eriel ins\'er\'e d'o\`u il r\'eside dans la |\box|$\,n$ vers la page de sortie. ^^{routine de sortie} \TeX\ regroupe ensemble toutes les insertions ayant le m\^eme num\'ero de code. Chaque code d'insertion $n$ a quatre \minref{registre}s qui lui sont associ\'es~: \ulist \li |\box|$\,n$ est l'endroit o\`u \TeX\ accumule le mat\'eriel pour des insertions avec le code $n$. Quand \TeX\ coupe une page, il met dans |\box|$\,n$ autant de mat\'eriel d'insertion $n$ qu'il pourra sur la page. Notre routine de sortie devra alors d\'eplacer ce mat\'eriel vers la page actuelle. Vous pouvez utiliser ^|\ifvoid| \ctsref{\@ifvoid} pour tester s'il y a du mat\'eriel dans |\box|$\,n$. Si tout le mat\'eriel ne rentre pas, \TeX\ sauve le surplus pour la page suivante. \li |\count|$\,n$ est un facteur de magnification $f$. Quand \TeX\ doit traiter l'espace vertical occup\'e sur la page dans le mat\'eriel d'insertion $n$, il multiplie l'extension verticale de ce mat\'eriel par $f/1000$. Ainsi vous mettrez normalement $f$ \`a $500$ pour une insertion en double-colonne et \`a $0$ pour une note~marginale. \li |\dimen|$\,n$ sp\'ecifie le montant maximum de mat\'eriel d'insertion $n$ que \TeX\ mettra sur une seule page. \li |\skip|$\,n$ sp\'ecifie un espace suppl\'ementaire que \TeX\ alloue sur la page si la page contient du mat\'eriel d'insertion $n$. Cet espace est en plus de l'espace occup\'e par l'insertion elle-m\^eme. Par exemple, il justifiera l'espace sur la page au-dessus des notes de pied de page (s'il y en a). \endulist \noindent \TeX\ d\'eclare |\box|$\,n$ et vous devez d\'eclarer les trois autres registres pour que \TeX\ puisse calculer correctement l'espace vertical requis par l'inser\-tion. Voir les \knuth{pages~122--125}{142--146} Pour d'autres d\'etails sur la fa\c con dont \TeX\ ex\'ecute ces commandes et comment des insertions interagissent avec les coupures de page. \xrdef{endofinsert} \enddesc \see |\floatingpenalty| (\xref \floatingpenalty). \eix^^{insertions//commandes pour} %========================================================================== \section{Modifier la routine de sortie} \bix^^{routine de sortie} \begindesc \cts output {\param{liste de token}} \explain Ce param\`etre contient la \minref{routine de sortie} courante, c'est-\`a-dire, La liste de token que \TeX\ d\'eveloppe quand il trouve une coupure de page. \TeX\ met la page dans la ^|\box255|, ainsi |\output| est responsable de faire quelque chose avec la |\box255|---soit la sortir, soit la mettre ailleurs. La routine de sortie est aussi responsable d'attacher des choses comme des ent\^etes ou des pieds de page. \enddesc \begindesc \cts plainoutput {} \explain Cette commande invoque la routine de sortie de \plainTeX. ^^{routine de sortie//par d\'efaut dans \plainTeX} \PlainTeX\ d\'efinit ^|\output| comme une liste de token contenant le seul et unique token |\plainoutput|. \enddesc \begindesc \cts shipout {\} \explain Cette commande charge \TeX\ d'envoyer \ vers le \dvifile. ^^{\dvifile//r\'eception de \boites\ de \b\tt\\shipout\e} \TeX\ d\'eveloppe toute commande |\write| dans \ comme une partie de |\shipout|. ^^|\write//d\'evelopp\'e durant {\tt\\shipout}| Le principal usage de |\shipout| est dans la routine de sortie, mais vous pouvez l'utiliser n'importe o\`u. \enddesc \begindesc \cts deadcycles {\param{nombre}} \explain Ce param\`etre contient le nombre de fois que \TeX\ a lanc\'e la \minref{routine de sortie} depuis la derni\`ere fois qu'il a fait un ^^|\shipout| |\ship!-out|.\footnote{ Plus pr\'ecis\'ement, \TeX\ met |\dead!-cyles| \`a $0$ \`a chaque fois qu'il ex\'ecute |\ship!-out| et l'incr\'emente de $1$ \`a chaque fois qu'il ex\'ecute |\output|.} Si |\deadcycles| devient trop grand, \TeX\ est probablement entr\'e dans une boucle, par exemple, une o\`u le constructeur de page essaye la m\^eme coupure de page \`a n'en plus finir. \enddesc \begindesc \cts maxdeadcycles {\param{nombre}} \explain Si la valeur de |\deadcycles| d\'epasse la valeur de |\maxdeadcycles|, \TeX\ pr\'esume que la routine de sortie est entr\'ee dans une boucle. \TeX\ se plaint alors et effectue sa propre et simple routine de sortie, \'equivalente \`a |\shipout!allowbreak\box255|, Ce qui brisera vraisemblablement la boucle. \PlainTeX\ met |\maxdeadcycles| \hbox{\`a $25$}. \enddesc \begindesc \cts outputpenalty {\param{nombre}} \explain \TeX\ met ce param\`etre quand il coupe une page. Si le point de coupure \'etait sur un \'el\'ement de \minref{p\'enalit\'e}, \TeX\ enl\`eve l'\'el\'ement de p\'enalit\'e et met |\outputpenalty| \`a la valeur de la p\'enalit\'e au point de coupure~; autrement, il met |\outputpenalty| \hbox{\`a $0$}. Supposez que vous d\'efaites une coupure de page pour couper la page \`a un endroit diff\'erent que celui que \TeX\ a choisi. Pour reconstruire la page, vous devez recr\'eer la p\'enalit\'e au point de coupure choisi par \TeX. Vous pouvez accomplir ceci avec la commande |\penalty!allowbreak\outputpenalty|. \enddesc \begindesc \cts holdinginserts {\param{nombre}} \explain Si ce param\`etre est plus grand que $0$ quand \TeX\ ex\'ecute une coupure de page, \TeX\ s'abstiendra \`a ex\'ecuter des insertions. Mettre ce param\`etre \`a $1$ peut \^etre utile quand vous \'ecrivez une routine de sortie qui \`a besoin de refaire le contenu de la page, par exemple, une routine de sortie qui utilise une valeur de |\vsize| (\xref \vsize) diff\'erente de celle utilis\'ee par le constructeur de page. \eix^^{routine de sortie} \enddesc %========================================================================== \section {S\'eparer des listes verticales} \begindesc \cts vsplit {\ {\bt to} \} \explain Cette commande fait que \TeX\ s\'epare la \minref{bo\^\i te} num\'ero \, que nous appellerons $B_2$, en deux parties. Il utilise le m\^eme algorithme que celui qu'il utiliserait si $B_2$ \'etait une page et qu'il coupait cette page. Le point de division correspond alors \`a la coupure de page qu'il trouverait. La bo\^\i te $B_2$ doit \^etre une vbox, pas une hbox. % we avoid starting the previous sentence with a symbol, a copyediting no-no. \TeX\ met le mat\'eriel pr\'ec\'edant le point de division dans un autre bo\^\i te $B_1$ et laisse le mat\'eriel apr\`es le point de division dans $B_2$. La commande |\vsplit| alors produit $B_1$. Normalement vous assignerez $B_1$ \`a un registre de bo\^\i te diff\'erent, comme dans l'exemple ci-dessous. Si le point de division est \`a la fin de $B_2$, $B_2$ sera vide apr\`es le |\vsplit|. \TeX\ emploie son algorithme de coupure de page habituel ^^{coupures de page//en liste d\'edoubl\'ees} pour la division. Il utilise \ pour ^|\pagegoal|, la hauteur d\'esir\'ee de $B_1$. L'extension verticale de $B_1$ peut ne pas \^etre exactement \'egale \`a \ parce que \TeX\ peut ne pas \^etre capable d\'~ achever son but de page parfaitement. \TeX\ ne prend pas en compte les insertions dans le calcul de la division, donc des insertions dans la liste verticale originale de $B_2$ seront maintenues mais n'affecteront pas le point de division. \example \setbox 20 = \vsplit 30 to 7in % Split off the first seven inches or so of material from % box 30 and place that material in box 20. | \endexample \enddesc \begindesc \cts splitmaxdepth {\param{dimension}} \explain Ce param\`etre sp\'ecifie la profondeur maximum autoris\'ee pour une bo\^\i te r\'esultant d'un |\vsplit|. |\splitmaxdepth| joue le m\^eme r\^ole que celui de ^|\maxdepth| (\xref \maxdepth) pour une page. \enddesc \begindesc \cts splittopskip {\param{ressort}} \explain Ce param\`etre sp\'ecifie le ressort que \TeX\ ins\`ere en haut d'une bo\^\i te r\'esultant d'un |\vsplit|. |\splittopskip| joue le m\^eme r\^ole que ^|\topskip| (\xref \topskip) joue pour une page. \enddesc \see |\splitbotmark|, |\splitfirstmark| (\xref \splitfirstmark). \enddescriptions \endchapter \byebye