diff options
Diffstat (limited to 'Master/texmf-dist/doc/plain/impatient-fr/fgenops.tex')
-rw-r--r-- | Master/texmf-dist/doc/plain/impatient-fr/fgenops.tex | 2834 |
1 files changed, 2834 insertions, 0 deletions
diff --git a/Master/texmf-dist/doc/plain/impatient-fr/fgenops.tex b/Master/texmf-dist/doc/plain/impatient-fr/fgenops.tex new file mode 100644 index 00000000000..2ca0acac59e --- /dev/null +++ b/Master/texmf-dist/doc/plain/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 + |