summaryrefslogtreecommitdiff
path: root/Master/texmf-doc/doc/french/impatient-fr/fgenops.tex
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-doc/doc/french/impatient-fr/fgenops.tex')
-rw-r--r--Master/texmf-doc/doc/french/impatient-fr/fgenops.tex2834
1 files changed, 2834 insertions, 0 deletions
diff --git a/Master/texmf-doc/doc/french/impatient-fr/fgenops.tex b/Master/texmf-doc/doc/french/impatient-fr/fgenops.tex
new file mode 100644
index 00000000000..2ca0acac59e
--- /dev/null
+++ b/Master/texmf-doc/doc/french/impatient-fr/fgenops.tex
@@ -0,0 +1,2834 @@
+% 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 des op\'erations g\'en\'erales}
+
+\chapterdef{general}
+
+Cette section couvre
+des ^{caract\'eristiques de programmation} de \TeX\ et
+toutes autres choses qui ne rentrent pas dans les cat\'egories
+de commandes des chapitres pr\'ec\'edents.
+Pour une explication des conventions utilis\'ees dans cette section,
+voir \headcit{Descriptions des commandes}{cmddesc}.
+
+\begindescriptions
+
+%==========================================================================
+\section {Nommer et modifier des polices}
+
+\begindesc
+\bix^^{polices//nommer et modifier}
+\cts font {}
+\aux\cts font {\<s\'equence de contr\^ole> = \<nom de police>}
+\aux\cts font {\<s\'equence de contr\^ole> = \<nom de police> {\bt scaled} \<nombre>}
+\aux\cts font {\<s\'equence de contr\^ole> = \<nom de police> {\bt at} \<dimension>}
+\explain
+Utilis\'ee seule, la s\'equence de contr\^ole |\font| d\'esigne la police courante.
+|\font| n'est pas une vraie commande quand elle est utilis\'ee seule,
+puis\-qu'elle ne peut alors appara\^\i tre que comme argument d'une autre commande.
+
+Pour les trois autres formes de |\font|,
+\<nom de police> nomme un jeu de fichier qui d\'efinit une police.
+Ces formes de |\font| sont des commandes. Chacune de ces formes a deux
+effets~:
+{\tighten
+\olist
+\li Elle d\'efinit \<s\'equence de contr\^ole> comme un nom qui s\'electionne
+la police \<nom de police>, \'eventuellement magnifi\'ee (voir plus bas).
+\li Elle demande \`a \TeX\ de charger le fichier de m\'etriques
+^^{fichiers de m\'etriques} de la police (^{\tfmfile}) pour \<nom de
+police>.
+\endolist
+}% end tighten
+
+\noindent
+Le nom d'un fichier de police indique normalement sa taille de dessin.
+Par exemple, |cmr10| indique Computer Modern romain avec une
+taille de dessin de $10$ points.
+La taille des dessins d'une police est enregistr\'ee dans ses fichiers de m\'etriques.
+
+Si ni |scaled| \<nombre> ni |at| \<dimension>
+n'est pr\'esent, la police est utilis\'ee
+\`a sa taille de dessin---la taille pour laquelle elle est normalement faite.
+Autrement, une version magnifi\'ee de la police est charg\'ee~:
+\ulist
+\li Si |scaled| \<nombre>
+est pr\'esent, la police est magnifi\'ee d'un facteur de $\hbox{\<nombre>}/1000$.
+\li Si |at| \<dimension> est pr\'esent, la police est
+agrandie de \<dimension> en la magnifiant
+par $\hbox{\<dimension>}/ds$, o\`u $ds$ est la taille de dessin de
+\<nom de police>.
+\<dimension> et $ds$ sont toujours donn\'es en points.
+\endulist
+\noindent
+Des magnifications de moins que $1$ sont possibles~; Elles r\'eduisent la taille.
+
+Vous devez habituellement fournir un fichier de formes (\xref{shape}) pour chaque
+magnification de police que vous chargez.
+N\'eanmoins, certains ^{pilotes de p\'eriph\'eriques} peuvent utiliser des polices
+qui sont r\'esidentes dans une imprimante. ^^{polices r\'esidentes}
+De telles polices n'ont pas besoin de fichiers de formes.
+
+Voir \conceptcit{police} et
+\conceptcit{magnification} pour plus d'informa\-tion.
+
+\example
+\font\tentt = cmtt10
+\font\bigttfont = cmtt10 scaled \magstep2
+\font\eleventtfont = cmtt10 at 11pt
+First we use {\tentt regular CM typewriter}.
+Then we use {\eleventtfont eleven-point CM typewriter}.
+Finally we use {\bigttfont big CM typewriter}.
+|
+\produces
+\font\regttfont = cmtt10
+\font\bigttfont = cmtt10 scaled \magstep 2
+\font\eleventtfont = cmtt10 at 11pt
+First we use {\regttfont regular CM typewriter}.
+Then we use {\eleventtfont eleven-point CM typewriter}.
+Finally we use {\bigttfont big CM typewriter}.
+\endexample
+\enddesc
+
+\begindesc
+\cts fontdimen {\<nombre> \<police>\param{dimension}}
+\explain
+^^{polices//param\`etres de}
+Ce param\`etre sp\'ecifie des dimensions vari\'ees associ\'ees avec
+la police nomm\'ee par la s\'equence de contr\^ole \<police>
+(\`a distinguer de \<font\-name> qui nomme les fichiers de police).
+Des valeurs de ces param\`etres sont sp\'ecifi\'es dans les fichiers de m\'etriques
+pour \<police>, mais vous pouvez
+r\'eparer ou changer leurs valeurs pendant une ex\'ecution de \TeX.
+Les nombres et significations de ces param\`etres sont~:
+\display{\halign{\hfil#\hfil\quad&#\hfil\cr
+\it Nombre&\it Signification\cr
+\noalign{\vskip 1\jot}%
+1&inclinaison par point\cr
+2&espace inter-mot\cr
+3&\'etirement inter-mot\cr
+4&r\'etr\'ecissement inter-mot\cr
+5&hauteur de x (taille d'un |1ex|)\cr
+6&largeur de cadratin (taille d'un |1em|)\cr
+7&espace suppl\'ementaire\cr}}
+\noindent
+\TeX\ utilise l'inclinaison par point pour positionner des accents.
+Il utilise aussi les param\`etres inter-mot pour produire des espaces inter-mots
+(voir |\spaceskip|, \xref\spaceskip) et le param\`etre d'espace suppl\'ementaire
+pour l'espa\-ce additionel apr\`es une virgule (voir |\xspaceskip|,
+\xref\xspaceskip).
+Les valeurs de ces param\`etres pour les
+polices \plainTeX\ sont \'enum\'er\'ees dans la \knuth{page~433}{497}.
+Les polices de symboles math\'ematiques ont $15$ param\`etres additionnels,
+dont nous ne parlerons pas ici.
+
+Attention~:
+les assignements de ces param\`etres \emph{ne} sont \emph{pas} d\'efaits \`a la fin
+d'un groupe.
+Si vous voulez changer ces param\`etres localement, vous devrez
+sauvegarder et restaurer leurs valeurs originales explicitement.
+\example
+Here's a line printed normally.\par
+\fontdimen2\font = 3\fontdimen2\font
+% Triple the interword spacing.
+\noindent Here's a really spaced-out line.
+|
+\produces
+Here's a line printed normally.\par
+\dimen0 = \fontdimen2\font % to undo global assignment
+\fontdimen2\font = 3\fontdimen2\font
+% triple the interword spacing
+\noindent Here's a really spaced-out line.
+\fontdimen2\font = \dimen0
+\endexample
+\enddesc
+
+\begindesc
+\cts magnification {{\bt =} \<nombre>}
+\cts mag {\param{nombre}}
+\explain
+\margin{{\tt\\mag} and {\tt\\magnification} combined.}
+Un assignement de |\magnification| \'etablit
+le ``^{facteur d'\'echelle}'' $f$ qui d\'etermine
+le ratio de \minref{magnification} de votre document \seeconcept{magnification}.
+L'assignation de |\magni!-fication| doit appara\^\i tre avant que la premi\`ere page
+de votre document ait \'et\'e envoy\'ee.
+
+L'assignement met $f$ \`a \<nombre> et met
+aussi |\hsize| et |\vsize|
+^^|\hsize//d\'etermin\'e par {\tt\\magnification}|
+^^|\vsize//d\'etermin\'e par {\tt\\magnification}|
+respectivement \`a |6.5true in| et |8.9true in|,
+Les valeurs appropri\'ees pour une page $8 \frac1/2$-%
+par-$11$-pouce.
+$f$ doit \^etre entre $0$ et $32768$.
+Le ratio \minref{magnification} du
+document est $f/1000$.
+Un facteur d'\'echelle
+de $1000$ procure une unit\'e de magnification, c'est-\`a-dire, il laisse
+la taille de votre document inchang\'ee.
+Il est d'usage d'utiliser des puissances de $1.2$ comme facteur d'\'echelle et
+la plupart des librairies de polices sont bas\'ees sur de tels facteurs. Vous
+pouvez utiliser les commandes ^|\magstep| et ^|\magstephalf| pour sp\'ecifier
+des magnifications par ces facteurs.
+
+|\magnification| n'est pas un param\`etre. Vous ne pouvez pas l'utiliser
+pour \emph{r\'ecuperer} le facteur d'\'echelle. Si vous \'ecrivez quelque chose comme
+|\dimen0 = \mag!-nifi!-cation|, \TeX\ s'en plaindra.
+
+Le param\`etre |\mag| contient le facteur d'\'echelle.
+Changer la valeur de |\mag| retaille les dimensions de la page, ce qui n'est pas
+ce que vous voulez habituellement.
+Aussi, il est pr\'ef\'erable de changer la magnification en
+l'assignant \`a |\magnification| plut\^ot qu'\`a |\mag|.
+
+\example
+\magnification = \magstep2
+% magnify fonts by 1.44 (=1.2x1.2)
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts magstep {\<nombre>}
+\explain
+Cette commande d\'eveloppe le ratio de \minref{magnification} demand\'e pour
+magnifier tout dans votre document
+(autre que des dimensions |true|)
+par $1.2^r$, o\`u $r$ est
+la valeur de \<nombre>. \<nombre> doit \^etre entre $0$ et $5$.
+\example
+\magnification = \magstep1 % Magnify by ratio of 1.2.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts magstephalf {}
+\explain
+Cette commande d\'eveloppe le ratio de \minref{magnification} demand\'e pour
+magnifier tout dans votre document
+(autre que des dimensions |true|)
+par $\sqrt{1.2}$,
+c'est-\`a-dire, \`a mi chemin entre $1$ et $1.2$.
+\example
+\magnification = \magstephalf
+|
+\endexample
+\eix^^{polices//nommer et modifier}
+\enddesc
+
+%==========================================================================
+\section {Convertir l'information en tokens}
+
+\subsection {Nombres}
+
+\begindesc
+\xrdef{convert}
+\bix^^{nombres//convertir en caract\`eres}
+%
+\cts number {\<nombre>}
+\explain
+Cette commande produit la repr\'esentation d'un \minref{nombre}
+comme une s\'e\-quence de
+\minref{token}s de caract\`ere. Le nombre peut \^etre un entier explicite,
+un param\`etre \<nombre> ou un registre \<nombre>.
+\example
+\number 24 \quad \count13 = -10000 \number\count13
+|
+\produces
+\number 24 \quad \count13 = -10000 \number\count13
+\endexample
+\enddesc
+
+\begindesc
+^^{chiffres romain}
+\easy\cts romannumeral {\<nombre>}
+\explain
+Cette commande produit la repr\'esentation num\'erique romaine d'un \minref{nom\-bre}
+comme une s\'equence de
+\minref{token}s de caract\`ere. Le nombre peut \^etre un entier explicite,
+un param\`etre \<nombre> ou un registre \<nombre>.
+Si le nombre est z\'ero ou n\'egatif, |\romannumeral| ne produit
+pas de tokens.
+\example
+\romannumeral 24 \quad (\romannumeral -16)\quad
+\count13 = 6000 \romannumeral\count13
+|
+\produces
+\romannumeral 24 \quad (\romannumeral -16)\quad
+\count13 = 6000 \romannumeral\count13
+\endexample
+
+\eix^^{nombres//convertir en caract\`eres}
+\enddesc
+
+%==========================================================================
+\subsection {Information environmentale}
+
+\begindesc
+^^{heure du jour}
+\cts time {\param{nombre}}
+\explain
+\TeX\ met ce param\`etre au
+nombre de minutes qui se sont d\'eroul\'ees depuis minuit (du jour courant).
+A neuf heures, par exemple, |\time| est \`a $720$.
+Cette commande et les trois suivantes utilisent l'heure et la date
+enregistr\'ee dans votre ordinateur.
+\TeX\ les r\'ecup\`ere juste une fois, au d\'ebut de votre ex\'ecution, donc |\time|
+\`a la fin de l'ex\'ecution \`a toujours la m\^eme valeur que |\time| au
+d\'ebut de l'ex\'ecution (\`a moins que vous l'ayez chang\'ee explicitement).
+\enddesc
+
+\bix^^{date}
+\begindesc
+\cts day {\param{nombre}}
+\explain
+\TeX\ met ce param\`etre au jour courant du mois. c'est
+un nombre entre $1$ et $31$.
+|\day| est mis au d\'ebut de votre ex\'ecution (voir les commentaires sur
+|\time| ci-dessus).
+\enddesc
+
+\begindesc
+\cts month {\param{nombre}}
+\explain
+\TeX\ met ce param\`etre au mois courant. C'est
+un nombre entre $1$ et $12$.
+|\month| est mis au d\'ebut de votre ex\'ecution (voir les commentaires sur
+|\time| ci-dessus).
+\enddesc
+
+\begindesc
+\cts year {\param{nombre}}
+\explain
+\TeX\ met ce param\`etre \`a l'ann\'ee courante ({apr\`es \sc J.-C.}).
+C'est un nombre tel que $2004$.
+|\year| est mis au d\'ebut de votre ex\'ecution (voir les commentaires sur
+|\time| ci-dessus).
+
+\eix^^{date}
+\enddesc
+
+\begindesc
+^^{num\'ero de version}
+\cts fmtname {}
+\cts fmtversion {}
+\explain
+Ces commandes produisent le nom et le num\'ero de version
+du format \TeX,
+c'est-\`a-dire \minref{\plainTeX} ou ^{\LaTeX}, que vous utilisez.
+\example
+This book was produced with the \fmtname\ format,
+version~\fmtversion.
+|
+\produces
+This book was produced with the \fmtname\ format,
+version~\fmtversion.
+\endexample
+\enddesc
+
+\begindesc
+\cts jobname {}
+\explain
+Cette commande produit le nom de base
+du fichier avec lequel \TeX\ \`a \'et\'e invoqu\'e.
+Par exemple, si votre fichier d'entr\'ee principal est |hatter.tex|,
+|\jobname| se d\'eveloppera en |hatter|.
+|\jobname| est plus pratique quand vous
+cr\'eez un fichier auxiliaire devant \^etre associ\'e avec un document.
+^^{fichiers auxiliaires}
+\example
+\newwrite\indexfile \openout\indexfile = \jobname.idx
+% For input file `hatter.tex', open index file `hatter.idx'.
+|
+\endexample\enddesc
+
+%==========================================================================
+\subsection {Valeurs des variables}
+
+\begindesc
+\cts meaning {\<token>}
+\explain
+^^{tokens//montrer la signification de}
+Cette commande produit
+la signification de \<token>. Elle est pratique pour diagnostiquer en sortie.
+Vous pouvez utiliser la commande ^|\the| (\xref\the) d'une mani\`ere similaire
+pour obtenir l'information sur les valeurs des \minref{registre}s et autres
+entit\'es de \TeX.
+\example
+[{\tt \meaning\eject}] [\meaning\tenrm] [\meaning Y]
+|
+\produces
+[{\tt \meaning\eject}] [\meaning\tenrm] [\meaning Y]
+\endexample\enddesc
+
+\begindesc
+\cts string {\<s\'equence de contr\^ole>}
+\explain
+^^{s\'equences de contr\^ole//convertir en chaines}
+Cette commande produit
+les caract\`eres qui forment le nom \<s\'equence de contr\^ole>,
+en incluant le \minref{caract\`ere d'\'echappement}.
+Le caract\`ere d'\'echap\-pement est repr\'esent\'e par la valeur courante de
+^|\escapechar|.
+^^{caract\`ere d'\'echappement//repr\'esent\'e par \b\tt\\escapechar\e}
+\TeX\ donne les caract\`eres dans la liste d'un code de cat\'egorie de $12$ (outre).
+
+Vous pouvez proc\'eder \`a l'op\'eration inverse avec
+la commande ^|\csname| (\xref \csname),
+qui transforme une chaine en une s\'equence de contr\^ole.
+\example
+the control sequence {\tt \string\bigbreak}
+|
+\produces
+the control sequence {\tt \string\bigbreak}
+\endexample\enddesc
+
+\begindesc
+\cts escapechar {\param{nombre}}
+\explain
+Ce param\`etre sp\'ecifie le code \ascii\ \minrefs{\ascii} du
+caract\`ere que \TeX\ utilise pour repr\'esenter le \minref{caract\`ere d'\'echappement}
+^^{caract\`ere d'\'echappement//repr\'esent\'e par \b\tt\\escapechar\e}
+quand il
+convertit un nom de s\'equence de contr\^ole en une s\'equence de tokens de caract\`ere.
+Cette conversion \`a lieu quand vous utilisez la commande |\string| et aussi quand
+\TeX\ produit des messages de diagnostic. La valeur par d\'efaut du caract\`ere
+d'\'echappement est $92$, la code de caract\`ere {\ascii} pour un ^{backslash}.
+Si |\escapechar| n'est pas dans la fourchette $0$--$255$,
+\TeX\ n'inclut pas de caract\`ere d'\'echappement dans le r\'esultat de la conversion.
+\example
+\escapechar = `!!
+the control sequence {\tt \string\bigbreak}
+|
+\produces
+\escapechar = `!
+the control sequence {\tt \string\bigbreak}
+\endexample
+\enddesc
+
+\begindesc
+\cts fontname {\<police>}
+\explain
+^^{polices//noms de}
+Cette commande produit le nom de fichier
+pour la \<police>. Le nom de fichier est le \<font\-name> qui a \'et\'e utilis\'e
+pour d\'efinir \<police>.
+\example
+\font\myfive=cmr5 [\fontname\myfive]
+|
+\produces
+\font\myfive=cmr5 [\fontname\myfive]
+\endexample
+\enddesc
+
+
+%==========================================================================
+\section {Groupement}
+
+\begindesc
+\bix^^{groupes}
+%
+\cts begingroup {}
+\cts endgroup {}
+\explain
+Ces deux commandes d\'ebutent et terminent un \minref{groupe}.
+Un |\begingroup| ne s'accorde pas avec une accolade droite,
+ni un |\endgroup| avec une accolade gauche.
+
+\TeX\ traite |\begingroup| et |\endgroup| comme tout autre
+\minref{s\'equence de contr\^ole} quand il scanne son entr\'ee. En particulier,
+vous pouvez d\'efinir une \minref{macro} qui contient un |\begingroup|
+mais pas de |\endgroup|, et inversement.
+^^{macros//utiliser \b\tt\\begingroup\e\ et \b\tt\\endgroup\e\ dans des}
+Cette technique est souvent pratique
+quand vous d\'efinissez des paires de macros, une qui \'etablit
+un environnement et l'autre qui termine cet environnement.
+Vous ne pouvez, de plus, pas utiliser |\begingroup| et |\endgroup| comme
+substituts pour des
+accolades autres que celles qui entourent un groupe.
+\example
+\def\a{One \begingroup \it two }
+\def\enda{\endgroup four}
+\a three \enda
+|
+\produces
+\def\a{One \begingroup \it two }
+\def\enda{\endgroup four}
+\a three \enda
+\endexample
+\enddesc
+
+\begindesc
+\makecolumns 4/2:
+\easy%
+\ctsact { \xrdef{@lbrace}
+\cts bgroup {}
+\ctsact } \xrdef{@rbrace}
+\cts egroup {}
+\explain
+Les accolades gauches et droites sont des commandes qui d\'ebutent et terminent un
+\minref{groupe}.
+Les \minref{s\'equences de contr\^ole} |\bgroup| et |\egroup| sont \'equivalentes
+\`a `|{|' et `|}|', sauf que
+\TeX\ traite |\bgroup| et |\egroup| comme tout autre
+\minref{s\'equence de contr\^ole} quand il scanne son entr\'ee.
+
+|\bgroup| et |\egroup| peuvent \^etre pratiques quand vous
+d\'efinissez des paires de macros, une dans laquelle
+d\'ebute une construction d\'elimit\'ee par accolade (pas n\'ecessairement un groupe)
+et l'autre dans laquelle ce termine cette construction.
+^^{macros//utiliser \b\tt\\bgroup\e\ et \b\tt\\egroup\e\ dans des}
+Vous ne pouvez pas d\'efinir de telles macros en utilisant des accolades ordinaires---si vous essayez,
+vos d\'efinitions de macro contiendront des accolades non appair\'ees
+et seront de ce fait inacceptables par \TeX.
+Normalement vous ne devez utilisez ces commandes que quand vous ne pouvez utiliser
+d'accolades ordinaires.
+
+\example
+Braces define the {\it boundaries\/} of a group.
+|
+\produces
+Braces define the {\it boundaries\/} of a group.
+\nextexample
+\def\a{One \vbox\bgroup}
+% You couldn't use { instead of \bgroup here because
+% TeX would not recognize the end of the macro
+\def\enda#1{{#1\egroup} two}
+% This one is a little tricky, since the \egroup actually
+% matches a left brace and the following right brace
+% matches the \bgroup. But it works!!
+\a \enda{\hrule width 1in}
+|
+\produces
+\def\a{One \vbox\bgroup}
+% You couldn't use { instead of \bgroup here because
+% TeX would not recognize the end of the macro
+\def\enda#1{{#1\egroup} two}
+% This one is a little tricky, since the \egroup actually
+% matches a left brace and the following right brace
+% matches the \bgroup. But it works!
+\a \enda{\hrule width 1in}
+\endexample
+\enddesc
+
+\begindesc
+\cts global {}
+\explain
+Cette commande rend la d\'efinition
+ou l'\minref{assignement} suivant \minref{global} \seeconcept{global}
+pour qu'il devienne effectif ind\'ependamment des fronti\`eres du \minref{groupe}.
+Vous pouvez appliquer un pr\'efix |\global| \`a toute sorte de d\'efinition
+ou \minref{assignement},
+en incluant une d\'efinition de \minref{macro} ou un assignement de \minref{registre}.
+\example
+{\global\let\la = \leftarrow}
+$a \la b$
+|
+\produces
+% for safety's sake we fake this one!
+\let\la = \leftarrow
+$a \la b$
+\endexample
+\enddesc
+
+\begindesc
+\cts globaldefs {\param{nombre}}
+\explain
+Ce param\`etre contr\^ole si \TeX\ prend ou non des d\'efinitions
+et autres assignements comme \'etant
+\minref{globaux}~:
+\ulist
+\li Si |\globaldefs| est \`a z\'ero (comme il l'est par d\'efaut), une d\'efinition est globale
+si et seulement si il est pr\'ec\'ed\'e par |\global| soit explicitement soit implicitement.
+(Les commandes ^|\gdef| et ^|\xdef| (\xref\gdef) ont un pr\'efixe
+|\global| implicite).
+\li Si |\globaldefs| est sup\'erieur \`a z\'ero, tout assignement et
+d\'efinition est implicitement pr\'efix\'e par ^|\global|.
+\li Si |\globaldefs| est inf\'erieur \`a z\'ero, tout pr\'efixe ^|\global| est ignor\'e.
+\endulist
+\enddesc
+
+\begindesc
+\margin{Order of {\tt\\aftergroup} and {\tt\\afterassignment} changed.}
+\cts aftergroup {\<token>}
+\explain
+Quand \TeX\ rencontre cette commande dans une entr\'ee,
+il sauve \<token>.
+Apr\`es la fin du \minref{groupe} courant,
+il r\'eins\`ere \<token> dans l'entr\'ee et le d\'eveloppe.
+Si un groupe contient plusieurs |\aftergroup|s, les tokens correspondants
+sont \emph{tous} ins\'er\'es suivant la fin du groupe, dans l'ordre
+dans lequel ils apparaissent \`a l'origine.
+
+L'exemple qui suit vous montre comment vous pouvez utiliser |\after!-group|
+pour diff\'erer le traitement d'un token que vous avez g\'en\'er\'e dans un
+\minref{test conditionnel}.
+\example
+\def\neg{negative} \def\pos{positive}
+% These definitions are needed because \aftergroup applies
+% to a single token, not to a sequence of tokens or even
+% to a brace-delimited text.
+\def\arith#1{Is $#1>0$? \begingroup
+ \ifnum #1>-1 Yes\aftergroup\pos
+ \else No\aftergroup\neg\fi
+ , it's \endgroup. }
+\arith 2
+\arith {-1}
+|
+\produces
+\def\neg{negative} \def\pos{positive}
+% These definitions are needed because \aftergroup applies
+% to a single token, not a sequence of tokens or even
+% a group.
+\def\arith#1{Is $#1>0$? \begingroup
+ \ifnum #1>-1 Yes\aftergroup\pos
+ \else No\aftergroup\neg\fi
+ , it's \endgroup. }
+\arith 2
+\arith {-1}
+\endexample
+\eix^^{groupes}
+\enddesc
+
+\begindesc
+\cts afterassignment {\<token>}
+\explain
+Quand \TeX\ rencontre cette commande il sauve \<token> dans un endroit sp\'ecial.
+Apr\`es qu'il ait ex\'ecut\'e l'\minref{assignment} suivant, il ins\`ere
+\<token> dans l'entr\'ee et le d\'eveloppe. Si vous appelez |\afterassignment|
+plus d'une fois avant un assignement, seul le dernier appel a un effet.
+Une utilisation de |\afterassignment|
+est dans l'\'ecriture de \minref{macro}s pour des commandes devant \^etre \'ecrites
+sous la forme d'assignements, comme dans l'exemple suivant.
+
+Voir la \knuth{page~279}{325} pour un description pr\'ecise
+du fonctionnement d'|\afterassignment|.
+\example
+\def\setme{\afterassignment\setmeA\count255}
+\def\setmeA{$\number\count255\advance\count255 by 10
+ +10=\number\count255$}
+Some arithmetic: \setme = 27
+% After expanding \setme, TeX sets \count255 to 27 and
+% then calls \setmeA.
+|
+\produces
+\def\setme{\afterassignment\setmeA\count255}
+\def\setmeA{$\number\count255\advance\count255 by 10
++10=\number\count255$}
+Some arithmetic: \setme = 27
+% After expanding \setme, TeX sets \count255 to 27 and
+% then calls \setmeA.
+\endexample
+\enddesc
+
+
+%==========================================================================
+\section {Macros}
+
+%==========================================================================
+\subsection {D\'efinir des macros}
+
+\begindesc
+\bix^^{macros}
+\bix^^{macros//d\'efinir des}
+\xrdef{mac1}% begin the section on macros
+%
+\cts def {\<s\'equence de contr\^ole> \<texte de param\`etre> \rqbraces{\<texte de remplacement>}}
+\explain
+Cette commande d\'efinit \<s\'equence de contr\^ole> comme une \minref{macro} avec les
+\<texte de param\`etre> et \<texte de remplacement> sp\'ecifi\'es.
+Voir \xrefpg{macro} pour une explication compl\`ete sur la fa\c con d'\'ecrire une
+d\'efinition de macro.
+\example
+\def\add#1+#2=?{#1+#2&=
+ \count255=#1 \advance\count255 by #2 \number\count255\cr}
+$$\eqalign{
+ \add 27+9=?
+ \add -5+-8=?}$$
+|
+\dproduces
+\def\add#1+#2=?{#1+#2&=
+ \count255=#1 \advance\count255 by #2 \number\count255\cr}
+$$\eqalign{
+ \add 27+9=?
+ \add -5+-8=?}$$
+\endexample
+\enddesc
+
+\begindesc
+\cts edef {\<s\'equence de contr\^ole> \<texte de param\`etre> \rqbraces{\<texte de remplacement>}}
+\explain
+Cette commande d\'efinit une macro de la m\^eme mani\`ere g\'en\'erale que |\def|.
+La diff\'erence est que \TeX\ d\'eveloppe le \<texte de remplacement>
+d'un |\edef| imm\'ediatement (mais sans rien ex\'ecuter).
+Ainsi toutes d\'efini\-tions du \<texte de remplacement> sont d\'evelopp\'ees, mais
+des assignements et commandes qui produisent des choses telles que bo\^\i tes et
+des ressorts sont laiss\'es tels quels. Par exemple, une commande |\hbox| dans
+le \<texte de remplacement> d'un |\edef| reste comme une commande et n'est pas
+transform\'ee en une bo\^\i te quand \TeX\ ex\'ecute la d\'efinition.
+Il n'est pas toujours \'evident de savoir ce qui est d\'evelopp\'e et ce qui ne l'est pas, mais vous
+trouverez une liste compl\`ete des s\'equences de contr\^ole d\'eveloppables sur les
+\knuth{pages~212--215}{249--252}.
+
+Vous pouvez inhiber le d\'eveloppement d'une s\'equence de contr\^ole qui devrait
+\^etre d\'evelopp\'ee en utilisant |\no!-expand| (\xref\noexpand). ^^|\noexpand|
+Vous pouvez diff\'erer le d\'eveloppement d'une s\'equence de contr\^ole en utilisant la commande
+^|\expandafter| (\xref\expandafter).
+
+Les commandes |\write|, |\message|, |\errmessage|, |\wlog| et |\csname|
+d\'eveloppent leurs
+listes de token en utilisant les m\^eme r\`egles que |\edef| utilise pour d\'evelopper son
+texte de remplacement.
+^^|\write//d\'evelopp\'e par les r\`egles d'{\tt\\edef}|
+^^|\message//d\'evelopp\'e par les r\`egles d'{\tt\\edef}|
+^^|\errmessage//d\'evelopp\'e par les r\`egles d'{\tt\\edef}|
+^^|\wlog//d\'evelopp\'e par les r\`egles d'{\tt\\edef}|
+^^|\csname//d\'evelopp\'e par les r\`egles d'{\tt\\edef}|
+\example
+\def\aa{xy} \count255 = 1
+\edef\bb{w\ifnum \count255 > 0\aa\fi z}
+% equivalent to \def\bb{wxyz}
+\def\aa{} \count255 = 0 % leaves \bb unaffected
+\bb
+|
+\produces
+\def\aa{xy} \count255 = 1
+\edef\bb{w\ifnum \count255 > 0\aa\fi z}
+% equivalent to \def\bb{wxyz}
+\def\aa{} \count255 = 0 % leaves \bb unaffected
+\bb
+\endexample
+\enddesc
+
+\begindesc
+\cts gdef {\<s\'equence de contr\^ole> \<texte de param\`etre> \rqbraces{\<texte de remplacement>}}
+\explain
+Cette commande est \'equivalente \`a |\global\def|.
+\enddesc
+
+\begindesc
+\cts xdef {\<s\'equence de contr\^ole> \<texte de param\`etre> \rqbraces{\<texte de remplacement>}}
+\explain
+Cette commande est \'equivalente \`a |\global\edef|.
+\enddesc
+
+\begindesc
+\cts long {}
+\explain
+Cette commande est utilis\'ee comme pr\'efixe d'une d\'efinition de \minref{macro}.
+Elle dit \`a \TeX\ que les arguments de la macro peuvent inclure
+des tokens |\par| (\xref{\@par}), qui indiquent normalement la fin d'un paragraphe.
+^^|\par//dans des arguments de macro|
+Si \TeX\
+essaye de d\'evelopper une macro d\'efinie sans |\long| et qu'un des arguments
+de la macro comprend un token |\par|,
+\TeX\ se plaindra par un ``runaway argument''. Le but
+de ce comportement est de vous fournir des protections contre des arguments de
+macro non termin\'es.
+|\long| vous donne un moyen d'outrepasser la protection.
+\example
+\long\def\aa#1{\par\hrule\smallskip#1\par\smallskip\hrule}
+\aa{This is the first line.\par
+This is the second line.}
+% without \long, TeX would complain
+|
+\produces
+\medskip
+\long\def\aa#1{\par\hrule\smallskip#1\par\smallskip\hrule}
+\aa{This is the first line.\par
+This is the second line.}
+% without \long, TeX would complain
+\endexample
+\enddesc
+
+\begindesc
+\cts outer {}
+\explain
+\null ^^{outer}
+Cette commande est utilis\'ee comme pr\'efixe d'une d\'efinition de \minref{macro}.
+Elle dit \`a \TeX\ que la macro est externe (\xref{outer})
+et ne peut pas \^etre utilis\'ee dans certains contextes.
+Si la macro est utilis\'ee dans un contexte interdit, \TeX\ se plaindra.
+
+\example
+\outer\def\chapterhead#1{%
+ \eject\topglue 2in \centerline{\bf #1}\bigskip}
+% Using \chapterhead in a forbidden context causes an
+% error message.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts chardef {\<s\'equence de contr\^ole>=\<charcode>}
+\explain
+^^{caract\`eres//d\'efinis par \b\tt\\chardef\e}
+Cette commande d\'efinit \<s\'equence de contr\^ole>
+comme \'etant \<charcode>.
+Bien que |\chardef| soit plus souvent utilis\'ee pour d\'efinir des caract\`eres, vous pouvez aussi
+l'utiliser pour donner un nom \`a un nombre dans la fourchette $0$--$255$ m\^eme
+quand vous n'utilisez pas ce nombre comme un code de caract\`ere.
+\example
+\chardef\percent = `\% 21\percent, {\it 19\percent}
+% Get the percent character in roman and in italic
+|
+\produces
+\chardef\percent = `\%
+21\percent, {\it 19\percent}
+% You'll get the percent character in roman and in italic
+\endexample
+\enddesc
+
+\begindesc
+^^{caract\`eres math\'ematiques}
+^^{mathcodes}
+\cts mathchardef {\<s\'equence de contr\^ole>=\<mathcode>}
+\explain
+Cette commande d\'efinit la \<s\'equence de contr\^ole> comme un caract\`ere math\'ematique
+avec le \minrefs{mathcode}\<mathcode> donn\'e.
+La s\'equence de contr\^ole ne sera l\'egale qu'en mode math\'ematique.
+\example
+\mathchardef\alphachar = "010B % As in plain TeX.
+$\alphachar$
+|
+\produces
+\mathchardef\alphachar = "010B % As in plain TeX.
+$\alphachar$
+\endexample
+\eix^^{macros//d\'efinir des}
+\enddesc
+
+%==========================================================================
+\subsection {Autre d\'efinitions}
+
+\begindesc
+\cts let {\<s\'equence de contr\^ole> = \<token>}
+\explain
+^^{s\'equences de contr\^ole//d\'efinies avec \b\tt\\let\e}
+\minrefs{token}
+Cette commande fait que
+\<s\'equence de contr\^ole> prend la signification actuelle de \<token>.
+M\^eme si vous red\'efinissez \<token> plus tard, la signification de \<s\'equence de contr\^ole>
+ne changera pas. Bien que \<token> soit le plus souvent une s\'equence de contr\^ole,
+il peut aussi \^etre un token de \minref{caract\`ere}.
+\enddesc
+
+\begindesc
+\cts futurelet {\<s\'equence de contr\^ole> \<token$_1$> \<token$_2$>}
+\explain
+Cette commande dit \`a \TeX\ de donner \`a \<token$_2$> la signification de
+\<s\'equence de contr\^ole> (comme elle le serait avec |\let|) et ensuite
+d'ex\'ecu\-ter \<token$_1$> et \<token$_2$> normalement.
+|\futurelet| est pratique \`a la fin d'une d\'efinition de macro
+parce qu'elle vous donne un moyen de regarder au-del\`a du token que \TeX\
+est en train d'ex\'ecuter avant de continuer.
+\example
+\def\predict#1{\toks0={#1}\futurelet\next\printer}
+% \next will acquire the punctuation mark after the
+% argument to \predict
+\def\printer#1{A \punc\ lies ahead for \the\toks0. }
+\def\punc{%
+ \ifx\next;semicolon\else
+ \ifx\next,comma\else
+ ``\next''\fi\fi}
+\predict{March}; \predict{April}, \predict{July}/
+|
+\produces
+\def\predict#1{\toks0={#1}\futurelet\next\printer}
+\def\printer#1{A \punc\ lies ahead for \the\toks0. }
+\def\punc{%
+ \ifx\next;semicolon\else
+ \ifx\next,comma\else
+ ``\next''\fi\fi
+ }
+\predict{March};
+\predict{April},
+\predict{July}/
+\endexample
+\enddesc
+
+\begindesc
+\cts csname {\<liste de token> {\bt \\endcsname}}
+\xrdef{\endcsname}
+\explain
+Cette commande produit une s\'equence de contr\^ole \`a partir de \<liste de token>.
+Elle procure un moyen de synth\'etiser des s\'equences de contr\^ole,
+en incluant celles que vous ne pouvez normalement pas \'ecrire.
+\<liste de token> peut elle-m\^eme inclure des s\'equences de contr\^ole~:
+elle est d\'eveloppable de la m\^eme mani\`ere que le texte de remplacement d'une
+d\'efinition |\edef| (\xref\edef).
+Si le d\'eveloppement final
+produit quelque chose qui n'est pas un caract\`ere, \TeX\ se plaindra.
+|\csname| transforme une liste de tokens en s\'equence de contr\^ole~;
+vous pouvez faire l'inverse avec ^|\string| \ctsref\string.
+\example
+\def\capTe{Te}
+This book purports to be about \csname\capTe X\endcsname.
+|
+\produces
+\def\capTe{Te}
+This book purports to be about \csname\capTe X\endcsname.
+\endexample
+\enddesc
+
+%==========================================================================
+\subsection {Contr\^oler le d\'eveloppement}
+
+\begindesc
+\bix^^{macros//contr\^oler leur d\'eveloppement}
+\cts expandafter {\<token$_1$> \<token$_2$>}
+\explain
+Cette commande dit \`a \TeX\ de d\'evelopper \<token$_1$> en accord avec ses r\`egles
+de d\'eveloppement de \minref{macro} \emph{apr\`es} avoir d\'evelopp\'e \<token$_2$>
+d'un niveau. C'est pratique quand \<token$_1$> est quelque chose comme `|{|'
+^^|{//avec {\tt\\expandafter}|
+ou ^|\string| qui inhibe les expansions de \<token$_2$>,
+mais que vous voulez d\'evelopper \<token$_2$> quand m\^eme.
+\example
+\def\aa{xyz}
+\tt % Use this font so `\' prints that way.
+[\string\aa] [\expandafter\string\aa]
+[\expandafter\string\csname TeX\endcsname]
+|
+\produces
+\def\aa{xyz}
+\tt
+[\string\aa] [\expandafter\string\aa]
+[\expandafter\string\csname TeX\endcsname]
+\endexample
+\enddesc
+
+\begindesc
+\cts noexpand {\<token>}
+\explain
+Cette commande demande \`a \TeX\ de
+supprimer le d\'eveloppement de \<token> si \<token> est une
+\minref{s\'equence de contr\^ole} qui peut \^etre d\'evelopp\'ee.
+Si \<token> ne peut pas \^etre d\'evelopp\'ee, c'est-\`a-dire, si c'est une lettre,
+\TeX\ agit comme si le |\noexpand| n'\'etait pas l\`a
+et ex\'ecute \<token> normalement.
+En d'autres mots le d\'eveloppement de `|\noexpand|\<token>'
+est simplement \<token> quoi que \<token> devienne.
+\example
+\def\bunny{rabbit}
+\edef\magic{Pull the \noexpand\bunny\ out of the hat!! }
+% Without \noexpand, \bunny would always be replaced
+% by `rabbit'
+\let\oldbunny=\bunny \def\bunny{lagomorph} \magic
+\let\bunny=\oldbunny \magic
+|
+\produces
+\def\bunny{rabbit}
+\edef\magic{Pull the \noexpand\bunny\ out of the hat! }
+% Without \noexpand, \bunny would always be replaced
+% by `rabbit'
+\let\oldbunny=\bunny \def\bunny{lagomorph} \magic
+\let\bunny=\oldbunny \magic
+\endexample
+\enddesc
+
+\begindesc
+\cts the {\<token>}
+\explain
+Cette commande se d\'eveloppe g\'en\'eralement en une liste de tokens de \minref{caract\`ere}s
+que repr\'esente \<token>. \<token> peut \^etre parmi ce qui suit~:
+
+\ulist\compact
+\li un \minref{param\`etre} \TeX, par exemple, |\parindent| ou |\deadcycles|
+^^{param\`etres//utiliser \b\tt\\the\e\ avec}
+\li un \minref{registre}, par exemple, |\count0|
+^^{registres//avec \b\tt\\the\e}
+\margin{Item for special registers removed}
+\li un code associ\'e avec un caract\`ere entr\'e, par exemple, |\catcode`(|
+\li un param\`etre de police, par exemple, |\fontdimen3\sevenbf|
+\li le ^|\hyphenchar| ou le ^|\skewchar| d'une police,
+|\skewchar\teni|, par exemple
+\li ^|\lastpenalty|, ^|\lastskip| ou ^|\lastkern| (valeurs d\'eriv\'ees du
+der\-nier \'el\'ement d'une liste horizontale \minrefs{horizontal list}
+ou \minref{liste verticale} courante)
+\li une s\'equence de contr\^ole d\'efinie par ^|\chardef| ou
+^|\mathchardef|
+\endulist
+
+\noindent
+De plus, |\the| peut d\'evelopper des tokens non-caract\`ere dans les deux cas
+suivants~:
+\ulist\compact
+\li |\the| \<police>, qui d\'eveloppe la s\'equence de contr\^ole la plus r\'ecem\-ment
+d\'efinie qui s\'electionne la m\^eme police que la s\'equence de contr\^o\-le \<police>
+\li |\the| \<variable de token>, qui d\'eveloppe une copie de la valeur de la
+variable, par exemple, |\the\everypar|
+\endulist
+
+Voir les \knuth{pages~214--215}{251} pour une description plus d\'etaill\'ee de ce que
+|\the| fait selon les cas.
+\example
+The vertical size is currently \the\vsize.
+The category code of `(' is \the\catcode `(.
+|
+\produces
+The vertical size is currently \the\vsize.
+The category code of `(' is \the\catcode `(.
+\endexample
+\enddesc
+
+{\tighten
+\see \headcit{Convertir l'information en tokens}{convert} ainsi que la commande
+|\showthe| (\xref\showthe).
+\par}
+
+\eix^^{macros//contr\^oler leur d\'eveloppement}
+
+%==========================================================================
+\subsection {Tests conditionnels}
+
+\begindesc
+\xrdef{conds}
+\bix^^{tests conditionnels}
+%
+\ctspecial if {\<token$_1$> \<token$_2$>}\ctsxrdef{@if}
+\explain
+{\emergencystretch=1em
+Cette commande teste si \<token$_1$> et \<token$_2$>
+ont le m\^eme code de \minref{caract\`ere}, ind\'ependamment de leurs
+\minref{codes de cat\'egorie}.
+Avant d'ex\'ecuter le test, \TeX\ d\'eveloppe les tokens suivant le |\if|
+jusqu'\`a ce qu'il obtienne deux tokens qui ne peuvent se d\'evelopper plus.
+Ces deux tokens deviennent \<token$_1$> et \<token$_2$>.
+Le d\'eveloppement
+inclut le remplacement d'une s\'equence de contr\^ole |\let| \'egale \`a un token de caract\`ere
+par ce token de caract\`ere.
+Une \minref{s\'equence de contr\^ole} qui ne peut plus se d\'evelopper est
+consid\'er\'ee comme ayant un code de caract\`ere $256$.\par}
+\example
+\def\first{abc}
+\if\first true\else false\fi;
+% ``c'' is left over from the expansion of \first.
+% It lands in the unexecuted ``true'' part.
+\if a\first\ true\else false\fi;
+% Here ``bc'' is left over from the expansion of \first
+\if \hbox\relax true\else false\fi
+% Unexpandable control sequences test equal with ``if''
+|
+\produces
+\def\first{abc}
+\if\first true\else false\fi;
+% ``c'' is left over from the expansion of \first.
+% It lands in the unexecuted ``true'' part.
+\if a\first\ true\else false\fi;
+% Here ``bc'' is left over from the expansion of \first
+\if \hbox\relax true\else false\fi
+% Unexpandable control sequences test equal with ``if''
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifcat {\<token$_1$> \<token$_2$>}\ctsxrdef{@ifcat}
+\explain
+^^{codes de cat\'egorie//tester}
+Cette commande teste si \<token$_1$> et \<token$_2$>
+ont le m\^eme \minref{code de cat\'ego\-rie}.
+Avant d'ex\'ecuter le test, \TeX\ d\'eveloppe les tokens suivant le |\if|
+jusqu'a ce qu'il obtienne deux tokens qui ne puissent plus se d\'evelopper.
+Ces deux tokens deviennent \<token$_1$> et \<token$_2$>.
+Le d\'eveloppement
+inclut le remplacement d'une s\'equence de contr\^ole |\let| \'egale \`a un token de caract\`ere
+par ce token de caract\`ere.
+Une \minref{s\'equence de contr\^ole} qui ne peut plus se d\'evelopper est
+consid\'er\'ee comme ayant un code de caract\`ere $16$.
+\example
+\ifcat axtrue\else false\fi;
+\ifcat ]}true\else false\fi;
+\ifcat \hbox\day true\else false\fi;
+\def\first{12345}
+\ifcat (\first true\else false\fi
+% ``2345'' lands in the true branch of the test
+|
+\produces
+\ifcat axtrue\else false\fi;
+\ifcat ]}true\else false\fi;
+\ifcat \hbox\day true\else false\fi;
+\def\first{12345}
+\ifcat (\first true\else false\fi
+% ``2345'' lands in the true branch of the test
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifx {\<token$_1$> \<token$_2$>}\ctsxrdef{@ifx}
+\explain
+Cette commande teste si \<token$_1$> et \<token$_2$> s'accordent.
+Contrairement \`a |\if| et |\ifcat|, |\ifx| \emph{ne} d\'eveloppe \emph{pas} les tokens
+suivant |\ifx|, donc \<token$_1$> et \<token$_2$> sont les deux
+tokens imm\'ediatement apr\`es |\ifx|.
+Il y a trois cas~:
+\olist
+\li Si un token est une \minref{macro} et pas l'autre,
+les tokens ne s'accordent pas.
+\li Si aucun token n'est une macro, Les tokens s'accordent si~:
+\olist
+\li les deux tokens sont des caract\`eres (ou des s\'equences de contr\^ole d\'ecrivant des caract\`eres) et
+que leurs codes de \minref{caract\`ere} et de \minref{cat\'egorie} s'accordent, ou
+\li Les deux tokens font r\'ef\'erence \`a la m\^eme commande \TeX, police, etc.
+\endolist
+\li Si les deux tokens sont des macros, les tokens s'accordent si~:
+\olist\compact
+\li leurs d\'eveloppements de ``premier niveau'', c'est-\`a-dire,
+leurs textes de remplacement, sont identiques, et
+\li Ils ont le m\^eme statut concernant ^|\long| (\xref\long)
+et ^|\outer| (\xref\outer).
+\endolist
+Notez en particulier que \emph{deux s\'equences de contr\^ole non d\'efinies
+s'accordent}.
+\endolist
+\noindent
+Ce teste est g\'en\'eralement plus utile que |\if|.
+\example
+\ifx\alice\rabbit true\else false\fi;
+% true since neither \rabbit nor \alice is defined
+\def\a{a}%
+\ifx a\a true\else false\fi;
+% false since one token is a macro and the other isn't
+\def\first{\a}\def\second{\aa}\def\aa{a}%
+\ifx \first\second true\else false\fi;
+% false since top level expansions aren't the same
+\def\third#1:{(#1)}\def\fourth#1?{(#1)}%
+\ifx\third\fourth true\else false\fi
+% false since parameter texts differ
+|
+\produces
+\ifx\alice\rabbit true\else false\fi;
+% true since neither \rabbit nor \alice is defined
+\def\a{a}%
+\ifx a\a true\else false\fi;
+% false since one token is a macro and the other isn't
+\def\first{\a}\def\second{\aa}\def\aa{a}%
+\ifx \first\second true\else false\fi;
+% false since top level expansions aren't the same
+\def\third#1:{(#1)}\def\fourth#1?{(#1)}%
+\ifx\third\fourth true\else false\fi
+% false since parameter texts differ
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifnum {\<number$_1$> \<relation> \<number$_2$>}\ctsxrdef{@ifnum}
+\explain
+^^{nombres//comparer}
+Cette commande teste si \<number$_1$> et \<number$_2$>
+satisfont \<relation>, qui peut \^etre soit `|<|', `|=|' ou `|>|'.
+Les nombres peuvent \^etre des constantes telles que |127|, des registres de compteur tels que
+|\pageno| ou |\count22| ou des param\`etres num\'eriques tels que |\hbadness|.
+Avant d'ex\'ecuter le test, \TeX\ d\'eveloppe les tokens suivant le |\ifnum|
+jusqu'a ce qu'il obtienne une s\'equence de tokens ayant la forme \<number$_1$>
+\<relation> \<number$_2$> suivi par un token
+qui ne peut \^etre une partie de \<number$_2$>.
+\example
+\count255 = 19 \ifnum \count255 > 12 true\else false\fi
+|
+\produces
+\count255 = 19 \ifnum \count255 > 12 true\else false\fi
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifodd {\<nombre>}\ctsxrdef{@ifodd}
+\explain
+^^{nombres//tester la parit\'e}
+Cette commande teste si \<nombre> est impair.
+Avant d'ex\'ecuter le test, \TeX\ d\'eveloppe les tokens suivant le |\ifodd|
+jusqu'a ce qu'il obtienne une s\'equence de tokens ayant la forme \<nombre>,
+suivi par un token qui ne peut \^etre une partie de \<nombre>.
+\example
+\count255 = 19
+\ifodd 5 true\else false\fi
+|
+\produces
+\ifodd 5 true\else false\fi
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifdim {\<dimen$_1$> \<relation> \<dimen$_2$>}\ctsxrdef{@ifdim}
+\explain
+^^{dimensions//comparer}
+Cette commande teste si \<dimen$_1$> et \<dimen$_2$>
+satisfont \<relation>, qui doit \^etre soit `|<|', `|=|' ou `|>|'.
+Les dimensions peuvent \^etre des constantes telles que |1in|, des registres de dimension
+tels que |\dimen6| ou des para\-m\`etres de dimension tels que |\parindent|.
+Avant d'ex\'ecuter le test, \TeX\ d\'eveloppe les tokens suivant le |\ifdim|
+jusqu'a ce qu'il obtienne une s\'equence de tokens ayant la forme
+\<dimen$_1$> \<relation> \<dimen$_2$>
+suivi par un token qui ne peut \^etre une partie de \<dimen$_2$>.
+
+\example
+\dimen0 = 1000pt \ifdim \dimen0 > 3in true\else false\fi
+|
+\produces
+\dimen0 = 1000pt \ifdim \dimen0 > 3in true\else false\fi
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifhmode {}\ctsxrdef{@ifhmode}
+\ctspecial ifvmode {}\ctsxrdef{@ifvmode}
+\ctspecial ifmmode {}\ctsxrdef{@ifmmode}
+\ctspecial ifinner {}\ctsxrdef{@ifinner}
+\explain
+^^{mode horizontal//tester}
+^^{mode vertical//tester}
+^^{mode math\'ematique//tester}
+^^{mode restreint//tester}
+Ces commandes testent dans quel \minref{mode} est \TeX~:
+\ulist
+\li |\ifhmode| est vrai si \TeX\ est en mode horizontal ordinaire ou r\'eduit.
+\li |\ifvmode| est vrai si \TeX\ est en mode vertical ordinaire ou interne.
+\li |\ifmmode| est vrai si \TeX\ est en mode math\'ematique de texte ou d'affichage.
+\li |\ifinner| est vrai si \TeX\ est dans un mode ``interne''~:
+horizontal r\'eduit, vertical interne ou math\'ematique de texte.
+\endulist
+\example
+\def\modes{{\bf
+ \ifhmode
+ \ifinner IH\else H\fi
+ \else\ifvmode
+ \ifinner \hbox{IV}\else \hbox{V}\fi
+ \else\ifmmode \hbox{M}\else
+ error\fi\fi\fi}}
+Formula $\modes$; then \modes,
+ \hbox{next \modes\ and \vbox{\modes}}.
+\par\modes
+|
+\produces
+\def\modes{{\bf
+ \ifhmode
+ \ifinner IH\else H\fi
+ \else\ifvmode
+ \ifinner \hbox{IV}\fi
+ \else\ifmmode \hbox{M}\else
+ error\fi\fi\fi}}
+Formula $\modes$; then \modes,
+ \hbox{next \modes\ and \vbox{\modes}}.
+\par\noindent{\bf V} % sorry folks, we have to fake this one
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifhbox {\<registre>}\ctsxrdef{@ifhbox}
+\ctspecial ifvbox {\<registre>}\ctsxrdef{@ifvbox}
+\ctspecial ifvoid {\<registre>}\ctsxrdef{@ifvoid}
+\explain
+^^{hbox//tester}
+^^{vbox//tester}
+^^{\boites//tester si elle est vide}
+Ces commandes testent le contenu du
+registre de bo\^\i te num\'ero \<reg\-ister>.
+Soit \<registre> \`a $n$. Alors~:
+\ulist
+\li |\ifhbox| est vrai si |\box|$\,n$ est une \minref{hbox}.
+\li |\ifvbox| est vrai si |\box|$\,n$ est une \minref{vbox}.
+\li |\ifvoid| est vrai si |\box|$\,n$ est vide, c'est-\`a-dire, ne contient pas
+de bo\^\i te.
+\endulist
+\example
+\setbox0 = \vbox{} % empty but not void
+\setbox1 = \hbox{a}
+\setbox2 = \box1 % makes box1 void
+\ifvbox0 true\else false\fi;
+\ifhbox2 true\else false\fi;
+\ifvoid1 true\else false\fi
+|
+\produces
+\setbox0 = \vbox{}
+\setbox1 = \hbox{a}
+\setbox2 = \box1 % empties box1
+\ifvbox0 true\else false\fi;
+\ifhbox2 true\else false\fi;
+\ifvoid1 true\else false\fi
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial ifeof {\<nombre>}\ctsxrdef{@ifeof}
+\explain
+^^{fin de fichier, tester}
+\minrefs{file}
+Cette commande teste un flux d'entr\'ee de fin de fichier.
+Elle est vraie si le flux d'entr\'ee \<nombre> n'a pas \'et\'e ouvert,
+ou a \'et\'e ouvert et que le fichier associ\'e a \'et\'e enti\`erement lu
+(ou n'existe pas).
+\enddesc
+
+\begindesc
+\ctspecial ifcase
+{\<nombre>\<texte du cas$_0$> {\bt \\or }\<texte du cas$_1$> {\bt \\or}
+ $\ldots$ {\bt \\or} \<texte du cas$_n$>\hfil\break
+\hglue 3pc{\bt \\else} \<texte alternatif> {\bt \\fi}}
+\ctsxrdef{@ifcase}
+\ctsxrdef{@or}
+\explain
+^^{test de cas}
+Cette commande introduit un test avec des cas multiples num\'erot\'es.
+Si \<nom\-bre> a la valeur $k$, \TeX\ d\'eveloppera \<texte de cas$_k$> s'il
+existe et \<texte alternatif> autrement. Vous pouvez omettre le |\else|---%
+dans ce cas, \TeX\ ne d\'eveloppera rien si aucun des cas n'est satisfait.
+\example
+\def\whichday#1{\ifcase #1<day 0>\or Sunday\or Monday%
+ \or Tuesday\or Wednesday\or Thursday\or Friday%
+ \or Saturday\else Nonday\fi
+ \ is day \##1. }
+\whichday2 \whichday3 \whichday9
+|
+\produces
+\def\whichday#1{\ifcase #1<day 0>\or Sunday\or Monday%
+ \or Tuesday\or Wednesday\or Thursday\or Friday%
+ \or Saturday\else Nonday\fi
+ \ is day \##1. }
+\whichday2 \whichday3 \whichday9
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial iftrue {}\ctsxrdef{@iftrue}
+\ctspecial iffalse {}\ctsxrdef{@iffalse}
+\explain
+Ces commandes sont \'equivalentes \`a des tests qui sont toujours vrai ou toujours
+faux. Le principal usage de ces commandes est de d\'efinir des macros qui gardent
+trace du r\'esultat d'un test.
+\example
+\def\isbigger{\let\bigger=\iftrue}
+\def\isnotbigger{\let\bigger=\iffalse}
+% These \let's MUST be buried in macros!! If they aren't,
+% TeX erroneously tries to match them with \fi.
+\def\test#1#2{\ifnum #1>#2 \isbigger\else\isnotbigger\fi}
+\test{3}{6}
+\bigger$3>6$\else$3\le6$\fi
+|
+\produces
+\def\isbigger{\let\bigger=\iftrue}
+\def\isnotbigger{\let\bigger=\iffalse}
+% These \let's MUST be buried in macros!
+% If they aren't, TeX erroneously tries to match them with \fi
+\def\test#1#2{\ifnum #1>#2 \isbigger\else\isnotbigger\fi}
+\test{3}{6}
+\bigger$3>6$\else$3\le6$\fi
+\endexample
+\enddesc
+
+\begindesc
+\ctspecial else {} \ctsxrdef{@else}
+\explain
+Cette commande introduit l'alternative ``faux'' d'un test conditionel.
+\enddesc
+
+\begindesc
+\ctspecial fi {} \ctsxrdef{@fi}
+\explain
+Cette commande termine le texte d'un test conditionel.
+\enddesc
+
+\begindesc
+\ctspecial newif {{\bt \\if}\<nom de test>}\ctsxrdef{@newif}
+\explain
+Cette commande nomme un trio de s\'equence de contr\^ole avec comme noms |\alpha!-true|,
+|\alphafalse|,
+et |\ifalpha|, o\`u |alpha| est \<test name>.
+Vous pouvez les utiliser pour d\'efinir vos propres tests en
+cr\'eant une variable logique qui enregistre des informations
+true\slash false:
+\ulist\compact
+\li |\alphatrue| met la variable logique |alpha| \`a vrai.
+\li |\alphafalse| met la variable logique |alpha| \`a faux
+\li |\ifalpha| est un test conditionnel qui est vrai si la variable logique
+|alpha| est vraie et faux autrement.
+\endulist
+La variable logique |alpha| n'existe pas r\'eellement, mais \TeX\ agit comme
+si elle l'\'etait. Apr\`es |\newif\ifalpha|, la variable logique est initialis\'ee
+\`a faux.
+
+|\newif| est un commande externe, donc vous ne pouvez l'utiliser dans une d\'efinition
+de macro.
+\example
+\newif\iflong \longtrue
+\iflong Rabbits have long ears.
+\else Rabbits don't have long ears.\fi
+|
+\produces
+\newif\iflong
+\longtrue
+\iflong Rabbits have long ears.\else Rabbits don't have long ears.\fi
+\endexample
+\eix^^{tests conditionnels}
+\enddesc
+
+
+%==========================================================================
+\subsection {Actions r\'ep\'et\'ees}
+
+{\def\test{{\bt \\if}$\Omega$}%
+\begindesc
+\bix^^{actions r\'ep\'et\'ees}
+\bix^^{boucles}
+\cts loop {$\alpha$ {\test} $\beta$ {\bt \\repeat}}
+\ctspecial repeat {}\ctsxrdef{@repeat}
+\explain
+Ces commandes procurent une construction de boucle pour \TeX.
+Ici, $\alpha$ et $\beta$ sont des s\'equences de commandes arbitraires
+et \test\ est un des tests conditionnels d\'ecrites dans
+\headcit{Tests conditionnels}{conds}.
+Le |\repeat| r\'ep\`ete le |\fi| correspondant au test,
+donc vous n'aurez pas besoin d'\'ecrire un |\fi| explicite pour terminer le test.
+Ni, malheureusement, associer un |\else| au test.
+Si vous voulez utiliser le test dans le sens oppos\'e, vous devez
+r\'earranger le test ou
+d\'efinir un test auxiliaire avec |\newif| (voir au-dessus) et utiliser ce
+test dans le sens que vous voulez (voir le second exemple ci-dessous).
+
+\TeX\ d\'eveloppe |\loop| comme suit~:
+\olist
+\li $\alpha$ est d\'evelopp\'e.
+\li {\test} est ex\'ecut\'e. Si le r\'esultat est faux, la boucle est termin\'ee.
+\li $\beta$ est d\'evelopp\'e.
+\li Le cycle est r\'ep\'et\'e.
+\endolist
+\example
+\count255 = 6
+\loop
+ \number\count255\
+ \ifnum\count255 > 0
+ \advance\count255 by -1
+\repeat
+|
+\produces
+\count255 = 6
+\loop
+ \number\count255\
+ \ifnum\count255 > 0
+ \advance\count255 by -1
+\repeat
+\nextexample
+\newif\ifnotdone % \newif uses \count255 in its definition
+\count255=6
+\loop
+ \number\count255\
+ \ifnum\count255 < 1 \notdonefalse\else\notdonetrue\fi
+ \ifnotdone
+ \advance\count255 by -1
+\repeat
+|
+\produces
+\newif\ifnotdone
+\count255=6
+\loop
+ \number\count255\
+ \ifnum\count255 < 1 \notdonefalse\else\notdonetrue\fi
+ \ifnotdone
+ \advance\count255 by -1
+\repeat
+%
+\eix^^{actions r\'ep\'et\'ees}
+\eix^^{boucles}
+%
+\endexample
+\enddesc
+} % end scope of definition of \test
+
+%==========================================================================
+\subsection {Ne rien faire}
+
+\begindesc
+\cts relax {}
+\explain
+Cette commande demande \`a \TeX\ de ne rien faire. C'est utile dans un contexte o\`u
+vous devez procurer une commande mais il n'y a rien que vous voulez que \TeX\ fasse.
+\example
+\def\medspace{\hskip 12pt\relax}
+% The \relax guards against the possibility that
+% The next tokens are `plus' or `minus'.
+|
+
+\endexample
+\enddesc
+
+\begindesc
+\cts empty {}
+\explain
+Cette commande se d\'eveloppe en aucun tokens du tout.
+Elle diff\`ere de |\relax| car elle dispara\^\i t apr\`es un d\'eveloppement de macro.
+%
+\xrdef{mac2}% end the section on macros
+\eix^^{macros}
+\enddesc
+
+%==========================================================================
+\section {Registres}
+
+%==========================================================================
+\subsection {Utiliser des registres}
+
+\begindesc
+\bix^^{registres}
+\makecolumns 11/2:
+\cts count {\<registre> {\bt =} \<nombre>}
+\cts dimen {\<registre> {\bt =} \<dimen>}
+\cts skip {\<registre> {\bt =} \<glue>}
+\cts muskip {\<registre> {\bt =} \<muglue>}
+\cts toks {\<registre> {\bt =} \<token variable>}
+\aux\cts toks {\<registre> {\bt =} \rqbraces{\<list. de tok.>}}
+\aux\cts count {\<registre>}
+\aux\cts dimen {\<registre>}
+\aux\cts skip {\<registre>}
+\aux\cts muskip {\<registre>}
+\aux\cts toks {\<registre>}
+\explain
+^^{assignements//de registres}
+Les six premi\`eres commandes list\'ees ici assignent quelque chose \`a un registre.
+Les |=| dans les assignations sont optionnels.
+Les cinq s\'equences de contr\^ole restantes ne sont pas de vraies commandes
+car elles n'apparais\-sent que comme partie d'un argument.
+Elles pr\'ecisent le contenu des registres sp\'ecifi\'es.
+Bien que vous ne puissiez utiliser ces s\'equences de contr\^ole elles-m\^eme comme commandes
+dans un texte, vous pouvez utili\-ser ^|\the| pour les convertir en texte
+et ainsi pouvoir composer leurs valeurs.
+
+Vous pouvez nommer et r\'eserver de nouveaux registres
+avec la commande ^|\newcount| et ses relatifs
+(\xref{\@newcount}).
+Utiliser ces commandes est un moyen s\^ur d'obtenir des registres qui
+ne sont pas cens\'es avoir d'usages conflictuels.
+
+^^{registres count}
+Un registre |\count| contient un entier, qui peut \^etre soit positif soit
+n\'egatif.
+Des entiers peuvent \^etre aussi grands que vous n'aurez probablement jamais besoin qu'ils soient.\footnote
+{Voici le seul exercice du livre~: trouvez le plus grand entier
+que \TeX\ acceptera.}
+\TeX\ utilise les registres compteur $0$--$9$ pour garder trace des
+num\'eros de page (voir la \knuth{page~119}{139}).
+|\count255| est le seul registre compteur possible pour une utilisation
+sans r\'eservation.
+\example
+\count255 = 17 \number\count255
+|
+\produces
+\count255 = 17 \number\count255
+\endexample
+
+\medskip\noindent
+^^{registre dimension}
+Un registre |\dimen| contient une dimension.
+Les registres de |\dimen0| \`a |\dimen255| sont possibles
+pour un brouillon.
+
+\example
+\dimen0 = 2.5in
+\hbox to \dimen0{$\Leftarrow$\hfil$\Rightarrow$}
+|
+\produces
+\dimen0 = 2.5in
+\hbox to \dimen0{$\Leftarrow$\hfil$\Rightarrow$}
+\doruler{\8\8\8}3{in}
+\endexample
+
+\medskip\noindent
+^^{registres skip}
+Un registre |\skip| contient les dimensions de ressort.
+Diff\'erent d'un registre |\dimen|, il
+enregistre un montant d'\'etirement et de r\'etr\'ecissement autant qu'une taille naturelle.
+Les registres de |\skip0| \`a |\skip9| et |\skip255| peuvent \^etre
+utilis\'es sans r\'eservation.
+
+\example
+\skip2 = 2in
+$\Rightarrow$\hskip \skip2 $\Leftarrow$
+|
+\produces
+\skip2 = 2in
+$\Rightarrow$\hskip \skip2 $\Leftarrow$\par
+\noindent\hphantom{$\Rightarrow$}\ruler{\8\8}2{in}
+\endexample
+
+\medskip\noindent
+^^{registres muskip}
+Un registre |\muskip| est comme un registre |\skip|,
+mais le ressort qu'il contient est toujours mesur\'ee en ^|mu|
+\seeconcept{unit\'e math\'ematique}.
+La taille d'un |mu| d\'epend de la police courante.
+Par exemple, elle est normalement un peu
+plus petite dans un exposant que dans un texte ordinaire.
+Les registres de |\muskip0| \`a |\muskip9| et |\muskip255| peuvent \^etre
+utilis\'es sans r\'eservation.
+
+\example
+\muskip0 = 24mu % An em and a half, no stretch or shrink.
+$\mathop{a \mskip\muskip0 b}\limits^{a \mskip\muskip0 b}$
+% Note the difference in spacing.
+|
+\produces
+\muskip0 = 24mu % an em and a half
+$\mathop{a \mskip\muskip0 b}\limits^{a \mskip\muskip0 b}$
+% Note the difference in spacing
+\endexample
+
+\medskip\noindent
+^^{registres token}
+Vous pouvez assigner soit un token variable
+(un registre ou un param\`etre) ou une liste de token
+\`a un registre |\toks|.
+Quand vous assignez une liste de token \`a un registre de token,
+les tokens de la liste de token \emph{ne} sont \emph{pas} d\'evelopp\'es.
+
+Une fois que les tokens d'une liste de token ont \'et\'e ins\'er\'es dans un texte
+en utilisant ^|\the|, ils sont
+d\'evelopp\'es comme des tokens qui seraient lus directement.
+Ils ont les codes de cat\'egorie qu'ils ont re\c cus quand \TeX\ les \`a vu
+une premi\`ere fois dans la~\hbox{source}.
+
+\example
+\toks0 = {the \oystereaters\ were at the seashore}
+% This assignment doesn't expand \oystereaters.
+\def\oystereaters{Walrus and Carpenter}
+\toks1 = \toks0
+% the same tokens are now in \toks0 and \toks1
+Alice inquired as to whether \the\toks1.
+|
+\produces
+\toks0 = {the \oystereaters\ were at the seashore}
+% This assignment doesn't expand \oystereaters
+\def\oystereaters{Walrus and Carpenter}
+\toks1 = \toks0
+% the same tokens are now in \toks0 and \toks1
+Alice inquired as to whether \the\toks1.
+\endexample
+\enddesc
+
+\begindesc
+\cts maxdimen {}
+\explain
+^^{dimensions//maximum}
+Cette s\'equence de contr\^ole d\'esigne une \<dimen> qui est la
+plus grande dimension acceptable par \TeX\ (environ 4,50 m\`etres).
+Ce n'est pas une vraie commande parce qu'elle ne peut appara\^\i tre
+que comme partie d'un argument d'une autre commande.
+\example
+\maxdepth = \maxdimen % Remove restrictions on \maxdepth.
+|
+\endexample
+\enddesc
+
+\see |\advance| (\xref\advance), |\multiply|,
+|\divide| (\xref\divide), |\set!-box|, |\box| (\xref\box).
+
+%==========================================================================
+\subsection {Nommer et r\'eserver des registres, etc.}
+
+\begindesc
+\bix^^{registres//r\'eserver}
+\makecolumns 11/2:
+\ctspecial newcount \ctsxrdef{@newcount}
+\ctspecial newdimen \ctsxrdef{@newdimen}
+\ctspecial newskip \ctsxrdef{@newskip}
+\ctspecial newmuskip \ctsxrdef{@newmuskip}
+\ctspecial newtoks \ctsxrdef{@newtoks}
+\ctspecial newbox \ctsxrdef{@newbox}
+\ctspecial newread \ctsxrdef{@newread}
+\ctspecial newwrite \ctsxrdef{@newwrite}
+\ctspecial newfam \ctsxrdef{@newfam}
+\ctspecial newinsert \ctsxrdef{@newinsert}
+\ctspecial newlanguage \ctsxrdef{@newlanguage}
+\explain
+Ces commandes
+r\'eservent et nomment une entit\'e du type indiqu\'e~:
+\ulist
+{\tolerance = 5000
+\fontdimen3\the\font = 2\fontdimen3\the\font % allow spaces to stretch more
+\li |\new!-count|, |\newdimen|, |\newskip|, |\new!-mu!-skip|, |\new!-toks|,
+et |\new!-box| r\'eservent chacun un \minref{registre} du type indiqu\'e.
+}
+^^{registres count//r\'eserv\'es par \b\tt\\newcount\e}
+^^{registres de dimension//r\'eserv\'es par \b\tt\\newdimen\e}
+^^{registres skip//r\'eserv\'es par \b\tt\\newskip\e}
+^^{registres muskip//r\'eserv\'es par \b\tt\\newmuskip\e}
+^^{registres token//r\'eserv\'es par \b\tt\\newtoks\e}
+^^{registres de \boite//r\'eserv\'es par \b\tt\\newbox\e}
+\li |\newread| et |\newwrite| r\'eservent un flot d'entr\'ee et
+de sortie \minrefs{input stream}\minrefs{output stream}
+respectivement.
+^^{flots d'entr\'ee//r\'eserv\'es par \b\tt\\newread\e}
+^^{flots de sortie//r\'eserv\'es par \b\tt\\newwrite\e}
+\li |\newfam| r\'eserve une \minref{famille} de police math\'ematique.
+^^{famille//r\'eserv\'ee par \b\tt\\newfam\e}
+\li |\newinsert| r\'eserve un caract\`ere d'insertion.
+(R\'eserver un caract\`ere d'insertion entra\^\i ne r\'eserver plusieurs registres diff\'erents.)
+^^{insertions//num\'eros r\'eserv\'es par \b\tt\\newinsert\e}
+\li |\newlanguage| r\'eserve un jeu de motifs de c\'esure.
+\endulist
+Vous devez utiliser ces commandes \`a chaque fois que vous avez besoin d'une
+de ces entit\'es, dans une r\'egion tr\`es locale,
+pour \'eviter des conflits de num\'erotation.
+
+Il y a une diff\'erence importante entre ces commandes~:
+\ulist
+\li Les s\'equences de contr\^ole d\'efinies par
+|\newcount|, |\newdimen|, |\newskip|, |\newmuskip| et |\newtoks|
+d\'esignent chacune une entit\'e du type appropri\'e.
+Par exemple, apr\`es la commande~:
+\csdisplay
+\newdimen\listdimen
+|
+la s\'equence de contr\^ole |\listdimen| peut \^etre utilis\'ee comme une dimension.
+\li Les s\'equences de contr\^ole d\'efinies par
+|\newbox|, |\newread|, |\new!-write|, |\newfam|, |\newinsert|
+et |\newlanguage| \'evaluent chacune
+le \emph{num\'ero} d'une entit\'e du type appropri\'e.
+Par exemple, apr\`es la commande~:
+\csdisplay
+\newbox\figbox
+|
+La s\'equence de contr\^ole |\figbox| doit \^etre utilis\'ee en conjonction avec
+une commande de type |\box|, par exemple~:
+\csdisplay
+\setbox\figbox = \vbox{!dots}
+|
+\endulist
+\enddesc
+
+\begindesc
+\cts countdef {\<s\'equence de contr\^ole> {\bt =} \<registre>}
+\cts dimendef {\<s\'equence de contr\^ole> {\bt =} \<registre>}
+\cts skipdef {\<s\'equence de contr\^ole> {\bt =} \<registre>}
+\cts muskipdef {\<s\'equence de contr\^ole> {\bt =} \<registre>}
+\cts toksdef {\<s\'equence de contr\^ole> {\bt =} \<registre>}
+\explain
+Ces commandes d\'efinissent \<s\'equence de contr\^ole> pour faire r\'ef\'erence au
+\minref{registre} de la cat\'egorie indiqu\'ee dont le num\'ero est \<registre>.
+Normalement vous devez utiliser les commandes du groupe pr\'ec\'edent
+(|\newcount|, etc.) en pr\'ef\'erence \`a ces commandes pour \'eviter
+des conflits de num\'ero. Les commandes du groupe pr\'ec\'edent sont
+d\'efinies en termes de commandes \hbox{de ce groupe}.
+\example
+\countdef\hatters = 19 % \hatters now refers to \count19
+\toksdef\hares = 200 % \hares now refers to \toks200
+|
+\endexample
+\enddesc
+
+\see |\newif| (\xref{\@newif}), |\newhelp| (\xref{\@newhelp}).
+\eix^^{registres//r\'eserver}
+
+%==========================================================================
+\subsection {Faire de l'arithm\'etique dans des registres}
+
+\begindesc
+\bix^^{arithm\'etique}
+\bix^^{registres//arithm\'etique dans des}
+%
+\cts advance {\<registre compteur> {\bt by} \<nombre>}
+\aux\cts advance {\<registre dimension> {\bt by} \<dimension>}
+\aux\cts advance {\<registre saut> {\bt by} \<ressort>}
+\aux\cts advance {\<registre muskip> {\bt by} \<muglue>}
+\explain
+Ces commandes ajoutent une quantit\'e compatible a un registre. Pour \<ressort>
+ou \<muglue> les trois composants (valeur naturelle, \'etirement et r\'etr\'ecissement)
+\minrefs{glue} sont ajout\'es.
+Toutes les quantit\'es peuvent \^etre n\'egatives.
+Pour ces calculs
+(et autres assignements en fait), \<ressort> peut \^etre converti en une
+\<dimension> en enlevant l'\'etirement et le r\'etr\'ecissement et une \<dimension>
+peut \^etre convertie en \<nombre> en prenant sa valeur en points d'\'echelle
+\seeconcept{dimension}.
+Vous pouvez omettre le mot |by| dans ces commandes---\TeX\ les comprendra quand
+m\^eme.
+\example
+\count0 = 18 \advance\count0 by -1 \number\count0\par
+\skip0 = .5in \advance\skip0 by 0in plus 1in % add stretch
+\hbox to 2in{a\hskip\skip0 b}
+|
+\produces
+\count0 = 18 \advance\count0 by -1 \number\count0\par
+\skip0 = .5in \advance\skip0 by 0in plus 1in % add stretch
+\hbox to 2in{a\hskip\skip0 b}
+\doruler{\8\8}2{in}
+\endexample
+\enddesc
+
+\begindesc
+\cts multiply {\<registre> {\bt by} \<nombre>}
+\cts divide {\<registre> {\bt by} \<nombre>}
+\explain
+Ces commandes multiplient et divisent la valeur de \<registre>
+par \<nombre> (qui peut \^etre n\'egatif).
+Le registre peut \^etre un registre ^|\count|, ^|\dimen|, ^|\skip|
+ou ^|\muskip|.
+Pour un registre ^|\skip| ou ^|\muskip| (\xref\skip),
+les trois composantes du \minref{ressort} du registre sont modifi\'es.
+Vous pouvez omettre le mot |by| dans ces commandes---\TeX\ les comprendra quand
+m\^eme.
+
+Vous pouvez aussi obtenir un multiple d'une \<dimension> en la pr\'ec\'edant par un \<nombre>
+\minrefs{number}
+ou une constante d\'ecimale, par exemple,
+|-2.5\dimen2|.
+Vous pouvez aussi utiliser cette notation pour des \<ressort>, mais attention---le r\'esultat
+est une \<dimension>, pas un \<ressort>.
+Ainsi |2\baselineskip| donne une \<dimension> qui est deux fois la taille naturelle
+de |\baselineskip|, sans \'etirement ni r\'etr\'ecissement.
+\example
+\count0 = 9\multiply \count0 by 8 \number\count0 ;
+\divide \count0 by 12 \number\count0 \par
+\skip0 = 20pt plus 2pt minus 3pt \multiply \skip0 by 3
+Multiplied value of skip0 is \the\skip0.\par
+\dimen0 = .5in \multiply\dimen0 by 6
+\hbox to \dimen0{a\hfil b}
+|
+\produces
+\count0 = 9\multiply \count0 by 8 \number\count0 ;
+\divide \count0 by 12 \number\count0 \par
+\skip0 = 20pt plus 2pt minus 3pt \multiply \skip0 by 3
+Multiplied value of skip0 is \the\skip0.\par
+\dimen0 = .5in \multiply\dimen0 by 6
+\hbox to \dimen0{a\hfil b}
+\doruler{\8\8\8}3{in}
+\endexample
+
+\eix^^{arithm\'etique}
+\eix^^{registres//arithm\'etique dans des}
+\eix^^{registres}
+\enddesc
+
+%==========================================================================
+\section {Terminer l'ex\'ecution}
+
+\begindesc
+^^{fin d'ex\'ecution}
+\easy\ctspecial bye \ctsxrdef{@bye}
+\explain
+Cette commande dit \`a \TeX\ de remplir et produire la derni\`ere page, d'imprimer
+toutes les \minref{insertion}s en suspens et de terminer l'ex\'ecution.
+C'est le moyen usuel de terminer votre fichier source.
+\enddesc
+
+\begindesc
+\cts end {}
+\explain
+Cette commande dit \`a \TeX\ de produire la derni\`ere page et de terminer l'ex\'ecution.
+Elle ne remplit pas la page,
+donc il est pr\'ef\'erable d'utiliser |\bye| plut\^ot que |\end|.
+\enddesc
+
+%==========================================================================
+\section {Entr\'ee et sortie}
+
+%==========================================================================
+\subsection {Op\'erations sur des fichiers d'entr\'ee}
+
+\begindesc
+\bix^^{fichiers}
+\bix^^{fichiers d'entr\'ee}
+\easy\cts input {\<nom de fichier>}
+\explain
+\minrefs{file}\minrefs{file name}
+Cette commande demande \`a \TeX\ de lire son entr\'ee \`a partir du fichier \<nom de fichier>.
+Quand ce fichier est \'epuis\'e, \TeX\ retourne lire \`a partir du source d'entr\'ee
+pr\'ec\'edent. Vous pouvez inclure des fichiers d'entr\'ee sur autant de niveaux que vous voulez
+(dans les limites du raisonnable).
+
+Quand vous saisissez un grand document, c'est souvent une bonne id\'ee de
+structurer votre fichier principal comme une suite de commandes |\input| faisant r\'ef\'erence
+aux parties subsidiaires du document. De cette fa\c con, vous pouvez ex\'ecuter les
+parties individuelles facilement quand vous travaillez sur des \'epreuves. C'est aussi une bonne
+pratique de mettre toutes vos d\'efinitions de \minref{macro} dans un fichier s\'epar\'e et
+appeler ce fichier avec une commande |\input| comme premi\`ere action de votre
+fichier principal.
+
+\TeX\ utilise des r\`egles diff\'erentes pour balayer les noms de fichier que
+pour lire les \minref{token}s en g\'en\'eral (voir \xref{nom de fichier}).
+Si votre impl\'ementation attend des noms de fichier avec extensions (habituellement
+pr\'ec\'ed\'ees par un point), alors \TeX\ procure l'extension par d\'efaut |.tex|.
+\example
+\input macros.tex
+\input chap1 % equivalent to chap1.tex
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts endinput {}
+\explain
+Cette commande dit \`a \TeX\ d'arr\^eter de lire l'entr\'ee du fichier courant
+quand il rencontrera la prochaine fin de ligne.
+\enddesc
+
+\begindesc
+\cts inputlineno {}
+\explain
+Cette commande donne un nombre (pas une cha\^\i ne) donnant le num\'ero de ligne
+de la ligne courante, devant \^etre le num\'ero qui appara\^\i trait dans un message d'erreur
+si une erreur arrive \`a cette endroit.
+\enddesc
+
+\begindesc
+\cts openin {\<nombre> {\bt =} \<nom de fichier>}
+\explain
+Cette commande demande \`a \TeX\ d'ouvrir le fichier nomm\'e \<nom de fichier>
+et de le rendre lisible via le flot d'entr\'ee d\'esign\'e par \<nombre>.
+^^{flots d'entr\'ee//ouverture}
+\<nombre> doit \^etre entre $0$ et $15$.
+Une fois que vous avez ouvert un fichier et l'avez connect\'e \`a un flot d'entr\'ee,
+vous pouvez lire le fichier en utilisant la commande |\read|
+avec le num\'ero du flot d'entr\'ee.
+
+vous pouvez associer plus d'un flot d'entr\'ee avec le m\^eme
+fichier. vous pouvez alors lire \`a plusieurs positions diff\'erentes dans
+le fichier, une pour chaque flot d'entr\'ee.
+
+Vous devez allouer les num\'eros de flots pour |\openin| en utilisant
+|\new!-read| (\xref{\@newread}).
+\example
+\newread\auxfile \openin\auxfile = addenda.aux
+% \auxfile now denotes the number of this opening
+% of addenda.aux.
+|
+\endexample
+\enddesc
+
+\begindesc%\secondprinting{\vglue-.5\baselineskip\vskip0pt}
+\cts closein {\<nombre>}
+\explain
+Cette commande demande \`a \TeX\ de fermer le \minref{flot d'entr\'ee} num\'erot\'e
+\<nombre>, c'est-\`a-dire,
+clore l'association entre le flot d'entr\'ee et son fichier.
+Le flot d'entr\'ee avec ce num\'ero devient alors disponible pour \^etre utilis\'e avec un
+fichier diff\'erent.
+Vous devez fermer un flot d'entr\'ee une fois que vous avez fini d'utiliser son fichier.
+\example
+\closein\auxfile
+|
+\endexample
+\enddesc
+
+\begindesc%\secondprinting{\vglue-.5\baselineskip\vskip0pt}
+\cts read {\<nombre> {\bt to} \<s\'equence de contr\^ole>}
+\explain
+^^{flots d'entr\'ee//lecture avec \b\tt\\read\e}
+^^{lire un fichier}
+Cette commande demande \`a \TeX\ de lire une ligne du fichier
+associ\'e avec le \minref{flot d'entr\'ee}
+d\'esign\'e par \<nombre> et assigne les tokens de cette ligne \`a
+\<s\'equence de contr\^ole>. La \minref{s\'equence de contr\^ole} devient alors une
+\minref{macro} sans param\`etre. Aucun d\'eveloppement de macro ne prend place
+durant l'op\'eration de lecture. Si la ligne contient des accolades ouvrantes
+non appair\'ees, \TeX\ lira des lignes suppl\'ementaires jusqu'a ce que les accolades
+soient toutes referm\'ees. Si \TeX\ atteint la fin du fichier sans fermer toutes les
+accolades, il se plaindra.
+
+Si \<nombre> est plus grand que $15$ ou n'a pas \'et\'e associ\'e avec un fichier
+en utilisant ^|\openin|, \TeX\ affichera l'incitation `\<s\'equence de contr\^ole> |=|'
+sur votre terminal et attendra que vous saisissiez une ligne d'entr\'ee.
+Il assignera alors la ligne d'entr\'ee \`a \<s\'equence de contr\^ole>.
+Si \<nombre> est inf\'erieur \`a z\'ero, il lira une ligne d'entr\'ee de votre
+terminal mais omettra l'incitation.
+\example
+\read\auxfile to \holder
+% Expanding \holder will produce the line just read.
+|
+\endexample
+\eix^^{fichiers d'entr\'ee}
+\enddesc
+
+%\secondprinting{\vfill\eject}
+
+
+%==========================================================================
+\subsection {Op\'erations sur des fichiers de sortie}
+
+\bix^^{fichiers de sortie}
+\begindesc
+\cts openout {\<nombre> {\bt =} \<nom de fichier>}
+\explain
+^^{flots de sortie//ouverture}
+Cette commande demande \`a \TeX\ d'ouvrir le fichier nomm\'e \<nom de fichier>
+et de le rendre disponible pour l'\'ecriture via le \minref{flux de sortie}
+d\'esign\'e par \<nombre>.
+\<nombre> doit \^etre entre $0$ et $15$.
+Une fois que vous avez ouvert un fichier et l'avez connect\'e \`a un flot de sortie,
+vous pouvez \'ecrire dans le fichier en utilisant la commande |\write|
+avec le num\'ero du flot de sortie.
+
+Un |\openout| g\'en\`ere un \'el\'ement extraordinaire qui devient une partie d'une bo\^\i te.
+Le |\openout| ne prend pas effet avant que \TeX\ n'envoit cette bo\^\i te
+dans le \dvifile,
+\`a moins que vous ayez fait pr\'ec\'eder |\openout| de ^|\immediate|.
+
+\TeX\ ne se plaindra pas si vous associez plus d'un flux de sortie avec le
+m\^eme fichier, mais vous aurez un sacr\'e bazar dans le fichier si vous essayez~!
+
+Vous devez allouer des num\'eros de flux pour |\openout| en utilisant
+|\newwrite| (\xref{\@newwrite}).
+\example
+\newwrite\auxfile \openout\auxfile = addenda.aux
+% \auxfile now denotes the number of this opening
+% of addenda.aux.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts closeout {\<nombre>}
+\explain
+^^{flots de sortie//fermeture}
+Cette commande demande \`a \TeX\ de fermer le \minref{flot de sortie} num\'erot\'e
+\<nombre>. c'est-\`a-dire,
+cesser l'association entre le flot de sortie et son fichier.
+Le flot de sortie avec ce num\'ero devient alors disponible pour \^etre utilis\'e avec
+un fichier diff\'erent.
+Vous devez fermer un flot de sortie une fois que vous avez fini d'utiliser son fichier.
+
+Un |\closeout| g\'en\`ere un \'el\'ement extraordinaire qui devient une partie d'une bo\^\i te.
+Le |\closeout| ne prend pas effet avant que \TeX\ n'envoit pas cette bo\^\i te
+dans le \dvifile,
+\`a moins que vous ayez fait pr\'ec\'eder |\closeout| de ^|\immediate|.
+\example
+\closeout\auxfile
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts write {\<nombre> \rqbraces{\<liste de token>}}
+\explain
+^^{flots de sortie//\'ecriture}
+^^{\ecrire\ un fichier}
+Cette commande demande \`a \TeX\ d'\'ecrire \<liste de token> dans le fichier
+associ\'e avec le \minref{flot de sortie}
+d\'esign\'e par \<nombre>.
+Il g\'en\`ere un \'el\'ement extraordinaire qui devient une partie d'une bo\^\i te.
+L'\'ecriture actuelle ne prend pas de place tant que \TeX\ n'envoie cette bo\^\i te
+dans le \dvifile,
+\`a moins que vous pr\'ec\'ediez le |\write| par ^|\immediate|.
+
+Pour un |\write| qui n'est pas imm\'ediat, \TeX\ ne d\'eveloppe pas de macros de
+\<liste de token> tant que la liste de token n'est pas \'ecrite dans le fichier.
+Les d\'eveloppements de macro suivent les m\^emes r\`egles que |\edef| (\xref\edef).
+En particulier, toute s\'equence de contr\^ole qui n'est pas le
+nom d'une macro est \'ecrite comme un
+^|\escapechar| suivi par le nom de la s\'equence de contr\^ole
+et un espace. tous les tokens `|#|'
+de \<liste de token> sont doubl\'es, c'est-\`a-dire, \'ecrits comme `|##|'.
+
+Si \<nombre> n'est pas dans la fourchette de $0$ \`a $15$, \TeX\ \'ecrit
+\<liste de token> dans le fichier log.
+^^{fichier log//\'ecrit par \b\tt\\write\e}
+Si \<nombre> est sup\'erieur \`a $15$ ou n'est pas associ\'e avec un flot de
+sortie, \TeX\ \'ecrit aussi \<liste de token> sur le terminal.
+\example
+\def\aa{a a}
+\write\auxfile{\hbox{$x#y$} \aa}
+% Writes the string `\hbox {$x##y$} a a' to \auxfile.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts immediate {}
+\explain
+Cette commande doit pr\'ec\'eder un |\openout|, un |\closeout| ou un |\write|.
+^^|\write//avec {\tt\\immediate}|
+^^|\openout//avec {\tt\\immediate}|
+^^|\closeout//avec {\tt\\immediate}|
+Elle demande \`a \TeX\ d'ex\'ecuter l'op\'eration de fichier sp\'ecifi\'ee sans d\'elai.
+\example
+\immediate\write 16{I'm stuck!!}
+% has the same effect as \message
+|
+\endexample\enddesc
+
+\begindesc
+\cts special {\rqbraces{\<liste de token>}}
+\explain
+Cette commande demande \`a \TeX\
+d'\'ecrire \<liste de token> directement dans le \dvifile\ quand il enverra
+une page.
+Une utilisation typique de |\special| sera de dire au driver d'impression d'incorporer
+le contenu d'un fichier graphique nomm\'e dans la page de sortie.
+^^{drivers de p\'eriph\'erique//instructions par \b\tt\\special\e}
+La commande |\special| produit un \'el\'ement extraordinaire qui associe
+\<liste de token> avec une position particuli\`ere sur la page, plus pr\'ecis\'ement,
+la position qu'une bo\^\i te de taille nulle aurait eu si un telle bo\^\i te
+serait apparue \`a la place de la commande |\special|.
+Toute utilisation que vous devez faire de |\special| d\'epend strictement des
+^{drivers d'impression} que vous avez \`a votre disposition.
+\example
+\special{graphic expic}
+% Display the graphics file `expic' here.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts newlinechar {\param{nombre}}
+\explain
+Ce param\`etre contient un caract\`ere qui indique une nouvelle ligne sur la
+sortie. Quand \TeX\ rencontre ce caract\`ere
+en lisant l'argument d'une commande
+|\write|, |\message| ou
+|\errmessage|, il d\'ebute une nouvelle ligne.
+Si |\newlinechar| n'est pas dans la fourchette $0$--$255$,
+Il n'y a aucun caract\`ere indiquant
+une nouvelle ligne en sortie.
+\PlainTeX\ met |\newlinechar| \`a $-1$.
+\example
+\newlinechar = `\^^J
+\message{This message appears^^Jon two lines.}
+|
+\logproduces
+This message appears
+on two lines.
+|
+\endexample
+\enddesc
+
+\see |\newread|, |\newwrite| (\xref{\@newwrite}).
+\eix^^{fichiers}
+\eix^^{fichiers de sortie}
+
+%==========================================================================
+\subsection {Interpr\'eter des caract\`eres entr\'es}
+
+\begindesc
+\cts catcode {\<charcode> \tblentry{nombre}}
+\explain
+^^{codes de cat\'egorie//en table de \b\tt\\catcode\e}
+Cette entr\'ee de table contient le \minref{code de cat\'egorie} du caract\`ere
+dont le code \ascii\ est \<charcode>.
+Les codes de cat\'egorie sont list\'es dans la \xrefpg{catcodes}.
+En changeant le code de cat\'egorie d'un caract\`ere vous pouvez demande \`a \TeX\ de traiter
+ce caract\`ere diff\'eremment.
+\example
+\catcode `\[ = 1 \catcode `\] = 2
+% Make [ and ] act like left and right braces.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts active {}
+\explain
+Cette commande contient le
+code de cat\'egorie pour un caract\`ere actif, soit, le nombre $13$.
+\example
+\catcode `\@ = \active % Make @ an active character.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts mathcode {\<charcode> \tblentry{nombre}}
+\explain
+Cette entr\'ee de table contient le \minref{mathcode} du caract\`ere
+dont le code \ascii\ est \<charcode> \seeconcept{mathcode}.
+Le mathcode sp\'ecifie l'interpr\'etation du caract\`ere en mode math\'ematique.
+\example
+\mathcode\> = "313E % as in plain TeX
+% The > character has class 3 (relation), family 1 (math
+% italic), and character code "3E
+|
+\endexample
+\enddesc
+
+\begindesc
+\margin{{\tt\\delcode} was explained in two places. This explanation
+combines them. (The other place was in the math section.)}
+\cts delcode {\<charcode>\tblentry{number}}
+\explain
+^^{codes d\'elimiteurs}
+Cette entr\'ee de table sp\'ecifie le code \minref{delimiter} pour le caract\`ere entr\'ee
+dont le code \ascii\ est \<charcode>.
+Le code d\'elimiteur dit \`a \TeX\ comment trouver le meilleur caract\`ere de sortie utiliser
+pour composer le caract\`ere d'entr\'ee indiqu\'e comme d\'elimiteur.
+
+\<nombre> est normalement \'ecrit en notation hexad\'ecimale.
+Supposez que \<nombre> soit le nombre hexad\'ecimal $s_1s_2s_3\,
+l_1l_2l_3$. Alors, quand le caract\`ere est utilis\'e comme un d\'elimiteur,
+\TeX\ prend le caract\`ere ayant une petite variante
+$s_1s_2s_3$ et une grande variante $l_1l_2l_3$. Ici $s_1s_2s_3$ indique
+le caract\`ere math\'ematique trouv\'e en position $s_2s_3$ de la famille $s_1$ et
+de m\^eme pour $l_1l_2l_3$. C'est la m\^eme convention que celle
+utilis\'ee pour ^|\mathcode| (\xref \mathcode),
+sauf que |\mathcode| sp\'ecifie aussi une classe.
+\example
+\delcode `( = "028300 % As in plain TeX.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts endlinechar {\param{nombre}}
+\explain
+Ce param\`etre
+contient le code de caract\`ere pour le caract\`ere que
+\TeX\ attend \`a la fin de chaque ligne d'entr\'ee.
+^^{ligne d'entr\'ee}
+Une valeur qui ne serait pas dans le fourchette $0$--$255$
+indique qu'aucun caract\`ere ne doit \^etre attendu.
+\PlainTeX\ laisse |\end!-line!-char| \`a
+|`\^^M| (le code {\ascii} pour \asciichar{return}).
+\enddesc
+
+\begindesc
+\cts ignorespaces {}
+\explain
+Cette commande demande \`a \TeX\ de lire et de d\'evelopper des tokens jusqu'\`a ce qu'il en trouve
+un qui ne soit pas un \minref{token} espace, ignorant tous les tokens espace
+qu'il trouve autrement.
+|\ignorespaces| est souvent pratique \`a la fin d'une \minref{macro} comme un moyen
+de rendre la macro insensible \`a tout espace ou fin de ligne
+qui peut suivre son propre appel.
+(Une ligne vide apr\`es |\ignorespaces| continue \`a produire un token |\par|,
+de tout fa\c con.)
+\example
+\def\aa#1{yes #1\ignorespaces}
+\aa{may}
+be
+|
+\produces
+\def\aa#1{yes #1\ignorespaces}
+\aa{may}
+be
+\endexample
+\enddesc
+
+%==========================================================================
+\section {Contr\^oler l'interaction avec \TeX}
+
+\begindesc
+\bix^^{contr\^oler \TeX}
+\bix^^{ex\'ecuter \TeX}
+\cts errorstopmode {}
+\explain
+Cette commande demande \`a \TeX\
+de stopper pour une interaction \`a chaque fois qu'il trouve une erreur.
+C'est le mode op\'eratoire normal.
+\enddesc
+
+\begindesc
+\cts scrollmode {}
+\explain
+Cette commande demande \`a \TeX\
+de ne pas stopper pour le plupart des erreurs,
+mais de continuer \`a afficher les messages d'erreur sur votre terminal.
+Saisir `|S|' ou `|s|' en r\'eponse \`a un message d'erreur vous met
+en mode scroll.
+\enddesc
+
+\begindesc
+\cts nonstopmode {}
+\explain
+Cette commande demande \`a \TeX\
+de ne pas stopper pour des erreurs, m\^eme celles r\'eclamant des fichiers qu'il
+ne peut trouver, mais de continuer \`a afficher les messages d'erreur sur votre terminal.
+Saisir `|R|' ou `|r|' en r\'eponse \`a un message d'erreur vous met
+en mode nonstop.
+\enddesc
+
+\begindesc
+\cts batchmode {}
+\explain
+Cette commande demande \`a \TeX\
+de ne pas stopper pour des erreurs et de supprimer toute sortie sur votre terminal.
+Saisir `|Q|' ou `|q|' en r\'eponse \`a un message d'erreur vous met
+en mode batch.
+\enddesc
+
+\begindesc
+\cts pausing {\param{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero, \TeX\ s'arr\^etera
+\`a chaque ligne d'entr\'ee pour vous donner une opportunit\'e de
+la remplacer par une ligne diff\'erente. Si vous saisissez une modification,
+\TeX\ utilisera cette ligne au lieu de l'originale~; si vous r\'epondez
+par \asciichar{return}, \TeX\ utilisera l'originale.
+
+Mettre |\pausing| \`a $1$ peut \^etre pratique comme moyen de patcher un document quand
+\TeX\ l'ex\'ecute. Par exemple,
+vous pouvez utiliser cette facilit\'e pour ins\'erer des commandes ^|\show| (voir plus loin).
+\eix^^{ex\'ecuter \TeX}
+\eix^^{contr\^oler \TeX}
+\enddesc
+
+%==========================================================================
+\section {Aide au diagnostic}
+
+\subsection{Afficher des donn\'ees internes}
+
+\begindesc
+\bix^^{tracer}
+\bix^^{debugger}
+\bix^^{aides au diagnostique}
+\cts show {\<token>}
+\cts showthe {\<argument>}
+\cts showbox {\<nombre>}
+\cts showlists {}
+\explain
+Ces commandes enregistrent de l'information dans le fichier log de votre ex\'ecution \TeX~:
+\ulist
+\li |\show| enregistre la signification de \<token>.\minrefs{token}
+^^{tokens//affich\'es par \b\tt\\show\e}
+\li |\showthe| enregistre
+ quels tokens seront produit par
+|\the| \<arg\-u\-ment> (voir \xref \the).
+\li |\showbox| enregistre le contenu du \minref{registre} de la \minref{bo\^\i te}
+num\'erot\'e \<nom\-bre>.
+Le nombre de
+points affich\'es dans la log indique le nombre de
+niveaux d'inclusion de bo\^\i tes internes.
+\li |\showlists| enregistre
+le contenu de chaque liste que \TeX\ est en train de construire.
+(les listes sont empil\'ees les unes sur les autres.)
+Voir les \knuth{pages~88--89}{103} pour plus d'information sur l'interpr\'etation
+de la sortie de |\showlists|.
+\endulist
+Pour |\show| et |\showthe|, \TeX\ affiche aussi l'information sur votre
+^{terminal}.
+Pour |\showbox| et |\showlists|, \TeX\ n'affiche l'information sur votre
+terminal que
+si ^|\tracingonline| (\xref \tracingonline) est sup\'erieur \`a z\'ero~;
+si ^|\tracingonline| est \`a z\'ero ou moins (le cas par d\'efaut),
+l'information n'est pas affich\'ee.
+
+\`A chaque fois que \TeX\ rencontre une commande de type |\show| il
+stoppe pour un interaction. La requ\^ete d'interaction ne doit \emph{pas}
+indiquer une erreur, mais doit vous donner l'opportunit\'e de demander \`a \TeX\ de
+vous montrer autre chose. Si vous ne voulez pas voir autre chose, pressez juste
+\asciichar{return}.
+
+Vous pouvez contr\^oler la quantit\'e de sortie produite par |\showbox| en mettant
+|\show!-box!-breadth| et |\show!-box!-depth| (\xref\showboxbreadth).
+^^|\showboxbreadth| ^^|\showboxdepth|
+Ces param\`etres ont des valeurs par d\'efaut \`a $5$ et $3$ respectivement,
+C'est pourquoi
+juste cinq \'el\'ements apparaissent pour chaque bo\^\i te d\'ecrite
+dans la sortie de log ci-dessous. (Le `|..etc.|' indique des \'el\'ements additionnels
+des bo\^\i tes qui ne sont pas affich\'es.)
+\example
+\show a
+\show \hbox
+\show \medskip
+\show &
+|
+\logproduces
+> the letter a.
+> \hbox=\hbox.
+> \medskip=macro:
+->\vskip \medskipamount .
+> alignment tab character &.
+|
+\nextexample
+\showthe\medskipamount
+\toks27={\hbox{Joe's\quad\ Diner}}
+\showthe\toks27
+|
+\logproduces
+> 6.0pt plus 2.0pt minus 2.0pt.
+> \hbox {Joe's\quad \ Diner}.
+|
+\nextexample
+\setbox 3=\vbox{\hbox{A red dog.}\hrule A black cat.}
+\showbox 3
+|
+\logproduces
+> \box3=
+\vbox(16.23332+0.0)x53.05565
+.\hbox(6.94444+1.94444)x46.41675
+..\tenrm A
+..\glue 3.33333 plus 1.66498 minus 1.11221
+..\tenrm r
+..\tenrm e
+..\tenrm d
+..etc.
+.\rule(0.4+0.0)x*
+.\hbox(6.94444+0.0)x53.05565
+..\tenrm A
+..\glue 3.33333 plus 1.66498 minus 1.11221
+..\tenrm b
+..\tenrm l
+..\tenrm a
+..etc.
+|
+\endexample
+\vfil\eject
+\example
+\vbox{A \hbox
+ {formula
+ $x \over y\showlists$}}
+|
+\logproduces
+### math mode entered at line 3
+\mathord
+.\fam1 y
+this will be denominator of:
+\fraction, thickness = default
+\\mathord
+\.\fam1 x
+### restricted horizontal mode entered at line 2
+\tenrm f
+\tenrm o
+\tenrm r
+\tenrm m
+\kern-0.27779
+\tenrm u
+\tenrm l
+\tenrm a
+\glue 3.33333 plus 1.66666 minus 1.11111
+spacefactor 1000
+### horizontal mode entered at line 1
+\hbox(0.0+0.0)x20.0
+\tenrm A
+\glue 3.33333 plus 1.66498 minus 1.11221
+spacefactor 999
+### internal vertical mode entered at line 1
+prevdepth ignored
+### vertical mode entered at line 0
+prevdepth ignored
+|
+\endexample
+\enddesc
+
+\see |\showboxbreadth|, |\showboxdepth| \ctsref\showboxbreadth.
+
+\subsection{Sp\'ecifier ce qui est trac\'e}
+
+\begindesc
+\cts tracingonline {\param{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero,
+\TeX\ affichera les r\'esultats de la trace
+(en incluant ^|\showbox| et ^|\showlists|)
+sur votre terminal en plus de les enregistrer dans le fichier log.
+\enddesc
+
+\begindesc
+\cts tracingcommands {\param{nombre}}
+\explain
+Si ce param\`etre est \'egal \`a $1$ ou plus,
+\TeX\ enregistrera dans le fichier log plus de commandes qu'il ex\'ecute.
+Si ^|\tracingonline| est plus grand que z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+composer le premier caract\`ere d'un mot compte comme une commande,
+mais (dans le but de la trace seulement)
+les actions de composition des caract\`eres suivants
+et de toute ponctuation les suivant
+ne compte pas comme des commandes.
+Si |\tracingcommands| est \`a $2$ ou plus,
+\TeX\ enregistrera aussi des commandes qui sont d\'evelopp\'ees
+plut\^ot qu'ex\'ecut\'ees, par exemple, des tests conditionnels et leurs r\'esultats.
+\example
+\tracingcommands = 1 If $x+y>0$ we quit.\par
+On the other hand, \tracingcommands = 0
+|
+\logproduces
+{vertical mode: the letter I}
+{horizontal mode: the letter I}
+{blank space }
+{math shift character $}
+{math mode: the letter x}
+{the character +}
+{the letter y}
+{the character >}
+{the character 0}
+{math shift character $}
+{horizontal mode: blank space }
+{the letter w}
+{blank space }
+{the letter q}
+{blank space }
+{\par}
+{vertical mode: the letter O}
+{horizontal mode: the letter O}
+{blank space }
+{the letter t}
+{blank space }
+{the letter o}
+{blank space }
+{the letter h}
+{blank space }
+{\tracingcommands}
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts tracinglostchars {\param{nombre}}
+\explain
+Si ce param\`etre est plus grand que z\'ero,
+\TeX\ enregistrera une indication dans le fichier log \`a chaque fois
+qu'il d\'elaissera un caract\`ere de sortie parce que ce caract\`ere n'existe pas
+dans la police courante.
+Si ^|\tracingonline| est plus grand que z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+\PlainTeX\ le met par d\'efaut \`a $1$ (contrairement aux autres).
+\example
+\tracinglostchars = 1
+A {\nullfont few} characters.
+|
+\logproduces
+Missing character: There is no f in font nullfont!!
+Missing character: There is no e in font nullfont!!
+Missing character: There is no w in font nullfont!!
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts tracingmacros {\param{nombre}}
+\explain
+Si ce param\`etre est \`a $1$ ou plus,
+\TeX\ enregistrera dans le fichier log le d\'eveloppement et les arguments
+de toutes les macros qu'il ex\'ecute.
+^^{macros//tracer des}
+Si |\tracingmacros| est \`a $2$ ou plus,
+\TeX\ enregistrera, en plus,
+tout d\'eveloppement de listes de \minref{token} telles que
+|\output| or |\everycr|.
+Si ^|\tracingonline| est plus grand que z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+\example
+\def\a{first \b, then \c}
+\def\b{b} \def\c{c}
+\tracingmacros = 2
+Call \a once.
+|
+\logproduces
+\a ->first \b , then \c
+
+\b ->b
+
+\c ->c
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts tracingoutput {\param{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero,
+\TeX\ enregistrera dans le fichier log le contenu de toutes les bo\^\i tes qu'il
+envoit dans le \dvifile.
+^^{\dvifile//\boite\ enregistr\'e dans le fichier}
+Si ^|\tracingonline| est sup\'erieur \`a z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+Le nombre de
+points affich\'e dans la log indique le nombre de
+niveaux d'inclusion de bo\^\i tes sur cette ligne.
+Vous pouvez contr\^oler la quantit\'e de trace en fixant
+^|\showboxbreadth| et ^|\showboxdepth| (\xref\showboxbreadth).
+
+mettre |\tracingoutput| \`a $1$ peut \^etre tr\`es pratique quand vous essayez
+de d\'eterminer pourquoi vous obtenez un ^{espace suppl\'ementaire} sur une page.
+
+\example
+% This is the entire file.
+\tracingoutput = 1 \nopagenumbers
+One-line page. \bye
+|
+\logproduces
+Completed box being shipped out [1]
+\vbox(667.20255+0.0)x469.75499
+.\vbox(0.0+0.0)x469.75499, glue set 13.99998fil
+..\glue -22.5
+..\hbox(8.5+0.0)x469.75499, glue set 469.75499fil
+...\vbox(8.5+0.0)x0.0
+...\glue 0.0 plus 1.0fil
+..\glue 0.0 plus 1.0fil minus 1.0fil
+.\vbox(643.20255+0.0)x469.75499, glue set 631.2581fill
+..\glue(\topskip) 3.05556
+..\hbox(6.94444+1.94444)x469.75499, glue set 386.9771fil
+...\hbox(0.0+0.0)x20.0
+...\tenrm O
+...\tenrm n
+...\tenrm e
+...\tenrm -
+...etc.
+..\glue 0.0 plus 1.0fil
+..\glue 0.0 plus 1.0fill
+.\glue(\baselineskip) 24.0
+.\hbox(0.0+0.0)x469.75499, glue set 469.75499fil
+..\glue 0.0 plus 1.0fil
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts tracingpages {\param{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero,
+\TeX\ enregistrera dans le fichier log ses calculs sur le co\^ut des
+diff\'erentes coupures de page qu'il essaie.
+^^{coupures de page//tracer}
+Si |\tracing!-online| ^^|\tracingonline|
+est sup\'erieur \`a z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+\TeX\ produit une ligne de cette sortie
+\`a chaque fois qu'il commence \`a placer une bo\^\i te ou une \minref{insertion}
+sur la liste de page courante, et aussi \`a chaque fois qu'il ex\'ecute une
+point de coupure potentiel pour la page.
+Examiner cette sortie peut \^etre utile quand vous essayez de d\'eterminer
+la cause d'une mauvaise coupure de page.
+Voir les \knuth{pages~112--114}{130--133} pour une illustration et une explication de
+cette sortie.
+
+Certaines distributions de \TeX\ ignorent la valeur de |\tracingpages|
+ainsi elles peuvent s'ex\'ecuter plus rapidement.
+Si vous devez utiliser ce param\`etre, soyez certain d'utiliser une distribution qui
+lui r\'epond.
+\enddesc
+
+\begindesc
+\cts tracingparagraphs {\param{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero,
+\TeX\ enregistrera dans le fichier log ses calculs sur le co\^ut des
+diff\'erentes coupures de ligne qu'il essaie.
+^^{coupures de ligne//tracer}
+Si ^|\tracingonline|
+est sup\'erieur \`a z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+\TeX\ produit cette sortie quand il atteint la fin de chaque paragraphe.
+Voir les \knuth{pages~98--99}{115--116} pour une illustration et une explication de
+cette sortie.
+
+Certaines distributions de \TeX\ ignorent la valeur de |\tracing!-para!-graphs|
+ainsi elles peuvent s'ex\'ecuter plus rapidement.
+Si vous devez utiliser ce param\`etre, soyez certain d'utiliser une distribution qui
+lui r\'epond.
+\enddesc
+
+\begindesc
+\cts tracingrestores {\param{nombre}}
+\explain
+Si ce param\`etre est sup\'erieur \`a z\'ero,
+\TeX\ enregistrera dans le fichier log les valeurs qu'il restitue quand il
+rencontre la fin d'un \minref{groupe}.
+Si ^|\tracingonline|
+est sup\'erieur \`a z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+
+Certaines distributions de \TeX\ ignorent la valeur de |\tracing!-restores|
+ainsi elles peuvent s'ex\'ecuter plus rapidement.
+Si vous devez utiliser ce param\`etre, soyez certain d'utiliser une distribution qui
+lui r\'epond.
+\enddesc
+
+\begindesc
+\cts tracingstats {\param{nombre}}
+\explain
+Si ce param\`etre est \`a $1$ ou plus, \TeX\ incluera
+un rapport sur les ressources qu'il utilise pour ex\'ecuter votre travail
+(voir la \knuth{page~300}{350--351} pour une liste et l'explication de ces ressources).
+Du reste, si |\tracingstats| est \`a $2$ ou plus,
+\TeX\ fera un rapport sur ses utilisations de m\'emoire \`a chaque fois qu'il fera un
+^|\shipout| (\xref \shipout) pour une page.
+Le rapport appara\^\i t \`a la fin du fichier log.
+^^{fichier log//tracer des statistiques dans le}
+Si ^|\tracingonline| est sup\'erieur \`a z\'ero, cette information appara\^\i tra aussi
+sur votre terminal.
+Si vous avez des probl\`emes avec \TeX\ d\'epassant une de ses
+capacit\'es, l'information procur\'ee par |\tracingstats| peut vous aider \`a
+mettre le doigt sur la cause de vos difficult\'es.
+
+Certaines distributions de \TeX\ ignorent la valeur de |\tracingstats|
+ainsi elles peuvent s'ex\'ecuter plus rapidement.
+Si vous devez utiliser ce param\`etre, soyez certain d'utiliser une distribution qui
+lui r\'epond.
+
+L'exemple suivant montre un extrait de
+la sortie de trace que vous obtenez sur une distribution
+de \TeX. Elle peut \^etre diff\'erente sur d'autres distributions.
+{\codefuzz = 1in
+\example
+\tracingstats=1
+|
+\logproduces
+Here is how much of TeX's memory you used:
+ 4 strings out of 5540
+ 60 string characters out of 72328
+ 5956 words of memory out of 262141
+ 921 multiletter control sequences out of 9500
+ 14794 words of font info for 50 fonts, out of 72000 for 255
+ 14 hyphenation exceptions out of 607
+ 7i,4n,1p,68b,22s stack positions out of 300i,40n,60p,3000b,4000s
+|
+\endexample
+}% end scope of codefuzz
+\enddesc
+
+\begindesc
+\cts tracingall {}
+\explain
+Cette commande demande \`a \TeX\ de
+brancher toutes les formes de trace disponibles.
+Elle met aussi ^|\tracingonline| \`a $1$ pour que la sortie de trace apparaisse
+sur votre terminal.
+\enddesc
+
+\begindesc
+\cts showboxbreadth {\param{nombre}}
+\explain
+Ce param\`etre sp\'ecifie le nombre maximum d'\'el\'ements de liste
+que \TeX\ affiche pour un niveau d'une bo\^\i te quand il produit
+la sortie pour ^|\showbox| ou ^|\tracingoutput|.
+\PlainTeX\ met |\showboxbreadth| \`a $5$.
+\enddesc
+
+\begindesc
+\cts showboxdepth {\param{nombre}}
+\explain
+Ce param\`etre sp\'ecifie le
+niveau de la plus profonde liste que \TeX\ affiche quand
+il produit la sortie pour ^|\showbox| ou ^|\showlists|.
+\PlainTeX\ met |\showboxdepth| \`a $3$.
+\eix^^{tracer}
+\eix^^{debugger}
+\eix^^{aides au diagnostique}
+\enddesc
+
+%==========================================================================
+\subsection {Envoyer des messages}
+
+\begindesc
+\bix^^{messages, envoyer}
+\bix^^{messages d'erreur}
+\cts message {\rqbraces{\<liste de token>}}
+\cts errmessage {\rqbraces{\<liste de token>}}
+\explain
+Cette commande affiche le message donn\'e par \<liste de token> sur votre
+terminal et l'entre aussi dans la log. Toutes les \minref{macro}s du
+message sont d\'evelopp\'ees, mais aucune commande n'est ex\'ecut\'ee. C'est la m\^eme r\`egle
+que \TeX\ utilise pour |\edef| (\xref \edef).
+
+Pour |\errmessage|, \TeX\ fait une pause
+de la m\^eme fa\c con qu'il le ferait pour un de ses propres messages d'erreur
+et affiche les tokens |\errhelp| si vous demandez de l'aide.
+
+Vous pouvez g\'en\'erer des messages multi-ligne en utilisant le caract\`ere ^|\newlinechar|
+(\xref \newlinechar).
+\example
+\message{Starting a new section.}
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts wlog {\rqbraces{\<liste de token>}}
+\explain
+Cette commande \'ecrit \<liste de token> dans le fichier log.
+^^{fichier log//\'ecrire par \b\tt\\wlog\e}
+\minrefs{log file}
+\TeX\ d\'eveloppe \<liste de token> en accord avec les m\^emes r\`egles qu'il utilise
+pour |\edef| (\xref\edef).
+\example
+\wlog{Take two aspirins and call me in the morning.}
+|
+\logproduces
+Take two aspirins and call me in the morning.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts errhelp {\param{liste de token}}
+\explain
+Ce param\`etre contient la liste de token que \TeX\ affiche
+quand vous demandez de l'aide en r\'eponse \`a une commande |\errmessage|.
+Nous vous recommandons quand
+vous g\'en\'erez un message d'erreur avec |\errmessage|, de
+mettre |\errhelp| \`a une cha\^\i ne qui d\'ecrit la nature de
+l'erreur et utiliser |\newhelp| pour produire cette cha\^\i ne.
+Vous pouvez utiliser le caract\`ere ^|\newlinechar| pour produire des messages multi-ligne.
+\enddesc
+
+\begindesc
+\ctspecial newhelp \ctsxrdef{@newhelp} {\<s\'equence de contr\^ole>
+ \rqbraces{\<texte d'aide>}}
+\explain
+Cette commande assigne le ^{message d'aide} donn\'e par \<texte d'aide> \`a
+\<s\'equence de contr\^ole>. Il procure un moyen efficace de d\'efinir
+le ^{texte d'aide} qui compl\`ete un message d'erreur.
+Avant d'\'emettre le message d'erreur avec la commande |\errmessage|,
+vous devez assigner \<s\'equence de contr\^ole> \`a ^|\errhelp|. Le texte d'aide
+appara\^\i tra alors si l'utilisateur saisi `|H|'
+ou `|h|' en r\'eponse au message d'erreur.
+\example
+\newhelp\pain{Your input includes a token that I find^^J
+ to be offensive. Don't bother me again with this^^J
+ document until you've removed it.}
+\errhelp = \pain \newlinechar = `\^^J
+% ^^J will start a new line
+\errmessage{I do not appreciate receiving this token}
+|
+\logproduces
+!! I do not appreciate receiving this token.
+l.8 ...t appreciate receiving this token.}
+
+? H
+\Your input includes a token that I find
+ to be offensive. Don't bother me again with this
+ document until you've removed it.
+|
+\endexample
+\enddesc
+
+\begindesc
+\cts errorcontextlines {\param{nombre}}
+\explain
+Ce param\`etre d\'etermine le nombre de paires de lignes de contexte,
+sans compter la premi\`ere et la derni\`ere, que \TeX\ imprime quand il
+rencontre une erreur. En le mettant \`a $0$ vous pouvez vous d\'ebarrasser de longs
+messages d'erreur.
+Vous pouvez forcer le contexte entier en saisissant quelque chose comme~:
+\csdisplay
+I\errorcontextlines=100\oops
+|
+en r\'eponse \`a une erreur,
+puisque la s\'equence de contr\^ole non d\'efinie |\oops| causera une autre erreur.
+\PlainTeX\ met |\error!-context!-lines| \`a $5$.
+\enddesc
+
+\see |\write| (\xref \write), |\escapechar| (\xref \escapechar).
+\eix^^{messages, envoyer}
+\eix^^{messages d'erreur}
+
+%==========================================================================
+\section {Initialiser \TeX}
+
+\begindesc
+\cts dump {}
+\explain
+Cette commande, qui ne doit pas appara\^\i tre \`a l'int\'erieur d'un groupe, met en
+r\'eserve le contenu de la m\'emoire de \TeX\ dans un ^{fichier format} (\xref{fichier format}).
+En utilisant ^|virtex|, une forme sp\'eciale ``vierge'' de \TeX,
+vous pouvez alors recharger le fichier format \`a grande vitesse et
+continuer dans le m\^eme \'etat que \TeX\ \'etait au moment du dump.
+|\dump| termine aussi une ex\'ecution. Puisque |\dump| ne peut \^etre utilis\'e
+qu'avec ^|initex|, pas en format de production de \TeX, elle n'est utile qu'aux
+gens qui installent \TeX.
+\enddesc
+
+\begindesc
+\cts everyjob {\param{liste de token}}
+\explain
+Ce param\`etre contient une liste de \minref{token} que \TeX\ d\'eveloppe au
+d\'ebut de chaque ex\'ecution. Parce qu'un assignement \`a |\everyjob| ne peut affecter
+l'ex\'ecution courante (au moment o\`u vous avez fait l'assignement, c'est d\'ej\`a trop
+tard), elle n'est utile qu'ux gens qui pr\'eparent des fichiers de format.
+\enddesc
+
+
+\enddescriptions \endchapter \byebye
+