%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%	Ce fichier contient la definition de l'environnement LaTeX\
% utilise ainsi que les appels des fichiers a inclure pour
% l'article du guide d'utilisation des macros colorrgb.tex
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% les cesures
%	\input{/users/parall/cerin/=tex/=macros/Macros.cerin}
% les fichiers de macros
	\input colorrgb.tex
%	\input{c:/tex/inputs/colorrgb.tex}
%	\input{/users/parall/cerin/=tex/=macros/colorrgb.tex}
%	\documentstyle[12pt,%/users/parall/cerin/=tex/=macros/artlri,%
%		/users/parall/cerin/=tex/=macros/mantex]{%
%		/users/parall/cerin/=tex/=macros/rapport}

%	\documentstyle[12pt,/users/parall/cerin/=tex/=macros/mancolor]{/users/parall/cerin/=tex/=macros/rapport}
%	\documentstyle[12pt,c:/tex/inputs/mancolor]{c:/tex/inputs/rapport}
	\documentstyle[12pt,mancolor]{rapport}

% format standard, centre'
	\setlength{\oddsidemargin}{1mm}
	\setlength{\evensidemargin}{1mm}
	\setlength{\textwidth}{160mm}
	\setlength{\textheight}{230mm}
	\setlength{\topmargin}{-8mm}

% 1 mm entre chaque paragraphe
	\setlength{\parskip}{1mm}
	\pagestyle{headings}
\def\ggf{\raise.4ex\hbox{%
        $\scriptscriptstyle\langle\!\langle\;$}}
\def\gdf{\raise.4ex\hbox{%
        $\scriptscriptstyle\;\rangle\!\rangle\;$}}

\begin{document}
\date{30 Avril 1991}

