%------les macros de mise en couleur-----
%\input{/users/parall/cerin/=tex/=macros/colorrgb.tex}
\input{colorrgb.tex}
%------styles des documents-----
\documentstyle[12pt,feuro]{article}
%\documentstyle[12pt,/users/parall/cerin/=tex/=macros/feuro]{article}
%------Les macros locales-------
\def\CercleBidon#1#2#3#4#5#6#7#8{%
% trace un cercle de rayon #1mm et d'epaisseur du trait = #2mm,
% puis remplit ce cercle avec des hachures de largueur = #3mm inclinees
% de #4 degres. La couleur est specifiee par les parametres #5 #6 #7
% (r g b : dans cet ordre). Le parametre #8 donne l'espacement entre
% les hachures. Les angles doivent etre compris entre 0 et 180 degres.
\ifnum #4 > 180 #4 <0
    \typeout{---CercleHachure : le rayon #4 n'est pas <= 180 ni >= 0}
\else
    \special{" gsave 2.85 2.85 scale
	#5 255 div #6 255 div #7 255 div setrgbcolor
	0 0 moveto currentpoint translate newpath
	0 0 #1 0 360 arc #2 setlinewidth stroke
%	newpath 0 0 #1 0 360 arc closepath clip
	newpath
	#3 setlinewidth
	\ifdashps [ 2 2 ] 0 setdash \fi
	#4 90 ge {
		180 #4 sub cos abs #1 mul #4 sin abs #1 mul add
		180 #4 sub cos abs #1 mul #4 sin abs #1 mul sub
		translate #4 rotate
		0 #8 #1 2 mul {
			pop 0 0 moveto
			#1 2 mul 0 lineto
			0 #8 moveto currentpoint translate
		} for
	} {
		180 #4 sub cos abs #1 mul #4 sin abs #1 mul sub
		180 #4 sub cos abs #1 mul #4 sin abs #1 mul add
		translate #4 rotate
		0 #8 #1 2 mul {
			pop 0 0 moveto
			#1 2 mul neg 0 lineto
			0 #8 neg moveto currentpoint translate
		} for
	} ifelse
	stroke}
\fi}
\def\ggf{\raise.4ex\hbox{%
	$\scriptscriptstyle\langle\!\langle\;$}}
\def\gdf{\raise.4ex\hbox{%
	$\scriptscriptstyle\;\rangle\!\rangle\;$}}
\setlength{\topmargin}{-10mm}
%------debut du document------
\begin{document}

