% % ColorRgb.tex version 3.3 au 17-12-1993 % for PostScript printers. % % ColorRgb.tex is a set of color macros for TeX & LaTeX written by: % % Christophe C\'erin % % Universit\'e de Paris Sud Universit\'e de Picardie Jules Verne % L.R.I bat 490 UFR Maths & Informatique % 91405 ORSAY France 33, rue St Leu % email: cerin@lri.lri.fr 80039 Amiens France % % from a initial version named "Colorrgb.tex 2.9" in collaboration with % Benoit Lemaire. % % Permission is granted for use and non-profit distribution of rgb.tex % providing that this notice be clearly maintained, but the right to % distribute any portion of color/tex for profit or as part of any commercial % product is specifically reserved for the author. % % compatibilities : LaTeX : use of variables \fboxsep and \fboxrule in \fboxc % \ifx\colorrgbloaded\relax\let\next\endinput \else \let\colorrgbloaded\relax\let\next\relax \fi \next \catcode`\@=11\relax% \newwrite\@unused% \def\typeout#1{{\let\protect\string\immediate\write\@unused{#1}}}% \typeout{ColorRgb.tex 3.3 by Christophe Cerin}% \typeout{ColorRgb.tex 3.3 for PostScript Laser Printer and dvips driver}% \typeout{ColorRgb.tex 3.3 release, 17-12-1993}% % %-------RGB--------- \def\beginrgbcolor#1#2#3{% \special{ps::[begin]% currentrgbcolor #1 255 div #2 255 div #3 255 div setrgbcolor}} \def\endrgbcolor{% \special{ps::[end] setrgbcolor}} \def\rgbcolor#1#2#3{\aftergroup\endrgbcolor% \beginrgbcolor{#1}{#2}{#3}} %-------HSB-------- \def\beginhsbcolor#1#2#3{% \special{ps::[begin]% currenthsbcolor #1 255 div #2 255 div #3 255 div sethsbcolor}} \def\endhsbcolor{% \special{ps::[end] sethsbcolor}} \def\hsbcolor#1#2#3{\aftergroup\endhsbcolor% \beginhsbcolor{#1}{#2}{#3}} %-------CMYK-------- \def\begincymkcolor#1#2#3#4{% \special{ps::[begin]% currentcymkcolor #1 255 div #2 255 div % #3 255 div #4 255 div setcymkcolor}} \def\endcymkcolor{% \special{ps::[end] setcymkcolor}} \def\cymkcolor#1#2#3#4{\aftergroup\endcymkcolor% \begincymkcolor{#1}{#2}{#3}{4}} %------------------ % Init forme des traits \countdef\CCap=90 \countdef\Join=91 \CCap=1\Join=1 \def\InitCapJoinMatrix#1#2{% \ifnum #1 >2 #2 > 2 #1 < 0 #2 < 0 {% \typeout{***bad argument range in function InitCapJoinMatrix} }\else{% \CCap=#1\Join=#2% } \fi } \def\SetCapJoinMatrix#1#2{% % modification de la facon de terminer les traits : % si #1 = 0 alors terminaison de trait nette % si #1 = 1 alors terminaison de trait arrondi centre' % si #1 = 2 alors terminaison de trait carre' % si #2 = 0 alors angle de trait carre % si #2 = 1 alors angle de trait arrondi % si #2 = 2 alors angle de trait carre \ifnum #1 >2 #2 > 2 #1 < 0 #2 < 0 {% \typeout{***bad argument range in function InitCapJoinMatrix} }\else% (\the\CCap ) cvi setlinecap (\the\Join ) cvi setlinejoin % \fi } %------------------ % boite dont le contour est trac\'e en couleur : % il s'agit de la meme definition que celle fournit dans Latex.tex 1.09 % et utilise les variables \fboxrule et \fboxsep : elle ne peut donc % s'utiliser directement que sous LaTeX % appel \fboxcolor{text}{red}{green}{bleu} \def\fboxcolor#1#2#3#4{\leavevmode% \setbox\@tempboxa\hbox{#1}\@tempdima\fboxrule% \advance\@tempdima \fboxsep \advance\@tempdima\dp\@tempboxa% \beginrgbcolor{#2}{#3}{#4}% \hbox{\lower\@tempdima\hbox% {\vbox{\hrule\@height\fboxrule% \hbox{\vrule\@width\fboxrule\hskip\fboxsep% \vbox{\vskip\fboxsep\endrgbcolor\box\@tempboxa% \beginrgbcolor{#2}{#3}{#4}\vskip\fboxsep}% \hskip 1pt% \hskip\fboxsep\vrule\@width\fboxrule}% \hrule\@height\fboxrule}}}\endrgbcolor}% % \boxcolor : boite dont le contenu est en couleur, % on utilise les variables \fboxrule et \fboxsep : elle ne peut donc % s'utiliser directement que sous LaTeX. De plus, on utilise la boite % \@myboxb et la dimension \@mydimb afin de pouvoir effectuer un \fboxcolor % qui n'aurait pas ete possible avec l'utilisation de \@tempboxa (conflit % de variable) % appel \boxcolor{text}{red}{green}{bleu} \def\boxcolor#1#2#3#4{\leavevmode% \newbox\@myboxb\newdimen\@mydimb% \setbox\@myboxb\hbox{\hskip\fboxsep\hbox{#1}% \hskip\fboxsep}\@mydimb\fboxrule% \advance\@mydimb\dp\@myboxb% \beginrgbcolor{#2}{#3}{#4}% \hbox{%\hskip\fboxsep% \lower\@mydimb\hbox% {\vbox{\hsize=\ht\@myboxb\vsize=\wd\@myboxb% \hbox{\vrule\@width\wd\@myboxb% \hskip-\wd\@myboxb% \vbox{\endrgbcolor% \vskip\fboxsep\box\@myboxb\vskip\fboxsep}% }}}}}% \def\underlinecolor#1#2#3#4{% \newbox\@myboxbb\newbox\@myboxcc% \setbox\@myboxbb=\hbox{#1}% \setbox\@myboxcc=\hbox{\beginrgbcolor{#2}{#3}{#4}% \vrule height .5pt depth 0pt width \wd\@myboxbb\endrgbcolor} \hbox{\raise -2.8pt\vbox{\offinterlineskip\@myboxbb\@myboxcc}}} \countdef\rouge=112% contient la valeur de la composante rouge \countdef\vert=113% contient la valeur de la composante vert \countdef\bleu=114% contient la valeur de la composante bleu \countdef\increrouge=115% contient la valeur de l'increment du rouge \countdef\increvert=116% contient la valeur de l'increment du vert \countdef\increbleu=117% contient la valeur de l'increment du bleu \countdef\modulo=118% valeur du nombre de lettres dans la meme couleur \countdef\sauverouge=119% contient la valeur de la composante rouge sauvegardee \countdef\sauvevert=120% contient la valeur de la composante vert sauvegardee \countdef\sauvebleu=121% contient la valeur de la composante bleu sauvegardee \countdef\maxrouge=122% contient la valeur de la composante rouge maximale \countdef\maxvert=123% contient la valeur de la composante vert maximale \countdef\maxbleu=124% contient la valeur de la composante bleu maximale % procedure d'initialisation des couleurs, utilisation : % \initcolor{rouge}{vert}{bleu}{maxrouge}{maxvert}{maxbleu}{modulo} \def\initcolor#1#2#3#4#5#6#7{% procedure d'initialisation des couleurs \rouge=#1\vert=#2\bleu=#3\modulo=#7% \sauverouge=#1\sauvevert=#2\sauvebleu=#3% \maxrouge=#4\maxvert=#5\maxbleu=#6} \def\initinc#1#2#3{% procedure d'initialisation des increments \increrouge=#1\increvert=#2\increbleu=#3} \def\incrouge#1{% \global\advance\rouge by #1} \def\incvert#1{% \global\advance\vert by #1} \def\incbleu#1{% \global\advance\bleu by #1} \def\decrouge#1{% \global\advance\rouge by -#1} \def\decvert#1{% \global\advance\vert by -#1} \def\decbleu#1{% \global\advance\bleu by -#1} \def\incmodulo#1{% procedure d'increment du modulo \global\advance\modulo by #1} \initcolor{20}{20}{20}{210}{210}{210}{1}% \initinc{40}{40}{40}% % La procedure echelon prend une chaine de caracteres et imprime les % modulo premiers caracteres dans la couleur specifiee par les 3 composantes % rouge, vert, bleu puis incremente chaque composante d'une valeur, puis imprime % encore modulo caracteres dans cette nouvelle couleur jusqu'a ce que modulo % atteigne une borne max. Dans ce cas on recommence l'affichage des modulo % caracteres suivants a partir de la couleur du % tout debut qui est constituee par les variables \sauvexxx. % Utilisation : % texte texte ..... % \initcolor{rouge}{vert}{bleu}{maxrouge}{maxvert}{maxbleu}{modulo} % \initinc{incrouge}{incvert}{incbleu} % \echelon{blablabla} % texte texte ..... \def\echelon#1{\echelons[#1]} \def\echelons#1{\def\tete{}% \countdef\myinc=200% \myinc=1% \def\ECHELON##1{\ifx##1]% \def\next{\tete}% \else\ifnum\myinc>\modulo{% \ifnum\sauverouge<\maxrouge {\incrouge{\the\increrouge}}% \else {\decrouge{\the\increrouge}}% \fi \ifnum\sauvevert<\maxvert {\incvert{\the\increvert}}% \else {\decvert{\the\increvert}}% \fi \ifnum\sauvebleu<\maxbleu {\incbleu{\the\increbleu}}% \else {\decbleu{\the\increbleu}}% \fi \multiply\myinc by 0% \global\advance\myinc by 2% }\else{% \global\advance\myinc by 1% }\fi \ifnum\sauverouge<\maxrouge {\ifnum\rouge>\maxrouge{% \global\rouge=\sauverouge% }\fi}% \else {\ifnum\rouge<\maxrouge{% \global\rouge=\sauverouge% }\fi}% \fi% \ifnum\sauvevert<\maxvert {\ifnum\vert>\maxvert{% \global\vert=\sauvevert% }\fi}% \else {\ifnum\vert<\maxvert{% \global\vert=\sauvevert% }\fi}% \fi% \ifnum\sauvebleu<\maxbleu {\ifnum\bleu>\maxbleu{% \global\bleu=\sauvebleu% }\fi}% \else {\ifnum\bleu<\maxbleu{% \global\bleu=\sauvebleu% }\fi}% \fi% \edef\tete{\tete\beginrgbcolor{\number\rouge}{\number\vert}{\number\bleu}##1\endrgbcolor}% \let\next=\ECHELON\fi% \next}\ECHELON} % La procedure dentdescie prend une chaine de caracteres et imprime les % modulo premiers caracteres dans la couleur specifiee par les 3 composantes % rouge, vert, bleu puis incremente chaque composante d'une valeur, puis imprime % encore modulo caracteres dans cette nouvelle couleur jusqu'a ce que modulo % atteigne une borne max. Dans ce cas on recommence l'affichage des modulo % caracteres suivants en decrementant les couleurs jusqu'aux valeurs initiales % qui sont sauvegardees dans les variables \sauvexxx. La variable globale % \sens initialisee a 1 determine un eclaircissement des couleurs, alors que % sens = 0 determine un noircissement des couleurs. % Utilisation : % texte texte ..... % \initcolor{rouge}{vert}{bleu}{maxrouge}{maxvert}{maxbleu}{modulo} % \initinc{incrouge}{incvert}{incbleu} % \sens=1% % \dentdescie{blablabla} % texte texte ..... \countdef\sens=201% \sens=1% pour eclaircir et 0 pour noircir \def\dentdescie#1{\dentdescies[#1]} \def\dentdescies#1{\def\tete{}% \countdef\myinc=200% \myinc=1% \def\DENTDESCIE##1{\ifx##1]% \def\next{\tete}% \else\ifnum\myinc>\modulo{% \ifnum\sens>0{% \incrouge{\the\increrouge}% \incvert{\the\increvert}% \incbleu{\the\increbleu}% }\else{% \decrouge{\the\increrouge}% \decvert{\the\increvert}% \decbleu{\the\increbleu}% }\fi% \global\myinc=2% }\else{% \global\advance\myinc by 1% }\fi \ifnum\rouge>\maxrouge{% \global\rouge=\maxrouge% \global\sens=0% }\fi% \ifnum\vert>\maxvert{% \global\sens=0% \global\vert=\maxvert% }\fi% \ifnum\bleu>\maxbleu{% \global\bleu=\maxbleu% \global\sens=0% }\fi% \ifnum\rouge<\sauverouge{% \global\rouge=\sauverouge% \global\sens=1% }\fi% \ifnum\vert<\sauvevert{% \global\sens=1% \global\vert=\sauvevert% }\fi% \ifnum\bleu<\sauvebleu{% \global\bleu=\sauvebleu% \global\sens=1% }\fi% \edef\tete{\tete\beginrgbcolor{\number\rouge}{\number\vert}{\number\bleu}##1\endrgbcolor}% \let\next=\DENTDESCIE\fi% \next}\DENTDESCIE} %La macro degrade prend une chaine de caracteres puis repartit uniformement %les gammes de couleurs definies par initcolor sur l'ensemble de la chaine \def\degrade#1{% \countdef\lg=220% \longueur[#1]% \ifnum\lg=0{% \typeout{macro degrade : parametre vide}} \else{% \ifnum\lg>1{% \global\advance\lg by -1% astuce des piquets et des barrieres \ifnum\sauverouge<\maxrouge{% \increrouge=\maxrouge% \global\advance\increrouge by -\sauverouge}% \else{% \increrouge=\sauverouge% \global\advance\increrouge by -\maxrouge}% \fi \global\divide\increrouge by \lg% \ifnum\sauvevert<\maxvert{% \increvert=\maxvert% \global\advance\increvert by -\sauvevert}% \else{% \increvert=\sauvevert% \global\advance\increvert by -\maxvert}% \fi \global\divide\increvert by \lg% \ifnum\sauvebleu<\maxbleu{% \increbleu=\maxbleu% \global\advance\increbleu by -\sauvebleu}% \else{% \increbleu=\sauvebleu% \global\advance\increbleu by -\maxbleu}% \fi \global\divide\increbleu by \lg}% \fi% \echelons[#1]}% \fi}% %La macro longueur calcule la longueur d'une chaine. Le resultat est stocke %dans la variable globale \lg. Le parametre doit etre entre crochets \def\longueur#1{% \lg=0% \def\LONGUEUR##1{% \ifx##1]% \def\next{}% \else% \global\advance\lg by 1% \let\next=\LONGUEUR% \fi \next} \LONGUEUR} % quelques redefinitions \def\icone{ \item[\beginrgbcolor{255}{255}{0}$\bullet$\endcolor]} \def\ictwo{ \item[\beginrgbcolor{255}{255}{0}$\bf\diamond$\endcolor]} \def\bcrouge{\beginrgbcolor{255}{0}{0}} \def\bcbleu{\beginrgbcolor{0}{0}{255}} \def\bcjaune{\beginrgbcolor{255}{255}{0}} \def\bcvert{\beginrgbcolor{0}{255}{0}} \def\bcmauve{\beginrgbcolor{255}{255}{0}} \def\bcmagenta{\beginrgbcolor{0}{255}{0}} \def\bcorange{\beginrgbcolor{0}{153}{255}} \def\bcvj{\beginrgbcolor{153}{51}{255}} \def\bcblanc{\beginrgbcolor{255}{255}{255}} \def\ec{\endrgbcolor} \def\aquamarine{\beginrgbcolor{112}{219}{147}} \def\MediumAquamarine{\beginrgbcolor{50}{204}{153}} \def\black{\beginrgbcolor{0}{0}{0}} \def\blue{\beginrgbcolor{0}{0}{255}} \def\CadetBlue{\beginrgbcolor{95}{159}{159}} \def\CornflowerBlue{\beginrgbcolor{66}{66}{111}} \def\DarkSlateBlue{\beginrgbcolor{107}{35}{142}} \def\LightBlue{\beginrgbcolor{191}{216}{216}} \def\LightSteelBlue{\beginrgbcolor{143}{143}{188}} \def\MediumBlue{\beginrgbcolor{50}{50}{204}} \def\MediumSlateBlue{\beginrgbcolor{127}{0}{255}} \def\MidnightBlue{\beginrgbcolor{47}{47}{79}} \def\NavyBlue{\beginrgbcolor{35}{35}{142}} \def\navy{\beginrgbcolor{35}{35}{142}} \def\SkyBlue{\beginrgbcolor{50}{153}{204}} \def\SlateBlue{\beginrgbcolor{0}{127}{255}} \def\SteelBlue{\beginrgbcolor{35}{107}{142}} \def\coral{\beginrgbcolor{255}{127}{0}} \def\cyan{\beginrgbcolor{0}{255}{255}} \def\purple{\beginrgbcolor{176}{0}{255}} \def\firebrick{\beginrgbcolor{142}{35}{35}} \def\brown{\beginrgbcolor{165}{42}{42}} \def\SandyBrown{\beginrgbcolor{244}{164}{96}} \def\gold{\beginrgbcolor{204}{127}{50}} \def\goldenrod{\beginrgbcolor{219}{219}{112}} \def\MediumGoldenrod{\beginrgbcolor{234}{234}{173}} \def\green{\beginrgbcolor{0}{255}{0}} \def\DarkGreen{\beginrgbcolor{47}{79}{47}} \def\DarkOliveGreen{\beginrgbcolor{79}{79}{47}} \def\ForestGreen{\beginrgbcolor{35}{142}{35}} \def\LimeGreen{\beginrgbcolor{50}{204}{50}} \def\MediumForestGreen{\beginrgbcolor{107}{142}{35}} \def\MediumSeaGreen{\beginrgbcolor{66}{111}{66}} \def\MediumSpringGreen{\beginrgbcolor{127}{255}{0}} \def\PaleGreen{\beginrgbcolor{143}{188}{143}} \def\SeaGreen{\beginrgbcolor{35}{142}{107}} \def\SpringGreen{\beginrgbcolor{0}{255}{127}} \def\YellowGreen{\beginrgbcolor{153}{204}{50}} \def\DarkSlateGrey{\beginrgbcolor{47}{79}{79}} \def\DarkSlateGray{\beginrgbcolor{47}{79}{79}} \def\DimGrey{\beginrgbcolor{84}{84}{84}} \def\DimGray{\beginrgbcolor{84}{84}{84}} \def\LightGrey{\beginrgbcolor{168}{168}{168}} \def\LightGray{\beginrgbcolor{168}{168}{168}} \def\gray{\beginrgbcolor{192}{192}{192}} \def\grey{\beginrgbcolor{192}{192}{192}} \def\khaki{\beginrgbcolor{159}{159}{95}} \def\magenta{\beginrgbcolor{255}{0}{255}} \def\maroon{\beginrgbcolor{142}{35}{107}} \def\orange{\beginrgbcolor{204}{50}{50}} \def\orchid{\beginrgbcolor{219}{112}{219}} \def\DarkOrchid{\beginrgbcolor{153}{50}{204}} \def\MediumOrchid{\beginrgbcolor{147}{112}{219}} \def\pink{\beginrgbcolor{188}{143}{143}} \def\plum{\beginrgbcolor{234}{173}{234}} \def\red{\beginrgbcolor{255}{0}{0}} \def\IndianRed{\beginrgbcolor{79}{47}{47}} \def\MediumVioletRed{\beginrgbcolor{219}{112}{147}} \def\OrangeRed{\beginrgbcolor{255}{0}{127}} \def\VioletRed{\beginrgbcolor{204}{50}{153}} \def\salmon{\beginrgbcolor{111}{66}{66}} \def\sienna{\beginrgbcolor{142}{107}{35}} \def\tan{\beginrgbcolor{219}{147}{112}} \def\thistle{\beginrgbcolor{216}{191}{216}} \def\turquoise{\beginrgbcolor{173}{234}{234}} \def\DarkTurquoise{\beginrgbcolor{112}{147}{219}} \def\MediumTurquoise{\beginrgbcolor{112}{219}{219}} \def\violet{\beginrgbcolor{79}{47}{79}} \def\BlueViolet{\beginrgbcolor{159}{95}{159}} \def\wheat{\beginrgbcolor{216}{216}{191}} \def\white{\beginrgbcolor{255}{255}{255}} \def\yellow{\beginrgbcolor{255}{255}{0}} \def\GreenYellow{\beginrgbcolor{147}{219}{112}} %---Definitions des macros pour tracer des cercles. \def\PScouleur#1#2#3#4#5#6{% % le parametre #4 est de la forme 123.24556pt : le "pt" est de % trop ce qui necessite le traitement avec la macro /pttt pour % recuperer le reel 123.24556. Le parametre #6 represente la couleur. \ifcase #6\or\special{"gsave /pttt (#4) (pt) search pop 3 1 roll pop pop cvr def 0 0 moveto currentpoint translate #2 #2 #3 sub #5 div cvi neg #3{ % newpath dup /valeur exch def newpath /valeur exch def valeur 255 div 0 0 setrgbcolor 0 0 moveto 0 0 valeur #3 sub #2 #3 sub div pttt mul 72 div 35 mul 0 360 arc fill closepath } for grestore} \or\special{"gsave /pttt (#4) (pt) search pop 3 1 roll pop pop cvr def 0 0 moveto currentpoint translate #2 #2 #3 sub #5 div cvi neg #3{ newpath /valeur exch def 0 valeur 255 div 0 setrgbcolor 0 0 moveto 0 0 valeur #3 sub #2 #3 sub div pttt mul 72 div 35 mul 0 360 arc fill closepath } for grestore} \or\special{"gsave /pttt (#4) (pt) search pop 3 1 roll pop pop cvr def 0 0 moveto currentpoint translate #2 #2 #3 sub #5 div cvi neg #3{ newpath /valeur exch def 0 0 valeur 255 div setrgbcolor 0 0 moveto 0 0 valeur #3 sub #2 #3 sub div pttt mul 72 div 35 mul 0 360 arc fill closepath } for grestore}\fi} \def\CercleCouleurRGB#1#2#3#4#5#6{% % appel : \CercleCouleurRouge{texte}{max}{min}{rayon}{nb-nuances} % trace un cercle degrade autour du texte "texte" en commencant % par un grand cercle de rayon max "max" jusqu'au petit cercle de % rayon min "min" en tracant "nb-nuances" nuances de couleur \dimen4=#4 \divide\dimen4 by 2 \hbox{\hsize\dimen4\hskip\dimen4 \vbox to #4{\vskip\dimen4 \PScouleur{#1}{#2}{#3}{#4}{#5}{#6} }% \hskip-\dimen4\hskip8pt \setbox1=\hbox{#1}% \dimen5=\wd1% \divide\dimen5 by 2% \raise\dimen5\vbox{\hbox{#1}} }} \def\CercleCouleur#1#2#3#4#5{% % appel : \CercleCouleur{texte}{max}{min}{couleur}{nb-nuances} % trace un cercle degrade autour du texte "texte" en commencant % par un grand cercle de couleur "max" jusqu'au petit cercle de % couleur "min" en tracant "nb-nuances" nuances de couleur % "couleur" \setbox3\hbox{#1}\newdimen\rayon \ifdim\ht3>\wd3% \rayon=\ht3% \else% \rayon=\wd3% \fi% \advance\rayon by 16pt %\typeout{rayon = \the\rayon} % diametre du cercle = (max{largueur texte, hauteur texte} + 16pt) \ifnum #2 > 255 #3 <0 \typeout{Les parametres de CercleCouleur sont incorrectes !!!} \else \ifcase #4\or\CercleCouleurRGB{#1}{#2}{#3}{\the\rayon}{#5}{1} \or\CercleCouleurRGB{#1}{#2}{#3}{\the\rayon}{#5}{2} \or\CercleCouleurRGB{#1}{#2}{#3}{\the\rayon}{#5}{3} \fi \ifnum #4 > 3 \typeout{+++++Mauvais parametre dans Cercle Couleur : #4} \fi \fi } %--------definitions generales des cercles en couleur------------- % ces variables determinent l'offset du clipping path \newdimen\xtrans\xtrans=0pt \newdimen\ytrans\ytrans=0pt \def\PSgenerale#1#2#3#4#5#6#7#8{% % le parametre #9 est de la forme 123.24556pt : le "pt" est de % trop ce qui necessite le traitement avec la macro /pttt pour % recuperer le reel 123.24556. \special{"gsave /pttt (#8) (pt) search pop 3 1 roll pop pop cvr def /xtrans (\the\xtrans ) (pt) search pop 3 1 roll pop pop cvr def /ytrans (\the\ytrans ) (pt) search pop 3 1 roll pop pop cvr def /offsetrayon {xtrans dup mul ytrans dup mul add sqrt 2 mul} def /valeurrouge #1 def /valeurvert #2 def /valeurbleu #3 def 0 0 moveto currentpoint translate newpath 0 0 moveto 0 0 #1 #4 sub #1 #4 sub div pttt mul 72 div 35 mul 0 360 arc closepath clip xtrans ytrans translate #1 #1 #4 sub #7 1 sub div cvi neg #4{ newpath /valeur exch def valeurrouge 255 div valeurvert 255 div valeurbleu 255 div setrgbcolor 0 0 moveto 0 0 valeur #4 sub #1 #4 sub div pttt offsetrayon add mul 0.5 mul 0 360 arc fill stroke /valeurrouge valeurrouge #1 #3 sub #7 div cvi neg add def /valeurvert valeurvert #2 #5 sub #7 div cvi neg add def /valeurbleu valeurbleu #3 #6 sub #7 div cvi neg add def } for grestore} } \def\CercleGRGB#1#2#3#4#5#6#7#8#9{% % appel : \CercleGRGB{texte}{rouge}{vert}{bleu} % {maxrouge}{maxvert}{maxbleu}{nb-nuances}{rayon} % trace un cercle degrade autour du texte "texte" en commencant % par un grand cercle de couleur "rouge"+"vert"+"bleu" jusqu'au % petit cercle de couleur "maxrouge"+"maxvert"+"maxbleu" en tracant % "nb-nuances=#8" nuances de couleur \dimen4=#9% \divide\dimen4 by 2% \dimen5\dimen4 %\advance\dimen5 by 16pt \hbox to #9{\hskip\dimen5 \vbox to #9{\vskip\dimen4% \PSgenerale{#2}{#3}{#4}{#5}{#6}{#7}{#8}{#9}% }% \hskip-\dimen5%\hskip-6pt \setbox1=\hbox{#1}% \dimen5=#9\divide\dimen5 by 2% \dimen4=\ht1\divide\dimen4 by 2 \advance\dimen5 by -\dimen4 \raise\dimen5\vbox{\hbox{#1}} }} \def\CercleGeneral#1#2#3#4#5#6#7#8{% % appel : \CercleGeneral{texte}{rouge}{vert}{bleu}{maxrouge} % {maxvert}{maxbleu}{nb-nuances} % trace un cercle degrade autour du texte "texte" en commencant % par un grand cercle de couleur "rouge"+"vert"+bleu" jusqu'au % petit cercle de couleur "maxrouge"+"maxvert"+"maxbleu" en tracant % "nb-nuances" nuances de couleur. \setbox3\hbox{#1}\newdimen\rayon% \ifdim\ht3>\wd3% \rayon=\ht3% \else% \rayon=\wd3% \fi% \advance\rayon by 16pt% %\typeout{rayon = \the\rayon} % diametre du cercle = (max{largueur texte, hauteur texte} + 16pt) \ifnum #2 > 255 #5 <0 #3 > 255 #6 <0 #4 > 255 #7 <0% \typeout{Les parametres de CercleGeneral sont incorrects !!!} \else \CercleGRGB{#1}{#2}{#3}{#4}{#5}{#6}{#7}{#8}{\the\rayon}% \fi } %--------definitions generales des rectancles degrades en couleur------- \newif\ifhorizontal% determine le "sens" du degrade : gauche-droite \horizontaltrue % ou haut-bas \def\PSrectangle#1#2#3#4#5#6#7#8{% % trace un rectangle divise en #7 rectangles chacun dans une couleur % differente. Si \ifhorizontal est vrai alors les rectangles sont empiles % horizontalement, sinon verticalement. Le parametre #8==la boite % dont on peut extraire la hauteur et la largueur. % ATTENTION : on ecrit des commandes \TeX au milieu d'un ordre % \special !!! \setbox6\hbox{#8} \special{" gsave \SetCapJoinMatrix{\the\CCap}{\the\Join} /pthauteur (\the\ht6) (pt) search pop 3 1 roll pop pop cvr def /ptlargueur (\the\wd6) (pt) search pop 3 1 roll pop pop cvr def /valeurrouge #1 def /valeurvert #2 def /valeurbleu #3 def 0 0 moveto currentpoint translate \ifhorizontal #1 #1 #4 sub #7 1 sub div cvi neg #4{ pop valeurrouge 255 div abs valeurvert 255 div abs valeurbleu 255 div abs setrgbcolor newpath 0 0 moveto ptlargueur 0 rlineto 0 pthauteur #7 div neg rlineto ptlargueur neg 0 rlineto closepath fill /valeurrouge valeurrouge #2 #5 sub #7 1 sub div neg add def /valeurvert valeurvert #2 #5 sub #7 1 sub div neg add def /valeurbleu valeurbleu #3 #6 sub #7 1 sub div neg add def 0 pthauteur #7 div neg moveto currentpoint translate } for \else #1 #1 #4 sub #7 1 sub div cvi neg #4{ pop valeurrouge 255 div valeurvert 255 div valeurbleu 255 div setrgbcolor newpath 0 0 moveto ptlargueur #7 div 0 rlineto 0 pthauteur neg rlineto ptlargueur neg #7 div 0 rlineto closepath fill /valeurrouge valeurrouge #2 #5 sub #7 1 sub div neg add def /valeurvert valeurvert #2 #5 sub #7 1 sub div neg add def /valeurbleu valeurbleu #3 #6 sub #7 1 sub div neg add def ptlargueur #7 div 0 moveto currentpoint translate } for \fi grestore}} \def\RectangleDegrade#1#2#3#4#5#6#7#8{% % appel : \RectangleDegrade{texte}{rouge}{vert}{bleu}{maxrouge} % {maxvert}{maxbleu}{nb-nuances} % trace un rectangle degrade autour du texte "texte" en commencant % par un rectangle de couleur "rouge"+"vert"+bleu" jusqu'au % rectangle de couleur "maxrouge"+"maxvert"+"maxbleu" en tracant % "nb-nuances" nuances de couleur. Le sens du degrade est determine par la % variable booleene \ifhorizontal. \setbox3=\hbox{\hskip 8pt\vbox{\vskip 2pt\hbox{#1}\vskip 2pt}\hskip 8pt} \ifnum #2 > 255 #5 <0 #3 > 255 #6 <0 #4 > 255 #7 <0 \typeout{Les parametres de RectangleGeneral sont incorrects !!!} \else \hbox{\hskip-4pt \hbox{\hsize\wd3% \vbox to \ht3{% \vskip-3pt% \PSrectangle{#2}{#3}{#4}{#5}{#6}{#7}{#8}{\copy3} }% \hskip 11pt% \raise 8pt\vbox{\hbox{#1}}} } \fi } %-----------------------Des macros pour le dessin----------------- \newif\ifdashps % determine si on veut des pointilles \dashpsfalse \def\bezierps#1 \endbezierps#2#3#4#5#6#7{% % trace une courbe de bezier avec les points du parametre #1 qui % est un tableau de tableaux. Le parametre #2 contient la largueur % des traits. Lorsque l'on veut tracer des courbes pointillees, il faut % positionner le boolean \ifdashps a vrai (\dashpstrue) et a ce moment % #3 contient le nombre total d'espaces noirs et d'espaces blancs selon % les unites de mesures courantes ; #4 definit le nombre d'unites \`a % placer en debut de trait : [9] 4 setdash --> un trait pointille. Si % on a positionner \dashpsfalse alors la courbe est continue. % attention ; les unites sont des millimetres et il faut un blanc avant % \endbezierps % constitue de 4 unites, puis 5, puis 4, puis 5 ... % l'ordre des parametres est : % \bezierps [ [ x0 y0 x1 y1 x2 y2 x3 y3 ] ...] \endbezierps{}{} % #5 = intensite du rouge < 256, #6 = intensite du vert < 256 % #7 = intensite du bleu < 256 % Enfin, la constante 2.85 = 72 / 25.6 ==> pour travailler en mm \special{" gsave 2.85 2.85 scale #2 setlinewidth \ifdashps [ #3 ] #4 setdash \fi \SetCapJoinMatrix{\the\CCap}{\the\Join} #5 255 div #6 255 div #7 255 div setrgbcolor newpath 0 0 moveto currentpoint translate #1 { aload pop 8 -2 roll moveto curveto } forall stroke grestore}} \def\ellipseps#1#2#3#4#5#6#7#8{% % trace une ellipse avec les dimensions (#1,#2). #1 represente la "largeur" de % l'ellipse et #2 la hauteur (exprimees en mm). Le parametre #3 % contient la largueur des traits. Lorsque l'on veut tracer une % ellipse en pointillees, il faut % positionner le boolean \ifdashps a vrai (\dashpstrue) et a ce moment % #4 contient le nombre total d'espaces noirs et d'espaces blancs selon % les unites de mesures courantes ; #5 definit le nombre d'unites \`a % placer en debut de trait : [9] 4 setdash --> un trait pointille. Si % on a positionne \dashpsfalse alors la courbe est continue. % attention ; les unites sont des MILLIMETRES % #6 = intensite du rouge < 256, #7 = intensite du vert < 256 % #8 = intensite du bleu < 256 % Le contour est trace dans la couleur actuelle definie par les composantes % \rouge, \vert, \bleu % Enfin, la constante 2.85 = 72 / 25.6 ==> pour travailler en mm \special{" gsave 2.85 2.85 scale #3 setlinewidth 0 0 moveto currentpoint translate /cm { matrix currentmatrix } def /mtrx cm def /mymax { #1 #2 ge { #1 } { #2 } ifelse 10 mul } def /mymin { #1 #2 le { #1 } { #2 } ifelse 10 mul } def mymax mymin scale % contenu newpath 0 0 mymax 0 360 arc #6 255 div #7 255 div #8 255 div setrgbcolor fill stroke % contour ifdashps [ #4 ] #5 setdash \fi \SetCapJoinMatrix{\the\CCap}{\the\Join} (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div (\the\bleu ) cvr 255 div setrgbcolor newpath 0 0 mymax 0 360 arc mtrx setmatrix stroke }} \def\Line #1 \endLine#2#3#4#5#6#7{% % trace une ligne avec les points du parametre #1 qui % est un tableau de tableaux. Le parametre #2 contient la largueur % des traits. Lorsque l'on veut tracer des courbes pointillees, il faut % positionner le boolean \ifdashps a vrai (\dashpstrue) et a ce moment % #3 contient le nombre total d'espaces noirs et d'espaces blancs selon % les unites de mesures courantes ; #4 definit le nombre d'unites \`a % placer en debut de trait : [9] 4 setdash --> un trait pointille. Si % on a positionner \dashpsfalse alors la courbe est continue. % attention ; les unites sont des millimetres et il faut un blanc avant % \endLine % constitue de 4 unites, puis 5, puis 4, puis 5 ... % l'ordre des parametres est : % \Line [ [ x0 y0 x1 y1 ] [ x1 y1 x2 y2 ] ...] \endLine{}{}... % trace une ligne brisee % #5 = intensite du rouge < 256, #6 = intensite du vert < 256 % #7 = intensite du bleu < 256 % Enfin, la constante 2.85 = 72 / 25.6 ==> pour travailler en mm \special{" gsave 2.85 2.85 scale #2 setlinewidth \ifdashps [ #3 ] #4 setdash \fi #5 255 div #6 255 div #7 255 div setrgbcolor \SetCapJoinMatrix{\the\CCap}{\the\Join} newpath 0 0 moveto currentpoint translate #1 { aload pop 4 -2 roll moveto lineto } forall stroke grestore}} \def\CercleHachure#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 \SetCapJoinMatrix{\the\CCap}{\the\Join} \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\CarreHachure#1#2#3#4#5#6#7#8{% % trace un carre incline de largueur 2* #1mm et d'epaisseur du trait = #2mm, % puis remplit ce carre 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{---CarreHachure : l'angle #4 n'est pas <= 180 ni >= 0} \else \special{" gsave 2.85 2.85 scale #2 setlinewidth #5 255 div #6 255 div #7 255 div setrgbcolor #3 setlinewidth \SetCapJoinMatrix{\the\CCap}{\the\Join} \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 1 #8 #1 2 mul { pop 0 0 moveto #1 2 mul 0 lineto 0 #8 moveto currentpoint translate } for stroke newpath 0 0 moveto 0 #1 2 mul neg rlineto #1 2 mul 0 rlineto 0 #1 2 mul rlineto closepath #2 setlinewidth } { 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 1 #8 #1 2 mul { pop 0 0 moveto #1 2 mul neg 0 lineto 0 #8 neg moveto currentpoint translate } for stroke newpath 0 0 moveto 0 #1 2 mul rlineto #1 2 mul neg 0 rlineto 0 #1 2 mul neg rlineto closepath #2 setlinewidth } ifelse stroke} \fi} \def\CourbeFermee#1 \endcourbe#2#3#4#5#6#7{% % Trace une courbe fermee au moyen de courbes de Bezier avec les points % du parametre #1 qui est un tableau de tableaux. Le parametre #2 % contient la largueur des traits. Lorsque l'on veut tracer le contour en % pointillees, il faut positionner le boolean \ifdashps a vrai % (\dashpstrue) et a ce moment % #3 contient le nombre total d'espaces noirs et d'espaces blancs selon % les unites de mesures courantes ; #4 definit le nombre d'unites \`a % placer en debut de trait (cf la macro \bezierps) % % Attention ; les unites sont des millimetres et il faut un blanc avant % \endcourbe % % L'ordre des parametres est : % \CourbeFermee [ [ x0 y0 x1 y1 x2 y2 x3 y3 ] ...] \endcourbe{}{} % % Le remplissage est effectue avec les couleurs : % #5 = intensite du rouge < 256, #6 = intensite du vert < 256 % #7 = intensite du bleu < 256 % % Le contour est trace dans la couleur actuelle definie par les composantes % \rouge, \vert, \bleu % Enfin, la constante 2.85 = 72 / 25.6 ==> pour travailler en mm \typeout{+++coordonnees: #1} \special{"gsave 2.85 2.85 scale #2 setlinewidth \ifdashps [ #3 ] #4 setdash \fi \SetCapJoinMatrix{\the\CCap}{\the\Join} newpath \filtre #1 moveto currentpoint translate #1 { aload pop curveto } forall \ifclosepath closepath \fi gsave #5 255 div #6 255 div #7 255 div setrgbcolor eofill grestore (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div (\the\bleu ) cvr 255 div setrgbcolor stroke grestore}} \def\filtre[ [ #1 #2 #3 ] ] {#1 #2 } \newif\ifclosepath \closepathtrue %---------------------------------------- % Pour mettre du texte ou autre chose en rotation : % RotObj{angle}{texte} % Suivant les valeurs de \t@vss, \b@vss, \l@vss, \r@vss le point \`a % partir duquel la rotation se fait, peut varier : par defaut ce point est % fix\'e au centre du texte. Par exemple, les definitions \def\t@vss{\vss}, % \def\b@vss{} \def\l@hss{\hss}, \def\r@hss{} positionne le point en % question au bout de la chaine. \def\RotObj#1#2{% \special{ps: gsave currentpoint currentpoint translate #1 neg rotate neg exch neg exch translate}% \RotBis{#2}% \special{ps: currentpoint grestore moveto}} % Par defaut, le point a partir duquel se fait la rotation est situe % au debut de la chaine \def\dc{\edef\t@vss{}\edef\b@vss{\vss}\edef\l@hss{}\edef\r@hss{\hss}} \dc \def\RotBis#1{\vbox to 0pt{\normalbaselines \t@vss \hbox to 0pt{\l@hss \hbox {#1}% \r@hss}% \b@vss}} \def\fc{\edef\t@vss{\vss}\edef\b@vss{}\edef\l@hss{\hss}\edef\r@hss{}} \def\mc{\edef\t@vss{\vss}\edef\b@vss{\vss}\edef\l@hss{\hss}\edef\r@hss{\hss}} %---------------------------------------- % Les macros pour coller du texte le long de courbes de Bezier. % L'implantation est comment\'e dans le manuel d'utilisation %---------------------------------------- \def\ColleTexte#1#2#3#4#5#6#7#8#9{% \typeout{***** limitation de ColleTexte : dvips 5.4 uniquement ****} \countdef\lg=220% \longueur[#1]\hss% \special{ps: /debut {gsave currentpoint translate currentpoint % exch neg exch translate} def % % je me suis plac'e en (x_0,y_0) /xx #2 def % /yy #3 def % /angle #5 #3 sub #4 #2 sub 0.001 add atan def % /n-t 0 def /bidonxone #8 def /bidonxtwo #2 def % /cx #4 #2 sub 3 mul def % /bx #6 #4 sub 3 mul cx sub def % /ax #8 #2 sub cx sub bx sub def % /cy #5 #3 sub 3 mul def % /by #7 #5 sub 3 mul cy sub def % /ay #9 #3 sub cy sub by sub def % /ConstanteX { 0.35 Resolution 300 div mul } def % /bidon {(a) search pop pop pop cvx exec} def % /ancien-y 0 def /ancien-x 0 def /ancien-nt 0 def (% }% \special{ps: ) bidon /fonctionX { n-t n-t n-t ax mul mul mul n-t n-t bx mul mul n-t cx mul % #2 add add add} def % /fonctionY { n-t n-t n-t ay mul mul mul n-t n-t by mul mul n-t cy mul % #3 add add add} def % /long {\the\lg} def % /pas-nt { long 1 sub 1 gt { 1 long 1 sub div }{ 0.5 } ifelse } def % debut newpath #2 12 Resolution 300 div mul mul #3 12 % Resolution 300 div mul mul neg moveto ( }% \courbebisbis[#1]}% \def\courbebisbis#1{\def\tete{}% \def\COURBEBISBIS##1{\ifx##1]% \def\next{\tete\special{ps: ) bidon closepath grestore}}% \else% \setbox20=\hbox{##1}% \edef\tete{\tete% \hss\special{ps: ) bidon % gsave % currentpoint translate currentpoint % angle neg rotate neg exch neg exch translate ( }\hss% \setbox21=\hbox{##1\hss}\box21% \special{ps: ) bidon % /wdcar (\the\wd20) (pt) search pop 3 1 roll pop pop cvr % ConstanteX mul def % /ancien-nt n-t def /ancien-y yy def /ancien-x xx def % /n-t wdcar bidonxone bidonxtwo sub 0.001 add div ancien-nt % add def % /xx fonctionX def % /yy fonctionY def % /angle yy ancien-y sub xx ancien-x sub 0.001 add atan def % /n-t ancien-nt pas-nt add def % /xx fonctionX def % /yy fonctionY def % grestore % xx 12.0 Resolution 300 div mul mul yy 12.0 % Resolution 300 div mul mul neg moveto ( }% }\let\next=\COURBEBISBIS\fi% \next}\COURBEBISBIS}% \countdef\BlancInterLettre=221% \BlancInterLettre=1% par defaut 1mm \def\TraceTexte#1#2#3#4#5#6#7#8#9{% \typeout{***** limitation de TraceTexte : dvips 5.4 uniquement ****} \special{ps:/debut {gsave currentpoint translate currentpoint % exch neg exch translate} def % % je me suis plac'e en (x_0,y_0) /xx #2 def % /yy #3 def % /angle #5 #3 sub #4 #2 sub 0.001 add atan def % /n-t 0 def /bidonxone #8 def /bidonxtwo #2 def % /bidon {(a) search pop pop pop cvx exec} def % /cx #4 #2 sub 3 mul def % /bx #6 #4 sub 3 mul cx sub def % /ax #8 #2 sub cx sub bx sub def % /cy #5 #3 sub 3 mul def % /by #7 #5 sub 3 mul cy sub def % /ay #9 #3 sub cy sub by sub def ( }\hss% \special{ps: ) bidon % /D { 12.0 Resolution 300 div mul } def % /CY { Resolution 300 div } def % /MyCte { 0.35277 } def % /ancien-nt 0 def /ancien-y 0 def /ancien-x 0 def ( }\hss% \special{ps: ) bidon % /fonctionX { n-t n-t n-t ax mul mul mul n-t n-t bx mul mul n-t cx mul % #2 add add add} def % /fonctionY { n-t n-t n-t ay mul mul mul n-t n-t by mul mul n-t cy mul % #3 add add add} def % /long #2 def % /blanc {\the\BlancInterLettre} def ( }\hss% \special{ps: ) bidon % /MyFunction{/n-t wdcar bidonxone bidonxtwo sub 0.001 % add div ancien-nt add def % /xx fonctionX def % /yy fonctionY def % /angle yy ancien-y sub xx ancien-x % sub 0.001 add atan def % /n-t ancien-nt def % /n-t angle cos wdcar mul bidonxone % bidonxtwo sub 0.001 add div n-t add def % /long angle cos wdcar mul long add blanc add def % } def % debut newpath #2 D mul #3 D mul neg moveto ( }\hss% \courbebis[#1]}% \def\courbebis#1{\def\tete{}% \def\COURBEBIS##1{\ifx##1]% \def\next{\tete\hss\special{ps: ) bidon closepath grestore}}% \else% \setbox20=\hbox{##1}% \edef\tete{\tete\hss% \special{ps: ) bidon % gsave % /wdcar (\the\wd20) (pt) search pop 3 1 roll pop pop cvr % MyCte mul def % /ancien-nt n-t def /ancien-y yy def /ancien-x xx def ( }\hss% \special{ps: ) bidon % MyFunction % { fonctionX long le % { /n-t n-t 0.001 add def } % {exit} ifelse } loop % /xx fonctionX def % /yy fonctionY def ( }\hss% \special{ps: ) bidon % currentpoint translate currentpoint % angle neg rotate neg exch neg exch % translate ( }\hss% \setbox21=\hbox{##1\hss}\box21% \special{ps: ) bidon % grestore % xx D mul yy D mul neg moveto ( % }% }\let\next=\COURBEBIS\fi% \next}\COURBEBIS}% %------------------------------ % Macro pour tracer des splines terminees par des fleches, % des ronds, des triangles... Plusieurs modes sont suportes : % les symboles (fleches, ronds...) peuvent apparaitre aux deux % extremites, au debut ou a la fin du spline. \newif\ifarrowheads \newif\ifarrowheadleft \newif\ifarrowheadright \def\ArrowForm#1{ \arrowheadsfalse \arrowheadleftfalse \arrowheadrightfalse \ifx#1h% \arrowheadstrue \else \ifx#1l% \arrowheadlefttrue \else \ifx#1r% \arrowheadrighttrue \else \typeout{*** bad parameter in function ArrowForm} \fi \fi \fi } %%% On tape : %%% \ArrowForm{h} % pour obtenir des symboles des deux cotes %%% \ArrowForm{l} % pour obtenir des symboles "a gauche" %%% \ArrowForm{r} % pour obtenir des symboles "a droite" \countdef\Psymbol=205\countdef\Ssymbol=206 \def\PositionPsymbol#1{ \ifnum#1>100 #1<0 \typeout{*** bad parameter in function PositionPsymbol} \else \Psymbol=#1 \fi } \def\PositionSsymbol#1{ \ifnum#1>100 #1<0 \typeout{*** bad parameter in function PositionSsymbol} \else \Ssymbol=#1 \fi } %-------Nouveaux developpement pour la version 3.0-------------- \newif\ifinnerbox\innerboxtrue \def\TroisDbox#1#2#3#4#5#6#7#8{% % D'apres le PostScript Language Journal vol 2 - number 1 - pages % 19, 31 et 32 -- modifie par mes soins pour % tracer une boite 3D de hauteur #1mm et #2mm orient\'e de #3. % la couleur de la boite est donne par le parametre #4 qui doit % etre de la forme 'rouge vert bleu'. Le parametre #5 est la % couleur des faces. Ces faces ont une hauteur egale a #1 - 2*#6mm % et une largeur de #2 - 2*#7mm. Le parametre #8 est le rayon des % arondis au quatre coins des faces. Noter que si ce parametre vaut % 0 alors on obtient le dessin d'un rectangle. De plus, lorsque le % booleen innerbox est True (\innerboxtrue) la face avant de la boite % ne comporte pas de boite interieure en couleur. \ifnum#1=0 \typeout{===== Le 2eme Parametre de \TroisDBox doit etre <>0 =====} \else \special{"% gsave % %%% Variables importantes comme la hauteur, la largeur\ldots /xheight #1 def /ywidth #2 def /angle #3 def /csquare { #4 } def /cround { #5 } def /x-retrait #6 def /y-retrait #7 def /ang-round #8 def %%% /left 1 def /right -1 def /scaler 2 31 exp 1 sub def /pop4 { pop pop pop pop } def %box with rounded corners /roundedbox { gsave /corner exch def /y y-retrait def % retrait en y /x x-retrait def % retrait en x newpath /height xheight y 2 mul sub def /width ywidth x 2 mul sub def /xend x width add def /yend y height add def x y corner add moveto x yend xend yend corner arcto pop4 xend yend xend y corner arcto pop4 xend y x y corner arcto pop4 x y x yend corner arcto pop4 cround setrgbcolor fill grestore } def %draw a xheight*width color square stroked /square { gsave newpath 0 0 moveto ywidth 0 rlineto 0 xheight rlineto ywidth neg 0 rlineto closepath currentrgbcolor fill stroke grestore } def %draw a block /block {% /slant exch def slant 0 lt { /doside left def /slant slant neg def }{ /doside right def } ifelse %side length is based on size of slant /sidelen slant 100 div .35 add def [ 1 slant 100 div doside mul 0 1 0 0 ] concat %draw front gsave %draw the outline square csquare setrgbcolor square % %draw the inner rounded box \ifinnerbox ang-round roundedbox \fi % grestore %draw side gsave doside left eq { -1 1 scale }{ ywidth 0 translate } ifelse [ 1 .5 0 1 0 0] concat sidelen 1 scale %darken side away from light csquare setrgbcolor square ang-round roundedbox grestore %draw top of box gsave doside left eq { ywidth xheight translate -1 1 scale }{ 0 xheight translate } ifelse % 1 1 scale [ 1 0 2 1 0 0] concat 1 sidelen 2 xheight ywidth div mul div scale csquare setrgbcolor square ang-round roundedbox grestore grestore } def %%% Programme principal 0 0 moveto 2.85 2.85 scale 0.1 setlinewidth 0 setlinecap 2 setlinejoin angle block %%% fin programme principal grestore }\fi} \def\plotfunction#1#2#3#4#5#6#7{% % trace d'une fonction decrite au format PostScript dans le parametre % #7. Le parametre en x a faire figurer doit s'appele XX. La valeur de % XX varie de #1 a #2. On applique le facteur d'echelle #3 selon l'axe % des x et le facteur #4 selon l'axe des y. #5 est l'epaisseur des traits. % #6 specifie le parametre des pointilles \special{"% gsave % 2.85 2.85 scale #5 setlinewidth % \ifdashps #6 setdash \fi% 1 setlinecap 1 setlinejoin % (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div % (\the\bleu ) cvr 255 div setrgbcolor % /XX #1 def /Myfunction { #7 } def /inc #2 #1 sub 60 div def gsave #3 10 mul #4 10 mul scale % pour passer en echelle des cm #1 Myfunction moveto currentpoint 24 { /x1 XX def /y1 Myfunction def /XX XX inc add def /x2 XX def /y2 Myfunction def /XX XX inc add def /x3 XX def /y3 Myfunction def x1 y1 x2 y2 x3 y3 curveto /XX XX inc add def } repeat stroke grestore grestore }% } \newcount\pasx % ``pas'' pour les graduations selon axe des x \newcount\pasy % ``pas'' pour les graduations selon axe des y \pasx=10\pasy=10 % compteurs intermediaires \newcount\mycinterone\newcount\mycintertwo % valeurs initiales et d'incrementation des axes \newcount\vinitx\newcount\vincx \newcount\vinity\newcount\vincy \vinitx=0 \vincx=10 \vinity=10 \vincy=1 \def\GridNumPuiss(#1,#2)(#3,#4)(#5,#6)#7#8#9{% % Trace d'une grille avec echelles gradu\'ees au point (#1,#2). Les % graduations sur l'axes des x sont des entiers de la forme $\vinitx$, les % graduations sur l'axes des y de la forme $\vinity^\vincy$. Les % autres parametres de cette macros sont ceux de Grille. Les valeurs de % \pasx et \pasy sont les valeurs en mm d'espacement entre 2 graduations % consecutives. %------les vecteurs----------------------- \put(#1,#2){\vector(1,0){#3}} \put(#1,#2){\vector(0,1){#4}} %------les graduations horizontales------- \mycinterone=#2 \advance\mycinterone by -5 \mycintertwo=#3 \divide\mycintertwo by \pasx\advance\mycintertwo by 1 \multiputnum(#1,\number\mycinterone)(\number\pasx,0)% {\number\mycintertwo}{\number\vinitx}{\number\vincx} %------les graduations verticales--------- \mycintertwo=#4 \divide\mycintertwo by \pasy\advance\mycintertwo by 1 \multiputpuissance(\number\mycinterone,#2)(0,\number\pasy)% {\number\mycintertwo}{\number\vinity}{\number\vincy} %------les marqueurs horizontaux----------- \mycinterone=#1 \advance\mycinterone by -2 \multiput(\number\mycinterone,\number\pasy)(0,\number\pasy)% {\number\mycintertwo}{\traith{3}} %------les marquers verticaux-------------- \mycinterone=#3 \divide\mycinterone by \pasx\advance\mycinterone by 1 \mycintertwo=#2 \advance\mycintertwo by -2 \multiput(\number\pasx,\number\mycintertwo)(\number\pasx,0)% {\number\mycinterone}{\traitv{4}} %-------la grille, enfin !----------------- \put(#1,#2){\Grille(#3,#4)(#5,#6){#7}{#8}{#9}} } \def\GridNumNum(#1,#2)(#3,#4)(#5,#6)#7#8#9{% % Trace d'une grille avec echelles gradu\'ees au point (#1,#2). Les % graduations sur l'axes des x sont des entiers de la forme $\vinitx$, les % graduations sur l'axes des y de la forme $\vinity. Les autres % parametres de cette macros sont ceux de Grille. Les valeurs de % \pasx et \pasy sont les valeurs en mm d'espacement entre 2 graduations % consecutives. %------les vecteurs----------------------- \put(#1,#2){\vector(1,0){#3}} \put(#1,#2){\vector(0,1){#4}} %------les graduations horizontales------- \mycinterone=#2 \advance\mycinterone by -5 \mycintertwo=#3 \divide\mycintertwo by \pasx\advance\mycintertwo by 1 \multiputnum(#1,\number\mycinterone)(\number\pasx,0)% {\number\mycintertwo}{\number\vinitx}{\number\vincx} %------les graduations verticales--------- \mycintertwo=#4 \divide\mycintertwo by \pasy\advance\mycintertwo by 1 \multiputnum(\number\mycinterone,#2)(0,\number\pasy)% {\number\mycintertwo}{\number\vinity}{\number\vincy} %------les marqueurs horizontaux----------- \mycinterone=#1 \advance\mycinterone by -2 \multiput(\number\mycinterone,\number\pasy)(0,\number\pasy)% {\number\mycintertwo}{\traith{3}} %------les marquers verticaux-------------- \mycinterone=#3 \divide\mycinterone by \pasx\advance\mycinterone by 1 \mycintertwo=#2 \advance\mycintertwo by -2 \multiput(\number\pasx,\number\mycintertwo)(\number\pasx,0)% {\number\mycinterone}{\traitv{4}} %-------la grille, enfin !----------------- \put(#1,#2){\Grille(#3,#4)(#5,#6){#7}{#8}{#9}} } \def\Grille(#1,#2)(#3,#4)#5#6#7{% % Trace une grille au point courant sur #1mm de largeur et de #2mm % de hauteur. Les lignes de la grille sont espaces de #3mm selon l'axe % des x et de #4mm selon l'axe des y. Les parametres #5 et #6 sont les % parametres du setdash dans le cas ou l'on souhaite tracer des lignes % pointillees. #7 est la largeur des traits. \special{"% /height #1 def /width #2 def /divx #3 def % division spacing along x axis /divy #4 def % division spacing along y axis 2.85 2.85 scale \ifdashps [ #5 ] #6 setdash \fi % (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div % (\the\bleu ) cvr 255 div setrgbcolor % 0 0 moveto currentpoint translate % #7 setlinewidth 2 setlinecap gsave /index divx def divx 0 translate width divx div cvi 1 sub { newpath 0 0 moveto 0 height lineto stroke divx 0 translate /index index divx add def } repeat grestore gsave /index divy def 0 divy translate height divy div cvi 1 sub { newpath 0 0 moveto width 0 lineto stroke 0 divy translate /index index divy add def } repeat grestore }% } \def\Fleche#1 \endfleche#2#3#4#5#6#7#8#9{% % #1 est un tableau de points definissant les splines % #2 est le pourcentage % #3 est la profondeur de la fleche, #4 sa hauteur, #5 sa largeur % #6 est la hauteur de la fonte pour le texte % #7 est l'epaisseur des traits % #8 et #9 permettent de tracer des pointilles \special{"/ed { exch def } def % /Arrow { /w ed /h ed /a ed % 0 0 moveto h neg w 2 div lineto a w 2 div neg rlineto % a neg w 2 div neg rlineto h w 2 div rlineto % gsave fill grestore }def % /pointsize #6 def % /Helvetica-Bold findfont pointsize scalefont setfont % 1 setlinecap 1 setlinejoin % \ifarrowheadright% /pourcentage 100 def % \else% /pourcentage #2 def % \fi% /fonctionX { n-t n-t n-t ax mul mul mul % n-t n-t bx mul mul n-t cx mul % x1 add add add} def % /fonctionY { n-t n-t n-t ay mul mul mul % n-t n-t by mul % mul n-t cy mul % y1 add add add} def % gsave % 2.85 2.85 scale #7 setlinewidth % \ifdashps [ #8 ] #9 setdash \fi % (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div % (\the\bleu ) cvr 255 div setrgbcolor % newpath 0 0 moveto currentpoint translate % #1 % { aload pop % /spline exch def % /mystr exch 0 get def % spline aload pop 8 -2 roll % moveto curveto stroke gsave newpath % /x1 spline 0 get def % /y1 spline 1 get def % /x2 spline 2 get def % /y2 spline 3 get def % /x3 spline 4 get def % /y3 spline 5 get def % /x4 spline 6 get def % /y4 spline 7 get def % x1 y1 moveto % /cx x2 x1 sub 3 mul def % /bx x3 x2 sub 3 mul cx sub def % /ax x4 x1 sub cx sub bx sub def % /cy y2 y1 sub 3 mul def % /by y3 y2 sub 3 mul cy sub def % /ay y4 y1 sub cy sub by sub def % \ifarrowheads% gsave % /n-t 1 def % /xx fonctionX def /yy fonctionY def % xx yy moveto % /n-t n-t 0.05 add def % gsave % xx yy translate fonctionY yy sub fonctionX xx % x4 y4 translate fonctionY yy sub fonctionX xx % sub 0.001 add atan rotate % % call: depth height weight Arrow % \ifdashps [ 1 0 ] 0 setdash \fi % #3 #4 #5 Arrow % grestore gsave % /n-t 0 def % /xx fonctionX def /yy fonctionY def % xx yy moveto % /n-t n-t 0.05 add def % % gsave xx yy translate fonctionY yy sub fonctionX xx % gsave x1 y1 translate fonctionY yy sub fonctionX xx % sub 0.001 add atan 180 sub rotate % % call: depth height weight Arrow % \ifdashps [ 1 0 ] 0 setdash \fi% #3 #4 #5 Arrow % grestore gsave % /n-t 0.5 def % /xx fonctionX def /yy fonctionY def % xx yy moveto % /n-t n-t 0.05 add def % gsave xx yy translate fonctionY yy sub fonctionX xx % sub 0.001 add atan rotate % % enlever le neg dans 15 neg pour texte % % 15 neg --> 5 % mystr stringwidth pop 2 div neg pointsize neg moveto % mystr show stroke grestore % \else% \ifarrowheadleft% gsave % /n-t 0 def % /xx fonctionX def /yy fonctionY def % xx yy moveto % /n-t n-t 0.05 add def % % gsave xx yy translate fonctionY yy sub fonctionX xx % gsave x1 y1 translate fonctionY yy sub fonctionX xx % sub 0.001 add atan 180 sub rotate % % call: depth height weight Arrow % \ifdashps [ 1 0 ] 0 setdash \fi% #3 #4 #5 Arrow % grestore gsave % /n-t 0.5 def % /xx fonctionX def /yy fonctionY def % xx yy moveto % /n-t n-t 0.05 add def % gsave xx yy translate fonctionY yy sub fonctionX xx % sub 0.001 add atan rotate % % enlever le neg dans 15 neg pour texte % % 15 neg --> 5 % mystr stringwidth pop 2 div neg pointsize neg moveto % mystr show stroke grestore % \else% /n-t pourcentage 100 div def % /xx fonctionX def /yy fonctionY def % xx yy moveto % /n-t n-t 0.05 add def % gsave xx yy translate fonctionY yy sub fonctionX xx % sub 0.001 add atan rotate % % call: depth height weight Arrow % \ifdashps [ 1 0 ] 0 setdash \fi% #3 #4 #5 Arrow % % enlever le neg dans 15 neg pour texte % % 15 neg --> 5 % mystr stringwidth pop 2 div neg pointsize neg moveto % mystr show stroke % \fi\fi% grestore % closepath % grestore % newpath % } forall closepath closepath% }%end special % \arrowheadsfalse% \arrowheadleftfalse% \arrowheadrightfalse% } \def\Cotes(#1,#2)(#3,#4)[#5,#6][#7,#8]|#9|{% % trace une droite du point A=(#1,#2) au point B=(#3,#4) d'epaisseur % #5mm puis deux traits perpendiculaires a la droite precedente d'epaisseur % #6 et de longueur respectives #7mm du point A et #8mm du point B. % Enfin, si \dashps est true alors #9 specifie les pointilles. #9 doit % etre de la forme : "[ xx ] yy" \special{"newpath % gsave % 2.85 2.85 scale #5 setlinewidth % \ifdashps #9 setdash \fi% 1 setlinecap 1 setlinejoin % (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div % (\the\bleu ) cvr 255 div setrgbcolor % newpath 0 0 moveto currentpoint translate % #1 #2 moveto #3 #4 lineto stroke % \ifdashps [ 1 0 ] 0 setdash \fi% #6 setlinewidth gsave #3 #4 translate % #4 #2 sub #3 #1 % sub 0.001 add atan 90 add rotate % 0 0 moveto currentpoint exch currentlinewidth 3 mul % sub exch moveto % #8 currentlinewidth 3 mul add 0 lineto stroke grestore % gsave #1 #2 translate % #4 #2 sub #3 #1 % sub 0.001 add atan 90 add rotate % 0 0 moveto currentpoint exch currentlinewidth 3 mul % sub exch moveto % #7 currentlinewidth 3 mul add 0 lineto stroke grestore % closepath % grestore % closepath% }%end special } \def\EtatTransition#1{ \special{" newpath [ [ [ (8 \(C E\))] [100 40] ] [ [ (6 \(A B\))] [40 140] ] ] { aload pop /cercle exch def /mystr exch 0 get def cercle aload pop pointsize 2 mul 0 360 arc stroke gsave cercle aload pop translate mystr stringwidth pop 2 div neg pointsize neg 2 div pointsize 3 div add moveto % mystr show grestore closepath newpath } forall closepath grestore showpage }%end special } \newif\ifarrowheads\arrowheadsfalse \newif\ifarrowheadleft\arrowheadleftfalse \newif\ifarrowheadright\arrowheadrightfalse \newif\ifencore\encoretrue \def\ArrowForm#1{% \arrowheadsfalse% \arrowheadleftfalse% \arrowheadrightfalse% \def\bidonarrow{#1 }% \def\hh{h }\def\rr{r }\def\ll{l }% \loop\message{Initialisation de la forme des fleches}% \ifx\bidonarrow\hh% \arrowheadstrue\encorefalse% \else% \ifx\bidonarrow\ll% \arrowheadlefttrue\encorefalse% \else% \ifx\bidonarrow\rr% \arrowheadrighttrue\encorefalse% \else% \message{*** bad parameter in function ArrowForm (h l r)}% \read16 to \bidonarrow% \encoretrue% \fi% \fi% \fi% \ifencore% \repeat% } \def\FlecheSpeciale#1 \endflechespeciale#2#3#4#5#6#7#8#9{% % le parametre #2 est soit un h soit un r soit un l \ArrowForm{#2}\Fleche #1 \endfleche{100}{#3}{#4}{#5}{#6}{#7}{#8}{#9}% } \def\TraceArrow(#1,#2)(#3,#4)|#5|{% % trace une paire de fleches aux points (#1,2) et (#3,#4) % #5 est de la forme "p h w" ou p, h, w sont respectivement la % profondeur la hauteur et la largeur de la fleche % Enfin, si on a externetrue alors les fleches sont tournees vers % l'exterieur, sinon vers l'interieur. \special{"newpath gsave % /ed { exch def } def % /Arrow { /w ed /h ed /a ed % 0 0 moveto h neg w 2 div lineto a w 2 div neg rlineto % a neg w 2 div neg rlineto h w 2 div rlineto % gsave fill grestore }def % \ifexterne /ang-sup 0 def \else /ang-sup 180 def \fi% 2.85 2.85 scale % 1 setlinecap 1 setlinejoin % (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div % (\the\bleu ) cvr 255 div setrgbcolor % newpath gsave #3 #4 translate % #4 #2 sub #3 #1 sub 0.001 add atan ang-sup add rotate % #5 Arrow grestore % gsave #1 #2 translate % #4 #2 sub #3 #1 % sub 0.001 add atan 180 add ang-sup add rotate % #5 Arrow grestore % grestore closepath% }% }% \newif\ifexterne\externetrue \def\CotesFleche(#1,#2)(#3,#4)[#5,#6][#7,#8]|#9|{% % trace une droite du point A=(#1,#2) au point B=(#3,#4) d'epaisseur % #5mm puis deux traits perpendiculaires a la droite precedente d'epaisseur % #6 et de longueur respectives #7mm du point A et #8mm du point B. % Le parametre #9 est de la forme w h w pour un appel a Arrow. % Enfin, si on a externetrue alors les fleches sont tournees vers % l'exterieur, sinon vers l'interieur. \Cotes(#1,#2)(#3,#4)[#5,#6][#7,#8]|#9|\TraceArrow(#1,#2)(#3,#4)|#9|% } %------------------trace des grilles, axes---------------- \newcount\multicnt \newdimen\xdim \newdimen\ydim \newcount\fechelle \def\whilenoop#1{} \def\whilenum#1\do #2{\ifnum #1\relax #2\relax\iwhilenum{#1\relax #2\relax}\fi} \def\iwhilenum#1{\ifnum #1\let\nextwhile=\iwhilenum \else\let\nextwhile=\whilenoop\fi\nextwhile{#1}} \def\whiledim#1\do #2{\ifdim #1\relax#2\iwhiledim{#1\relax#2}\fi} \def\iwhiledim#1{\ifdim #1\let\nextwhile=\iwhiledim \else\let\nextwhile=\whilenoop\fi\nextwhile{#1}} \long\def\multiputnum(#1,#2)(#3,#4)#5#6#7{\killglue\multicnt=#5\relax % Place #5 objets a partir de (#1,#2) en se translatant de #3 et #4 % a chaque nouvel objet. L'objet de d\'epart est #6, puis #6 + #7 (pas % d'iteration), puis #6 + (2 * #7) ... Attention, #6 doit etre entier. \xdim=#1\unitlength% \ydim=#2\unitlength% \fechelle=#6%\unitlength \whilenum \multicnt > 0\do% {\raise\ydim\hbox to 0mm{\setbox2=\hbox{{\the\fechelle}}% \dimen1=\wd2\divide\dimen1 by 2\wd2=\dimen1% \dimen1=\ht2\divide\dimen1 by 2\ht2=\dimen1% \kern-\wd2\kern\xdim\raise-\ht2\hbox{\the\fechelle}\hss}\advance\multicnt-1% \advance\fechelle#7% \advance\xdim#3\unitlength\advance\ydim #4\unitlength}\ignorespaces} \long\def\multiputpuissance(#1,#2)(#3,#4)#5#6#7{\killglue\multicnt=#5\relax % Place #5 objets a partir de (#1,#2) en se translatant de #3 et #4 % a chaque nouvel objet. L'objet de d\'epart est #6^{#7}, puis #6^{#7+1} % d'iteration), puis #6^{#7+2}... Attention, #6 doit etre entier. \xdim=#1\unitlength \ydim=#2\unitlength \fechelle=#7%\unitlength \whilenum \multicnt > 0\do% {\raise\ydim\hbox to 0mm{\setbox2=\hbox{$#6^{\the\fechelle}$}% \dimen1=\wd2\divide\dimen1 by 2\wd2=\dimen1% \dimen1=\ht2\divide\dimen1 by 2\ht2=\dimen1% \kern-\wd2\kern\xdim\raise-\ht2\hbox{$#6^{\the\fechelle}$}\hss}% \advance\multicnt-1% \advance\fechelle#7% \advance\xdim#3\unitlength\advance\ydim#4\unitlength}\ignorespaces} \def\killglue{\unskip\whiledim \lastskip >0mm\do{\unskip}} \def\traith#1{\hbox{\vrule height .4pt depth 0pt width #1mm}} \def\traitv#1{\hbox{\vrule height #1mm depth 0pt width 0.4pt}} %-------------------------------------------------- % Logos de fleches (eventuellement ecrits dans la % marge gauche) %-------------------------------------------------- % Trace' d'un logo de fleche dont les traits sont d'epaisseur #1mm. #2 et % #3 sont les facteurs d'echelle que l'on peut appliquer pour deformer le % dessin. Si le booleen \ifclosepath est vrai alors la fleche est remplie % dans la couleur donnee par les parametres \rouge, \vert, \bleu. \def\LogoFlecheOne#1#2#3{% \special{" % gsave % 2.85 2.85 scale #1 setlinewidth % 1 setlinecap 1 setlinejoin % (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div % (\the\bleu ) cvr 255 div setrgbcolor % gsave % #2 10 mul #3 10 mul scale % pour passer en echelle des cm 0 0 moveto 0.4 neg 0.4 neg lineto 0 0.15 rlineto % 0.4 neg 0 rlineto 0 0.5 rlineto % 0.4 0 rlineto 0 0.15 rlineto % 0.4 0.4 neg rlineto % \ifclosepath gsave fill grestore \fi % stroke grestore % grestore % }% } \newdimen\dimeminter % Trace le logo de la fleche precedente dans la marge gauche \def\LeftLogoFlecheOne{\leavevmode\vadjust{\setbox1=\vtop{\hsize 10mm % \parindent=0pt\baselineskip=9pt\rightskip=4mm plus % 4mm\LogoFlecheOne{0.04}{0.9}{0.9}}% \dimeminter=\textwidth \advance\dimeminter by -\leftmargin \hbox to \dimeminter{\rlap{% \kern\leftmargin\kern-15mm\smash{\raise6pt\box1}}\hfill}}} % Une variante de logo avec des courbes au lieu de ligne. Pour les % parametres voir la macro precedente \def\LogoFlecheTwo#1#2#3{% \special{" % gsave % 2.85 2.85 scale #1 setlinewidth % 1 setlinecap 1 setlinejoin % (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div % (\the\bleu ) cvr 255 div setrgbcolor % gsave % #2 10 mul #3 10 mul scale % pour passer en echelle des cm newpath % 0 0 moveto 0.1 neg 0.01 0.65 neg 0.23 0.7 neg 0.3 rcurveto % 0.1 0.05 neg 0.25 0.07 neg 0.3 0.007 rcurveto % 0.1 neg 0.2 0.4 neg 0.9 0.65 neg 1.1 rcurveto % 0.2 0 0.3 0 0.4 0 rcurveto % 0.1 0.2 neg 0.4 0.9 neg 0.45 1.1 neg rcurveto % 0.08 0.05 0.10 0.06 0.12 0.15 rcurveto % closepath \ifclosepath gsave fill grestore \fi % stroke grestore % grestore % }% } % Trace le logo de la fleche precedente dans la marge gauche \def\LeftLogoFlecheTwo{\leavevmode\vadjust{\setbox1=\vtop{\hsize 10mm % \parindent=0pt\baselineskip=9pt\rightskip=4mm plus % 4mm\LogoFlecheTwo{0.02}{0.55}{0.55}}% \dimeminter=\textwidth \advance\dimeminter by -\leftmargin \hbox to \dimeminter{\rlap{% \kern\leftmargin\kern-15mm\smash{\raise6pt\box1}}\hfill}}} %-------------------------------------------------- % Logos "informatiques" : stations de travail, disques, serveurs, % routeurs. %-------------------------------------------------- % Trace d'un logo de Station Sun dont les traits sont d'epaisseur #1, % #2 et #3 sont les facteurs d'echelle que l'on peut appliquer pour % deformer le dessin. \def\SunStation#1#2#3{ \special{" gsave % 0 0 moveto % %------- modifier le scaling ici---- % faire qq chose comme : 0.3 #1 mul 0.3 #2 mul scale 0.3 #2 mul 0.3 #3 mul scale % %--------------------- #1 0.3 div 72 25.6 div mul setlinewidth % 1 setlinecap 1 setlinejoin % (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div % (\the\bleu ) cvr 255 div setrgbcolor % gsave % -63.0 162.0 translate % 0.900 -0.900 scale % newpath % 204 134 moveto 204 39 lineto 79 39 lineto 79 134 lineto % closepath stroke % newpath % 199 129 moveto 199 44 lineto 84 44 lineto 84 129 lineto % closepath stroke % newpath % 214 174 moveto 214 134 lineto 69 134 lineto 69 174 lineto % closepath stroke % newpath % 209 179 moveto 209 174 lineto 74 174 lineto 74 179 lineto % closepath stroke % grestore % }% } % Trace d'un logo d'unite de sauvegarde disk dont les traits sont % % d'epaisseur #1, #2 et #3 sont les facteurs d'echelle que l'on peut % appliquer pour deformer le dessin. \def\SunDisk#1#2#3{ \special{" gsave % 0 0 moveto % %--- modifier le scalling ici % faire qq chose comme : 0.3 #1 mul 0.3 #2 mul scale 0.3 #2 mul 0.3 #3 mul scale % %------------------------------- 1 setlinecap 1 setlinejoin % #1 0.3 div 72 25.6 div mul setlinewidth % (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div % (\the\bleu ) cvr 255 div setrgbcolor % gsave % -81.0 165.0 translate 0.900 -0.900 scale % gsave % 136 94 translate 47 20 scale % #1 0.3 div 72 25.6 div mul 47 div setlinewidth % newpath 0 0 1 0 360 arc stroke % grestore % gsave % 136 163 translate 47 20 scale % #1 0.3 div 72 25.6 div mul 47 div setlinewidth % newpath 0 0 1 0 360 arc stroke % grestore % gsave newpath % 89 94 moveto 89 159 lineto % lineto % stroke grestore gsave newpath % 184 94 moveto 184 164 lineto % lineto % stroke grestore % grestore % }} % Trace d'un logo de Serveur Sun dont les traits sont d'epaisseur #1, #2 % et #3 sont les facteurs d'echelle que l'on peut appliquer pour deformer % le dessin. \def\SunServer#1#2#3{ \special{" gsave % 0 0 moveto % %------- modifier le scaling ici---- 0.3 #2 mul 0.3 #3 mul scale % % faire qq chose comme : 0.3 #1 mul 0.3 #2 mul scale %--------------------- #1 0.3 div 72 25.6 div mul setlinewidth % 1 setlinecap 1 setlinejoin % (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div % (\the\bleu ) cvr 255 div setrgbcolor % gsave % %---- translation originale % -63.0 162.0 translate %---------- -43.0 205.0 translate % 0.900 -0.900 scale % newpath % 169 219 moveto 169 39 lineto 79 39 lineto 79 219 lineto % closepath stroke % newpath % 159 64 moveto 159 54 lineto 89 54 lineto 89 64 lineto % closepath stroke % newpath % 94 139 moveto 94 204 lineto % closepath stroke % newpath % 104 139 moveto 104 204 lineto % closepath stroke % newpath % 114 139 moveto 114 204 lineto % closepath stroke % newpath % 124 139 moveto 124 204 lineto % closepath stroke % newpath % 134 139 moveto 134 204 lineto % closepath stroke % newpath % 144 139 moveto 144 204 lineto % closepath stroke % newpath % 154 139 moveto 154 204 lineto % closepath stroke % newpath % 79 199 moveto 44 219 lineto 44 229 lineto % 79 229 lineto 79 219 lineto % closepath stroke % newpath % 169 199 moveto 204 219 lineto % 204 229 lineto 169 229 lineto 169 219 lineto % closepath stroke % grestore % }% } % Trace d'un logo d'un router - modem dont les traits sont d'epaisseur #1, % #2 et #3 sont les facteurs d'echelle que l'on peut appliquer pour % deformer le dessin. \def\SunRouter#1#2#3{ \special{"% gsave % 0 0 moveto % %------- modifier le scaling ici---- 0.3 #2 mul 0.3 #3 mul scale % % faire qq chose comme : 0.3 #1 mul 0.3 #2 mul scale %--------------------- #1 0.3 div 72 25.6 div mul setlinewidth % 1 setlinecap 1 setlinejoin % (\the\rouge ) cvr 255 div (\the\vert ) cvr 255 div % (\the\bleu ) cvr 255 div setrgbcolor % gsave % -63.0 162.0 translate % 0.900 -0.900 scale % newpath % 75 165 moveto 75 144 lineto % % 78 165 moveto 78 144 lineto % 81 165 moveto 81 144 lineto % % 84 165 moveto 84 144 lineto % 87 165 moveto 87 144 lineto % closepath stroke % newpath % gsave % 90 165 moveto 180 rotate -1 1 scale % /Helvetica findfont 10 scalefont setfont % (ROUTER) show % grestore % closepath % newpath % 164 174 moveto 164 134 lineto 69 134 lineto 69 174 lineto % closepath stroke % newpath % 159 179 moveto 159 174 lineto 74 174 lineto 74 179 lineto % closepath stroke % grestore % }} \catcode`\@=12\relax%