\begin{titlepage}
    \vspace*{1.0in}
    \begin{flushright}
          {\huge\bf Color\TeX rgb - Color\TeX cmyk~: guide d'utilisation
des macros de mise en couleur} \\[.25cm]
          {\rule[.1in]{4.5in}{.02in}}\\[.25cm]
          {\large\bf Manuel de R\'ef\'erence} \\[2.0cm]
          {\large\bf Version 2.9} \\[4.0cm]
          {\bf Christophe C\'erin}\\
%          {\bf Benoit Lemaire}\\[1.0cm]
          {Universit\'e de Paris Sud}\\
          {LRI bat 490}\\
          {91405 Orsay - France}\\
          {mail : cerin@lri.lri.fr}\\
          {69-41-70-82}\\
    \end{flushright}
\end{titlepage}

\pagenumbering{roman}

\chapter*{Petite histoire de ces macros}

Dans un article r\'ecent \cite{cc}, nous pr\'esentions les avantages
d'utilisation de la couleur dans le traitement de texte \TeX\ au travers
de deux jeux de macros~: Color\TeX rgb et co\-lor\TeX cmyk fonctionnant pour
les imprimantes couleur PostScript des constructeurs QMS, Oc\'e, Hitachi,
Seiko.

Dans cet article, nous discutions de la couleur en g\'en\'eral, comment la
sp\'ecifier, la repr\'esen\-ter, puis, nous d\'egagions des classes de
probl\`emes qui appellent des classes de solutions communes, des
algorithmes communs. Cela nous conduisait \`a proposer un ensemble minimal
de primitives permettant de r\'esoudre les probl\`emes identifi\'es
suivants~: action sur une entit\'e syntaxique (lettre, mot, phrase,
paragraphe) et action sur une entit\'e graphique~: vecteur ou fl\`eche de
l'environnement {\bf picture} de \LaTeX .

Au moyen des constructeurs de base \verb[\begincolor[ et \verb[\endcolor[,
nous arrivions \`a r\'ealiser des d\'egrad\'es de couleur sur des cha\^\i ne
de caract\`eres~: la couleur d'une lettre d\'epend de celle de ses
voisines ou, plus g\'en\'eralement, de param\`etres sp\'ecifiant
l'interaction des couleurs.

Cet article pr\'esente la version 2.9 des macros qui b\'en\'eficient de
l'ajout de primitives comme la cr\'eation de bo\^\i tes couleur contenant
du texte dans une couleur diff\'erente. Vous trouverez \'egalement des
macros pour \'ecrire du texte sur un fond d\'egrad\'e et des primitives
pour dessiner des courbes de splines en couleur et en particulier des
contours ferm\'es quelconques, des cercles hachur\'es ainsi que la
possibilit\'e de placer du texte le long d'une courbe.

L'implantation des constructeurs initiaux propos\'ee est r\'ealis\'ee
en partie avec Post\-Script, par l'interm\'ediaire de la commande
\verb[special[ dans la syntaxe reconnue par le translateur
\verb[dvips[ de Tom Rokicki, et en \TeX . L'ensemble des macros est
\'ecrit pour fonctionner avec \LaTeX . Deux jeux sont disponibles~: un
pour les imprimantes du type LaserWriter (co\-lor\TeX rgb), l'autre pour les
imprimantes du type de la QMS ColorScript (Color\TeX cmyk).

\raggedbottom
\pagenumbering{arabic}
\pagestyle{headings}
%\chapter*{Description des macros}

\begin{manpage}{Librairie RGB}{Guide d'utilisation}{Version 2.9}

\subtitle*{Mod\`ele RGB}

Ce module d\'ecrit l'ensemble des primitives qui sp\'ecifient la couleur
au moyen des op\'erateurs RGB. Il est constitu\'e d'une partie per\-met\-tant
de d\'eclarer des variables, d'une partie permet\-tant
d'effectuer des initialisations sur ces variables et d'une partie qui
d\'ecrit la manipulation de la couleur sur des cha\^\i nes de caract\`eres.
On propose ensuite quelques macros de confort qui d\'eclarent des couleurs
pr\'ed\'efinies puis nous terminons par des exemples d'utilisation et une
pr\'esentation de macros pour r\'ealiser des bo\^\i tes dont le fond est
un d\'egrad\'e de couleurs.

\subtitle*{D\'eclarations}

\function*{$\backslash$rouge(=int ) }
contient la valeur de la composante rouge.

\function*{$\backslash$vert(=int ) }
contient la valeur de la composante vert.

\function*{$\backslash$bleu(=int ) }
contient la valeur de la composante bleu.

\function*{$\backslash$increrouge(=long ) }
contient la valeur de l'incr\'ement du rouge.

\function*{$\backslash$increvert(=long ) }
contient la valeur de l'incr\'ement du vert.

\function*{$\backslash$increbleu(=long ) }
contient la valeur de l'incr\'ement du bleu.

\function*{$\backslash$modulo(=long ) }
valeur du nombre de lettres dans la m\^eme couleur.

\function*{$\backslash$maxrouge(=int ) }
contient la valeur de la composante rouge maximale.

\function*{$\backslash$maxvert(=int ) }
contient la valeur de la composante verte maximale.

\function*{$\backslash$maxbleu(=int ) }
contient la valeur de la composante bleue maximale.

\subtitle*{Primitives d'initialisation des couleurs}

\function*{$\backslash$initcolor(\{rouge\}\{vert\}\{bleu\} , \{maxrouge\}\{maxvert\}\{maxbleu\}\{modulo\} ) }
Proc\'edure d'initialisation des couleurs, des couleurs maximales et du
param\`etre \ggf modulo\gdf permettant de sp\'ecifier le nombre de
caract\`eres devant \^etre imprim\'es dans la m\^eme couleur.

\function*{$\backslash$initinc(\{rouge\}\{vert\}\{bleu\} ) }
Proc\'edure d'initialisation de chaque couleur par des valeurs de
type \verb+int+.

\subtitle*{Couleur sur les cha\^\i nes}

\function*{$\backslash$fboxcolor(\{texte\}\{rouge\}\{vert\}\{bleu\} ) }
Boite dont le contour est trac\'e en couleur. La macro est inspir\'ee de
la macro \LaTeX\ \verb[\fbox[ et elle utilise les variables \verb[\fboxrule[
et \verb[\fboxsep[. Elle ne peut s'utiliser que sous \LaTeX .

\function*{$\backslash$boxcolor(\{texte\}\{rouge\}\{vert\}\{bleu\} ) }
Boite dont le contenu est en couleur. Cette macro est inspir\'ee de la macro
\LaTeX\ \verb[\fbox[ et elle utilise les variables
\LaTeX\ \verb[\fboxrule[ et \verb[\fboxsep[. De plus, on utilise une
nouvelle bo\^\i te \verb[\@myboxb[ et une nouvelle dimension \verb[\@mydimb[
afin d'\'eviter certains conflits de variables si l'on effectue un
\verb[\fbox{}[ de la bo\^\i te en couleur.

\function*{$\backslash$underlinecolor(\{texte\}\{rouge\}\{vert\}\{bleu\} ) }
Le texte \verb[texte[ est soulign\'e en couleur.

\function*{$\backslash$dentdescie(\{texte\} ) }
Cette proc\'edure prend une cha\^\i ne de caract\`eres et imprime les \ggf
mo\-du\-lo\gdf premiers caract\`eres dans la couleur sp\'ecifi\'ee par les
trois compo\-santes rouge, vert, bleu d\'efinies au moyen de la primitive
\hbox{\verb[\initcolor[ ;} puis d\'ecr\'emente chaque composante d'une valeur
sp\'ecifi\'ee au moyen de la primitive \verb[\initinc[ et imprime encore
\ggf mo\-du\-lo\gdf caract\`eres dans cette nouvelle couleur jusqu'\`a ce
que \ggf modulo\gdf atteigne une valeur maximale. Dans ce cas, on
recommence l'affichage des \ggf mo\-du\-lo\gdf pre\-miers caract\`eres
sui\-vants \`a partir de la couleur initiale sp\'e\-ci\-fi\'ee par les trois
premiers param\`etres de la primitive \verb[\initcolor[.

\function*{$\backslash$echelon(\{texte\} ) }
Cette proc\'edure prend une cha\^\i ne de caract\`eres et imprime les
\ggf mo\-du\-lo\gdf premiers caract\`eres dans la couleur sp\'ecifi\'ee
par les trois compo\-santes rouge, vert, bleu d\'efinies au moyen de la
primitive \hbox{\verb+\initcolor+ ;} puis incr\'emente chaque composante d'une
valeur d\'efinie au moyen de la primitive \verb+\initinc+ et imprime
encore \ggf modulo\gdf ca\-rac\-t\`e\-res dans cette nouvelle couleur jusqu'\`a
ce que \ggf modulo\gdf atteigne une borne max. Dans ce cas, on recommence
l'affichage des \ggf modulo\gdf ca\-rac\-t\`e\-res suivants en d\'ecr\'ementant
les couleurs jusqu'aux valeurs initiales qui sont sauvegard\'ees dans les
variables \verb+\sauvxxx+. La varia\-ble globale \verb+\sens+
initialis\'ee \`a 1 d\'etermine un \'eclaircissement progressif des
couleurs alors que \verb+\sens+ = 0 d\'etermine un noircissement
progressif des couleurs.

\function*{$\backslash$degrade(\{texte\} ) }
Cette macro prend une cha\^\i ne de caract\`eres puis r\'epartit
uniform\'ement les gammes de couleurs d\'efinies par la primitive
\verb+\initcolor+ sur l'ensemble de la cha\^\i ne.

\function*{$\backslash$longueur([texte] ) }
Cette macro calcule la longueur d'une cha\^\i ne de caract\`eres. Le
r\'esultat est rang\'e dans la variable globale \verb+\lg+. Le
param\`etre doit \^etre entre crochets.

\subtitle*{Comment cr\'eer des effets sp\'eciaux ?}

Voici des macros qui effectue des d\'egrad\'es concentriques sur des
cercles ou lin\'eaires sur des bo\^\i tes.  L'utilisateur peut placer du texte
(\'eventuellement en couleur) au milieu des cercles ou des bo\^\i tes et
passer des bo\^\i tes \TeX\ comme param\`etres aux proc\'edures.

\function*{$\backslash$CercleCouleur( \{texte\}\{max\}\{min\}\{couleur\}\{nb-nuances\} ) }
Macro qui trace des cercles degrad\'es sous le texte \ggf texte\gdf
en commen\c cant par un grand cercle de couleur \ggf max\gdf jusqu'au
petit cercle de couleur \ggf min\gdf en tracant \ggf nb-nuances\gdf
nuances de couleur \ggf couleur\gdf . Si le param\`etre de la couleur
vaut 1 on effectue un d\'egrad\'e en rouge, si le param\`etre de la couleur
vaut 2 on effectue un d\'egrad\'e en vert,  si le param\`etre de la couleur
vaut 3 on effectue un d\'egrad\'e en bleu. Remarquer que \ggf
nb-nuances\gdf doit \^etre > 0 pour \'eviter des divisions par 0 !

\function*{$\backslash$CercleGeneral( \{texte\}\{rouge\}\{vert\}\{bleu\} ,
\{maxrouge\}\{maxvert\}\{maxbleu\}\{nb-nuances\} ) }
Cette macro trace des cercles degrad\'es sous le texte \ggf texte\gdf en
commencant par un grand cercle de couleur \ggf (rouge, vert, bleu)\gdf
jusqu'au petit cercle de couleur \ggf (maxrouge, maxvert, maxbleu)\gdf en
tracant \ggf nb-nuances\gdf nuances de couleur. Cette macro est une
g\'en\'eralisation de la pr\'ec\'edente que l'on conserve pour raison
historique.  De plus, l'utilisateur peut sp\'ecifier un d\'ecalage pour le centre du
cercle au moyen des variables \verb+\xtrans+ et \verb+ytrans+. On peut alors
obtenir l'effet d'une boule d\'egrad\'ee (cf exemples).
Remarquer que \ggf nb-nuances\gdf doit \^etre > 0 pour
\'eviter des divisions par 0 !

\function*{$\backslash$RectangleDegrade( \{texte\}\{rouge\}\{vert\}\{bleu\} ,
\{maxrouge\}\{maxvert\}\{maxbleu\}\{nb-nuances\} ) }
Cette macro trace des rectangles d\'egrad\'es sous le texte \ggf texte\gdf
en commencant par un rectangle de couleur \ggf (rouge, vert, bleu)\gdf
jus\-qu'au rectangle de couleur \ggf (maxrouge, maxvert, maxbleu)\gdf en
tracant \ggf nb-nuances\gdf rectangles de couleur differentes. Pour
choisir le sens du d\'e\-gra\-d\'e (de gauche \`a droite ou de haut en bas),
vous utiliserez un bool\'een repr\'esent\'e en \TeX\ par
\verb+\ifhorizontal+. Si vous souhaitez un d\'egrad\'e de couleurs
dispos\'ees de haut en bas, vous \'ecrirez \verb+\horizontaltrue+ ; si
vous souhaitez une disposition de cou\-leurs de la gauche vers la droite,
vous \'ecrirez \verb+\horizontalfalse+ avant l'appel \`a
\verb+\RectangleDegrade+.  Remarquer que \ggf nb-nuances\gdf doit \^etre >
0 pour \'eviter des divisions par 0 !

\subtitle*{Comment d\'essiner des courbes dans l'environnement
\ggf picture\gdf ?}

\function*{$\backslash$bezierps( \ liste $\backslash$endbezierps ,
\{wd\}\{dash1\}\{dash2\}\{red\}\{green\}\{blue\} ) }
Cette macro trace une courbe de bezier en couleur avec les points du
param\`etre \verb+liste+  qui est un tableau de tableaux au sens PostScript.
Le param\`etre \verb+wd+ contient la largueur des traits.
Lorsque l'on veut tracer des courbes pointill\'ees, il faut
positionner le bool\'een \verb+\ifdashps+ \`a vrai (\verb+\dashpstrue+)
et \`a ce moment \verb+dash1+ sp\'ecifie la forme des pointill\'es (voir
la commande Postscript \verb+setdash+) et \verb+dash2+ d\'efinit le
d\'eplacement (\`a partir du d\'ebut du trait) apr\`es lequel
d\'ebutera le trac\'e. Si on a positionn\'ee \verb+\dashpsfalse+ alors
la courbe est continue. Attention ; les unit\'es sont des millim\`etres
et il faut un blanc avant \verb+\endbezierps+. Enfin,
l'ordre des parametr\`es est :

\verb+\bezierps [ [ x0 y0 x1 y1 x2 y2 x3 y3 ]...] +\\
\quad\quad\quad\verb+\endbezierps {}{}{}{}{}+

avec les points $x_0,y_0,x_1,y_1$ d\'efinissant la premi\`ere tangente \`a
la courbe et les points $x_2,y_2,x_3,y_3$ d\'efinissant la deuxi\`eme
tangente \`a la courbe.

\function*{$\backslash$CercleHachure( \{rayon\}\{wdrayon\}\{wd\}
\{angle\}\{r\}\{g\}\{b\}\{space\} ) }
Cette macro trace un cercle de rayon \verb+rayon+ mm et d'\'epaisseur
\verb+wdrayon+ mm, puis remplit ce cercle avec des hachures de largueur =
\verb+wd+ mm inclin\'ees de \verb+angle+ degr\`es. La couleur est
specifi\'ee par les param\`etres r, g, b. Le param\`etre \verb+space+
donne l'espacement entre les hachures. Les angles doivent \^etre
compris entre 0 et 180 degr\`es.

\function*{$\backslash$CarreHachure( \{ht\}\{wd1\}\{wd2\}
\{angle\}\{r\}\{g\}\{b\}\{space\} ) }
Cette macro trace un carr\'e de hauteur \verb+2*ht+ mm et d'\'epaisseur
\verb+wd1+ mm, puis remplit ce cercle avec des hachures de largueur =
\verb+wd2+ mm inclin\'ees de \verb+angle+ degr\`es. La couleur est
specifi\'ee par les param\`etres r, g, b. Le param\`etre \verb+space+
donne l'espacement entre les hachures. Les angles doivent \^etre
compris entre 0 et 180 degr\`es.

\function*{$\backslash$RotObj( \{angle\}\{texte\} ) }
Pour mettre du texte en rotation ou tout autre chose, programmer avec la
macro \verb+\RotObj+. Le point \`a partir duquel la rotation se fait
peut varier suivant l'appel \`a certaines macros : par d\'efaut ce point
est fix\'e au premier caract\`ere du texte. Par exemple, l'appel
\verb+\mc+ possitionne ce point au milieu de la cha\^\i ne, l'appel
\verb+\fc+ \`a la fin, et l'appel \verb+\dc+ au d\'ebut. Il y a seulement
cr\'eation d'une boite de largeur nulle, donc il n'y a pas de place de
r\'eserv\'ee pour l'objet. Voici un exemple de \hbox{programmation :}\\
\verb+\mc\RotObj{45}{\Huge\bf Exemple}+.

\function*{$\backslash$CourbeRempliee( \ liste $\backslash$endcourbe ,
\{wd\}\{dash1\}\{dash2\}\{red\}\{green\}\{blue\} ) }
Trace une courbe ferm\'ee au moyen de courbes de Bezier avec les points
du param\`etre \verb+liste+ qui est un tableau de tableaux. Le param\`etre
\verb+\wd+ contient la largueur des traits du contour.  Lorsque l'on veut
tracer des courbes pointill\'ees, il faut positionner le bool\'een
\verb+\ifdashps+ \`a vrai (\verb+\dashpstrue+) et \`a ce moment
\verb+dash1+ sp\'ecifie la forme des pointill\'es (voir la commande
Postscript \verb+setdash+) et \verb+dash2+ d\'efinit le d\'eplacement (\`a
partir du d\'ebut du trait) apr\`es lequel d\'ebutera le trac\'e. Si on a
positionn\'ee \verb+\dashpsfalse+ alors la courbe est continue. (cf
fonction \verb+\bezierps+). Attention, les unit\'es sont des millimetres et
il faut un blanc avant \verb+\endcourbe+. L'ordre des param\`etres est le
m\^eme que celui de la fonction \verb+\bezierps+. Le remplissage est
effectu\'e avec les couleurs sp\'ecifi\'ees par les trois derniers
param\`etres. Le contour est trac\'e dans la couleur actuelle d\'efinie par
les composantes \verb+\rouge, \vert, \bleu+. Le contour est ferm\'e si le
bool\'ean \verb+\ifclosepath+ est positionn\'e \`a vrai
(\verb+\closepathtrue+). Enfin, tous les points sont en positions relatives
par rapport \`a $x_0,y_0$ contrairement aux points d\'efinissant les
tangentes dans la macro \verb+\bezierps+ et il faut respecter les blancs
convenablement :

\verb+\CourbeRempliee [ [ x0 y0 x1 y1 x2 y2 x3 y3 ]...] +\\
\quad\quad\quad\verb+\endcourbe{}{}{}{}{}+

\function*{$\backslash$TraceTexte( \{texte\}\{$x_0$\}\{$y_0$\}\{$x_1$\}\{$y_1$\}\{$x_2$\}\{$y_2$\}\{$x_3$\}\{$y_3$\} ) }
Cette macro r\'epartit pas \`a pas chaque caract\`ere de la cha\^\i ne
\verb+texte+ le long de la courbe sp\'ecifi\'ee par les 4 points
$x_0,y_0,x_1,y_1,x_2,y_2,x_3,y_3$ (cf macro \verb+bezierps+). La formule
math\'ematique de la courbe de Bezier est d\'eriv\'ee de la paire
d'\'equation cubique param\'etrique de param\`etre $t\, (0\leq t\leq 1)$
suivante\ :

\setbox2=\hbox{\it coordonn\'ees en x}
\setbox3=\hbox{\it coordonn\'ees en y}

$$
\begin{array}{ccl}
x(t) & = & a_{x}t^{3} + b_{x}t^{2} + c_{x}t + x_{0}\quad\quad\box2\nonumber\\
y(t) & = & a_{y}t^{3} + b_{y}t^{2} + c_{y}t + y_{0}\quad\quad\box3\nonumber
\end{array}
$$

Les points de contr\^ole sont d\'efinis par :

$$
\begin{array}{ll}
x_1=x_0+c_x/3 & y_1=y_0+c_y/3\nonumber\\
x_2=x_1+(c_x+b_x)/3 & y_2=y_1+(c_y+b_y)/3\nonumber\\
x_3=x_0+c_x+b_x+a_x & y_3=y_0+c_y+b_y+a_y\nonumber
\end{array}
$$

Pour chaque lettre \`a positionner, les diff\'erentes valeurs du
param\`etre $t$ sont fonction de la largeur des caract\`eres et de la
tantente \`a la courbe. Par exemple, supposons que l'on cherche \`a
positionner le caract\`ere \verb+c+ de la figure \ref{fd:one} page
\pageref{fd:one}. On connait la valeur $t'$ et les coordonn\'ees $(x',y')$
du point sur la courbe, obtenu au moyen des \'equations param\'etriques,
qui nous ont servi \`a positionner le carac\`ere \verb+a+. Pour calculer
la tangente, nous cherchons la valeur de $t''$ correspondant \`a un
d\'eplacement le long de la courbe \'egal \`a la longueur du caract\`ere
\verb+c+. Soit $(x'',y'')$ les coordon\'ees du point sur la courbe
associ\'e \`a $t''$. On pose\ :

\begin{equation}
tan (\alpha)=\frac{y' - y''}{x' - x''}\nonumber
\end{equation}

Le caract\`ere est positionn\'e \`a partir de $(x',y')$ en le faisant
pivot\'e de l'angle $\alpha$. On continue ce m\^eme traitement avec le
prochain caract\`ere de la cha\^\i ne \`a partir du point $(x'',y'')$. Les
conditions initiales sont : le premier caract\`ere \`a positionner est le
premier caract\`ere de la cha\^\i ne, $t=0$, l'angle est d\'etermin\'e au
moyen du proc\'ed\'e d\'ecrit plus haut et ne correspond pas \`a la
tangente d\'efinie par les points $x_0,y_0,x_1,y1$ qui est la tangente au
point $x_0,y_0$ (un caract\`ere a une largeur non nulle).

La variable \verb+\BlancInterLettre+ vous permet de rajouter de l'espace
entre les caract\`eres. Par d\'efaut, sa valeur est fix\'ee \`a 1mm (on
rappelle que l'unit\'e de tous les param\`etres num\'eriques doit \^etre
le mm).

L'implantation est r\'ealis\'ee en \TeX\ pour ce qui est de l'application
r\'ecursive des calculs et de l'obtention de la largeur des caract\`eres.
Les calculs num\'eriques sont implant\'es, quant \`a eux, en PostScript.
L'utilisation successive, dans le corps de la macro, de plusieurs ordres
\verb+\special+ pour ins\'erer du code PostScript n\'ecessite des
traitements particuliers car l'implantation du \verb+\special+ introduit
des ordres de positionnement, en plus du code PostScript que l'on souhaite
ins\'er\'e, qui perturbent le bon fonctionnement. La macro a donc \'et\'e
test\'ee et ne fonctionne pour l'instant qu'avec le translateur
\verb+dvips 5.4+. De petits ajustements de ces macros sont n\'ecessaires pour
des versions ant\'erieures.

\function*{$\backslash$ColleTexte( \{texte\}\{$x_0$\}\{$y_0$\}\{$x_1$\}\{$y_1$\}\{$x_2$\}\{$y_2$\}\{$x_3$\}\{$y_3$\} ) }
Cette macro r\'epartit la cha\^\i ne \verb+texte+ le long de la {\bf
totalit\'e} de la courbe de Bezier sp\'ecifi\'ee par les points
$x_0,y_0,x_1,y_1,x_2,y_2,x_3,y_3$. Le calcul des diff\'erentes valeurs du
param\`etre $t$ est plus facile que dans le cas de la macro
\verb+TraceTexte+ : la nouvelle valeur du param\`etre est obtenue en
augmentant la derni\`ere valeur du param\`etre de la quantit\'e
$\displaystyle\frac{1}{\mid texte - 1\mid}$ (attention : une croissance
lin\'eaire de $t$ n'entraine pas n\'ecessairement un espacement identique
entre chaque caract\`ere du fait de l'\'equation cubique param\'etrique
utilis\'ee). Un exemple est pr\'esent\'e \`a la figure \ref{fd:one} page
\pageref{fd:one}.

\subtitle*{Quelques macros de confort}

Afin de faciliter la manipulation de textes, de graphiques en couleur
nous proposons quelques raccourcis.

\function*{$\backslash$icone(~ ) }
Equivalent \`a un \verb+\item+ et place sur la feuille un point en bleu.

\function*{$\backslash$ictwo(~ ) }
Equivalent \`a un \verb+\item+ et place sur la feuille un diamand en bleu.

\function*{$\backslash$bcrouge(~ ) }
Remplace la couleur courante par la couleur rouge.

\function*{$\backslash$bcbleu(~ ) }
Remplace la couleur courante par la couleur bleue.

\function*{$\backslash$bcjaune(~ ) }
Remplace la couleur courante par la couleur jaune.

\function*{$\backslash$bcvert(~ ) }
Remplace la couleur courante par la couleur vert.

\function*{$\backslash$bcmauve(~ ) }
Remplace la couleur courante par la couleur mauve.

\function*{$\backslash$bcmagenta(~ ) }
Remplace la couleur courante par la couleur magenta.

\function*{$\backslash$bcorange(~ ) }
Remplace la couleur courante par la couleur orange.

\function*{$\backslash$bcvj(~ ) }
Remplace la couleur courante par la couleur vert-jaune.

\function*{$\backslash$bcblanc(~ ) }
Remplace la couleur courante par la couleur blanche.

\function*{$\backslash$ec(~ ) }
Substitue la couleur sauvegard\'ee \`a la couleur courante.

Pour changer de couleur, vous disposez \'egalement de
macros qui portent les noms des primitives qui permettent de
sp\'ecifier une couleur
sous l'environement X11 : \verb+\MediumAquamarine+, \verb+coral+,
\verb+\DarkOliveGreen+, \verb+MediumOrchid+ \ldots Reportez-vous au
fichier \verb+colorrgb.tex+ pour obtenir toutes les red\'efinitions.

\subtitle*{Mod\`ele CMYK}

Dans le mod\`ele Cyan-Magenta-Yellow-Black (CMYK), les primitives
d'initialisation des couleurs, de couleur sur les cha\^{\i}nes
n\'ecessitent un param\`etre suppl\'ementaire. Par exemple~:

\verb+\underlinecolor{texte}{rouge}{vert}{bleu}+ est remplac\'e par\\
\verb+\underlinecolor{texte}{cyan}{magenta}{yellow}{black}+.

Pour toute information compl\'ementaire concernant l'utilisation des macros
dans ce mod\`ele, le lecteur est pri\'e de se reporter aux sources des
macros (fichier {\tt colorcmyk.tex}).

\chapter*{Exemples d'utilisation dans le mod\`ele RGB}

Pour mettre en couleur le mot \ggf bonjour\gdf dans cette phrase,
il suffit de baliser le mot par \verb+\begincolor{255}{0}{0}+ (ou
\verb+\bcrouge+) et \verb+\endcolor+ (ou \verb+\ec+) pour obtenir
\begincolor{255}{0}{0} bonjour \endcolor. De la m\^eme fa\c con, on peut
baliser des traits, des fl\^eches de l'environnement \verb+\picture+

Par exemple, le trait qui suit est cod\'e de la mani\`ere suivante~:

\begin{verbatim}
\bcbleu %un trait bleu de longueur 8cm
\hrule height 2pt width 8cm %et d'epaisseur 2pt
\ec
\end{verbatim}

{\bcbleu %un trait bleu de longueur 8cm
\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92
%et d'epaisseur 2pt
\ec}

Voici un exemple d'utilisation de la macros \verb+\echelon+ avec
initialisation des couleurs et des incr\'ements de chaque couleur. Les
couleurs sont initialis\'ees avec la valeur 20 et on d\'esire qu'elles
croissent jusqu'\`a la valeur 210 par saut de 40 entre chaque caract\`eres
(modulo = 1).

\begin{verbatim}
{% debut de groupe
\Huge\bf
% rouge=bleu=vert=20
% maxrouge=maxvert=maxbleu=210
% chaque caractere change de couleur
\initcolor{20}{20}{20}{210}{210}{210}{1}
% increrouge=increvert=increbleu=40
\initinc{40}{40}{40}
\echelon{la\ fonction\ echelon}
}% fin du groupe
\end{verbatim}

{% debut de groupe
\Huge\bf
% rouge=bleu=vert=20
% maxrouge=maxvert=maxbleu=210
% chaque caractere change de couleur
\initcolor{20}{20}{20}{210}{210}{210}{1}
% increrouge=increvert=increbleu=40
\initinc{40}{40}{40}
\echelon{la\ fonction\ echelon}
}% fin du groupe

\vskip 1cm

\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92

\vskip 1cm

Pour construire des bo\^\i tes dont le fond est en couleur, et le texte
sur deux colonnes dans une autre couleur, nous programmons~:

\begin{verbatim}
\setbox2=\vbox{\hsize=0.485\textwidth
Dans un article r\'ecent \cite{cc}, nous pr\'esentions
les avantages d'utilisation de la couleur dans le
traitement de texte \TeX\  au travers de deux jeux
de macros~: Color\TeX rgb et color\TeX cmyk fonctionnant
pour les imprimantes couleur PostScript des constructeurs
QMS, Oc\'e, Hitachi, Sei\-ko.

identifi\'es suivants~: action sur une entit\'e
syntaxique (lettre, mot, phrase, paragraphe) ; et action
sur une entit\'e graphique~: vecteur ou fl\`eche de
l'environnement {\bf picture} de \LaTeX .
\par
}% fin de la bo\^\i te numero 2
% on annule le blanc interbo\^\i te
\splittopskip=0pt
% on coupe la bo\^\i te 2 en deux selon la hauteur
% et on range dans la bo\^\i te 1
\setbox1=\vsplit2 to 0.5\ht2%
\setbox1=\vbox{\unvbox1}%
% on pose sur la feuille les deux bo\^\i tes
\hbox{\boxcolor{\box1}{200}{255}{255}\quad\vrule\quad
      \boxcolor{\box2}{50}{255}{255}}
\end{verbatim}

On remarque que le texte est coll\'e sur le bord de la bo\^\i te en
\hbox{couleur ;} pour ajouter du blanc, il faut utiliser la variable \LaTeX\
\verb+\fboxsep+.

\setbox2=\vbox{\hsize=0.485\textwidth
Dans un article r\'ecent \cite{cc}, nous pr\'e\-sen\-tions les avantages
d'utilisation de la cou\-leur dans le traitement de texte
\TeX\  au travers de deux jeux de macros~: Color\TeX rgb et color\TeX cmyk
fonctionnant pour les im\-pri\-man\-tes couleur PostScript des constructeurs
QMS, Oc\'e, Hitachi, Seiko.

Dans cet article, nous discutions de la cou\-leur en g\'en\'eral, comment
la sp\'ecifier, la re\-pr\'e\-sen\-ter, puis, nous d\'egagions des
clas\-ses de pro\-bl\`e\-mes qui appellent des classes de solutions
communes, des algorithmes communs. Cela nous conduisait \`a proposer un
ensemble minimal de primitives permettant de r\'e\-sou\-dre les probl\`emes
identifi\'es suivants~: action sur une entit\'e syn\-ta\-xique (lettre,
mot, phrase, paragraphe) ; et action sur une entit\'e gra\-phi\-que~:
vecteur ou fl\`eche de l'environnement {\bf picture} de \LaTeX .
\par
}% fin de la bo\^\i te numero 2
% on annule le blanc interbo\^\i te
\splittopskip=0pt
% on coupe la bo\^\i te 2 en deux selon la hauteur
% et on range dans la bo\^\i te 1
\setbox1=\vsplit2 to 0.5\ht2%
\setbox1=\vbox{\unvbox1}%
% on pose sur la feuille les deux bo\^\i tes
\hbox{\boxcolor{\box1}{200}{255}{255}\quad\vrule\quad
      \boxcolor{\box2}{50}{255}{255}}

\vskip 1cm

\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92

\vskip 1cm

Nous pr\'esentons maintenant le codage d'un tableau avec les pourtours en
magenta. On notera l'utilisation de la macro \verb+\halign+ avec la
s\'equence \verb+\bcmagenta\tvc#\endcolor&+ ce qui provoque un passage \`a
la couleur magenta pour tous les traits verticaux s\'eparant les colonnes.
Pour une explication d\'etaill\'ee de la s\'equence \verb+#&+ dans
l'environnement d'un \verb+\halign+, le lecteur est invit\'e \`a se
reporter \`a \cite{rs}, pages 126 et suivantes.

\begin{verbatim}
$$\vbox{\offinterlineskip
\def\cc#1{\kern .2em\hfill\raise 1.5mm%
                 \hbox{#1}\hfill\kern .2em}
\def\tvi{\vrule height 24pt depth 2pt width 0pt}
\def\tvc{\tvi\vrule width 1mm}
\halign{\bcmagenta\tvc#\endcolor&%
&\cc{$\displaystyle#$}&\bcmagenta\tvc#\endcolor\cr
\noalign{\bcmagenta\hrule height 1mm\endcolor}
&\omit\cc{\bf Fonction}&&\omit\cc{\bf Primitive}&\cr
\noalign{\bcmagenta\hrule height 1mm\endcolor}
     height 34pt depth 30pt&{ 1 \over 1 + x^2 }&&{\rm
         Arctg}\,(x)+C&\cr
\noalign{\bcmagenta\hrule height 1mm\endcolor}
}}$$
\end{verbatim}

$$\vbox{\offinterlineskip
\def\cc#1{\kern .2em\hfill\raise 1.5mm%
                 \hbox{#1}\hfill\kern .2em}%
\def\tvi{\vrule height 24pt depth 2pt width 0pt}%
\def\tvc{\tvi\vrule width 1mm}%
\halign{\bcmagenta\tvc#\endcolor&%
&\cc{$\displaystyle#$}&\bcmagenta\tvc#\endcolor\cr%
\noalign{\bcmagenta\hrule height 1mm\endcolor}%
&\omit\cc{\bf Fonction}&&\omit\cc{\bf Primitive}&\cr%
\noalign{\bcmagenta\hrule height 1mm\endcolor}height 34pt depth 30pt
&1\over 1+{x^2} &&{\rm Arctg}\,(x)+C&\cr%
\noalign{\bcmagenta\hrule height 1mm\endcolor}%
}}$$

\vskip 1cm

\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92

\vskip 1cm

Pour coder une bo\^\i te en couleur avec un cadre dans une autre \hbox{couleur
:}

\begin{verbatim}
{\Large
\fboxsep=0pt% on initialise le blanc
\fboxrule=3pt% la dimension du cadre est de 3pt
\fboxcolor{\fboxsep=8pt\fboxrule=0pt
    \boxcolor{du texte en noir}%
            {255}{255}{0}}{255}{0}{0}
}
\end{verbatim}

{\Large
\fboxsep=0pt% on initialise le blanc
\fboxrule=3pt% la dimension du cadre est de 3pt
\fboxcolor{\fboxsep=8pt\fboxrule=0pt\boxcolor{du texte en noir}{255}{255}{0}}%
          {255}{0}{0}
}


\vskip 1cm

\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92

\vskip 1cm

Pour tracer un cercle avec des d\'egrad\'es concentriques qui partent de
la couleur rouge jusqu'au noir en d\'ecalant le centre (effet boule
d\'egrad\'ee), on programme\ :

\setbox100=\vbox{\Huge\bf\begincolor{255}{255}{255}
\halign{\quad#&\quad#&\quad#\cr
& LRI& \cr
LRI& LRI& LRI\cr
& LRI& \cr}
\endcolor}
% rouge=(255,0,0)  noir=(0,0,0)   nb-nuances=10
\xtrans=50pt% on decale le centre de 50pt vers la droite
\ytrans=50pt% et 50pt vers le haut
\centerline{
\CercleGeneral{\copy100}{255}{0}{0}{0}{0}{0}{10}
}

\begin{verbatim}

\setbox100=\vbox{\Huge\bf
\halign{\quad#&\quad#&\quad#\cr
\begincolor{255}{255}{255}
& LRI& \cr
LRI& LRI& LRI\cr
& LRI& \cr}
\endcolor}
\xtrans=50pt% on decale le centre de 50pt vers la droite
\ytrans=50pt% et 50pt vers le haut
\CercleGeneral{\copy100}{255}{0}{0}{0}{0}{0}{10}

\end{verbatim}

\vskip 1cm

\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92

\vskip 1cm

Pour tracer une bo\^\i te dont le contenu est d\'egrad\'e, on programme\ :

\vskip 8mm

\setbox101=\vbox{\hsize=0.68\textwidth\bf%
\begincolor{255}{255}{255}%
Dans un article r\'ecent, nous pr\'esentions
les avantages d'utilisation de la couleur dans le
traitement de texte \TeX\  au travers de deux jeux
de macros~: Color\TeX rgb et color\TeX cmyk fonctionnant
pour les impri\-man\-tes couleur PostScript des constructeurs\break
QMS, Oc\'e, Hitachi, Seiko.\endcolor
\par}
\horizontaltrue
\centerline{
\RectangleDegrade{\copy101}{255}{255}{0}{0}{0}{0}{50}
}

\begin{verbatim}
\setbox10=\vbox{\hsize=0.6\textwidth\bf
\begincolor{255}{255}{255}% texte blanc
Dans un article r\'ecent, nous pr\'esentions
les avantages d'utilisation de la couleur dans le
traitement de texte \TeX\  au travers de deux jeux
de macros~: Color\TeX rgb et color\TeX cmyk fonctionnant
pour les impri\-man\-tes couleur PostScript des constructeurs
QMS, Oc\'e, Hitachi, Seiko.

\par
}
\horizontaltrue % des degrades de haut en bas
\centerline{%
\RectangleDegrade{\copy10}{255}{255}{0}{0}{0}{0}{50}}
\end{verbatim}

\vskip 1cm

\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92

Pour tracer les courbes de bezier des figures \ref{extre} et
\ref{extretwo}, on pourra marquer avec \verb+Pictex+ ou \verb+TexCad+
les points d\'efinissant les tangentes, puis r\'ecup\'erer la
valeur de ces points sous \'editeur et programmer :

\begin{verbatim}
\begin{figure}[th]
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(74.00,61.00)
\put(0.00,0.00){\framebox(74.00,61.00)[t]{}}
\put(3.97,10.00){\vector(1,0){28.10}}
....
% debut de la premiere courbe de bezier (celle de gauche)
\put(0,0){\bezierps [ [ 2.06 36.98 6.03 39.00 10.95 39.00
 14.03 29.02][14.03 29.02 19.05 16.06 23.02 16.98 30.00 13.97]]
 \endbezierps{.4}{3}{2}{255}{0}{0}}
% fin de la premiere courbe de bezier (celle de droite)
% debut de la 2 courbe de bezier (celle de gauche)
\put(0,0){\bezierps [[33.97 39.00 37.94 39.00 40.00 37.94
42.06 34.92] [42.06 34.92 44.92 26.98 50.95 16.98 66.98 12.06]]
\endbezierps{.4}{3}{2}{255}{0}{0}}
% fin de la 2 courbe de bezier
% je place un cercle hachure
\put(6.03,38){\CercleHachure{4.5}{.5}{.1}{60}{255}{60}{255}{2}}
\put(42,35){\CarreHachure{4}{.6}{.1}{135}{255}{0}{255}{1}}
....
\put(6.03,54){\makebox(0,0)[cc]{$f(x)$}}
\put(42,54){\makebox(0,0)[cc]{$f(x)$}}
\end{picture}
\caption{{\it extremum particulier}}
\label{extre}
\end{center}
\end{figure}
\end{verbatim}

\begin{figure}[th]
\begin{center}
\unitlength=1.00mm
% \special{em:linewidth 0.4pt}
\linethickness{0.4pt}
\begin{picture}(74.00,61.00)
\put(0.00,0.00){\framebox(74.00,61.00)[t]{}}
\put(3.97,10.00){\vector(1,0){28.10}}
\put(39.05,10.00){\vector(1,0){30.00}}
\put(6.03,7.94){\vector(0,1){39.05}}
\put(42.06,7.94){\vector(0,1){39.05}}
\put(9.05,43.97){\makebox(0,0)[lc]{$A(0,a)$}}
% debut de la premiere courbe de bezier (celle de gauche)
\put(0,0){\bezierps [ [ 2.06 36.98 6.03 39.00 10.95 39.00
 		14.03 29.02 ] [ 14.03 29.02 19.05 16.06 23.02 16.98 30.00 13.97 ] ]
 		\endbezierps{.4}{3}{2}{255}{0}{0}}
%\put(2.06,36.98){\makebox(0,0)[cc]{1}}
%\put(6.03,40.00){\makebox(0,0)[cc]{2}}
%\put(10.95,40.00){\makebox(0,0)[cc]{3}}
%\put(16.03,33.02){\makebox(0,0)[cc]{4}}
%\put(16.03,33.02){\makebox(0,0)[cc]{5}}
%\put(19.05,22.06){\makebox(0,0)[cc]{6}}
%\put(23.02,16.98){\makebox(0,0)[cc]{7}}
%\put(30.00,13.97){\makebox(0,0)[cc]{8}}
% fin de la premiere courbe de bezier (celle de gauche)
% debut de la 2 courbe de bezier (celle de gauche)
\put(0,0){\bezierps [ [ 33.97 39.00 37.94 39.00 40.00 37.94
		42.06 34.92 ] [ 42.06 34.92 44.92 26.98 50.95 16.98 66.98 12.06 ] ]
		\endbezierps{.4}{3}{2}{255}{0}{0}}
%\put(33.97,40.00){\makebox(0,0)[cc]{1}}
%\put(37.94,39.05){\makebox(0,0)[cc]{2}}
%\put(40.00,37.94){\makebox(0,0)[cc]{3}}
%\put(42.06,34.92){\makebox(0,0)[cc]{4}}
%\put(42.06,34.92){\makebox(0,0)[cc]{5}}
%\put(44.92,26.98){\makebox(0,0)[cc]{6}}
%\put(50.95,16.98){\makebox(0,0)[cc]{7}}
%\put(66.98,12.06){\makebox(0,0)[cc]{8}}
% fin de la 2 courbe de bezier (celle de gauche)
\put(42.06,34.92){\circle*{1.90}}
% je place un cercle hachure
\put(6.03,38){\CercleHachure{4.5}{.5}{.1}{60}{255}{60}{255}{2}}
\put(42,35){\CarreHachure{6}{.6}{.1}{135}{255}{0}{255}{1}}
\put(8.5,31){\makebox(0,0)[cc]{$V$}}
\put(6.03,38.00){\circle*{1.90}}
\put(30,6){\makebox(0,0)[cc]{$x$}}
\put(61,6){\makebox(0,0)[cc]{$x$}}
\put(6.03,54){\makebox(0,0)[cc]{$f(x)$}}
\put(42,54){\makebox(0,0)[cc]{$f(x)$}}
\end{picture}
\caption{{\it extremum particulier}}
\label{extre}
\end{center}
\end{figure}

\begin{verbatim}
\begin{figure}[th]
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(74.00,61.00)
\put(0.00,0.00){\framebox(74.00,61.00)[t]{}}
....
% debut de la courbe de bezier
\put(0,0){\bezierps [
[ 16.03 14.92 20.00 16.03 26.98 39.05 33.97 43.02 ]
[ 33.97 43.02 42.06 40.95 43.97 20.95 47.94 19.05 ]
[ 47.94 19.05 52.06 20.95 54.92 49.05 56.98 52.06 ]
[ 56.98 52.60 60.00 49.05 62.06 32.06 64.92 17.94 ]
] \endbezierps{.4}{2}{.5}{255}{0}{0}}
....
\end{picture}
\caption{{\it extremums locaux et globaux}}
\label{extretwo}
\end{center}
\end{figure}
\end{verbatim}

\begin{figure}[th]
\begin{center}
\unitlength=1.00mm
% \special{em:linewidth 0.4pt}
\linethickness{0.4pt}
\begin{picture}(74.00,61.00)
\put(0.00,0.00){\framebox(74.00,61.00)[t]{}}
\put(10.00,10.95){\vector(1,0){54.92}}
\put(12.06,7.94){\vector(0,1){48.10}}
\put(68.00,4.92){\makebox(0,0)[cc]{$x$}}
% debut de la premiere courbe de bezier (celle de gauche)
\put(0,0){\bezierps [
	[ 16.03 14.92 20.00 16.03 26.98 39.05 33.97 43.02 ]
	[ 33.97 43.02 42.06 40.95 43.97 20.95 47.94 19.05 ]
	[ 47.94 19.05 52.06 20.95 54.92 49.05 56.98 52.06 ]
	[ 56.98 52.60 60.00 49.05 62.06 32.06 64.92 17.94 ]
] \endbezierps{.4}{2}{.5}{255}{0}{0}}
% \put(16.03,14.92){\makebox(0,0)[cc]{1}}
%\put(20.00,16.03){\makebox(0,0)[cc]{2}}
%\put(26.98,39.05){\makebox(0,0)[cc]{3}}
%\put(33.97,43.02){\makebox(0,0)[cc]{4}}
%\put(33.97,43.02){\makebox(0,0)[cc]{5}}
%\put(42.06,40.95){\makebox(0,0)[cc]{6}}
%\put(43.97,20.95){\makebox(0,0)[cc]{7}}
%\put(47.94,19.05){\makebox(0,0)[cc]{8}}
%\put(47.94,19.05){\makebox(0,0)[cc]{9}}
%\put(52.06,20.95){\makebox(0,0)[cc]{10}}
%\put(54.92,49.05){\makebox(0,0)[cc]{11}}
%\put(56.98,52.06){\makebox(0,0)[cc]{12}}
%\put(56.98,52.06){\makebox(0,0)[cc]{13}}
%\put(60.00,49.05){\makebox(0,0)[cc]{14}}
%\put(62.06,32.06){\makebox(0,0)[cb]{15}}
%\put(64.92,17.94){\makebox(0,0)[cc]{16}}
\put(20.00,10.06){\line(0,1){12.04}}
\put(30.00,10.06){\line(0,1){31.04}}
\put(40.00,10.06){\line(0,1){30.04}}
\put(50.00,12.06){\line(0,-1){2.04}}
\put(60.00,12.06){\line(0,-1){2.04}}
\put(10.95,52.06){\line(1,0){2.14}}
\put(10.95,43.02){\line(1,0){25.14}}
\put(10.95,39.02){\line(1,0){21.14}}
\put(10.95,20.02){\line(1,0){12.00}}
\put(20.00,4.92){\makebox(0,0)[cc]{$a$}}
\put(30.00,4.92){\makebox(0,0)[cc]{$b$}}
\put(40.00,4.92){\makebox(0,0)[cc]{$c$}}
\put(50.00,4.92){\makebox(0,0)[cc]{$d$}}
\put(20.00,10.95){\makebox(0,0)[cc]{\bf [}}
\put(40.00,10.95){\makebox(0,0)[cc]{\bf ]}}
%\put(6.03,51.06){\makebox(0,0)[cc]{$max$}}
\put(6.03,56.03){\makebox(0,0)[cc]{$f(x)$}}
\put(6.03,38.52){\makebox(0,0)[cc]{$f(b)$}}
\put(6.1,43.02){\makebox(0,0)[cc]{$M$}}
\end{picture}
\caption{{\it extremums locaux et globaux}}
\label{extretwo}
\end{center}
\end{figure}

\vskip 1cm

\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92

Pour tracer des objets quelconques au moyen de courbes de Bezier dont le
fond est en couleur, nous programmons :

\begin{verbatim}
\begin{figure}
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(124,100)
\put(0,0){\framebox(124,100)[cc]{}}
\put(20,80){\makebox(0,0)[cc]{\Large\bf\LaTeX}}
\put(97,5){\makebox(0,0)[cc]{\small
          $\copyright - lri - 1991$}}
% Definition de la couleur du contour.
% Le trait est en pointille.
\rouge=255\vert=0\bleu=255\dashpstrue
\put(0.00,0.00){\CourbeFermee [
[ 20 10 10 50 25 75 50 80 ]
[ 50 80 25 55  20 10 0 0 ]
] \endcourbe{1}{1}{1}{255}{0}{0}}
% Le contour n'est plus en pointille
\dashpsfalse\closepathfalse
\rouge=0\vert=0\bleu=255
\put(0.00,0.00){\CourbeFermee
   [ [ 70 10 5 90 30 75 40 40 ]
] \endcourbe{1}{1}{1}{255}{255}{0}}
\end{picture}
\caption{{\it Des courbes remplies}}
\label{f:remplie}
\end{center}
\end{figure}
\end{verbatim}

qui produit le r\'esultat de la figure \ref{f:remplie}

\begin{figure}
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(124,100)
\put(0,0){\framebox(124,100)[cc]{}}
\put(20,80){\makebox(0,0)[cc]{\Large\bf\LaTeX}}
\put(97,5){\makebox(0,0)[cc]{\small $\copyright - lri - 1991$}}
% Definition de la couleur du contour.
% Le trait est en pointille.
\rouge=255\vert=0\bleu=255\dashpstrue
\put(0.00,0.00){\CourbeFermee [
[ 20 10 10 50 25 75 50 80 ]
[ 50 80 25 55  20 10 0 0 ]
] \endcourbe{1}{1}{1}{255}{0}{0}}
% Le contour n'est plus en pointille
\dashpsfalse\closepathfalse
\rouge=0\vert=0\bleu=255
\put(0.00,0.00){\CourbeFermee
   [ [ 70 10 5 90 30 75 40 40 ]
] \endcourbe{1}{1}{1}{255}{255}{0}}
\end{picture}
\caption{{\it Des courbes remplies}}
\label{f:remplie}
\end{center}
\end{figure}

\vskip 1cm

\hbox{\hbox to 92pt{\ \hfill}\hbox to 8cm{\hrulefill\ }}%92

Pour placer du texte le long de courbes de Bezier il faut programmer, par
exemple, qui produit le r\'esultat de la figure \ref{fd:one} :

\begin{verbatim}
\Huge\bf
\BlancInterLettre=1% 1 mm entre les lettres
\begin{figure}[htp]
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(95,70)
\put(0,0){\TraceTexte{TraceTexte}
      {5}{65}{15}{35}{35}{35}{90}{65}}
\put(0,0){\ColleTexte{ColleTexte}
      {5}{5}{15}{35}{15}{35}{81}{5}}
\put(0.00,0.00){\framebox(95,70)[cc]{}}
\end{picture}
\caption{{\it courbes sur un texte}}
\label{fd:one}
\end{center}
\end{figure}
\end{verbatim}

{\Huge\bf
\BlancInterLettre=1% 1 mm entre les lettres
\begin{figure}[htp]
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(95,70)
\put(0,0){\TraceTexte{TraceTexte}{5}{65}{15}{35}{35}{35}{90}{65}}
\put(0,0){\ColleTexte{ColleTexte}{5}{5}{15}{35}{15}{35}{81}{5}}
\put(0.00,0.00){\framebox(95,70)[cc]{}}
\put(19,48){\circle*{1}}
\put(23,44){\circle*{1}}
\put(18,49){\line(1,-1){7}}
\put(14,43){\line(1,0){10.5}}
\put(17,45){\makebox(0,0)[cc]{{\small $\alpha$}}}
\put(11,49){\makebox(0,0)[cc]{{\small $(x',y')$}}}
\put(18,40.5){\makebox(0,0)[cc]{{\small $(x'',y'')$}}}
\end{picture}
\caption{{\it courbes sur un texte}}
\label{fd:one}
\end{center}
\end{figure}
}

\end{manpage}

\begin{thebibliography}{99}{\TeX}

\bibitem{cc}Christophe C\'erin et Beno\^\i t Lemaire
{\em Vers l'introduction de la couleur dans \TeX},
Cahiers GUTenberg num\'ero 5 -- pages.

\bibitem{ps3}Adobe Systems Incorporated.
{\em PostScript Language Reference Manual}, Addison-Wesley. October 1986.

\bibitem{ps2}Adobe Systems Incorporated.
{\em PostScript Language Tutorial and Cookbook}, Addison-Wesley. March 1987.

\bibitem{ps1}Adobe Systems Incorporated.
{\em PostScript Language Program Design}, Addison-Wesley. February 1988.

\bibitem{mt} Donald E.Knuth. {\em The \TeX book}, Addison-Wesley. 1986.

\bibitem{latex} Leslie Lamport.
{\em \LaTeX~user's guide \& reference Manual}, Addison-Wesley. 1986

\bibitem{rs} Raymond Seroul.
{\em Le petit livre de \TeX}, InterEdition -- Mai 1989
\end{thebibliography}

\end{document}

