%% 3 lignes de jps a eliminer pour avoir du pur postscript %% taille fenetre en jps -12 12 setxrange -2 3 setyrange 20 setxunit %% fin du jps a eliminer %% 2 definitions preliminaires : "defppathtable" et "interpolfunct" %% voir http://melusine.eu.org/syracuse/bbgraf/jps2ps/pps/defppathtable.pps %% et http://melusine.eu.org/syracuse/bbgraf/jps2ps/pps/interpolfunct.pps %% definition d'une fonction numerique a partir de son graphe (défini %% par un chemin) %% on utilisera ensuite cette fonction numerique pour deformer le texte newpath -200.0 9.99988 moveto -170.858 20.0947 -134.665 23.7141 -99.9998 19.9999 curveto -29.9998 12.4999 -29.9998 12.4999 39.9998 4.99994 curveto 63.2333 2.51058 81.0974 12.7908 99.9998 19.9999 curveto 128.472 30.8586 165.365 34.548 200.0 30.0 curveto defppathtable /table exch def /f {table interpolfunct} def %% juste pour visualiser le chemin 0 0 1 setrgbcolor stroke 0 setgray %% le fichier de Manuel Luque %% modifie par jpv, dim jun 18 13:18:13 CEST 2006 % (c) P. Kleiweg 1997 % adaptation plagiat M.L. 05/06/2006 %% les parametres du fichier : %% le decalage pour positionner le texte dans la page %% 297 600 translate %% le decalage (en picas) du texte par rapport a sa ligne de base /decalage_vertical 0 def %% la police et sa taille /Times-Roman findfont 40 scalefont setfont %% le texte a deformer (les x sont dans [-warphalf ; warphalf]) /warptxt (Modulation d'amplitude) 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 20 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