\title{Avan\c cons pas \`a pas vers la construction de macros de mise
en couleur pour \TeX }
\author{Christophe C\'erin}
\affiliation{Universit\'e de Paris Sud\\
LRI bat 490\\
91405 orsay\\
email : cerin\@ lri.lri.fr}

\maketitle

Depuis un peu plus d'une ann\'ee, nous d\'eveloppons des jeux de macros
permettant la gestion de la couleur dans le traitement de texte \TeX --
\LaTeX. Le premier jeu \cite{cc} autorise le balisage de textes en couleur,
le trac\'e de rectangles bord\'es de couleur et de r\'ealiser diff\'erents
d\'egrad\'es sur des cha\^\i nes de caract\`eres \ldots L'orsqu'il s'agit de
changer de couleur, nous r\'ealisons l'implantation au moyen
d'op\'erateurs PostScript de gestion de la couleur si bien que les macros
sont d\'ependantes du convertisseur utilis\'e, en l'occurence
\verb+dvips+.

Le nouveau jeu propos\'e -- version 2.3-- permet de tracer des boites dont
le fond est en couleur, des cercles concentriques d\'egrad\'es, des
rectangles dont le fond est constitu\'e de d\'egrad\'es horizontaux ou
verticaux ainsi que de primitives graphiques notamment des courbes de
B\'ezier en couleur ainsi que des cercles hachur\'es destin\'es \`a
l'environnement \LaTeX\ \verb+picture+.

Nous souhaitons, \`a cette occasion, commenter les r\`egles g\'en\'erales
de conception des macros couleur :

\begin {itemize}

\item Chaque fois que nous aurons besoin d'empiler ou de juxtaposer des
boites (au sens \TeX) contenant des objets graphiques ou des objets textes
\`a colorer ; chaque fois que nous aurons besoin de conna\^\i tre les
dimensions de ces \hbox{boites :} utilisons \TeX\ !

\item De m\^eme, chaque fois que nous devons dessiner un trait de couleur,
positionner avec precision un texte, un cercle sur la page (notion de
point courant) :  op\'erons au moyen de PostScript.
\end {itemize}

Enfin, nous montrons qu'une discipline de sp\'ecification ainsi que la
reprise de concepts de programmation de langages classiques conduisent \`a
des implantations efficaces en temps et place disque.

\section{Une macro couleur \TeX\ sans notion de point courant.}

Nous souhaitons une macro \verb+\echelon+ qui r\'ealise un d\'egrad\'e en
couleur sur une cha\^\i ne de caract\`eres. La premi\`ere et la derni\`ere
lettre de la cha\^\i ne sont imprim\'ees avec une valeur de couleur
donn\'ee en param\`etre (couleur de d\'ebut et couleur de fin). La
difficult\'e principale consiste \`a r\'epartir uniform\'ement les
couleurs.

Informellement, le probl\`eme s'ennonce de la mani\`ere suivante\ : mettre
une cha\^\i ne de caract\`eres en couleur consiste \`a imprimer le premier
caract\`ere dans la couleur de d\'ebut, puis d'incr\'ementer la valeur
de la couleur et de recommencer ce m\^eme traitement sur la cha\^\i ne
initiale priv\'ee de son premier \'el\'ement.

Un code interm\'ediaire plus proche d'une implantation r\'eelle est :
(cf \cite{cc})

\vspace{1cm}

\hrule width 8cm height3pt \hfill
\begin{tabbing}
{\bf dec} \= echelon:chaine $\rightarrow$ liste d'instructions \\
    \> echelon(c)$\leftarrow$ $l$; \\
    \> ~~~\= {\bf where} $l$ = \\
    \>    \>~~~ \= {\bf if} $l$ =  $\emptyset$ {\bf then $\leftarrow \emptyset$};\\
    \>    \>    \> {\bf else} \\
    \>    \>    \>~~~\= {\bf let} $l_1$ = ({\tt $\backslash$begincolor\{$couleur$\}} ({\bf car} c) {\tt $\backslash$endcolor}) ; \\
    \>    \>    \>   \> $couleur \leftarrow couleur + increment$ ;\\
    \>    \>    \>   \> {\bf if} $couleur > couleurmax$ {\bf then}\\
    \>    \>    \>   \>~~~\= $couleur \leftarrow couleurmin$ ;\\
    \>    \>    \>   \> {\bf endif} ;\\
    \>    \>    \>   \> $\leftarrow$ ({\bf cons} $l_1$ {\tt echelon} ({\bf cdr} c)) ;\\
    \>    \>    \> {\bf endif}\\
    \> ;;\\

\end{tabbing}
\hrule width 8cm height1pt

\vspace{1cm}

Le code TeX correspondant \`a la macro est comment\'e dans \cite{cc}. Nous
ne faisons appel \`a PostScript que pour changer la couleur des
caract\`eres. La d\'efinition et son aspect r\'ecursif sont directement
implant\'es d'une mani\`ere r\'ecursive en TeX : nous suivons \`a la
lettre la d\'efinition pour programmer !

Un exemple de codage est :

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

qui produit le r\'esultat : {% debut de groupe
% rouge = bleu = vert = 20
% maxrouge = maxvert = maxbleu = 210
% chaque caractere change de couleur
\Large\bf\initcolor{20}{20}{20}{210}{210}{210}{1}
% increrouge = increvert = increbleu = 40
\initinc{40}{40}{40}\echelon{exemple}}% fin du groupe

\section{Une macro couleur \TeX\ presque totalement implant\'e en
PostScript.}

Pour tracer des courbes en couleur dans un environnement \verb+picture+,
nous proposons une implantation PostScript reposant sur l'op\'erateur
\verb+curveto+ qui a besoin des quatre points $(x_0,y_0),(x_1,y_1),(x_2,y_2),
(x_3,y_3)$ d\'efinissant les tangentes de la courbe de la figure
\ref{figone}.

\begin{figure}[th]
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(60,50)
\put(0.00,0.00){\framebox(60,50)[t]{}}
% debut de la premiere courbe de bezier (celle de gauche)
\put(0,0){\bezierps [ [ 10 10 15 25 45 45 50 25 ]
 		] \endbezierps{.4}{3}{2}{255}{0}{0}}
\put(10,5){\makebox(0,0)[cc]{$(x_0,y_0)$}}
\put(7,25){\makebox(0,0)[cc]{$(x_1,y_1)$}}
\put(36,45){\makebox(0,0)[cc]{$(x_2,y_2)$}}
\put(50,22){\makebox(0,0)[cc]{$(x_3,y_3)$}}
\put(10,10){\makebox(0,0)[cc]{$\bullet$}}
\put(15,25){\makebox(0,0)[cc]{$\bullet$}}
\put(45,45){\makebox(0,0)[cc]{$\bullet$}}
\put(50,25){\makebox(0,0)[cc]{$\bullet$}}
\put(10,10){\line(1,3){5}}
\put(45,45){\line(1,-4){5}}
\end{picture}
\caption{{\it courbe de B\'ezier}}
\label{figone}
\end{center}
\end{figure}

Puis, on effectue une interpolation polynomiale pour tracer la \ggf
meilleure\gdf courbe reliant les points de coordonn\'ees
$(x_0,y_0),(x_3,y_3)$. La macro se nomme \verb+\Bezierps+ et admet comme
param\`etres une liste de points. Cette liste se termine, pour \TeX,
lorsque l'analyseur syntaxique rencontre la balise \verb+\endbezierps+ et
elle constitue le premier param\`etre de la macro (pour l'utilisation de
macros avec arguments balis\'es cf \cite{seroul} page 201).

Le corps proprement dit repose directement sur une abstraction sur les
listes disponible en langage PostScript -- il s'agit de la primitive
\verb+forall+ -- qui correspond \`a la fonction Lisp \verb+map+. Cette
fonction applique une fonction donn\'ee en param\`etre \`a tous les
\'el\'ements d'une liste de param\`etres.

Dans notre cas, nous appliquons \ggf curveto\gdf (l'op\'erateur PostScript
qui dessine une courbe de B\'ezier) \`a une liste finie de listes de 4
points permettant ainsi le trac\'e de plusieurs courbes en n'utilisant
qu'une seule instruction \verb+curveto+. Cette r\'ealisation est plus
concise qu'une \'ecriture avec autant d'instructions \verb+curveto+ qu'il
y a de courbes \`a dessiner. Le gain en place disque est \'evident dans le
cas de dessins avec de nombreuses courbes de B\'ezier.

Le dessin de la figure \ref{figone} a \'et\'e r\'ealis\'e sur PC avec
\TeX Cad l'\'equivalent de Pic\TeX\ sur station. Comme nous ne pouvons pas
manipuler pour l'instant \`a la souris des courbes de B\'ezier sous TexCad,
nous avons implicitement marqu\'e les points $(x_0, y_0)\cdots (x_3, y_3)$
et r\'ecup\'er\'e les coordon\'ees de ces points sous \'editeur pour les
passer comme arguments \`a la proc\'edure \verb+\Bezierps+. Nous obtenons
le codage suivant :

\begin{verbatim}
\begin{figure}[th]
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(60,50)
\put(0.00,0.00){\framebox(60,50)[t]{}}
% debut de la courbe de bezier
\put(0,0){\bezierps [ [ 10 10 15 25 45 45 50 25 ]
 		] \endbezierps{.4}{3}{2}{255}{0}{0}}
\put(10,5){\makebox(0,0)[cc]{$(x_0,y_0)$}}
\put(7,25){\makebox(0,0)[cc]{$(x_1,y_1)$}}
\put(36,45){\makebox(0,0)[cc]{$(x_2,y_2)$}}
\put(50,22){\makebox(0,0)[cc]{$(x_3,y_3)$}}
\put(10,10){\makebox(0,0)[cc]{$\bullet$}}
\put(15,25){\makebox(0,0)[cc]{$\bullet$}}
\put(45,45){\makebox(0,0)[cc]{$\bullet$}}
\put(50,25){\makebox(0,0)[cc]{$\bullet$}}
\put(10,10){\line(1,3){5}}
\put(45,45){\line(1,4){5}}
\end{picture}
\caption{{\it courbe de B\'ezier}}
\label{figone}
\end{center}
\end{figure}
\end{verbatim}

\section{Une macro couleur moiti\'e implant\'e en \TeX, moiti\'e en
PostScript.}

Il s'agit d'\'ecrire du texte sur un fond d\'egrad\'e horizontalement ou
verticalement. Le texte est contenu dans une boite \TeX\ dont la
hauteur et la largeur sont utilis\'ees pour tracer le rectangle d\'egrad\'e
recherch\'e. Il est alors n\'ecessaire de r\'ecup\'erer (cf figure
\ref{figtwo}) les coordonn\'ees relatives du point A par rapport au
centre du rectangle et de tracer en PostScript les diff\'erentes bandes
couleur \`a partir de ce point. L'implantation s'op\`ere en utilisant
l'ordre \TeX\ \verb+\special+ pour l'introduction du texte PostScript.
Enfin, nous avons aussi besoin de conna\^\i tre le syst\`eme de
coordonn\'ees (position des axes, facteur d'\'echelle \ldots)
\`a l'int\'erieur d'un ordre \verb+\special+. Apr\`es cette succession
d'op\'erations, il n'est pas alors tr\`es difficile de d\'eposer sur la
feuille d'impression la boite contenant le texte qui vient s'inscrire au
dessus du d\'egrad\'e.

\setbox101=\vbox{\hsize=0.5\textwidth\bf\noindent%
\begincolor{255}{255}{255}%
Dans un article r\'ecent, nous pr\'e\-sen\-tions
les avan\-tages 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
\ec
\par}

\horizontaltrue

\begin{figure}[th]
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(100,50)
\put(0,0){\framebox(100,50)[t]{}}
\put(50,25){\makebox(0,0)[cc]{
\RectangleDegrade{\copy101}{200}{200}{0}{0}{0}{0}{3}}}
\put(13,43){\makebox(0,0)[cc]{$A$}}
\put(13,15){\makebox(0,0)[cc]{\hbox{$\left\{\vbox to 6mm{}\right.$}}}
\end{picture}
\caption{{\it fond d\'egrad\'e}}
\label{figtwo}
\end{center}
\end{figure}

Le codage \TeX\ est :

\begin{verbatim}
\setbox101=\vbox{\hsize=0.5\textwidth\bf\noindent%
\begincolor{255}{255}{255}%
Dans un article r\'ecent, nous pr\'e\-sen\-tions
les avan\-tages 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
\ec
\par}

\horizontaltrue% degrade horizontal

\begin{figure}[th]
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(100,50)
\put(0,0){\framebox(100,50)[t]{}}
\put(15,40){\makebox(0,0)[cc]{$A$}}
\put(15,15){\makebox(0,0)[cc]{
   \hbox{$\left\{\vbox to 7mm{}\right.$}}}
\put(50,25){\makebox(0,0)[cc]{
   \RectangleDegrade{\copy101}{200}{200}{0}{0}{0}{0}{3}
}}
\end{picture}
\caption{{\it fond d\'egrad\'e}}
\label{figtwo}
\end{center}
\end{figure}
\end{verbatim}

\section{Comment dessiner des cercles hachur\'es au moyen de \ggf
fen\^etres\gdf d'impression ?}

La macro que nous pr\'esentons maintenant r\'ealise le trac\'e d'un cercle
hachur\'e en couleur dont la distance entre les hachures, l'angle ainsi
que la forme des hachures (pointill\'es ou traits pleins) est
param\'etrable.

Nous utilisons le m\'ecanisme PostScript du \ggf clipping\gdf qui consiste
\`a d\'efinir un contour ferm\'e o\`u seuls les objets \`a l'int\'erieur
du contour sont visibles.

Ainsi, pour r\'ealiser la macro d\'ecrite ci-dessus, nous proc\'edons de la
mani\`ere suivante (cf figure \ref{figthree})\ :

\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}}
\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}}
% 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 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(0,0){\bezierps [ [ 38.06 36.98 42.03 39.00 46.95 39.00
% 		50.03 29.02 ] [ 50.03 29.02 55.05 16.06 59.02 16.98 66.00 13.97 ] ]
% 		\endbezierps{.4}{3}{2}{255}{0}{0}}
% 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,38){\CercleBidon{4.5}{.5}{.1}{63}{255}{60}{255}{1}}
\put(42,35){\CercleHachure{4.5}{.5}{.1}{63}{255}{60}{255}{1}}
\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)$}}
\put(10,28.5){\makebox(0,0)[cc]{$B$}}
\put(8,32){\circle*{1.90}}
\put(8,32){\line(1,0){10}}
\put(8,32){\line(1,2){10}}
\put(16,35.5){\makebox(0,0)[cc]{$\alpha$}}
\put(6.03,38.00){\makebox(0,0)[cc]{\bf A}}
\end{picture}
\caption{{\it cercle hachur\'e}}
\label{figthree}
\end{center}
\end{figure}

\begin{enumerate}
\item Le d\'eplacement vers le point $B$ s'effectue \`a partir du point $A$
au moyen d'un calcul faisant intervenir les cosinus et sinus de l'angle
$\alpha$ ainsi que le rayon du cercle. Nous tracons les lignes
n\'ecessaires apr\`es un changement de rep\`ere ;
\item Nous nous placons au point $A$ et nous tracons le cercle de rayon
demand\'e en consid\'erant ce cercle comme la fen\^etre d'impression (les
\ggf angles\gdf du carr\'e disparaissent). Nous obtenons le r\'esultat de
la figure \ref{figthree} ;
\end{enumerate}

Pour terminer, nous remarquons que nous avons trac\'e le plus petit
carr\'e circonscrit dans le cercle et que nous employons la facilit\'e du
\ggf clipping\gdf de PostScript. Le trac\'e de toutes les hachures \`a
leur dimension r\'eelle demande au programmeur un calcul beaucoup trop dur !

\section{R\'ecup\'eration, traitements \`a partir du point courant.}

L'ordre \TeX\ \verb+\special+ permet l'inclusion de textes PostScript. La
syntaxe \verb+\put(0,0){\special{"+ pour le translateur \verb+dvips+
nous positionne dans le coin inf\'erieur gauche de la figure
\ref{figfour}. Ce point est alors le point courant \`a partir duquel
on travaille. Si l'unit\'e courante souhait\'ee est le millim\`etre,
il nous faut maintenant instaurer cette unit\'e d'\'echelle (nous
travaillons en \ggf points\gdf \`a l'int\'erieur du \verb+\special+) :

\setbox100=\vbox{\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=30pt% on decale le centre de 50pt vers la droite
\ytrans=30pt% et 50pt vers le haut

\begin{figure}[th]
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(80,50)
\put(0,0){\framebox(80,50)[t]{}}
\put(40,25){\makebox(0,0)[cc]{
\CercleGeneral{\copy100}{255}{0}{0}{0}{0}{0}{10}
}}
\end{picture}
\caption{{\it fond d\'egrad\'e}}
\label{figfour}
\end{center}
\end{figure}

\begin{verbatim}
% la constante 2.85 = 72 / 25.6
%    ==> pour travailler en mm
\special{" gsave 2.85 2.85 scale
.
% votre code -- unite en mm
.
grestore}
\end{verbatim}

Vous pouvez maintenant examiner plus en d\'etail le code \TeX\ de la
macro correspondant au dessin de la figure \ref{figfour}. Le trac\'e du
cercle d\'egrad\'e s'effectue au moyen de l'op\'erateur PostScript
\verb+clip+ en d\'ecomposant le probl\`eme de la mani\`ere suivante\ :

\begin{enumerate}
\item La boite \TeX\ 1 contient le texte. Soit $r=\max\{ \backslash ht1,
\backslash wd1\}$ ; soit $xtrans,ytrans$ les variables donnant les valeurs
de l'excentration du cercle ; soit $A=(x,y)$ le point du centre du cercle ;
\item On se d\'eplace au point $A'=(x+xtrans,y+ytrans)$ et on calcule $r'=r+
\sqrt{xtrans^2+ytrans^2}$ ;
\item On trace ensuite un cercle de rayon $r'$ \`a partir de $A'$ en
consid\'erant le cercle de rayon $r$ et de centre $A$ comme contour de
\ggf clipping\gdf . On it\`ere enfin le proc\'ed\'e de trac\'e de cercles
de plus en plus petits \`a partir du point $A'$ ;
\end{enumerate}

\begin{verbatim}
\setbox100=\vbox{\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=30pt% on decale le centre de 50pt vers la droite
\ytrans=30pt% et 50pt vers le haut
\begin{figure}[th]
\begin{center}
\unitlength=1.00mm
\linethickness{0.4pt}
\begin{picture}(80,50)
\put(0,0){\framebox(80,50)[t]{}}
\put(40,25){\makebox(0,0)[cc]{% il y a 10 nuances
\CercleGeneral{\copy100}{255}{0}{0}{0}{0}{0}{10}}}
\end{picture}
\caption{{\it fond d\'egrad\'e}}
\label{figfour}
\end{center}
\end{figure}
\end{verbatim}

\section{Conclusion}

Une programmation par d\'ecomposition en sous t\^aches ainsi que
l'utilisation d'op\'erateurs PostScript qui offrent un important niveau
d'abstraction constituent le socle de la d\'emarche de mise en couleur.

Cette fa\c con de faire conduit \`a une programmation en \TeX\ ou en
PostScript structur\'ee. Elle permet aussi de d\'ecouvrir quelques zones
d'ombres dans la d\'efinition des op\'erateurs PostScript. Par exemple, on
imagine assez bien ce qu'est le contour d'un caract\`ere vectoriel -- la
collection successive des courbes le d\'efinissant -- mais qu'en est-il
d'un caract\`ere \ggf bitmap\gdf ? Autrement dit, peut-on r\'ecup\'erer en
PostScript le contour d'un caract\`ere bitmap ? Par quel moyen ?

Nous avons aussi comment\'e les op\'erations n\'ecessaires pour
r\'ealiser l'interface \TeX--PostScript au moyen de la commande
\verb+\special+.

Le jeu de macros ainsi qu'un guide complet d'utilisation est disponible
aupr\`es de l'auteur.

\begin{thebibliography}{99}

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

\bibitem{seroul} Raymond Seroul.
{\it Le petit livre de \TeX}, InterEdition -- Mai 1989

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

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

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

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

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

\end{thebibliography}

\end{document}
