+BIN = epsnorm psftopst
PDOC = pst-anamorphosis-doc-scripts
$(PDOC).pdf: $(PDOC).tex
latex $< && dvips $(PDOC).dvi -o && ps2pdf -dNOSAFER $(PDOC).ps
+install: $(BIN)
+$(BIN) : % : %.pl
+ perl -c $<
+ cp $< $@
+ cp $@ ~/bin/$@
+
+
clean:
rm -f *.aux *.log *.dvi *.ps
\ No newline at end of file
--- /dev/null
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q'
+ if 0;
+use strict;
+# ==============================================================================
+# epsnorm
+# Version 1.0 (Dimanche 23 octobre 2011) Jean-Michel Sarlat
+# Ce script fait partie du projet pst-anamorphosis (Gilg, Luque, Sarlat)
+# http://melusine.eu.org/syracuse/G/pst-anamorphosis Checkout
+# http://melusine.eu.org/syracuse/G/git/?p=pst-anamorphosis.git git
+# ==============================================================================
+
+our $windows_pstoedit = '<chemin vers pstoedit.exe>';
+
+our $on_windows = $^O =~ /^MSWin/;
+our $GS = $on_windows ? "gswin32c" : "gs";
+our $PS = $on_windows ? $windows_pstoedit : "pstoedit";
+
+
+# === Acquisition des options de la ligne de commande -------------------------
+$::opt_dimmax = 4; # Dimension maximale : 4 cm par défaut
+use Getopt::Long;
+GetOptions(
+ "dimmax=s"
+);
+
+our $debug = 1;
+
+our $cm = 28.3464567;
+
+our $Fichier = $ARGV[0];
+-f $Fichier or die "Fichier <$Fichier> introuvable !\n";
+
+our ($Nom, $Dir, $Ext) = &FichierNRE($Fichier);
+
+our @Bbox = ();
+
+use File::Copy;
+# === Première transformation par pstoedit -------------------------------------
+{
+ my $f = "$Nom-original.$Ext";
+ copy($Fichier, $f);
+ my @a = ($PS, "-f", "ps", $f, $Fichier);
+ $debug and print STDERR "Processing by pstoedit (1) ...\n";
+ system(@a) == 0 or die "Running pstoedit failed\nCommand :".join(" ",@a)."\n";
+ $debug and print STDERR "Ok!\n";
+}
+# === Adaptation du fichier ----------------------------------------------------
+{
+ my $ps = &FichierListe($Fichier);
+ my $n = 0;
+ my $p = 0;
+ foreach (@$ps) {
+ $n++;
+ not($p) and /^\%\%Page: 1 1/ and $p = $n;
+ /^\%\%BoundingBox\: ([\d\.-]+) ([\d\.-]+) ([\d\.-]+) ([\d\.-]+)/ and
+ &setBbox($1,$2,$3,$4);
+ }
+ my $t = &getTranslate();
+ my $s = &getScale();
+ $$ps[$p] .= "$::opt_dimmax $cm mul $s $t";
+ open PS, "> $Fichier"; print PS join("\n", @$ps); close PS;
+}
+# === Seconde transformation par pstoedit --------------------------------------
+{
+ my $f = "$Nom-temp.$Ext";
+ copy($Fichier, $f);
+ my @a = ($PS, "-f", "ps", "-noclip", $f, $Fichier);
+ $debug and print STDERR "Processing by pstoedit (2)...\n";
+ system(@a) == 0 or die "Running pstoedit failed\nCommand :".join(" ",@a)."\n";
+ $debug and print STDERR "Ok!\n";
+ unlink $f if -f $f;
+}
+
+
+# === Acquisition de la BoundingBox --------------------------------------------
+sub setBbox {
+ @Bbox = @_;
+}
+# === Translation --------------------------------------------------------------
+sub getTranslate {
+ my $tx = "$Bbox[2] $Bbox[0] add 2 div neg";
+ my $ty = "$Bbox[3] $Bbox[1] add 2 div neg";
+ return "$tx $ty translate";
+}
+# === Échelle ------------------------------------------------------------------
+sub getScale {
+ my $lx = $Bbox[2] - $Bbox[0];
+ my $ly = $Bbox[3] - $Bbox[1];
+ my $m = $lx; $m = $ly if $ly > $lx;
+ return "$m div dup scale";
+}
+
+# === Contenu d'un fichier et éléments du nom ----------------------------------
+# ------------------------------------------------------------------------------
+# Contenu sous forme d'une liste de lignes
+sub FichierListe {
+ my $f = shift;
+ open(FICH, $f) or die "Le fichier $f est introuvable !\n";
+ my @l = <FICH>;
+ close FICH;
+ chomp @l;
+ return \@l;
+}
+# Contenu en un seul élément
+sub FichierScalaire {
+ my $f = shift;
+ local $/;
+ open(FICH, $f) or die "Le fichier $f est introuvable !\n";
+ my $c = <FICH>;
+ close FICH;
+ return $c;
+}
+# Nom, Repertoire et Extension d'un fichier
+sub FichierNRE {
+ my $f = shift;
+ use File::Basename;
+ my ($n, $r, $e) = fileparse($f,qw{\..*});
+ $e =~ s/^\.//;
+ return ($n, $r, $e);
+}
+
+
+
--- /dev/null
+eval '(exit $?0)' && eval 'exec perl -S $0 ${1+"$@"}' && eval 'exec perl -S $0 $argv:q'
+ if 0;
+use strict;
+# ==============================================================================
+# epsnorm
+# Version 1.0 (Dimanche 23 octobre 2011) Jean-Michel Sarlat
+# Ce script fait partie du projet pst-anamorphosis (Gilg, Luque, Sarlat)
+# http://melusine.eu.org/syracuse/G/pst-anamorphosis Checkout
+# http://melusine.eu.org/syracuse/G/git/?p=pst-anamorphosis.git git
+# ==============================================================================
+
+our $windows_pstoedit = '<chemin vers pstoedit.exe>';
+
+our $on_windows = $^O =~ /^MSWin/;
+our $GS = $on_windows ? "gswin32c" : "gs";
+our $PS = $on_windows ? $windows_pstoedit : "pstoedit";
+
+
+# === Acquisition des options de la ligne de commande -------------------------
+$::opt_dimmax = 4; # Dimension maximale : 4 cm par défaut
+use Getopt::Long;
+GetOptions(
+ "dimmax=s"
+);
+
+our $debug = 1;
+
+our $cm = 28.3464567;
+
+our $Fichier = $ARGV[0];
+-f $Fichier or die "Fichier <$Fichier> introuvable !\n";
+
+our ($Nom, $Dir, $Ext) = &FichierNRE($Fichier);
+
+our @Bbox = ();
+
+use File::Copy;
+# === Première transformation par pstoedit -------------------------------------
+{
+ my $f = "$Nom-original.$Ext";
+ copy($Fichier, $f);
+ my @a = ($PS, "-f", "ps", $f, $Fichier);
+ $debug and print STDERR "Processing by pstoedit (1) ...\n";
+ system(@a) == 0 or die "Running pstoedit failed\nCommand :".join(" ",@a)."\n";
+ $debug and print STDERR "Ok!\n";
+}
+# === Adaptation du fichier ----------------------------------------------------
+{
+ my $ps = &FichierListe($Fichier);
+ my $n = 0;
+ my $p = 0;
+ foreach (@$ps) {
+ $n++;
+ not($p) and /^\%\%Page: 1 1/ and $p = $n;
+ /^\%\%BoundingBox\: ([\d\.-]+) ([\d\.-]+) ([\d\.-]+) ([\d\.-]+)/ and
+ &setBbox($1,$2,$3,$4);
+ }
+ my $t = &getTranslate();
+ my $s = &getScale();
+ $$ps[$p] .= "$::opt_dimmax $cm mul $s $t";
+ open PS, "> $Fichier"; print PS join("\n", @$ps); close PS;
+}
+# === Seconde transformation par pstoedit --------------------------------------
+{
+ my $f = "$Nom-temp.$Ext";
+ copy($Fichier, $f);
+ my @a = ($PS, "-f", "ps", "-noclip", $f, $Fichier);
+ $debug and print STDERR "Processing by pstoedit (2)...\n";
+ system(@a) == 0 or die "Running pstoedit failed\nCommand :".join(" ",@a)."\n";
+ $debug and print STDERR "Ok!\n";
+ unlink $f if -f $f;
+}
+
+
+# === Acquisition de la BoundingBox --------------------------------------------
+sub setBbox {
+ @Bbox = @_;
+}
+# === Translation --------------------------------------------------------------
+sub getTranslate {
+ my $tx = "$Bbox[2] $Bbox[0] add 2 div neg";
+ my $ty = "$Bbox[3] $Bbox[1] add 2 div neg";
+ return "$tx $ty translate";
+}
+# === Échelle ------------------------------------------------------------------
+sub getScale {
+ my $lx = $Bbox[2] - $Bbox[0];
+ my $ly = $Bbox[3] - $Bbox[1];
+ my $m = $lx; $m = $ly if $ly > $lx;
+ return "$m div dup scale";
+}
+
+# === Contenu d'un fichier et éléments du nom ----------------------------------
+# ------------------------------------------------------------------------------
+# Contenu sous forme d'une liste de lignes
+sub FichierListe {
+ my $f = shift;
+ open(FICH, $f) or die "Le fichier $f est introuvable !\n";
+ my @l = <FICH>;
+ close FICH;
+ chomp @l;
+ return \@l;
+}
+# Contenu en un seul élément
+sub FichierScalaire {
+ my $f = shift;
+ local $/;
+ open(FICH, $f) or die "Le fichier $f est introuvable !\n";
+ my $c = <FICH>;
+ close FICH;
+ return $c;
+}
+# Nom, Repertoire et Extension d'un fichier
+sub FichierNRE {
+ my $f = shift;
+ use File::Basename;
+ my ($n, $r, $e) = fileparse($f,qw{\..*});
+ $e =~ s/^\.//;
+ return ($n, $r, $e);
+}
+
+
+
\begin{center}
\begin{pspicture}(-2,-2)(2,2)
-\input{../exemplespst/tiger.pst}
+\input{../pst/tiger.pst}
\end{pspicture}\\
\verb|\input{tiger.pst}|
\end{center}
\end{itemize}
+\section{epsnorm}
+
+Ce script transforme un fichier \textsf{EPS} vers un fichier au format
+\textit{Flattened PostScript} et en modifiant la \textsf{BoundingBox} de
+façon à ce qu'elle soit centrée sur l'origine \((0,0)\), sa dimension
+maximale étant fixée (procédure décrite dans la documentation de
+\textsf{pst-anamorphosis}: \emph{normalisation d'un fichier EPS}).
+
+Cette transformation permet d'obtenir un fichier directement exploitable
+par la macro \verb|\psanamorphosis|, ce qui explique aussi que l'option
+\verb|-noclip| soit passée à \textsf{pstoedit} pour éviter tout
+\emph{clipping}.
+
+\subsection{Usage}
+\begin{gbar}[OrangePale]
+\begin{boxedverbatim}
+$> epsnorm.pl [-dimmax n] monfichier.{eps|ps}
+\end{boxedverbatim}
+\end{gbar}%$
+
+Le fichier est alors transformé, le contenu initial étant
+sauvegardé dans \verb+monfichier-original.{eps|ps}+.
+
+\subsection{Option}
+
+\begin{description}
+\item[\texttt{-dimmax n}] La transformation effectuée par le script
+centre l'image sur \((0,0)\) et la met à l'échelle telle que la plus
+grande des deux dimensions soit 4 cm par défaut. Vous pouvez substituer
+la valeur \texttt{n} de votre choix à 4 avec cette option.
+\end{description}
+
+\subsection{Notes}
+
+\begin{itemize}
+
+\item Pour les utilisateurs de \textsf{windows}: il faut, au préalable,
+éditer le script et remplacer la chaîne \texttt{<chemin vers
+pstoedit.exe>} (vers la ligne 12) par le chemin complet d'accès à
+\textsf{pstoedit} sur votre sytème. Pour \textsf{Linux} ou
+\textsf{MacOS}, l'hypothèse est faite que le programme est accessible
+via la variable \texttt{PATH}.
+
+\item Le fichier à traiter ne doit comporter qu'une seule page, le
+résultat peut être surprenant dans le cas contraire...
+
+\end{itemize}
+
\end{document}
\ No newline at end of file