diff options
author | Norbert Preining <norbert@preining.info> | 2020-01-05 03:00:30 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2020-01-05 03:00:30 +0000 |
commit | d703bc2777b69363e791c0ec50045947b1a399da (patch) | |
tree | 518c616bdf53da2c5dccf1bbd0a17ba14d4b7c7a /info/impatient/fr/fusermacs.tex | |
parent | 46d85b2b8e0282e241f8a41c6c0cd190c495eab0 (diff) |
CTAN sync 202001050300
Diffstat (limited to 'info/impatient/fr/fusermacs.tex')
-rw-r--r-- | info/impatient/fr/fusermacs.tex | 2336 |
1 files changed, 1168 insertions, 1168 deletions
diff --git a/info/impatient/fr/fusermacs.tex b/info/impatient/fr/fusermacs.tex index fecc074ac7..2fca205015 100644 --- a/info/impatient/fr/fusermacs.tex +++ b/info/impatient/fr/fusermacs.tex @@ -1,1168 +1,1168 @@ -% 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{Un abr\'eg\'e de \linebreak macros utiles}
-
-\chapterdef{eplain}
-
-Cette section d\'ecrit |eplain.tex|, une collection de macros et autres
-d\'efi\-nitions qui prolongent le plain \TeX. \bix^^|eplain.tex| Les
-noms des diverses macros expliquent leurs buts, mais habituellement
-n'expliquent pas comment elles fonctionnent, ou ne fournissent pas de
-d\'etails explicites sur la fa\c con dont les employer. Cette information
-est contenue dans les fichiers source de |eplain.tex| et dans la
-documentation qui l'accompagne. Voir \headcit{Ressources}{ressources}
-pour la fa\c con d'obtenir |eplain.tex|.
-
-\section{Pr\'eliminaires}
-
-Nous commen\c cons par quelques macros pour des codes de cat\'egorie qui
-changent et des d\'efinitions pratiques pour deux macros utilis\'ees
-fr\'equem\-ment.
-^^{codes de cat\'egorie//d\'efinitions pratiques pour}
-
-\pix^^|\makeactive|
-\pix^^|\letter|
-\pix^^|\other|
-\pix^^|\uncatcodespecials|
-
-\csdisplay
-\def\makeactive#1{\catcode`#1 = \active \ignorespaces}%
-\chardef\letter = 11 \chardef\other = 12
-\def\uncatcodespecials{%
- \def\do##1{\catcode`##1 = \other}%
- \dospecials}% Defined in plain.
-|
-
-Pour d\'efinir `|^^M|' comme caract\`ere actif, vous devez englober la
-d\'efini\-tion dans un groupe et appeler quelques moyens
-suppl\'ementaires.
-\ttidxref{^^M}
-La macro \pix^|\letreturn| vous permet de d\'efinir `|^^M|' sans ce code
-suppl\'emen\-taire que vous pouvez voir dans la d\'efinition ci-dessous.
-
-\csdisplay
-{\makeactive\^^M \long\gdef\letreturn#1{\let^^M = #1}}%
-|
-
-Ces macros consomment un, deux, ou trois arguments.
-
-\pix^^|\gobble|
-\pix^^|\gobbletwo|
-\pix^^|\gobblethree|
-\csdisplay
-\def\gobble#1{}\def\gobbletwo#1#2{}%
-\def\gobblethree#1#2#3{}%
-|
-
-Maintenant nous \'etablissons quelques conventions pour lire le reste du
-fichier. Dans le fichier nous autorisons des s\'equences de contr\^ole
-``priv\'es'' qui contiennent `|@|' dans leurs noms. Ces s\'equences de
-contr\^ole ne sont pas accessibles de l'ext\'erieur de ce fichier (\`a moins
-que vous rechangez le code de cat\'egorie du `|@|').
-\xrdef{eplainconv}
-
-\csdisplay
-\catcode`@ = \letter % Allow control sequences with @.
-\let\@plainwlog = \wlog % Don't log register allocations.
-\let\wlog = \gobble
-\newlinechar = `^^J
-|
-
-Les deux macros suivantes fournissent une formulation pratique de
-r\'esultat de diagnostic. \pix^|\loggingall| d\'eclenche tout le
-tra\c cage, mais ne provoque le r\'esultat de la trace que dans le \logfile
-et pas sur votre terminal. \pix^|\tracingboxes| montre compl\`etement
-les bo\^\i tes quand elles sont trac\'ees. (\TeX\ ne montre normalement que
-trois niveaux de bo\^\i te et cinq items dans chaque bo\^\i te.)
-
-
-\csdisplay
-\def\loggingall{\tracingcommands\tw@\tracingstats\tw@
- \tracingpages\@ne\tracingoutput\@ne
- \tracinglostchars\@ne\tracingmacros\tw@
- \tracingparagraphs\@ne\tracingrestores\@ne
- \showboxbreadth\maxdimen\showboxdepth\maxdimen}%
-\def\tracingboxes{\showboxbreadth = \maxdimen
- \showboxdepth = \maxdimen}%
-|
-
-
-L'\'epaisseur par d\'efaut des traits est de $0.4$\pt. Vous pouvez produire des traits de n'importe quelle \'epaisseur par
-d\'efaut que vous voulez en red\'efinissant |\vruledefaultwidth|, |\hruledefaultheight| et |\hruledefaultdepth| et
-en employant
-\pix^^|\ehrule|
-|\eh!-rule| et
-\pix^|\evrule| au lieu de |\hrule| et |\vrule|. (le `e' repr\'esente
-``eplain''.)
-^^{filets//\'epaisseur de}
-Si vous donnez une dimension explicite (par exemple, |\ehrule height 16pt|), \TeX \ l'utilisera.
-
-\csdisplay
-\newdimen\hruledefaultheight \hruledefaultheight = 0.4pt
-\newdimen\hruledefaultdepth \hruledefaultdepth = 0.0pt
-\newdimen\vruledefaultwidth \vruledefaultwidth = 0.4pt
-\def\ehrule{\hrule height\hruledefaultheight
- depth\hruledefaultdepth}%
-\def\evrule{\vrule width\vruledefaultwidth}%
-|
-
-La convention |\%| pour \'ecrire un caract\`ere `|%|' ne marche pas quand vous
-voulez inclure ce caract\`ere dans la token liste de |\write|.
-^^|\write//\'ecrire \b\tt\%\e\ avec|
-^^|%//en sortie|
-Vous pouvez utiliser ^|\percentchar| pour r\'ealiser cela.
-Nous red\'efinissons \'egalement ^|^^L| comme \'etant sans effet pour que vous puissiez l'utiliser
-dans une d\'efinition de macro ou un argument.
-
-\csdisplay
-{\catcode`\% = \other \gdef\percentchar{%}}%
- \def^^L{\par
-}%
-|
-
-\pix^|\tokstostring| convertit son argument en liste de
-^{tokens de caract\`ere}. Il n'emploie que des d\'eveloppements qui sont manipul\'ees
-dans l'\oe sophage de \TeX. Cette propri\'et\'e est lui n\'ecessaire
-pour travailler avec |\edef|. Elle est utilis\'ee par les macros
-de r\'ef\'erences crois\'ees (\xref{xrefs}).
-
-Pour fractionner l'argument sur l'espace, nous devons
-utiliser deux macros subsidiaires. |\@ttsA| trouve les espaces et
-|\@ttsB| manipule une s\'equence de token sans aucun espace. Chaque
-espace est remplac\'e par le d\'eveloppement de \pix^|\spacesub|.
-
-\csdisplay
-\def\tokstostring#1{\@ttsA#1 \ttsmarkA}%
-\def\@ttsA#1 #2\ttsmarkA{\ifempty{#1}\else
- \@ttsB #1\@ttsmarkB
- \ifempty{#2}\else
- \spacesub\@ttsA#2\ttsmarkA\fi\fi}%
-\def\@ttsB#1{\ifx #1\@ttsmarkB\else
- \string #1%
- \expandafter\@ttsB\fi}%
-\def\@ttsmarkB{\@ttsmarkB}% should never be expanded
-\def\spacesub{+}%
-|
-
-\noindent
-\pix^|\ifempty| teste si son argument est vide.
-
-\csdisplay
-\def\ifempty#1{\@ifempty #1\@emptymarkA\@emptymarkB}%
-\def\@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}%
-\def\@emptymarkA{\@emptymarkA}%
-|
-
-La macro ^|\for| impl\'emente une version \TeX\ du ``^{for loop}'' des
-langages de programmation traditionnels. Ces macros viennent directement de
-\LaTeX.
-
-\csdisplay
-\def\for#1:=#2\do#3{\edef\@fortmp{#2}%
- \ifx\@fortmp\empty \else
- \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}%
-\def\@nnil{\@nil}%
-\def\@fornoop#1\@@#2#3{}%
-\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil
- \else #5\def#4{#2} ifx #4\@nnil \else
- #5\@iforloop #3\@@#4{#5}\fi\fi}%
-\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
- \let\@nextwhile=\@fornoop \else #4\relax
- \let\@nextwhile=\@iforloop\fi
- \@nextwhile#2\@@#3{#4}}%
-|
-
-\pix^|\obeywhitespace| est utile pour reproduire des coupures de
-ligne, des interlignes et des espaces dans votre source. Il combine
-les effets de |\obey!-lines| et |\obey!-spaces|, ^^|\obeyspaces|
-^^|\obeylines| et met \'egalement des espaces au d\'ebut d'une ligne
-devant \^etre imprim\'ee. Les caract\`eres ``tabulation'' ne sont pas affect\'es~; ils
-produisent toujours un ressort normal.
-
-\xrdef{ewhitesp}
-^^{caract\`eres espace}
-^^|\fontdimen|
-^^|\font|
-^^|\letreturn|
-
-\csdisplay
-\def\alwaysspace{\hglue\fontdimen2\the\font \relax}%
-{\makeactive\^^M \makeactive\ %
-\gdef\obeywhitespace{%
-\makeactive\^^M\def^^M{\par\indent}%
-\aftergroup\@removebox% Kill extra paragraph at end.
-\makeactive\ \let =\alwaysspace}}%
-\def\@removebox{\setbox0=\lastbox}
-|
-
-\pix^|\frac| est une bonne fa\c con d'afficher des fractions dans du
-texte quand vous ne voulez pas utiliser |\over| et que mettre simplement ``1/2''
-ne semble pas beau. Cette macro est la r\'eponse \`a
-l'exercise~11.6 de \texbook.^^{fractions//en forme de slash}
-
-\csdisplay
-\def\frac#1/#2{\leavevmode
- \kern.1em \raise .5ex \hbox{\the\scriptfont0 #1}%
- \kern-.1em $/$%
- \kern-.15em \lower .25ex \hbox{\the\scriptfont0 #2}}%
-|
-
-Les macros suivantes produisent des logos qui sont utiles dans le monde \TeX.
-Le logo \AMSTeX\ vient de la \knuth{page~420}{483}. Le logo \LaTeX\
-est l\'eg\`erement modifi\'e par rapport \`a celui de |latex.tex| (nous utilisons une
-police diff\'erente pour le `A')~; de m\^eme, le logo \BibTeX\
-emploit |\sevenrm| au lieu d'une v\'eritable police de capitale-et-
-petite-capitale. Le fichier source |.mf| pour le logo \MF\ est
-donn\'e dans le manuel \MF\~:
-
-\smallskip
-{\narrower\noindent
-^{Knuth, Donald E.},{\sl The {\logosl METAFONT}book}.
- Reading, Mass.: Addison-Wesley, 1986.\par}
-\smallskip
-\pix^^|\LaTeX|
-\pix^^|\AMSTeX|
-\pix^^|\BibTeX|
-\pix^^|\MF|
-
-\csdisplay
-\def\LaTeX{L\kern-.26em \raise.6ex\hbox{\fiverm A}%
- \kern-.15em TeX}%
-\def\AMSTeX{$\cal A\kern-.1667em \lower.5ex\hbox{$\cal M$}%
- \kern-.125em S$-\TeX}%
-\def\BibTeX{{\rm B\kern-.05em {\sevenrm I\kern-.025em B}%
- \kern-.08em T\kern-.1667em \lower.7ex\hbox{E}%
- \kern-.125emX}}%
-\font\mflogo = logo10
-\def\MF{{\mflogo META}{\tenrm \-}{\mflogo FONT}}%
-|
-
-Les deux macros suivantes produisent des bo\^\i tes. \pix^|\blackbox|
-produit une ``bulle carr\'ee'', utilis\'e dans les macros de liste
-(\xref{listmacs}). \pix^|\makeblankbox| (de \knuth{page~311}{363--364})
-produit un rectangle non rempli, avec l'\'epaisseur des traits de
-bordure donn\'ee par les arguments.
-
-\csdisplay
-\def\blackbox{\vrule height .8ex width .6ex depth -.2ex}%
-\def\makeblankbox#1#2{%
- \hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}%
- \kern -#1% overlap rules
- \hbox to \wd0{\hidevrule{#1}{#2}%
- \raise\ht0\vbox to #1{}% vrule height
- \lower\dp0\vtop to #1{}% vrule depth
- \hfil\hidevrule{#2}{#1}}%
- \kern-#1\hidehrule{#2}{#1}}}}%
-\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2
- \kern-#2}%
-\def\hidevrule#1#2{\kern-#1{\dimen0 = #1
- \advance\dimen0 by #2 \vrule width\dimen0}\kern-#2}%
-|
-
-\pix^|\numbername| produit la forme en toute lettres d'un nombre. Si
-le nombre est plus grands que dix, la macro ne reproduit que les
-chiffres de son argument.
-
-\csdisplay
-\def\numbername#1{\ifcase#1%
- zero\or one\or two\or three\or four\or five%
- \or six\or seven\or eight\or nine\or ten\or #1\fi}%
-|
-
-\pix^|\testfileexistence| d\'etermine si un fichier |\jobname.#1| est
-non\-vide et place |\if!-fileexists| convenablement.
-^^{fichiers//tester l'existence de}
-Le nom de fichier dans l'argument
-n'a pas besoin de finir dans un token d'espace puisque la macro
-fournit la marque d'espace.
-
-\csdisplay
-\newif\iffileexists
-\def\testfileexistence#1{\begingroup
- \immediate\openin0 = \jobname.#1\space
- \ifeof 0\global\fileexistsfalse
- \else \global\fileexiststrue\fi
- \immediate\closein0
- \endgroup}%
-|
-
-
-\section Affichages
-
-Par d\'efaut, \TeX\ centre le mat\'eriel affich\'e (le mat\'eriel
-entre |$$|). ^^{affichages, formatage} \pix^|\leftdisplays| provoque
-des affichages justifi\'es \`a gauche par d\'efaut. Vous pouvez
-retourner aux affichages centr\'es avec \pix^|\centereddisplays|.
-
-Les macros ici sont plus g\'en\'eralistes qu'elles doivent l'\^etre pour ne faire
-que des affichages justifi\'es \`a gauche. Pour chaque affichage,
-\pix^|\ifeqno| sera vrai si un |\eqno| appara\^\i t dans l'affichage.
-\pix^|\ifleqno| sera vrai si un |\leqno| appara\^\i t. Si l'une ou l'autre
-sorte d'\'equation num\'erot\'ee appara\^\i t, \pix^|\eqn| produit le texte
-du num\'ero de l'\'equation. \pix^|\eq| produit toujours le texte de
-l'\'equation lui-m\^eme.
-
-Ces macros sont bas\'ees sur le code de la \knuth{page~376}{434}.
-
-\csdisplay
-\newif\ifeqno \newif\ifleqno
-\newtoks\@eqtoks \newtoks\@eqnotoks
-\def\eq{\the\@eqtoks}\def\eqn{\the\@eqnotoks}%
-\def\displaysetup#1$${%
- \@displaytest#1\eqno\eqno\@displaytest}%
-\def\@displaytest#1\eqno#2\eqno#3\@displaytest{%
- \if !#3!% No \eqno, check for \leqno:
- \@ldisplaytest#1\leqno\leqno\@ldisplaytest
- \else
- \eqnotrue \leqnofalse % Have \eqno, not \leqno.
- \@eqnotoks = {#2}\@eqtoks = {#1}%
- \fi
- \generaldisplay$$}%
-\def\@ldisplaytest#1\leqno#2\leqno#3\@ldisplaytest{%
- \@eqtoks = {#1}%
- \if !#3!%
- \eqnofalse % No \leqno; we're done.
- \else
- \eqnotrue \leqnotrue % Have \leqno.
- \@eqnotoks = {#2}%
- \fi}%
-|
-
-Vous pouvez composer des affichages diff\'eremment en d\'efinissant votre
-propre macro analogue \`a \pix^|\leftdisplays|. La d\'efinition de macro doit
-placer l'appel \`a |\display!-setup| dans |\every!-display| ^^|\everydisplay|
-afin de s'assurer que ^^|\displaysetup| |\dis!-play!-setup| soit appel\'e au
-d\'ebut de chaque affichage. La d\'efinition de macro doit \'egalement inclure
-une d\'efinition de ^|\generaldisplay|.
-
-\csdisplay
-\newtoks\previouseverydisplay
-\def\leftdisplays{%
- \previouseverydisplay = \everydisplay
- \everydisplay =
- {\the\previouseverydisplay \displaysetup}%
- \def\generaldisplay{%
- \leftline{%
- \strut \indent \hskip\leftskip
- \dimen0 = \parindent
- \advance\dimen0 by \leftskip
- \advance\displaywidth by -\dimen0
- \@redefinealignmentdisplays
- \ifeqno \ifleqno
- \kern-\dimen0
- \rlap{$\displaystyle\eqn$}%
- \kern\dimen0
- \fi\fi
- $\displaystyle{\eq}$%
- \ifeqno \ifleqno\else
- \hfill $\displaystyle{\eqn}$%
- \fi\fi}}}%
-\def\centereddisplays{\let\displaysetup = \relax}%
-|
-
-%\filbreak
-\pix^|\leftdisplays| doit travailler dans la douleur pour s'assurer que
-|\dis!-play!-lines|, ^|\eqalignno| ^^|\displaylines| et ^|\leqalignno|
-fonctionnent toujours correctement. |\eq| est compos\'e en mode math\'ematique
-et |\halign| est ill\'egal dans ce mode. ^^|\halign//ill\'egal dans le mode
-math\'ematique| Nous utilisons ^|\vcenter| pour changer le contexte pour que
-|\halign| redevienne l\'egal. Nous enlevons \'egalement les commandes |\hfil| \`a
-gauche du patron pour obtenir la justification \`a droite. \`a part ces
-changements, les macros sont les m\^emes que dans |plain.tex|.
-
-\csdisplay
-\def\@redefinealignmentdisplays{%
- \def\displaylines##1{\displ@y
- \vcenter{\halign{\hbox to\displaywidth{$\@lign
- \displaystyle####\hfil$}\crcr##1\crcr}}}%
- \def\eqalignno##1{\displ@y
- \vcenter{\halign to\displaywidth{%
- $\@lign\displaystyle{####}$\tabskip\z@skip
- &$\@lign\displaystyle{{}####}$
- \hfil\tabskip\centering
- &\llap{$\@lign####$}\tabskip\z@skip\crcr
- ##1\crcr}}}%
- \def\leqalignno##1{\displ@y
- \vcenter{\halign to\displaywidth{%
- $\@lign\displaystyle{####}$\tabskip\z@skip
- &$\@lign\displaystyle{{}####}
- $\hfil\tabskip\centering
- &\kern-\displaywidth
- \rlap{\kern-\parindent\kern-\leftskip$
- \@lign####$}%
- \tabskip\displaywidth\crcr
- ##1\crcr}}}}%
-|
-
-
-\section heure du jour
-
-Quand \TeX\ d\'emarre, il d\'etermine les valeurs des param\`etres ^|\time|,
-^|\day|, ^|\month| et ^|\year|.
-^^{heure du jour}^^{date}
-\pix^|\monthname|
-produit le nom du mois, abr\'eg\'e en trois lettres.
-\pix^|\timestring| produit l'heure courante, comme dans ``1:14\thinspace
-p.m.''. \pix^|\timestamp| produit le texte de la date compl\`ete, comme dans
-``23 avr 1964\quad 1:14\thinspace p.m.''.
-
-\csdisplay
-\def\monthname{%
- \ifcase\month
- \or Jan\or Feb\or Mar\or Apr\or May\or Jun%
- \or Jul\or Aug\or Sep\or Oct\or Nov\or Dec%
- \fi}%
-\def\timestring{\begingroup
- \count0 = \time \divide\count0 by 60
- \count2 = \count0 % The hour.
- \count4 = \time \multiply\count0 by 60
- \advance\count4 by -\count0 % The minute.
- \ifnum\count4<10 \toks1 = {0}% Get a leading zero.
- \else \toks1 = {}%
- \fi
- \ifnum\count2<12 \toks0 = {a.m.}%
- \else \toks0 = {p.m.}%
- \advance\count2 by -12
- \fi
- \ifnum\count2=0 \count2 = 12 \fi % Make midnight `12'.
- \number\count2:\the\toks1 \number\count4
- \thinspace \the\toks0
-\endgroup}%
-\def\timestamp{\number\day\space\monthname\space
- \number\year\quad\timestring}%
-|
-
-
-\section Listes
-
-\null
-\xrdef{listmacs}
-\bix^^{listes d'\'el\'ements}
-\bix^^{\enumerations}
-\pix^|\numberedlist| produit des listes num\'erot\'ees~; |\endnumberedlist| les
-termine.
-\pix^|\unorderedlist| est analogue.
-Pour l'une ou l'autre de ces derni\`eres, les items \`a l'int\'erieur des listes
-commencent par \pix^|\li| (``list item''). Vous pouvez mettre
-\pix^|\listcompact| au d\'ebut d'une liste si vous ne voulez aucun espace
-additionnel entre les \'el\'ements de cette liste. Des listes peuvent \^etre
-imbriqu\'ees arbitrairement.
-
-Vous pouvez contr\^oler plus g\'en\'eralement l'espacement entre les
-\'el\'e\-ments en assignant des valeurs aux registres \'enum\'er\'es
-ci-dessous. Si les \'el\'ements de vos listes tendent \`a \^etre
-longs, vous pourriez vouloir rendre |\interitemskip| diff\'erent de
-z\'ero. L'indentation gauche de chaque \'el\'ement de liste est
-donn\'ee par |\par!-indent| plus |\list!-left!-indent|~; l'indentation
-droite de chaque \'el\'ement de liste est donn\'ee par |\list!-right!|% indent|.
-
-\csdisplay
-\newskip\abovelistskip \abovelistskip = .5\baselineskip
-\newskip\interitemskip \interitemskip = 0pt
-\newskip\belowlistskip \belowlistskip = .5\baselineskip
-\newdimen\listleftindent \listleftindent = \parindent
-\newdimen\listrightindent \listrightindent = 0pt
-\def\listcompact{\interitemskip = 0pt \relax}%
-|
-
-Les listes num\'erot\'ees et non num\'erot\'ees utilisent les macros qui suivent.
-Nous ne changeons pas |\parindent|, puisque beaucoup de macros existantes,
-comme par exemple, |\footnote|, en d\'ependent. Nous devons expliquer la
-possibilit\'e que les \'el\'ements fassent plus d'un paragraphe de long. Dans ce
-cas-ci, tous les paragraphes apr\`es le premier sont indent\'es. Nous
-utilisons |\leftskip| et |\rightskip| pour indenter les \'el\'ements d'une liste.
-L'indentation des affichages est expliqu\'ee par des changements de |\every!-%
-dis!-play|. ^^|\everydisplay|
-
-\csdisplay
-\newdimen\@listindent
-\def\beginlist{%
- \@listindent = \parindent
- \advance\@listindent by \listleftindent
- \everydisplay = \expandafter{\the\everydisplay
- % Don't lose user's \everydisplay:
- \advance\displayindent by \@listindent
- \advance\displaywidth by -\@listindent
- \advance\displaywidth by -\listrightindent}%
- \nobreak\vskip\abovelistskip
- \parskip = 0pt
- % \leftskip shifts nested lists to the right on the page.
- \advance\leftskip by \@listindent
- \advance\rightskip by \listrightindent}%
-\def\printitem{\par\noindent
- \llap{\hskip-\listleftindent \marker \enspace}}%
-\def\endlist{\vskip\belowlistskip}%
-|
-
-\noindent
-Vous pouvez changer la mani\`ere dont les labels d'\'el\'ements sont compos\'ees en
-red\'efinissant la macro |\numbered!-marker|. \pix^^|\numberedmarker|
-
-\csdisplay
-\newcount\numberedlistdepth \newcount\itemnumber
-\newcount\itemletter
-\def\numberedmarker{%
- \ifcase\numberedlistdepth
- (impossible)%
- \or \itemnumberout)%
- \or \itemletterout)%
- \else *%
- \fi}%
-|
-
-\noindent Voici les d\'efinitions de |\numberedlist| et de
-|\unorderedlist|.
-ces d\'efini\-tions ont la m\^eme structure.
-
-\csdisplay
-\def\numberedlist{\environment{@numbered-list}%
- \advance\numberedlistdepth by 1
- \itemnumber = 1 \itemletter = `a
- \beginlist \let\marker = \numberedmarker
- \def\li{%
- \ifnum\itemnumber=1\else \vskip\interitemskip \fi
- \printitem
- \advance\itemnumber by 1 \advance\itemletter by 1
- }}%
-\def\itemnumberout{\number\itemnumber}%
-\def\itemletterout{\char\itemletter}%
-\def\endnumberedlist{\par
- \endenvironment{@numbered-list}\endlist}%
-!bigskip
-\newcount\unorderedlistdepth
-\def\unorderedmarker{%
- \ifcase\unorderedlistdepth
- (impossible)%
- \or \blackbox
- \or ---%
- \else *%
- \fi}%
-\def\unorderedlist{\environment{@unordered-list}%
- \advance\unorderedlistdepth by 1
- \beginlist \itemnumber = 1
- \let\marker = \unorderedmarker
- \def\li{%
- \ifnum\itemnumber=1\else \vskip\interitemskip \fi
- \printitem \advance\itemnumber by 1
- }}%
-\def\endunorderedlist{\par
- \endenvironment{@unordered-list}\endlist}%
-|
-
-\eix^^{listes d'\'el\'ements}
-\eix^^{\enumerations}
-
-
-\section Listing verbatim
-
-La macro \pix^|\listing| produit le listing verbatim d'un fichier sp\'ecifi\'e
-en police |\tt|.
-Elle est bas\'ee sur le code de la \knuth{page~380}{439}.
-Les tabulations produisent un montant d'espace fixe et les sauts de page
-produisent une coupure de page. D'autres caract\`eres de contr\^ole produisent
-ce qui s'av\`ere \^etre \`a cette position dans la police, qui n'est g\'en\'eralement
-pas tr\`es utile. En red\'efinissant |\setup!-listing!-hook|,
-\pix^^|\setuplistinghook| vous pouvez prendre les mesures compl\'ementaires
-qui sont appropri\'ees pour vos polices et\slash ou environnements particuliers
-avant que le fichier ne soit lu.
-
-\csdisplay
-\def\listing#1{%
- \par \begingroup \@setuplisting \setuplistinghook
- \input #1 \endgroup}%
-\let\setuplistinghook = \empty
-\def\@setuplisting{%
- \uncatcodespecials
- \obeywhitespace \makeactive\` \makeactive\^^I
- \def^^L{\vfill\eject}\tt}%
-{\makeactive\` \gdef`{\relax\lq}}% Defeat ligatures.
-{\makeactive\^^I\gdef^^I{\hskip8\fontdimen2\tt \relax}}%
-|
-
-
-\section Table des mati\`eres
-
-\null ^^{table des mati\`eres}
-La macro \pix^|\writetocentry| \'ecrit une macro dans le fichier
-|\jobname.toc|. Le premier argument de |\writetocentry|, par exemple,
-``chapitre'', est utilis\'e pour composer le nom de la macro appel\'ee. Le
-deuxi\`eme argument est le texte qui doit appara\^\i tre dans la table des
-mati\`eres. |\writetocentry| appose le num\'ero de la page \`a l'appel de la macro.
-Par exemple~:
-\csdisplay
-\writetocentry{chapter}{Introduction}
-|
-\noindent
-produira la ligne~:
-\csdisplay
-\tocchapterentry{Introduction}{2}
-|
-\noindent dans le fichier |.toc|, ce qui indique que `Introduction' d\'ebute
-en page 2.
-
-Vous pouvez utiliser |\writenumberedtocentry| pour apporter un troisi\`eme
-param\`etre, tel qu'un num\'ero de chapitre. Par exemple~:
-\csdisplay
-\writenumberedtocentry{chapter}{The second chapter}{2}
-|
-\noindent \'ecrira une ligne~:
-\csdisplay
-\tocchapterentry{The second chapter}{2}{14}
-|
-\noindent
-Vous pouvez aussi faire un |\write| vers le |\tocfile| vous-m\^eme.
-
-\csdisplay
-\newwrite\tocfile \newif\iftocfileopened
-\def\opentocfile{\iftocfileopened\else
- \tocfileopenedtrue
- \immediate\openout\tocfile = \jobname.toc
-\fi}%
-\def\writenumberedtocentry#1#2#3{\ifrewritetocfile
- \opentocfile
- \write\tocfile{%
- \expandafter\noexpand \csname toc#1entry\endcsname
- {#2}{#3}{\folio}}%
-\ignorespaces\fi}%
-\def\writenumberedtocentry#1#2#3{\ifrewritetocfile
- \opentocfile
- \write\tocfile{%
- \expandafter\noexpand \csname toc#1entry\endcsname
- {#2}{#3}{\folio}}%
-\ignorespaces\fi}%
-|
-
-Pour produire une table des mati\`eres, lisez le fichier |.toc| avec
-\pix^|\readtocfile|. Vous devez appeler |\read!-tocfile| avant le premier
-|\write!-toc!-entry|. Quand vous traitez la table des mati\`eres sans la
-r\'eg\'en\'erer, vous ne devriez pas r\'ecrire le fichier |.toc|---si vous le
-faites, son contenu sera perdu. La commande |\rewrite!-tocfile!-false|
-emp\^echera la r\'e\'ecriture.
-
-\csdisplay
-\newif\ifrewritetocfile \rewritetocfiletrue
-\def\readtocfile{\testfileexistence{toc}%
- \iffileexists
- \input \jobname.toc
- \ifrewritetocfile \opentocfile \fi
- \fi}%
-|
-
-Voici quelques d\'efinitions de macros |\toc|\dots|entry| possibles. Ces
-d\'efinitions ne sont indiqu\'ees que comme exemple---aligner des traits \`a
-travers la ligne n'est normalement pas la meilleure mani\`ere de composer une
-table des mati\`eres.
-
-\csdisplay
-\def\tocchapterentry#1#2{\line{\bf #1 \dotfill\ #2}}%
-\def\tocsectionentry#1#2{%
- \line{\quad\sl #1 \dotfill\ \rm #2}}%
-\def\tocsubsectionentry#1#2{%
- \line{\qquad\rm #1 \dotfill\ #2}}%
-|
-
-
-\section R\'ef\'erences crois\'ees
-
-\null ^^{r\'ef\'erences crois\'ees}
-\xrdef{xrefs}
-Les macros qui suivent fournissent des r\'ef\'erences crois\'ees symboliques, pour
-que vous puissiez vous r\'ef\'erer \`a quelque chose dans une autre partie d'un
-document par son nom et non son num\'ero de page r\'eel. \pix^|\xrdef||{foo}|
-d\'efinit une \'etiquette |foo| comme \'etant le num\'ero de page courant et
-\pix^|\xrefn||{foo}| produit ce num\'ero de page, par exemple, $77$. Plus
-fr\'equement, vous voudrez dire quelque chose comme ``voir p.\thinspace77'',
-ainsi \pix^|\xref||{foo}| produit ` p.\thinspace 77''. Si |foo| n'est pas
-d\'efini, un message d'avertissement sera donn\'e. |\xrefwarningfalse| supprime
-l'avertissement.
-
-Ces macros n'assurent aucune protection contre des d\'efinitions dupliqu\'ees.
-Vous pouvez v\'erifier ces d\'efinitions dupliqu\'ees en triant le fichier de
-r\'ef\'erences crois\'ees et en v\'erifiant, m\'ecaniquement ou \emph{de visu}, les
-d\'efinitions adjacentes du m\^eme symbole.
-
-\csdisplay
-\newif\ifxrefwarning \xrefwarningtrue
-\def\xrdef#1{\begingroup
- \xrlabel{#1}%
- \edef\@wr{\@writexrdef{\the\@xrlabeltoks}}%
- \@wr
- \endgroup \ignorespaces}%
-\def\@writexrdef#1{\write\reffile{%
- \string\gdef
- \expandafter\string\csname#1\endcsname
- {\noexpand\folio}\percentchar}}%
-\def\xrefnumber#1{%
- \xrlabel{#1}%
- % \@xrlabeltoks now has the control sequence name.
- \toks0 =
- \expandafter{\csname\the\@xrlabeltoks\endcsname}%
- \expandafter \ifx\the\toks0\relax
- \ifxrefwarning \message{Undefined label
- `\tokstostring{#1}'.}\fi
- {\let\spacesub = \space
- \expandafter\xdef\the\toks0
- {`{\tt \tokstostring{#1}}'}}\fi
- \the\toks0}%
-\def\xref#1{p.\thinspace\xrefnumber{#1}}%
-\def\xrefn#1{\xrefnumber{#1}}%
-|
-
-Cette macro transforme une \'etiquette en liste de tokens de caract\`ere dans le
-registre de tokens |\labeltoks|. Une \'etiquette peut inclure des blancs et
-des s\'equences de contr\^ole aussi bien que les caract\`eres normaux, mais elle
-ne peut pas inclure d'accolades.
-
-\csdisplay
-\newtoks\@xrlabeltoks
-\def\xrlabel#1{\begingroup
- \escapechar = `\_ \edef\tts{\tokstostring{#1_}}%
- \global\@xrlabeltoks = \expandafter{\tts}%
- \endgroup}%
-|
-
-Il faut deux passages pour obtenir des r\'ef\'erences crois\'ees correctes,
-puisque les d\'efinitions sont \'ecrites dans le fichier auxiliaire
-|\jobname.aux|. \pix^|\readreffile| les relit. Si vous ne saisissez pas
-cette commande avant la premi\`ere d\'efinition, vous perdrez toutes les
-d\'efinitions de l'ex\'ecution pr\'ec\'edente.
-
-\csdisplay
-\newwrite\reffile \newif\ifreffileopened
-\def\openreffile{\ifreffileopened\else
- \reffileopenedtrue
- \immediate\openout\reffile = \jobname.aux
- \fi}%
-\def\readreffile{%
- \testfileexistence{aux}%
- \iffileexists
- \begingroup
- \@setletters
- \input \jobname.aux
- \endgroup
- \else
- \message{No cross-reference file; I won't give you
- warnings about undefined labels.}%
- \xrefwarningfalse
- \fi
- \openreffile}%
-\def\@setletters{%
- \catcode`_ = \letter \catcode`+ = \letter
- \catcode`- = \letter \catcode`@ = \letter
- \catcode`0 = \letter \catcode`1 = \letter
- \catcode`2 = \letter \catcode`3 = \letter
- \catcode`4 = \letter \catcode`5 = \letter
- \catcode`6 = \letter \catcode`7 = \letter
- \catcode`8 = \letter \catcode`9 = \letter
- \catcode`( = \letter \catcode`) = \letter}%
-|
-
-^^{\equations, labelisation}
-Vous pouvez donnez des noms symboliques aux \'equations de la m\^eme mani\`ere,
-en utilisant \pix^|\eqdef| et \pix^|\eqref|. |\eqdef| ins\`ere sa propre
-commande |\eqno|, donc il doit \^etre appel\'e \`a un endroit o\`u |\eqno| est
-l\'egal.
-
-\csdisplay
-\newcount\eqnumber
-\def\eqdef#1{\global\advance\eqnumber by 1
- \expandafter\xdef
- \csname#1eqref\endcsname{\the\eqnumber}%
- \immediate\write\reffile{\string\def
- \expandafter\string\csname#1eqref\endcsname
- {\the\eqnumber}}%
- \eqno
- \eqprint{\the\eqnumber}}%
-|
-
-|\eqref| produit le ``(num\'ero de l'\'equation)''. Vous pouvez obtenir un
-formatage plus fantaisiste en red\'efinissant \pix^|\eqprint|. Par exemple,
-vous pourriez la red\'efinir pour que les num\'eros d'\'equation incluent le
-num\'ero du chapitre.
-
-\csdisplay
-\def\eqref#1{%
- \expandafter \ifx \csname#1eqref\endcsname \relax
- \ifxrefwarning \message{Undefined equation label
- `#1'.}\fi
- \expandafter\def\csname#1eqref\endcsname{00}%
- \else \eqprint{\csname#1eqref\endcsname}%
- \fi}%
-\def\eqprint#1{(#1)}%
-|
-
-
-\section Environnements
-
-\null ^^{environnements} Ces macros vous permettent de d\'efinir vos propres
-groupes appel\'es environnements pour des parties de votre manuscrit. Comme
-les groupes de \TeX, ces groupes peuvent \^etre embo\^\i t\'es, et en fait leur
-embo\^\i tement peut \^etre entrelac\'e avec l'embo\^\i tement des groupes de \TeX. Si
-les noms au d\'ebut et \`a la fin d'un environnement ne s'assortissent pas,
-vous recevrez un message d'erreur. Les macros sont con\c cues pour que le
-message que vous recevez quand une telle erreur se produit vous donne une
-bonne chance de localiser la cause de l'erreur facilement.
-
-Vous d\'ebutez un environnement avec
-\pix^^|\environment|
-|\envi!-ron!-ment| |{foo}| et le finissez avec |\endenvironment{foo}|, o\`u
-|foo| est le nom de l'environnement. Nos macros am\'eliorent l\'eg\`erement la
-r\'eponse \`a l'exercice~5.7 du \texbook, en faisant quelques contr\^oles sur les
-paires |\begingroup| et |\endgroup|, et s'assurant aussi que les paires
-|\environment| et |\endenvironment| s'assortissent.
-
-\csdisplay
-\def\environment#1{\ifx\@groupname\undefined\else
- \errhelp = \@unnamedendgrouphelp
- \errmessage{`\@groupname' was not closed by
- \string\endenvironment}\fi
- \def\@groupname{#1}%
- \begingroup
- \let\@groupname = \undefined \ignorespaces}%
-\def\endenvironment#1{\endgroup
- \def\@thearg{#1}%
- \ifx\@groupname\@thearg
- \else
- \ifx\@groupname\undefined
- \errhelp = \@isolatedendenvironmenthelp
- \errmessage{Isolated
- \string\endenvironment\space for `#1'}%
- \else
- \errhelp = \@mismatchedenvironmenthelp
- \errmessage{Environment `#1' ended,
- but `\@groupname' started}%
- \endgroup % Probably a typo in the names.
- \fi
- \fi
- \let\@groupname = \undefined \ignorespaces}%
-|
-
-Nous d\'efinissons \'egalement des messages d'aide pour chacune des erreurs
-ci-dessus. ^^|\newhelp|
-
-\csdisplay
-\newhelp\@unnamedendgrouphelp{%
- Most likely, you just forgot an^^J%
- \string\endenvironment.
- Maybe you should try inserting another^^J%
- \string\endgroup to recover.}%
-\newhelp\@isolatedendenvironmenthelp{%
- You ended an environment X, but^^J%
- no \string\environment\space to start it
- is anywhere in sight.^^J%
- You might also be at an
- \string\endenvironment\space that would match^^J%
- a \string\begingroup, i.e., you forgot an
- \string\endgroup.}%
-\newhelp\@mismatchedenvironmenthelp{%
- You started an environment X, but^^J%
- you ended it with Y. Maybe you made a typo
- in one or the other^^J%
- of the names.}%
-|
-
-Certains environnements ne doivent pas se produire dans d'autres
-environnements. Appelons ces derniers ``environnements externes''
-(outer). |\check!-env| v\'erifie qu'aucun environnement externe n'est
-actuellement effectif, sinon il se plaint. Pour utiliser |\check!-env|,
-vous devez mettre la commande |\environment!-true| au d\'ebut de chaque
-environnement externe.
-
-\csdisplay
-\newif\ifenvironment
-\def\checkenv{%
- \ifenvironment
- \errhelp = \@interwovenenvhelp
- \errmessage{Interwoven environments}%
- \endgroup
- \fi}%
-\newhelp\@interwovenenvhelp{%
- Perhaps you forgot to end the previous^^J%
- environment? I'm finishing off the current group,^^J%
- hoping that will fix it.}%
-|
-
-
-\section Justification
-
-\bix^^{cadr\'e \`a gauche}
-\bix^^{cadr\'e \`a droite}
-\bix^^{texte centr\'e}
-Les trois macros \pix^|\flushleft|, \pix^|\flushright| et
-\xrdef{eplaincenter}
-\pix^|\center| justifient le texte des
-lignes suivantes de la mani\`ere indiqu\'ee. La commande doit
-appara\^\i tre seule sur une ligne. La commande et le texte
-doivent \^etre enferm\'es dans un groupe---%
-la fin du groupe
-indique la fin du texte. Le groupe entier est plac\'e comme un paragraphe
-simple, avec des lignes compl\'et\'ees d'un c\^ot\'e ou de l'autre comme
-indiqu\'e. Les lignes blanches sont reproduites.
-
-\csdisplay
-\begingroup
- \catcode `\^^M = \active
- \globaldefs = 1 %
- \def\flushleft{\beforejustify %
- \aftergroup\@endflushleft %
- \def^^M{\null\hfil\break}%
- \def\@eateol^^M{}\@eateol}%
- \def\flushright{\beforejustify %
- \aftergroup\@endflushright %
- \def^^M{\break\null\hfil}%
- \def\@eateol^^M{\hfil\null}\@eateol}%
- \def\center {\beforejustify %
- \aftergroup\@endcenter %
- \def^^M{\hfil\break\null\hfil}%
- \def\@eateol^^M{\hfil\null}\@eateol}%
-\endgroup
-|
-
-Les commandes suivantes sont appel\'ees en raison du |\after!-group|
-^^|\aftergroup|
-dans les d\'efinitions de |\flush!-left|, |\flush!- right| et |\center|.
-Elles effectuent les op\'erations de nettoyage n\'ecessaires .
-
-
-\csdisplay
-\def\@endflushleft{\unpenalty
- {\parfillskip = 0pt plus 1 fil\par}%
- \ignorespaces}%
-\def\@endflushright{%
- % Remove the \hfil\null\break we just put on.
- \unskip \setbox0=\lastbox \unpenalty
- % We have fil glue at the left of the line;
- % \parfillskip shouldn't affect that.
- {\parfillskip = 0pt \par}\ignorespaces}%
-\def\@endcenter{%
- % Remove the \hfil\null\break we just put on.
- \unskip \setbox0=\lastbox \unpenalty
- % We have fil glue at the left of the line;
- % \parfillskip must balance it.
- {\parfillskip = 0pt plus 1fil \par}\ignorespaces}%
-\def\beforejustify{%
- \par\noindent
- \catcode`\^^M = \active
- \checkenv \environmenttrue}%
-|
-
-\eix^^{cadr\'e \`a gauche}
-\eix^^{cadr\'e \`a droite}
-\eix^^{texte centr\'e}
-
-
-\section Tables
-
-La macro \pix^|\makecolumns| vous permet de donner toutes les entr\'ees d'une
-table sans vous inqui\'eter de l'endroit o\`u les colonnes se coupent. Par
-exemple, si vous saisissez une longue liste alphab\'etique qui sera compos\'ee
-en plusieurs colonnes, vous ne saurez habituellement pas \`a l'avance o\`u une
-colonne finit et o\`u la suivante commence. Par ailleurs, si un autre \'el\'ement
-est ajout\'e, les coupures de colonne changeront.
-
-|\makecolumns| prend deux arguments (d\'elimit\'es)~: le nombre total de
-rang\'ees et le nombre de colonnes de la table. Par exemple, `|\makecolumns
-37/3:|' d\'esigne une table de trois colonnes dont les rang\'ees sont les $37$
-prochaines lignes. Vous pouvez ajuster le positionnement de la table sur la
-page en changeant |\parindent|, qui d\'etermine l'espace \`a gauche et
-|\hsize|, qui d\'etermine l'espace entre la marge gauche de la page et la
-droite du bloc. Vous pouvez permettre une coupure de page au-dessus du
-|\valign|
-^^|\valign//utilis\'e dans {\tt\\makecolumns}|
-en changeant \pix^|\abovecolumnspenalty|..
-
-\csdisplay
-\newcount\abovecolumnspenalty
-\abovecolumnspenalty = 10000
-\newcount\@linestogo % Lines remaining to process.
-\newcount\@linestogoincolumn % Lines remaining in column.
-\newcount\@columndepth % Number of lines in a column.
-\newdimen\@columnwidth % Width of each column.
-\newtoks\crtok \crtok = {\cr}%
-\def\makecolumns#1/#2: {\par \begingroup
- \@columndepth = #1 \advance\@columndepth by #2
- \advance\@columndepth by -1
- \divide \@columndepth by #2
- \@linestogoincolumn = \@columndepth \@linestogo = #1
- \def\@endcolumnactions{%
- \ifnum \@linestogo<2
- \the\crtok \egroup \endgroup \par
- % End \valign and \makecolumns.
- \else
- \global\advance\@linestogo by -1
- \ifnum\@linestogoincolumn<2
- \global\@linestogoincolumn = \@columndepth
- \the\crtok
- \else &\global\advance\@linestogoincolumn by -1
- \fi
- \fi}%
- \makeactive\^^M\letreturn\@endcolumnactions
- \@columnwidth = \hsize
- \advance\@columnwidth by -\parindent
- \divide\@columnwidth by #2
- \penalty\abovecolumnspenalty
- \noindent % It's not a paragraph (usually).
- \valign\bgroup
- &\hbox to \@columnwidth{\strut ##\hfil}\cr
-}% The next end-of-line starts everything going.
-|
-
-
-\section Notes de pied de page
-
-\null ^^{notes de pied de page}
-Des notes de bas de page sont compos\'ees le plus g\'en\'eralement en utilisant un
-num\'ero incr\'ement\'e comme marque de r\'ef\'erence. Nous d\'efinissons la macro
-\pix^|\numberedfootnote| pour faire cela. Il red\'efinit \'egalement
-^|\vfootnote| pour permettre un formatage l\'eg\`erement plus g\'en\'erique des
-notes de bas de page que ne le fait \plainTeX. Le registre de dimension
-|\foot!-note!-mark!-sepa!-ra!-tion|
-\pix^^|\footnotemarkseparation| contr\^ole
-l'espace entre la marque de la note de bas de page (par exemple, le num\'ero) et le
-d\'ebut du texte. Les tokens \pix^|\everyfootnote| sont
-ins\'er\'es avant de produire la notes de bas de page.
-
-Les d\'efinitions \plainTeX \ de |\footnote| et |\vfootnote| sont pr\'eserv\'es en
-|\@plain!-footnote| et |\@plain!-vfootnote| au cas o\`u vous auriez besoin d'elles.
-\csdisplay
-\newcount\footnotenumber \newtoks\everyfootnote
-\newdimen\footnotemarkseparation
-\footnotemarkseparation = .5em
-\let\@plainfootnote = \footnote
-\let\@plainvfootnote = \vfootnote
-\def\vfootnote#1{\insert\footins\bgroup
- \interlinepenalty\interfootnotelinepenalty
- \splittopskip\ht\strutbox \splitmaxdepth\dp\strutbox
- \floatingpenalty\@MM
- \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip
- \xspaceskip\z@skip
- \everypar = {}%
- \the\everyfootnote
- \indent\llap{#1\kern\footnotemarkseparation}\footstrut
- \futurelet\next\fo@t}%
-\def\numberedfootnote{\global\advance\footnotenumber by 1
- \@plainfootnote{$^{\number\footnotenumber}$}}%
-|
-
-
-\section Double colonne
-
-\null ^^{double colonnes} La commande |\doublecolumns| commence la
-composition en double colonne, alors que la commande
-\pix^^|\singlecolumn| |\single!-column| remet la composition en
-colonne simple. Vous pouvez commuter dans les deux sens entre elles
-sur la m\^eme page. Le ressort sp\'ecifi\'e par |\above!-double!-column!-%
-skip| et |\below!-double!-column!-skip| est ins\'er\'ee avant et apr\`es la
-composition en double colonne.
-
-L'approche est d\'eriv\'ee de la \knuth{page~417}{480}.
-
-\csdisplay
-\newskip\abovedoublecolumnskip
-\newskip\belowdoublecolumnskip
-\abovedoublecolumnskip = \bigskipamount
-\belowdoublecolumnskip = \bigskipamount
-\newdimen\gutter \gutter = 2pc
-\newdimen\doublecolumnhsize \doublecolumnhsize = \hsize
-\newbox\@partialpage \newdimen\singlecolumnhsize
-\newdimen\singlecolumnvsize \newtoks\previousoutput
-\def\doublecolumns{\par % Don't start in horizontal mode.
- \previousoutput = \expandafter{\the\output}
- \advance\doublecolumnhsize by -\gutter
- \divide\doublecolumnhsize by 2
- \output = {\global\setbox\@partialpage =
- \vbox{\unvbox255\vskip\abovedoublecolumnskip}}%
- \pagegoal = \pagetotal \break % Expands \output above.
- \output = {\doublecolumnoutput}%
- \singlecolumnhsize = \hsize
- \singlecolumnvsize = \vsize
- \hsize = \doublecolumnhsize \vsize = 2\vsize}%
-|
-
-Le macro |\@double!-column!-split| fait le d\'edoublement r\'eel. On
-suppose que le source est ins\'er\'ee en colonne simple. Si vous ne
-voulez pas que cela soit le cas, vous devrez modifier la routine de
-r\'esultat. Apr\`es que |\@double!-column!-split| ait effectu\'e son
-travail, |\box255| aura le mat\'eriel en double colonne. Le mat\'eriel en
-double colonne sera pr\'ec\'ed\'e par n'importe quel mat\'eriel en colonne simple
-qui aura \'et\'e compos\'e avant que |\doublecolumns| ait \'et\'e appel\'e.
-|\box4| aura le mat\'eriel qui ne s'est pas adapt\'e \`a la page.
-
-\csdisplay
-\def\@doublecolumnsplit{%
- \splittopskip = \topskip \splitmaxdepth = \maxdepth
- \dimen0 = \singlecolumnvsize
- \advance\dimen0 by -\ht\@partialpage
- \advance\dimen0 by -\ht\footins
- \advance\dimen0 by -\skip\footins
- \advance\dimen0 by -\ht\topins
- \begingroup
- \vbadness = 10000
- \global\setbox1=\vsplit255 to \dimen0 \wd1=\hsize
- \global\setbox3=\vsplit255 to \dimen0 \wd3=\hsize
- \endgroup
- \global\setbox4=\vbox{\unvbox255
- \penalty\outputpenalty}%
- \global\setbox255=\vbox{\unvbox\@partialpage
- \hbox to \singlecolumnhsize{\box1\hfil\box3}%
- \vfill}}%
-|
-\needspace{.5in}
-|\double!-column!-out!-put| est la routine de sortie r\'eelle. Nous appelons
-l'ancienne |\output| pour faire le travail de sortie de la bo\^\i te.
-
-\csdisplay
-\def\doublecolumnoutput{\@doublecolumnsplit
- \hsize = \singlecolumnhsize \vsize = \singlecolumnvsize
- \previousoutput \unvbox4}%
-|
-
-|\singlecolumn| reprend la composition en une colonne. Il suppose que
-|\doublecolumns| a \'et\'e appel\'e.
-
-\csdisplay
-\def\singlecolumn{\par % Don't start in horizontal mode.
- \output = {\global\setbox1 =
- \vbox{\unvbox255\vskip\abovedoublecolumnskip}}%
- \pagegoal = \pagetotal \break \setbox255 = \box1
- {\singlecolumnvsize = \ht255
- \divide\singlecolumnvsize by 2
- \advance\singlecolumnvsize by +\ht\@partialpage
- \advance\singlecolumnvsize by +\ht\footins
- \advance\singlecolumnvsize by +\skip\footins
- \advance\singlecolumnvsize by +\ht\topins
- \@doublecolumnsplit}%
- \hsize = \singlecolumnhsize
- \vsize = \singlecolumnvsize
- \output = \expandafter{\the\previousoutput}%
- \unvbox255}%
-|
-
-\margin{`Sensible paragraph skips' section deleted}
-
-
-\section Terminer
-
-Nous devons maintenant d\'efaire les changements que nous avons faits
-quand nous avons commenc\'e (voir la \xref{eplainconv}). Nous donnons
-\'egalement un num\'ero de version, qui sera plus tard
-disponible dans |\fmt!-name| et |\fmt!-version|.
-
-\csdisplay
-\let\wlog = \@plainwlog \catcode`@ = \other
-\def\fmtname{eplain}%
-{\edef\plainversion{\fmtversion}%
- \xdef\fmtversion{1.0: 15 May 1990
- (and plain \plainversion)}%
-}%
-|
-
-\eix^^|eplain.tex|
-
-\endchapter
-\byebye
-
+% 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{Un abr\'eg\'e de \linebreak macros utiles} + +\chapterdef{eplain} + +Cette section d\'ecrit |eplain.tex|, une collection de macros et autres +d\'efi\-nitions qui prolongent le plain \TeX. \bix^^|eplain.tex| Les +noms des diverses macros expliquent leurs buts, mais habituellement +n'expliquent pas comment elles fonctionnent, ou ne fournissent pas de +d\'etails explicites sur la fa\c con dont les employer. Cette information +est contenue dans les fichiers source de |eplain.tex| et dans la +documentation qui l'accompagne. Voir \headcit{Ressources}{ressources} +pour la fa\c con d'obtenir |eplain.tex|. + +\section{Pr\'eliminaires} + +Nous commen\c cons par quelques macros pour des codes de cat\'egorie qui +changent et des d\'efinitions pratiques pour deux macros utilis\'ees +fr\'equem\-ment. +^^{codes de cat\'egorie//d\'efinitions pratiques pour} + +\pix^^|\makeactive| +\pix^^|\letter| +\pix^^|\other| +\pix^^|\uncatcodespecials| + +\csdisplay +\def\makeactive#1{\catcode`#1 = \active \ignorespaces}% +\chardef\letter = 11 \chardef\other = 12 +\def\uncatcodespecials{% + \def\do##1{\catcode`##1 = \other}% + \dospecials}% Defined in plain. +| + +Pour d\'efinir `|^^M|' comme caract\`ere actif, vous devez englober la +d\'efini\-tion dans un groupe et appeler quelques moyens +suppl\'ementaires. +\ttidxref{^^M} +La macro \pix^|\letreturn| vous permet de d\'efinir `|^^M|' sans ce code +suppl\'emen\-taire que vous pouvez voir dans la d\'efinition ci-dessous. + +\csdisplay +{\makeactive\^^M \long\gdef\letreturn#1{\let^^M = #1}}% +| + +Ces macros consomment un, deux, ou trois arguments. + +\pix^^|\gobble| +\pix^^|\gobbletwo| +\pix^^|\gobblethree| +\csdisplay +\def\gobble#1{}\def\gobbletwo#1#2{}% +\def\gobblethree#1#2#3{}% +| + +Maintenant nous \'etablissons quelques conventions pour lire le reste du +fichier. Dans le fichier nous autorisons des s\'equences de contr\^ole +``priv\'es'' qui contiennent `|@|' dans leurs noms. Ces s\'equences de +contr\^ole ne sont pas accessibles de l'ext\'erieur de ce fichier (\`a moins +que vous rechangez le code de cat\'egorie du `|@|'). +\xrdef{eplainconv} + +\csdisplay +\catcode`@ = \letter % Allow control sequences with @. +\let\@plainwlog = \wlog % Don't log register allocations. +\let\wlog = \gobble +\newlinechar = `^^J +| + +Les deux macros suivantes fournissent une formulation pratique de +r\'esultat de diagnostic. \pix^|\loggingall| d\'eclenche tout le +tra\c cage, mais ne provoque le r\'esultat de la trace que dans le \logfile +et pas sur votre terminal. \pix^|\tracingboxes| montre compl\`etement +les bo\^\i tes quand elles sont trac\'ees. (\TeX\ ne montre normalement que +trois niveaux de bo\^\i te et cinq items dans chaque bo\^\i te.) + + +\csdisplay +\def\loggingall{\tracingcommands\tw@\tracingstats\tw@ + \tracingpages\@ne\tracingoutput\@ne + \tracinglostchars\@ne\tracingmacros\tw@ + \tracingparagraphs\@ne\tracingrestores\@ne + \showboxbreadth\maxdimen\showboxdepth\maxdimen}% +\def\tracingboxes{\showboxbreadth = \maxdimen + \showboxdepth = \maxdimen}% +| + + +L'\'epaisseur par d\'efaut des traits est de $0.4$\pt. Vous pouvez produire des traits de n'importe quelle \'epaisseur par +d\'efaut que vous voulez en red\'efinissant |\vruledefaultwidth|, |\hruledefaultheight| et |\hruledefaultdepth| et +en employant +\pix^^|\ehrule| +|\eh!-rule| et +\pix^|\evrule| au lieu de |\hrule| et |\vrule|. (le `e' repr\'esente +``eplain''.) +^^{filets//\'epaisseur de} +Si vous donnez une dimension explicite (par exemple, |\ehrule height 16pt|), \TeX \ l'utilisera. + +\csdisplay +\newdimen\hruledefaultheight \hruledefaultheight = 0.4pt +\newdimen\hruledefaultdepth \hruledefaultdepth = 0.0pt +\newdimen\vruledefaultwidth \vruledefaultwidth = 0.4pt +\def\ehrule{\hrule height\hruledefaultheight + depth\hruledefaultdepth}% +\def\evrule{\vrule width\vruledefaultwidth}% +| + +La convention |\%| pour \'ecrire un caract\`ere `|%|' ne marche pas quand vous +voulez inclure ce caract\`ere dans la token liste de |\write|. +^^|\write//\'ecrire \b\tt\%\e\ avec| +^^|%//en sortie| +Vous pouvez utiliser ^|\percentchar| pour r\'ealiser cela. +Nous red\'efinissons \'egalement ^|^^L| comme \'etant sans effet pour que vous puissiez l'utiliser +dans une d\'efinition de macro ou un argument. + +\csdisplay +{\catcode`\% = \other \gdef\percentchar{%}}% + \def^^L{\par +}% +| + +\pix^|\tokstostring| convertit son argument en liste de +^{tokens de caract\`ere}. Il n'emploie que des d\'eveloppements qui sont manipul\'ees +dans l'\oe sophage de \TeX. Cette propri\'et\'e est lui n\'ecessaire +pour travailler avec |\edef|. Elle est utilis\'ee par les macros +de r\'ef\'erences crois\'ees (\xref{xrefs}). + +Pour fractionner l'argument sur l'espace, nous devons +utiliser deux macros subsidiaires. |\@ttsA| trouve les espaces et +|\@ttsB| manipule une s\'equence de token sans aucun espace. Chaque +espace est remplac\'e par le d\'eveloppement de \pix^|\spacesub|. + +\csdisplay +\def\tokstostring#1{\@ttsA#1 \ttsmarkA}% +\def\@ttsA#1 #2\ttsmarkA{\ifempty{#1}\else + \@ttsB #1\@ttsmarkB + \ifempty{#2}\else + \spacesub\@ttsA#2\ttsmarkA\fi\fi}% +\def\@ttsB#1{\ifx #1\@ttsmarkB\else + \string #1% + \expandafter\@ttsB\fi}% +\def\@ttsmarkB{\@ttsmarkB}% should never be expanded +\def\spacesub{+}% +| + +\noindent +\pix^|\ifempty| teste si son argument est vide. + +\csdisplay +\def\ifempty#1{\@ifempty #1\@emptymarkA\@emptymarkB}% +\def\@ifempty#1#2\@emptymarkB{\ifx #1\@emptymarkA}% +\def\@emptymarkA{\@emptymarkA}% +| + +La macro ^|\for| impl\'emente une version \TeX\ du ``^{for loop}'' des +langages de programmation traditionnels. Ces macros viennent directement de +\LaTeX. + +\csdisplay +\def\for#1:=#2\do#3{\edef\@fortmp{#2}% + \ifx\@fortmp\empty \else + \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}% +\def\@nnil{\@nil}% +\def\@fornoop#1\@@#2#3{}% +\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil + \else #5\def#4{#2} ifx #4\@nnil \else + #5\@iforloop #3\@@#4{#5}\fi\fi}% +\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil + \let\@nextwhile=\@fornoop \else #4\relax + \let\@nextwhile=\@iforloop\fi + \@nextwhile#2\@@#3{#4}}% +| + +\pix^|\obeywhitespace| est utile pour reproduire des coupures de +ligne, des interlignes et des espaces dans votre source. Il combine +les effets de |\obey!-lines| et |\obey!-spaces|, ^^|\obeyspaces| +^^|\obeylines| et met \'egalement des espaces au d\'ebut d'une ligne +devant \^etre imprim\'ee. Les caract\`eres ``tabulation'' ne sont pas affect\'es~; ils +produisent toujours un ressort normal. + +\xrdef{ewhitesp} +^^{caract\`eres espace} +^^|\fontdimen| +^^|\font| +^^|\letreturn| + +\csdisplay +\def\alwaysspace{\hglue\fontdimen2\the\font \relax}% +{\makeactive\^^M \makeactive\ % +\gdef\obeywhitespace{% +\makeactive\^^M\def^^M{\par\indent}% +\aftergroup\@removebox% Kill extra paragraph at end. +\makeactive\ \let =\alwaysspace}}% +\def\@removebox{\setbox0=\lastbox} +| + +\pix^|\frac| est une bonne fa\c con d'afficher des fractions dans du +texte quand vous ne voulez pas utiliser |\over| et que mettre simplement ``1/2'' +ne semble pas beau. Cette macro est la r\'eponse \`a +l'exercise~11.6 de \texbook.^^{fractions//en forme de slash} + +\csdisplay +\def\frac#1/#2{\leavevmode + \kern.1em \raise .5ex \hbox{\the\scriptfont0 #1}% + \kern-.1em $/$% + \kern-.15em \lower .25ex \hbox{\the\scriptfont0 #2}}% +| + +Les macros suivantes produisent des logos qui sont utiles dans le monde \TeX. +Le logo \AMSTeX\ vient de la \knuth{page~420}{483}. Le logo \LaTeX\ +est l\'eg\`erement modifi\'e par rapport \`a celui de |latex.tex| (nous utilisons une +police diff\'erente pour le `A')~; de m\^eme, le logo \BibTeX\ +emploit |\sevenrm| au lieu d'une v\'eritable police de capitale-et- +petite-capitale. Le fichier source |.mf| pour le logo \MF\ est +donn\'e dans le manuel \MF\~: + +\smallskip +{\narrower\noindent +^{Knuth, Donald E.},{\sl The {\logosl METAFONT}book}. + Reading, Mass.: Addison-Wesley, 1986.\par} +\smallskip +\pix^^|\LaTeX| +\pix^^|\AMSTeX| +\pix^^|\BibTeX| +\pix^^|\MF| + +\csdisplay +\def\LaTeX{L\kern-.26em \raise.6ex\hbox{\fiverm A}% + \kern-.15em TeX}% +\def\AMSTeX{$\cal A\kern-.1667em \lower.5ex\hbox{$\cal M$}% + \kern-.125em S$-\TeX}% +\def\BibTeX{{\rm B\kern-.05em {\sevenrm I\kern-.025em B}% + \kern-.08em T\kern-.1667em \lower.7ex\hbox{E}% + \kern-.125emX}}% +\font\mflogo = logo10 +\def\MF{{\mflogo META}{\tenrm \-}{\mflogo FONT}}% +| + +Les deux macros suivantes produisent des bo\^\i tes. \pix^|\blackbox| +produit une ``bulle carr\'ee'', utilis\'e dans les macros de liste +(\xref{listmacs}). \pix^|\makeblankbox| (de \knuth{page~311}{363--364}) +produit un rectangle non rempli, avec l'\'epaisseur des traits de +bordure donn\'ee par les arguments. + +\csdisplay +\def\blackbox{\vrule height .8ex width .6ex depth -.2ex}% +\def\makeblankbox#1#2{% + \hbox{\lower\dp0\vbox{\hidehrule{#1}{#2}% + \kern -#1% overlap rules + \hbox to \wd0{\hidevrule{#1}{#2}% + \raise\ht0\vbox to #1{}% vrule height + \lower\dp0\vtop to #1{}% vrule depth + \hfil\hidevrule{#2}{#1}}% + \kern-#1\hidehrule{#2}{#1}}}}% +\def\hidehrule#1#2{\kern-#1\hrule height#1 depth#2 + \kern-#2}% +\def\hidevrule#1#2{\kern-#1{\dimen0 = #1 + \advance\dimen0 by #2 \vrule width\dimen0}\kern-#2}% +| + +\pix^|\numbername| produit la forme en toute lettres d'un nombre. Si +le nombre est plus grands que dix, la macro ne reproduit que les +chiffres de son argument. + +\csdisplay +\def\numbername#1{\ifcase#1% + zero\or one\or two\or three\or four\or five% + \or six\or seven\or eight\or nine\or ten\or #1\fi}% +| + +\pix^|\testfileexistence| d\'etermine si un fichier |\jobname.#1| est +non\-vide et place |\if!-fileexists| convenablement. +^^{fichiers//tester l'existence de} +Le nom de fichier dans l'argument +n'a pas besoin de finir dans un token d'espace puisque la macro +fournit la marque d'espace. + +\csdisplay +\newif\iffileexists +\def\testfileexistence#1{\begingroup + \immediate\openin0 = \jobname.#1\space + \ifeof 0\global\fileexistsfalse + \else \global\fileexiststrue\fi + \immediate\closein0 + \endgroup}% +| + + +\section Affichages + +Par d\'efaut, \TeX\ centre le mat\'eriel affich\'e (le mat\'eriel +entre |$$|). ^^{affichages, formatage} \pix^|\leftdisplays| provoque +des affichages justifi\'es \`a gauche par d\'efaut. Vous pouvez +retourner aux affichages centr\'es avec \pix^|\centereddisplays|. + +Les macros ici sont plus g\'en\'eralistes qu'elles doivent l'\^etre pour ne faire +que des affichages justifi\'es \`a gauche. Pour chaque affichage, +\pix^|\ifeqno| sera vrai si un |\eqno| appara\^\i t dans l'affichage. +\pix^|\ifleqno| sera vrai si un |\leqno| appara\^\i t. Si l'une ou l'autre +sorte d'\'equation num\'erot\'ee appara\^\i t, \pix^|\eqn| produit le texte +du num\'ero de l'\'equation. \pix^|\eq| produit toujours le texte de +l'\'equation lui-m\^eme. + +Ces macros sont bas\'ees sur le code de la \knuth{page~376}{434}. + +\csdisplay +\newif\ifeqno \newif\ifleqno +\newtoks\@eqtoks \newtoks\@eqnotoks +\def\eq{\the\@eqtoks}\def\eqn{\the\@eqnotoks}% +\def\displaysetup#1$${% + \@displaytest#1\eqno\eqno\@displaytest}% +\def\@displaytest#1\eqno#2\eqno#3\@displaytest{% + \if !#3!% No \eqno, check for \leqno: + \@ldisplaytest#1\leqno\leqno\@ldisplaytest + \else + \eqnotrue \leqnofalse % Have \eqno, not \leqno. + \@eqnotoks = {#2}\@eqtoks = {#1}% + \fi + \generaldisplay$$}% +\def\@ldisplaytest#1\leqno#2\leqno#3\@ldisplaytest{% + \@eqtoks = {#1}% + \if !#3!% + \eqnofalse % No \leqno; we're done. + \else + \eqnotrue \leqnotrue % Have \leqno. + \@eqnotoks = {#2}% + \fi}% +| + +Vous pouvez composer des affichages diff\'eremment en d\'efinissant votre +propre macro analogue \`a \pix^|\leftdisplays|. La d\'efinition de macro doit +placer l'appel \`a |\display!-setup| dans |\every!-display| ^^|\everydisplay| +afin de s'assurer que ^^|\displaysetup| |\dis!-play!-setup| soit appel\'e au +d\'ebut de chaque affichage. La d\'efinition de macro doit \'egalement inclure +une d\'efinition de ^|\generaldisplay|. + +\csdisplay +\newtoks\previouseverydisplay +\def\leftdisplays{% + \previouseverydisplay = \everydisplay + \everydisplay = + {\the\previouseverydisplay \displaysetup}% + \def\generaldisplay{% + \leftline{% + \strut \indent \hskip\leftskip + \dimen0 = \parindent + \advance\dimen0 by \leftskip + \advance\displaywidth by -\dimen0 + \@redefinealignmentdisplays + \ifeqno \ifleqno + \kern-\dimen0 + \rlap{$\displaystyle\eqn$}% + \kern\dimen0 + \fi\fi + $\displaystyle{\eq}$% + \ifeqno \ifleqno\else + \hfill $\displaystyle{\eqn}$% + \fi\fi}}}% +\def\centereddisplays{\let\displaysetup = \relax}% +| + +%\filbreak +\pix^|\leftdisplays| doit travailler dans la douleur pour s'assurer que +|\dis!-play!-lines|, ^|\eqalignno| ^^|\displaylines| et ^|\leqalignno| +fonctionnent toujours correctement. |\eq| est compos\'e en mode math\'ematique +et |\halign| est ill\'egal dans ce mode. ^^|\halign//ill\'egal dans le mode +math\'ematique| Nous utilisons ^|\vcenter| pour changer le contexte pour que +|\halign| redevienne l\'egal. Nous enlevons \'egalement les commandes |\hfil| \`a +gauche du patron pour obtenir la justification \`a droite. \`a part ces +changements, les macros sont les m\^emes que dans |plain.tex|. + +\csdisplay +\def\@redefinealignmentdisplays{% + \def\displaylines##1{\displ@y + \vcenter{\halign{\hbox to\displaywidth{$\@lign + \displaystyle####\hfil$}\crcr##1\crcr}}}% + \def\eqalignno##1{\displ@y + \vcenter{\halign to\displaywidth{% + $\@lign\displaystyle{####}$\tabskip\z@skip + &$\@lign\displaystyle{{}####}$ + \hfil\tabskip\centering + &\llap{$\@lign####$}\tabskip\z@skip\crcr + ##1\crcr}}}% + \def\leqalignno##1{\displ@y + \vcenter{\halign to\displaywidth{% + $\@lign\displaystyle{####}$\tabskip\z@skip + &$\@lign\displaystyle{{}####} + $\hfil\tabskip\centering + &\kern-\displaywidth + \rlap{\kern-\parindent\kern-\leftskip$ + \@lign####$}% + \tabskip\displaywidth\crcr + ##1\crcr}}}}% +| + + +\section heure du jour + +Quand \TeX\ d\'emarre, il d\'etermine les valeurs des param\`etres ^|\time|, +^|\day|, ^|\month| et ^|\year|. +^^{heure du jour}^^{date} +\pix^|\monthname| +produit le nom du mois, abr\'eg\'e en trois lettres. +\pix^|\timestring| produit l'heure courante, comme dans ``1:14\thinspace +p.m.''. \pix^|\timestamp| produit le texte de la date compl\`ete, comme dans +``23 avr 1964\quad 1:14\thinspace p.m.''. + +\csdisplay +\def\monthname{% + \ifcase\month + \or Jan\or Feb\or Mar\or Apr\or May\or Jun% + \or Jul\or Aug\or Sep\or Oct\or Nov\or Dec% + \fi}% +\def\timestring{\begingroup + \count0 = \time \divide\count0 by 60 + \count2 = \count0 % The hour. + \count4 = \time \multiply\count0 by 60 + \advance\count4 by -\count0 % The minute. + \ifnum\count4<10 \toks1 = {0}% Get a leading zero. + \else \toks1 = {}% + \fi + \ifnum\count2<12 \toks0 = {a.m.}% + \else \toks0 = {p.m.}% + \advance\count2 by -12 + \fi + \ifnum\count2=0 \count2 = 12 \fi % Make midnight `12'. + \number\count2:\the\toks1 \number\count4 + \thinspace \the\toks0 +\endgroup}% +\def\timestamp{\number\day\space\monthname\space + \number\year\quad\timestring}% +| + + +\section Listes + +\null +\xrdef{listmacs} +\bix^^{listes d'\'el\'ements} +\bix^^{\enumerations} +\pix^|\numberedlist| produit des listes num\'erot\'ees~; |\endnumberedlist| les +termine. +\pix^|\unorderedlist| est analogue. +Pour l'une ou l'autre de ces derni\`eres, les items \`a l'int\'erieur des listes +commencent par \pix^|\li| (``list item''). Vous pouvez mettre +\pix^|\listcompact| au d\'ebut d'une liste si vous ne voulez aucun espace +additionnel entre les \'el\'ements de cette liste. Des listes peuvent \^etre +imbriqu\'ees arbitrairement. + +Vous pouvez contr\^oler plus g\'en\'eralement l'espacement entre les +\'el\'e\-ments en assignant des valeurs aux registres \'enum\'er\'es +ci-dessous. Si les \'el\'ements de vos listes tendent \`a \^etre +longs, vous pourriez vouloir rendre |\interitemskip| diff\'erent de +z\'ero. L'indentation gauche de chaque \'el\'ement de liste est +donn\'ee par |\par!-indent| plus |\list!-left!-indent|~; l'indentation +droite de chaque \'el\'ement de liste est donn\'ee par |\list!-right!|% indent|. + +\csdisplay +\newskip\abovelistskip \abovelistskip = .5\baselineskip +\newskip\interitemskip \interitemskip = 0pt +\newskip\belowlistskip \belowlistskip = .5\baselineskip +\newdimen\listleftindent \listleftindent = \parindent +\newdimen\listrightindent \listrightindent = 0pt +\def\listcompact{\interitemskip = 0pt \relax}% +| + +Les listes num\'erot\'ees et non num\'erot\'ees utilisent les macros qui suivent. +Nous ne changeons pas |\parindent|, puisque beaucoup de macros existantes, +comme par exemple, |\footnote|, en d\'ependent. Nous devons expliquer la +possibilit\'e que les \'el\'ements fassent plus d'un paragraphe de long. Dans ce +cas-ci, tous les paragraphes apr\`es le premier sont indent\'es. Nous +utilisons |\leftskip| et |\rightskip| pour indenter les \'el\'ements d'une liste. +L'indentation des affichages est expliqu\'ee par des changements de |\every!-% +dis!-play|. ^^|\everydisplay| + +\csdisplay +\newdimen\@listindent +\def\beginlist{% + \@listindent = \parindent + \advance\@listindent by \listleftindent + \everydisplay = \expandafter{\the\everydisplay + % Don't lose user's \everydisplay: + \advance\displayindent by \@listindent + \advance\displaywidth by -\@listindent + \advance\displaywidth by -\listrightindent}% + \nobreak\vskip\abovelistskip + \parskip = 0pt + % \leftskip shifts nested lists to the right on the page. + \advance\leftskip by \@listindent + \advance\rightskip by \listrightindent}% +\def\printitem{\par\noindent + \llap{\hskip-\listleftindent \marker \enspace}}% +\def\endlist{\vskip\belowlistskip}% +| + +\noindent +Vous pouvez changer la mani\`ere dont les labels d'\'el\'ements sont compos\'ees en +red\'efinissant la macro |\numbered!-marker|. \pix^^|\numberedmarker| + +\csdisplay +\newcount\numberedlistdepth \newcount\itemnumber +\newcount\itemletter +\def\numberedmarker{% + \ifcase\numberedlistdepth + (impossible)% + \or \itemnumberout)% + \or \itemletterout)% + \else *% + \fi}% +| + +\noindent Voici les d\'efinitions de |\numberedlist| et de +|\unorderedlist|. +ces d\'efini\-tions ont la m\^eme structure. + +\csdisplay +\def\numberedlist{\environment{@numbered-list}% + \advance\numberedlistdepth by 1 + \itemnumber = 1 \itemletter = `a + \beginlist \let\marker = \numberedmarker + \def\li{% + \ifnum\itemnumber=1\else \vskip\interitemskip \fi + \printitem + \advance\itemnumber by 1 \advance\itemletter by 1 + }}% +\def\itemnumberout{\number\itemnumber}% +\def\itemletterout{\char\itemletter}% +\def\endnumberedlist{\par + \endenvironment{@numbered-list}\endlist}% +!bigskip +\newcount\unorderedlistdepth +\def\unorderedmarker{% + \ifcase\unorderedlistdepth + (impossible)% + \or \blackbox + \or ---% + \else *% + \fi}% +\def\unorderedlist{\environment{@unordered-list}% + \advance\unorderedlistdepth by 1 + \beginlist \itemnumber = 1 + \let\marker = \unorderedmarker + \def\li{% + \ifnum\itemnumber=1\else \vskip\interitemskip \fi + \printitem \advance\itemnumber by 1 + }}% +\def\endunorderedlist{\par + \endenvironment{@unordered-list}\endlist}% +| + +\eix^^{listes d'\'el\'ements} +\eix^^{\enumerations} + + +\section Listing verbatim + +La macro \pix^|\listing| produit le listing verbatim d'un fichier sp\'ecifi\'e +en police |\tt|. +Elle est bas\'ee sur le code de la \knuth{page~380}{439}. +Les tabulations produisent un montant d'espace fixe et les sauts de page +produisent une coupure de page. D'autres caract\`eres de contr\^ole produisent +ce qui s'av\`ere \^etre \`a cette position dans la police, qui n'est g\'en\'eralement +pas tr\`es utile. En red\'efinissant |\setup!-listing!-hook|, +\pix^^|\setuplistinghook| vous pouvez prendre les mesures compl\'ementaires +qui sont appropri\'ees pour vos polices et\slash ou environnements particuliers +avant que le fichier ne soit lu. + +\csdisplay +\def\listing#1{% + \par \begingroup \@setuplisting \setuplistinghook + \input #1 \endgroup}% +\let\setuplistinghook = \empty +\def\@setuplisting{% + \uncatcodespecials + \obeywhitespace \makeactive\` \makeactive\^^I + \def^^L{\vfill\eject}\tt}% +{\makeactive\` \gdef`{\relax\lq}}% Defeat ligatures. +{\makeactive\^^I\gdef^^I{\hskip8\fontdimen2\tt \relax}}% +| + + +\section Table des mati\`eres + +\null ^^{table des mati\`eres} +La macro \pix^|\writetocentry| \'ecrit une macro dans le fichier +|\jobname.toc|. Le premier argument de |\writetocentry|, par exemple, +``chapitre'', est utilis\'e pour composer le nom de la macro appel\'ee. Le +deuxi\`eme argument est le texte qui doit appara\^\i tre dans la table des +mati\`eres. |\writetocentry| appose le num\'ero de la page \`a l'appel de la macro. +Par exemple~: +\csdisplay +\writetocentry{chapter}{Introduction} +| +\noindent +produira la ligne~: +\csdisplay +\tocchapterentry{Introduction}{2} +| +\noindent dans le fichier |.toc|, ce qui indique que `Introduction' d\'ebute +en page 2. + +Vous pouvez utiliser |\writenumberedtocentry| pour apporter un troisi\`eme +param\`etre, tel qu'un num\'ero de chapitre. Par exemple~: +\csdisplay +\writenumberedtocentry{chapter}{The second chapter}{2} +| +\noindent \'ecrira une ligne~: +\csdisplay +\tocchapterentry{The second chapter}{2}{14} +| +\noindent +Vous pouvez aussi faire un |\write| vers le |\tocfile| vous-m\^eme. + +\csdisplay +\newwrite\tocfile \newif\iftocfileopened +\def\opentocfile{\iftocfileopened\else + \tocfileopenedtrue + \immediate\openout\tocfile = \jobname.toc +\fi}% +\def\writenumberedtocentry#1#2#3{\ifrewritetocfile + \opentocfile + \write\tocfile{% + \expandafter\noexpand \csname toc#1entry\endcsname + {#2}{#3}{\folio}}% +\ignorespaces\fi}% +\def\writenumberedtocentry#1#2#3{\ifrewritetocfile + \opentocfile + \write\tocfile{% + \expandafter\noexpand \csname toc#1entry\endcsname + {#2}{#3}{\folio}}% +\ignorespaces\fi}% +| + +Pour produire une table des mati\`eres, lisez le fichier |.toc| avec +\pix^|\readtocfile|. Vous devez appeler |\read!-tocfile| avant le premier +|\write!-toc!-entry|. Quand vous traitez la table des mati\`eres sans la +r\'eg\'en\'erer, vous ne devriez pas r\'ecrire le fichier |.toc|---si vous le +faites, son contenu sera perdu. La commande |\rewrite!-tocfile!-false| +emp\^echera la r\'e\'ecriture. + +\csdisplay +\newif\ifrewritetocfile \rewritetocfiletrue +\def\readtocfile{\testfileexistence{toc}% + \iffileexists + \input \jobname.toc + \ifrewritetocfile \opentocfile \fi + \fi}% +| + +Voici quelques d\'efinitions de macros |\toc|\dots|entry| possibles. Ces +d\'efinitions ne sont indiqu\'ees que comme exemple---aligner des traits \`a +travers la ligne n'est normalement pas la meilleure mani\`ere de composer une +table des mati\`eres. + +\csdisplay +\def\tocchapterentry#1#2{\line{\bf #1 \dotfill\ #2}}% +\def\tocsectionentry#1#2{% + \line{\quad\sl #1 \dotfill\ \rm #2}}% +\def\tocsubsectionentry#1#2{% + \line{\qquad\rm #1 \dotfill\ #2}}% +| + + +\section R\'ef\'erences crois\'ees + +\null ^^{r\'ef\'erences crois\'ees} +\xrdef{xrefs} +Les macros qui suivent fournissent des r\'ef\'erences crois\'ees symboliques, pour +que vous puissiez vous r\'ef\'erer \`a quelque chose dans une autre partie d'un +document par son nom et non son num\'ero de page r\'eel. \pix^|\xrdef||{foo}| +d\'efinit une \'etiquette |foo| comme \'etant le num\'ero de page courant et +\pix^|\xrefn||{foo}| produit ce num\'ero de page, par exemple, $77$. Plus +fr\'equement, vous voudrez dire quelque chose comme ``voir p.\thinspace77'', +ainsi \pix^|\xref||{foo}| produit ` p.\thinspace 77''. Si |foo| n'est pas +d\'efini, un message d'avertissement sera donn\'e. |\xrefwarningfalse| supprime +l'avertissement. + +Ces macros n'assurent aucune protection contre des d\'efinitions dupliqu\'ees. +Vous pouvez v\'erifier ces d\'efinitions dupliqu\'ees en triant le fichier de +r\'ef\'erences crois\'ees et en v\'erifiant, m\'ecaniquement ou \emph{de visu}, les +d\'efinitions adjacentes du m\^eme symbole. + +\csdisplay +\newif\ifxrefwarning \xrefwarningtrue +\def\xrdef#1{\begingroup + \xrlabel{#1}% + \edef\@wr{\@writexrdef{\the\@xrlabeltoks}}% + \@wr + \endgroup \ignorespaces}% +\def\@writexrdef#1{\write\reffile{% + \string\gdef + \expandafter\string\csname#1\endcsname + {\noexpand\folio}\percentchar}}% +\def\xrefnumber#1{% + \xrlabel{#1}% + % \@xrlabeltoks now has the control sequence name. + \toks0 = + \expandafter{\csname\the\@xrlabeltoks\endcsname}% + \expandafter \ifx\the\toks0\relax + \ifxrefwarning \message{Undefined label + `\tokstostring{#1}'.}\fi + {\let\spacesub = \space + \expandafter\xdef\the\toks0 + {`{\tt \tokstostring{#1}}'}}\fi + \the\toks0}% +\def\xref#1{p.\thinspace\xrefnumber{#1}}% +\def\xrefn#1{\xrefnumber{#1}}% +| + +Cette macro transforme une \'etiquette en liste de tokens de caract\`ere dans le +registre de tokens |\labeltoks|. Une \'etiquette peut inclure des blancs et +des s\'equences de contr\^ole aussi bien que les caract\`eres normaux, mais elle +ne peut pas inclure d'accolades. + +\csdisplay +\newtoks\@xrlabeltoks +\def\xrlabel#1{\begingroup + \escapechar = `\_ \edef\tts{\tokstostring{#1_}}% + \global\@xrlabeltoks = \expandafter{\tts}% + \endgroup}% +| + +Il faut deux passages pour obtenir des r\'ef\'erences crois\'ees correctes, +puisque les d\'efinitions sont \'ecrites dans le fichier auxiliaire +|\jobname.aux|. \pix^|\readreffile| les relit. Si vous ne saisissez pas +cette commande avant la premi\`ere d\'efinition, vous perdrez toutes les +d\'efinitions de l'ex\'ecution pr\'ec\'edente. + +\csdisplay +\newwrite\reffile \newif\ifreffileopened +\def\openreffile{\ifreffileopened\else + \reffileopenedtrue + \immediate\openout\reffile = \jobname.aux + \fi}% +\def\readreffile{% + \testfileexistence{aux}% + \iffileexists + \begingroup + \@setletters + \input \jobname.aux + \endgroup + \else + \message{No cross-reference file; I won't give you + warnings about undefined labels.}% + \xrefwarningfalse + \fi + \openreffile}% +\def\@setletters{% + \catcode`_ = \letter \catcode`+ = \letter + \catcode`- = \letter \catcode`@ = \letter + \catcode`0 = \letter \catcode`1 = \letter + \catcode`2 = \letter \catcode`3 = \letter + \catcode`4 = \letter \catcode`5 = \letter + \catcode`6 = \letter \catcode`7 = \letter + \catcode`8 = \letter \catcode`9 = \letter + \catcode`( = \letter \catcode`) = \letter}% +| + +^^{\equations, labelisation} +Vous pouvez donnez des noms symboliques aux \'equations de la m\^eme mani\`ere, +en utilisant \pix^|\eqdef| et \pix^|\eqref|. |\eqdef| ins\`ere sa propre +commande |\eqno|, donc il doit \^etre appel\'e \`a un endroit o\`u |\eqno| est +l\'egal. + +\csdisplay +\newcount\eqnumber +\def\eqdef#1{\global\advance\eqnumber by 1 + \expandafter\xdef + \csname#1eqref\endcsname{\the\eqnumber}% + \immediate\write\reffile{\string\def + \expandafter\string\csname#1eqref\endcsname + {\the\eqnumber}}% + \eqno + \eqprint{\the\eqnumber}}% +| + +|\eqref| produit le ``(num\'ero de l'\'equation)''. Vous pouvez obtenir un +formatage plus fantaisiste en red\'efinissant \pix^|\eqprint|. Par exemple, +vous pourriez la red\'efinir pour que les num\'eros d'\'equation incluent le +num\'ero du chapitre. + +\csdisplay +\def\eqref#1{% + \expandafter \ifx \csname#1eqref\endcsname \relax + \ifxrefwarning \message{Undefined equation label + `#1'.}\fi + \expandafter\def\csname#1eqref\endcsname{00}% + \else \eqprint{\csname#1eqref\endcsname}% + \fi}% +\def\eqprint#1{(#1)}% +| + + +\section Environnements + +\null ^^{environnements} Ces macros vous permettent de d\'efinir vos propres +groupes appel\'es environnements pour des parties de votre manuscrit. Comme +les groupes de \TeX, ces groupes peuvent \^etre embo\^\i t\'es, et en fait leur +embo\^\i tement peut \^etre entrelac\'e avec l'embo\^\i tement des groupes de \TeX. Si +les noms au d\'ebut et \`a la fin d'un environnement ne s'assortissent pas, +vous recevrez un message d'erreur. Les macros sont con\c cues pour que le +message que vous recevez quand une telle erreur se produit vous donne une +bonne chance de localiser la cause de l'erreur facilement. + +Vous d\'ebutez un environnement avec +\pix^^|\environment| +|\envi!-ron!-ment| |{foo}| et le finissez avec |\endenvironment{foo}|, o\`u +|foo| est le nom de l'environnement. Nos macros am\'eliorent l\'eg\`erement la +r\'eponse \`a l'exercice~5.7 du \texbook, en faisant quelques contr\^oles sur les +paires |\begingroup| et |\endgroup|, et s'assurant aussi que les paires +|\environment| et |\endenvironment| s'assortissent. + +\csdisplay +\def\environment#1{\ifx\@groupname\undefined\else + \errhelp = \@unnamedendgrouphelp + \errmessage{`\@groupname' was not closed by + \string\endenvironment}\fi + \def\@groupname{#1}% + \begingroup + \let\@groupname = \undefined \ignorespaces}% +\def\endenvironment#1{\endgroup + \def\@thearg{#1}% + \ifx\@groupname\@thearg + \else + \ifx\@groupname\undefined + \errhelp = \@isolatedendenvironmenthelp + \errmessage{Isolated + \string\endenvironment\space for `#1'}% + \else + \errhelp = \@mismatchedenvironmenthelp + \errmessage{Environment `#1' ended, + but `\@groupname' started}% + \endgroup % Probably a typo in the names. + \fi + \fi + \let\@groupname = \undefined \ignorespaces}% +| + +Nous d\'efinissons \'egalement des messages d'aide pour chacune des erreurs +ci-dessus. ^^|\newhelp| + +\csdisplay +\newhelp\@unnamedendgrouphelp{% + Most likely, you just forgot an^^J% + \string\endenvironment. + Maybe you should try inserting another^^J% + \string\endgroup to recover.}% +\newhelp\@isolatedendenvironmenthelp{% + You ended an environment X, but^^J% + no \string\environment\space to start it + is anywhere in sight.^^J% + You might also be at an + \string\endenvironment\space that would match^^J% + a \string\begingroup, i.e., you forgot an + \string\endgroup.}% +\newhelp\@mismatchedenvironmenthelp{% + You started an environment X, but^^J% + you ended it with Y. Maybe you made a typo + in one or the other^^J% + of the names.}% +| + +Certains environnements ne doivent pas se produire dans d'autres +environnements. Appelons ces derniers ``environnements externes'' +(outer). |\check!-env| v\'erifie qu'aucun environnement externe n'est +actuellement effectif, sinon il se plaint. Pour utiliser |\check!-env|, +vous devez mettre la commande |\environment!-true| au d\'ebut de chaque +environnement externe. + +\csdisplay +\newif\ifenvironment +\def\checkenv{% + \ifenvironment + \errhelp = \@interwovenenvhelp + \errmessage{Interwoven environments}% + \endgroup + \fi}% +\newhelp\@interwovenenvhelp{% + Perhaps you forgot to end the previous^^J% + environment? I'm finishing off the current group,^^J% + hoping that will fix it.}% +| + + +\section Justification + +\bix^^{cadr\'e \`a gauche} +\bix^^{cadr\'e \`a droite} +\bix^^{texte centr\'e} +Les trois macros \pix^|\flushleft|, \pix^|\flushright| et +\xrdef{eplaincenter} +\pix^|\center| justifient le texte des +lignes suivantes de la mani\`ere indiqu\'ee. La commande doit +appara\^\i tre seule sur une ligne. La commande et le texte +doivent \^etre enferm\'es dans un groupe---% +la fin du groupe +indique la fin du texte. Le groupe entier est plac\'e comme un paragraphe +simple, avec des lignes compl\'et\'ees d'un c\^ot\'e ou de l'autre comme +indiqu\'e. Les lignes blanches sont reproduites. + +\csdisplay +\begingroup + \catcode `\^^M = \active + \globaldefs = 1 % + \def\flushleft{\beforejustify % + \aftergroup\@endflushleft % + \def^^M{\null\hfil\break}% + \def\@eateol^^M{}\@eateol}% + \def\flushright{\beforejustify % + \aftergroup\@endflushright % + \def^^M{\break\null\hfil}% + \def\@eateol^^M{\hfil\null}\@eateol}% + \def\center {\beforejustify % + \aftergroup\@endcenter % + \def^^M{\hfil\break\null\hfil}% + \def\@eateol^^M{\hfil\null}\@eateol}% +\endgroup +| + +Les commandes suivantes sont appel\'ees en raison du |\after!-group| +^^|\aftergroup| +dans les d\'efinitions de |\flush!-left|, |\flush!- right| et |\center|. +Elles effectuent les op\'erations de nettoyage n\'ecessaires . + + +\csdisplay +\def\@endflushleft{\unpenalty + {\parfillskip = 0pt plus 1 fil\par}% + \ignorespaces}% +\def\@endflushright{% + % Remove the \hfil\null\break we just put on. + \unskip \setbox0=\lastbox \unpenalty + % We have fil glue at the left of the line; + % \parfillskip shouldn't affect that. + {\parfillskip = 0pt \par}\ignorespaces}% +\def\@endcenter{% + % Remove the \hfil\null\break we just put on. + \unskip \setbox0=\lastbox \unpenalty + % We have fil glue at the left of the line; + % \parfillskip must balance it. + {\parfillskip = 0pt plus 1fil \par}\ignorespaces}% +\def\beforejustify{% + \par\noindent + \catcode`\^^M = \active + \checkenv \environmenttrue}% +| + +\eix^^{cadr\'e \`a gauche} +\eix^^{cadr\'e \`a droite} +\eix^^{texte centr\'e} + + +\section Tables + +La macro \pix^|\makecolumns| vous permet de donner toutes les entr\'ees d'une +table sans vous inqui\'eter de l'endroit o\`u les colonnes se coupent. Par +exemple, si vous saisissez une longue liste alphab\'etique qui sera compos\'ee +en plusieurs colonnes, vous ne saurez habituellement pas \`a l'avance o\`u une +colonne finit et o\`u la suivante commence. Par ailleurs, si un autre \'el\'ement +est ajout\'e, les coupures de colonne changeront. + +|\makecolumns| prend deux arguments (d\'elimit\'es)~: le nombre total de +rang\'ees et le nombre de colonnes de la table. Par exemple, `|\makecolumns +37/3:|' d\'esigne une table de trois colonnes dont les rang\'ees sont les $37$ +prochaines lignes. Vous pouvez ajuster le positionnement de la table sur la +page en changeant |\parindent|, qui d\'etermine l'espace \`a gauche et +|\hsize|, qui d\'etermine l'espace entre la marge gauche de la page et la +droite du bloc. Vous pouvez permettre une coupure de page au-dessus du +|\valign| +^^|\valign//utilis\'e dans {\tt\\makecolumns}| +en changeant \pix^|\abovecolumnspenalty|.. + +\csdisplay +\newcount\abovecolumnspenalty +\abovecolumnspenalty = 10000 +\newcount\@linestogo % Lines remaining to process. +\newcount\@linestogoincolumn % Lines remaining in column. +\newcount\@columndepth % Number of lines in a column. +\newdimen\@columnwidth % Width of each column. +\newtoks\crtok \crtok = {\cr}% +\def\makecolumns#1/#2: {\par \begingroup + \@columndepth = #1 \advance\@columndepth by #2 + \advance\@columndepth by -1 + \divide \@columndepth by #2 + \@linestogoincolumn = \@columndepth \@linestogo = #1 + \def\@endcolumnactions{% + \ifnum \@linestogo<2 + \the\crtok \egroup \endgroup \par + % End \valign and \makecolumns. + \else + \global\advance\@linestogo by -1 + \ifnum\@linestogoincolumn<2 + \global\@linestogoincolumn = \@columndepth + \the\crtok + \else &\global\advance\@linestogoincolumn by -1 + \fi + \fi}% + \makeactive\^^M\letreturn\@endcolumnactions + \@columnwidth = \hsize + \advance\@columnwidth by -\parindent + \divide\@columnwidth by #2 + \penalty\abovecolumnspenalty + \noindent % It's not a paragraph (usually). + \valign\bgroup + &\hbox to \@columnwidth{\strut ##\hfil}\cr +}% The next end-of-line starts everything going. +| + + +\section Notes de pied de page + +\null ^^{notes de pied de page} +Des notes de bas de page sont compos\'ees le plus g\'en\'eralement en utilisant un +num\'ero incr\'ement\'e comme marque de r\'ef\'erence. Nous d\'efinissons la macro +\pix^|\numberedfootnote| pour faire cela. Il red\'efinit \'egalement +^|\vfootnote| pour permettre un formatage l\'eg\`erement plus g\'en\'erique des +notes de bas de page que ne le fait \plainTeX. Le registre de dimension +|\foot!-note!-mark!-sepa!-ra!-tion| +\pix^^|\footnotemarkseparation| contr\^ole +l'espace entre la marque de la note de bas de page (par exemple, le num\'ero) et le +d\'ebut du texte. Les tokens \pix^|\everyfootnote| sont +ins\'er\'es avant de produire la notes de bas de page. + +Les d\'efinitions \plainTeX \ de |\footnote| et |\vfootnote| sont pr\'eserv\'es en +|\@plain!-footnote| et |\@plain!-vfootnote| au cas o\`u vous auriez besoin d'elles. +\csdisplay +\newcount\footnotenumber \newtoks\everyfootnote +\newdimen\footnotemarkseparation +\footnotemarkseparation = .5em +\let\@plainfootnote = \footnote +\let\@plainvfootnote = \vfootnote +\def\vfootnote#1{\insert\footins\bgroup + \interlinepenalty\interfootnotelinepenalty + \splittopskip\ht\strutbox \splitmaxdepth\dp\strutbox + \floatingpenalty\@MM + \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip + \xspaceskip\z@skip + \everypar = {}% + \the\everyfootnote + \indent\llap{#1\kern\footnotemarkseparation}\footstrut + \futurelet\next\fo@t}% +\def\numberedfootnote{\global\advance\footnotenumber by 1 + \@plainfootnote{$^{\number\footnotenumber}$}}% +| + + +\section Double colonne + +\null ^^{double colonnes} La commande |\doublecolumns| commence la +composition en double colonne, alors que la commande +\pix^^|\singlecolumn| |\single!-column| remet la composition en +colonne simple. Vous pouvez commuter dans les deux sens entre elles +sur la m\^eme page. Le ressort sp\'ecifi\'e par |\above!-double!-column!-% +skip| et |\below!-double!-column!-skip| est ins\'er\'ee avant et apr\`es la +composition en double colonne. + +L'approche est d\'eriv\'ee de la \knuth{page~417}{480}. + +\csdisplay +\newskip\abovedoublecolumnskip +\newskip\belowdoublecolumnskip +\abovedoublecolumnskip = \bigskipamount +\belowdoublecolumnskip = \bigskipamount +\newdimen\gutter \gutter = 2pc +\newdimen\doublecolumnhsize \doublecolumnhsize = \hsize +\newbox\@partialpage \newdimen\singlecolumnhsize +\newdimen\singlecolumnvsize \newtoks\previousoutput +\def\doublecolumns{\par % Don't start in horizontal mode. + \previousoutput = \expandafter{\the\output} + \advance\doublecolumnhsize by -\gutter + \divide\doublecolumnhsize by 2 + \output = {\global\setbox\@partialpage = + \vbox{\unvbox255\vskip\abovedoublecolumnskip}}% + \pagegoal = \pagetotal \break % Expands \output above. + \output = {\doublecolumnoutput}% + \singlecolumnhsize = \hsize + \singlecolumnvsize = \vsize + \hsize = \doublecolumnhsize \vsize = 2\vsize}% +| + +Le macro |\@double!-column!-split| fait le d\'edoublement r\'eel. On +suppose que le source est ins\'er\'ee en colonne simple. Si vous ne +voulez pas que cela soit le cas, vous devrez modifier la routine de +r\'esultat. Apr\`es que |\@double!-column!-split| ait effectu\'e son +travail, |\box255| aura le mat\'eriel en double colonne. Le mat\'eriel en +double colonne sera pr\'ec\'ed\'e par n'importe quel mat\'eriel en colonne simple +qui aura \'et\'e compos\'e avant que |\doublecolumns| ait \'et\'e appel\'e. +|\box4| aura le mat\'eriel qui ne s'est pas adapt\'e \`a la page. + +\csdisplay +\def\@doublecolumnsplit{% + \splittopskip = \topskip \splitmaxdepth = \maxdepth + \dimen0 = \singlecolumnvsize + \advance\dimen0 by -\ht\@partialpage + \advance\dimen0 by -\ht\footins + \advance\dimen0 by -\skip\footins + \advance\dimen0 by -\ht\topins + \begingroup + \vbadness = 10000 + \global\setbox1=\vsplit255 to \dimen0 \wd1=\hsize + \global\setbox3=\vsplit255 to \dimen0 \wd3=\hsize + \endgroup + \global\setbox4=\vbox{\unvbox255 + \penalty\outputpenalty}% + \global\setbox255=\vbox{\unvbox\@partialpage + \hbox to \singlecolumnhsize{\box1\hfil\box3}% + \vfill}}% +| +\needspace{.5in} +|\double!-column!-out!-put| est la routine de sortie r\'eelle. Nous appelons +l'ancienne |\output| pour faire le travail de sortie de la bo\^\i te. + +\csdisplay +\def\doublecolumnoutput{\@doublecolumnsplit + \hsize = \singlecolumnhsize \vsize = \singlecolumnvsize + \previousoutput \unvbox4}% +| + +|\singlecolumn| reprend la composition en une colonne. Il suppose que +|\doublecolumns| a \'et\'e appel\'e. + +\csdisplay +\def\singlecolumn{\par % Don't start in horizontal mode. + \output = {\global\setbox1 = + \vbox{\unvbox255\vskip\abovedoublecolumnskip}}% + \pagegoal = \pagetotal \break \setbox255 = \box1 + {\singlecolumnvsize = \ht255 + \divide\singlecolumnvsize by 2 + \advance\singlecolumnvsize by +\ht\@partialpage + \advance\singlecolumnvsize by +\ht\footins + \advance\singlecolumnvsize by +\skip\footins + \advance\singlecolumnvsize by +\ht\topins + \@doublecolumnsplit}% + \hsize = \singlecolumnhsize + \vsize = \singlecolumnvsize + \output = \expandafter{\the\previousoutput}% + \unvbox255}% +| + +\margin{`Sensible paragraph skips' section deleted} + + +\section Terminer + +Nous devons maintenant d\'efaire les changements que nous avons faits +quand nous avons commenc\'e (voir la \xref{eplainconv}). Nous donnons +\'egalement un num\'ero de version, qui sera plus tard +disponible dans |\fmt!-name| et |\fmt!-version|. + +\csdisplay +\let\wlog = \@plainwlog \catcode`@ = \other +\def\fmtname{eplain}% +{\edef\plainversion{\fmtversion}% + \xdef\fmtversion{1.0: 15 May 1990 + (and plain \plainversion)}% +}% +| + +\eix^^|eplain.tex| + +\endchapter +\byebye + |