Retour

Source : fichierps.mp

fichierps.mp
%% ----------------------------------------------------------------------------
%% fichierps.mp
%% Macros MetaPost pour gérer en parallèle un fichier PS destiné à produire un
%% fichier PDF.
%% 29 janvier 2005 - Jean-Michel Sarlat
%% ----------------------------------------------------------------------------
 
%%
%% Déclarations
%% ----------------------------------------------------------------------------
string FichierPS;
FichierPS := jobname & ".ps";
def InsPS expr s = write s to FichierPS enddef;
 
%%
%% Dimensions du document
%% ----------------------------------------------------------------------------
if not known PageLargeur:
    PageLargeur  := 640;
    PageHauteur  := 480;
    _PLX_  := 0;
    _PLY_  := 0;
    _PRX_  := 640;
    _PRY_  := 480;
fi;
 
% PageSize enregistre les dimensions déclarées.
def PageSize(expr lx,ly,rx,ry) =
    PageLargeur  := rx - lx;
    PageHauteur  := ry - ly;
    _PLX_  := lx;
    _PLY_  := ly;
    _PRX_  := rx;
    _PRY_  := ry;
enddef;
 
% InPS insrit la figure metapost et précise la translation nécessaire.
vardef InPS =
    InsPS(decimal _PLX_ & " neg " & decimal _PLY_ & " neg translate");
    InsPS("(" & jobname & "." & decimal charcode & ") run");
enddef;
 
% ClipPageSize découpe l'image aux dimensions déclarées.
vardef ClipPageSize =
    clip currentpicture to 
       (_PLX_,_PLY_)--(_PLX_,_PRY_)--(_PRX_,_PRY_)--(_PRX_,_PLY_)--cycle
enddef;
%% ----------------------------------------------------------------------------
 
 
%%
%% Inscriptions dans le fichier PS
%% ----------------------------------------------------------------------------
% Procédure d'initialisation
def InitFichierPS(expr lx,ly,rx,ry)  =
    PageSize(lx,ly,rx,ry);
    InsPS("<< /PageSize [" 
	& decimal PageLargeur
	& " "
	& decimal PageHauteur
	& "] >> setpagedevice");
    extra_endfig := "ClipPageSize;InPS;" & extra_endfig;
enddef;
%% ----------------------------------------------------------------------------
 
endinput