%% 6 lignes de jps a eliminer pour avoir du pur postscript %% taille fenetre en jps -12 12 setxrange -2 3 setyrange 20 setxunit #tex# Projection sur un cylindre. $r > $ longueur de la chaîne xmin ymax xmax ymax milieu [2 dup] dctexlabel %% fin du jps a eliminer %% le fichier de Manuel Luque %% modifie par jpv, dim jun 18 15:16:03 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 %% rayon du cylindre (en picas) /r {warphalf 3.14159 2 div div 30 add} def /rd {180 pi div mul} def %% transforme des rd en degres /Sin {rd sin} 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 r div Sin r mul y 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