Source
%% taille fenetre en jps
-12 12 setxrange
-5 5 setyrange
20 setxunit

%% le fichier de Manuel Luque 
%% modifie par jpv, lun jun  5 15:07:42 CEST 2006
% (c) P. Kleiweg 1997
% adaptation plagiat M.L. 05/06/2006
 
/Font /Times-Roman def

/decalage_vertical 20 def       %% decalage en picas du texte en
                                %% dessous de la ligne y=0
%% la procedure de base pour la transformation des points du chemin 
%% la coordonnees en y est la pour obtenir une sinusoide sur une
%% longueur du texte (la periode) avec N oscillations
%% (x, y) --> (x, (y - decalage_vertical) *(2 + cos (x * N * periode)))
/warp {
   1 index
   periode N mul  mul
   cos 2 add
%%    %% pour visualiser les valeurs de y
%%    1 index
%%    (y) == ==
   %% c'est ici qu'on fait le decalage
   exch decalage_vertical sub
   mul
} bind def
 
%% 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
 

%% suppression du decalage de ML %% 297 600 translate

%% definition des differentes constantes 
% taille de des caracteres
Font findfont 40 scalefont setfont
/warptxt (Modulation d'amplitude) def  % texte a deformer
/warpwidth warptxt stringwidth pop def % largeur horizontale du texte
/warphalf warpwidth 2 div def          % demi-largeur horizontale
/N 2 def                               %  ondulation sur 2 periodes
/periode {360 warpwidth div} bind def  % une sinusoide
 
newpath
%% on cree un chemin avec une ligne horizontale y=30
warphalf neg 30 moveto  %% on se deplace (init chemin)
warphalf neg 1 warphalf { 30 lineto } for 
                        %% 1 trait horizontal (qui subira la
                        %% transformation lors du pathforall)

%% rebelote avec une ligne y=-1
warphalf neg -1 moveto   %% on se deplace (init chemin)
warphalf neg 1 warphalf { -1 lineto } for 

%% puis enfin le chemin constitue avec la chaine de cartacteres
warphalf neg 0 moveto   %% on se deplace (init chemin)
warptxt true charpath   %% on cree le chemin

%% maintenant on y va
warpit                  %% on applique le pathforall
stroke                  %% puis on encre


%% un peu de jps (a supprimer pour du pur postscript) %%
setCourierBold
(decalage = )
xmin ymin xmax ymin milieu uctext
decalage_vertical chaine cvs show