%% 3 lignes de jps a eliminer pour avoir du pur postscript -12 12 setxrange -2 8 setyrange 20 setxunit %% fin du jps a eliminer %% definition de la modulation par un chemin, exemple de Manuel Luque %% 2 definitions preliminaires : "defppathtable" et "interpolfunct" newpath -140 0 moveto 0 120 lineto 140 0 lineto defppathtable /table exch def /f {table interpolfunct} def %% juste pour visualiser le chemin gsave 0 0 1 setrgbcolor 3 setlinewidth closepath stroke grestore %% variations a partir d'un fichier original de : % (c) P. Kleiweg 1997 %% modifie par jpv, dim jun 18 13:18:13 CEST 2006 %% les parametres du fichier : %% le decalage (en picas) du texte par rapport a sa ligne de base /decalage_vertical 0 def %% la police et sa taille %% Caractères accentués /ReEncode { exch findfont dup length dict begin { 1 index /FID eq {pop pop} {def} ifelse }forall /Encoding ISOLatin1Encoding def currentdict end definefont pop }bind def /Font /Times-Roman /ISOfont ReEncode /ISOfont def Font findfont 28 scalefont setfont %% le texte a deformer (les x sont dans [-warphalf ; warphalf]) /warptxt (La géométrie du triangle) def %% la procedure de base pour la transformation des points du chemin %% (x, y) --> (X, Y) %% cette fonction peut utiliser les variables warpwidth et warphalf /warp { 3 dict begin /y exch def /x exch def x y %% on multiplie y par f (x)/20 (on divise par 20 car les f(x) %% oscillent autour de 20) x f 14 div mul end } bind def %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% tout ce qui suit n'a pas a etre modifie %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% /warpwidth warptxt stringwidth pop def %% largeur horizontale du texte /warphalf warpwidth 2 div def %% demi-largeur horizontale %% pour remplacer 'move' /warpmove{ %% on teste le booleen place 2 tokens plus en avant sur la pile %% si c'est 'true', alors on en est au 1er appel => on initialise %% le chemin 2 index { newpath } if %% puis on applique warp a notre point warp moveto %% on enleve le 'true' pour mettre un 'false' a la place pop false } bind def %% pour remplacer 'lineto /warpline { warp lineto } bind def %% pour remplacer 'curveto' /warpcurve { 6 2 roll warp 6 2 roll warp 6 2 roll warp curveto } bind def %% 'warpit' declenche la transformation du chemin courant /warpit { true { warpmove } { warpline } { warpcurve } { closepath } pathforall pop } bind def newpath %% on se deplace (init chemin) de facon a %% centrer la ligne de base du texte en (0 , - decalage_vertical) warphalf neg decalage_vertical neg moveto warptxt true charpath %% on cree le chemin %% maintenant on y va warpit %% on applique le pathforall stroke %% puis on encre