Re: pstrick

b>
> > 2) It would also be nice to have the option to export to some format that can
> >    be used "as is" in some latex documents eg eps. Or if it could genetate
> >    some pstricks code.
>
> That shouldn't be too hard. I'll try to massage the printing
> functionality into an EPS exporter.
>

Well I got some free time and I wrote a perl script that converts a gt
graph to a latex file using the package pstricks. It is really
straightforward and pstricks is a good format becuse one can easily edit
the resulting latex file. I thing it shouldn't be hard to have gt produce
pstrick code.

Anyway I attach the perl script in case any one wants to use it. I am not
very experienced in perl so don't expect anything elegant. It does work
though. I named it gt2pst.pl.

Best

Nikos.

------------- The script ---------------

#! /usr/bin/perl

# use strict;
# use warnings;

# This converts the output of graphthing (a file with gt ".gt") to a
# LaTeX picture using the pstricks package. The graphthing thing
# format is very similar to the pstricks format so that this was an
# easy exercise. Put this file in your path and give it executive
# rights "chmod 755 gt2pst.pl". If your perl executable is not in
# /usr/bin you should change the first line accordingly.  The usage
# is
#
#		   gt2pst.pl anything original.gt
#
# and the output is a LaTeX file original.gt.tex. If anything is 0
# the produced graph has "fat dots" as vertices and it looks very
# much like the graph you draw in graphthing. If anything is not 0
# (I suggest to use 1 in this case) the nodes are drawn as encircled
# letters (their labels). I hope the code is self explanatory. It
# parses the gt file and collects the nodes, their names and their
# coordinates as well as the edges, the names of the edges they
# connect and their kind ({--} or {->}).  All these data are
# converted into their pstricks counterparts in a straightforward
# manner. The only slight hassle is that gt measures hight "upside
# down" so that the y-coordinates of the nodes have first to be
# turned "downside up". If this is not clear you might want to
# compare the "original.gt" file with the output "original.gt.tex".
#
# If you want to use this consider it under the GPL version 2, or at
# your option, any later version.
#
# nea

my $switch =$ARGV[0];
my $file =$ARGV[1];

open(CSV,$file) || die "Cannot read from$file\n";
open (TMP,">$file.$$") || die "Cannot write to file.$$\n" ; my$nindex = 0;
my $eindex = 0; my @ycoordinates = (); my @nodes = (); my @edges = (); while (<CSV>){ my @list = split(/ /); s/^"|"$//g foreach @list;
if ($_=~/^vertex/){$nodes[$nindex] =$list[1];
$nodes[$nindex+1] = $list[3];$nindex = $nindex + 2 ; } else{ if ($_=~/^edge/){
$edges[$eindex] = $list[1];$edges[$eindex+1] =$list[2];
$edges[$eindex+2] = $list[3];$eindex = $eindex+3 ; } } } close CSV; my @nodescoor = (); my$i = 0;
for ($i = 0;$i < $#nodes/2;$i++) {
$nodescoor[$i] = $nodes[2*$i+1];
}

my @ycoord = @nodescoor;
my @xcoord = @nodescoor;

s/^$$\d+,(\d+)$$/\1/ foreach @ycoord;
s/^$$(\d+),\d+$$/\1/ foreach @xcoord;

my @sortycoord = sort @ycoord;
my @sortxcoord = sort @xcoord;

# This is the preamble and the beginning of the body. I needed the
# largest and smaller x and y coordinates to get the size of the
# image.

print TMP "\\documentclass\{article\}\n
\\usepackage\{pstricks,pst-node\}\n
\\begin\{document\}\n
\\psset\{unit=1pt\}\n
\\psset\{arrowsize=5pt 2\}\n
\\psset\{dotsize=3pt 2\}\n
\\begin\{pspicture\}$$sortxcoord[0],sortycoord[0]$$$$sortxcoord[#sortxcoord],sortycoord[#sortycoord]$$\n";

# End of the beginning stuff.

$i = 0; for ($i = 0; $i <$#ycoord+1; $i++) { # This turns gt$ycoord[$i] =$sortycoord[$#sortycoord] -$ycoord[$i]; # coordinates } # upside down. print TMP "%--------------- The nodes ---------------%\n";$i = 0;
for ($i = 0;$i < $#ycoord+1;$i++) {
if ($ARGV[0] == 0 ){ print TMP "\\dotnode$$xcoord[i],ycoord[i]$$\{$nodes[2*$i]\}\n"; } else { print TMP "\\cnodeput$$xcoord[i],ycoord[i]$$\{$nodes[2*$i]\}\{$nodes[2*$i]\}\n"; } } print TMP "%--------------- The edges ---------------%\n";$i = 0;
for ($i = 0;$i < $#edges/3;$i++) {
print TMP "\\ncline\{$edges[3*$i+1]\}\{$edges[3*$i]\}\{$edges[3*$i+2]\}\n";
}

print TMP "\\end\{pspicture\}\n \\end\{document\}";

close (TMP);
rename "$file.$$","file.tex" || die "Cannot update file\n";  #! /usr/bin/perl # use strict; # use warnings; # This converts the output of graphthing (a file with gt ".gt") to a # LaTeX picture using the pstricks package. The graphthing thing # format is very similar to the pstricks format so that this was an # easy exercise. Put this file in your path and give it executive # rights "chmod 755 gt2pst.pl". If your perl executable is not in # /usr/bin you should change the first line accordingly. The usage # is # # gt2pst.pl anything original.gt # # and the output is a LaTeX file original.gt.tex. If anything is 0 # the produced graph has "fat dots" as vertices and it looks very # much like the graph you draw in graphthing. If anything is not 0 # (I suggest to use 1 in this case) the nodes are drawn as encircled # letters (their labels). I hope the code is self explanatory. It # parses the gt file and collects the nodes, their names and their # coordinates as well as the edges, the names of the edges they # connect and their kind ({--} or {->}). All these data are # converted into their pstricks counterparts in a straightforward # manner. The only slight hassle is that gt measures hight "upside # down" so that the y-coordinates of the nodes have first to be # turned "downside up". If this is not clear you might want to # compare the "original.gt" file with the output "original.gt.tex". # # If you want to use this consider it under the GPL version 2, or at # your option, any later version. # # nea my switch = ARGV[0]; my file = ARGV[1]; open(CSV,file) || die "Cannot read from file\n"; open (TMP,">file.$$") || die "Cannot write to$file.$$\n" ; my nindex = 0; my eindex = 0; my @ycoordinates = (); my @nodes = (); my @edges = (); while (<CSV>){ my @list = split(/ /); s/^"|"//g foreach @list; if (_=~/^vertex/){ nodes[nindex] = list[1]; nodes[nindex+1] = list[3]; nindex = nindex + 2 ; } else{ if (_=~/^edge/){ edges[eindex] = list[1]; edges[eindex+1] = list[2]; edges[eindex+2] = list[3]; eindex = eindex+3 ; } } } close CSV; my @nodescoor = (); my i = 0; for (i = 0; i < #nodes/2; i++) { nodescoor[i] = nodes[2*i+1]; } my @ycoord = @nodescoor; my @xcoord = @nodescoor; s/^$$\d+,(\d+)$$/\1/ foreach @ycoord; s/^$$(\d+),\d+$$/\1/ foreach @xcoord; my @sortycoord = sort @ycoord; my @sortxcoord = sort @xcoord; # This is the preamble and the beginning of the body. I needed the # largest and smaller x and y coordinates to get the size of the # image. print TMP "\\documentclass\{article\}\n \\usepackage\{pstricks,pst-node\}\n \\begin\{document\}\n \\psset\{unit=1pt\}\n \\psset\{arrowsize=5pt 2\}\n \\psset\{dotsize=3pt 2\}\n \\begin\{pspicture\}$$sortxcoord[0],sortycoord[0]$$$$sortxcoord[#sortxcoord],sortycoord[#sortycoord]$$\n"; # End of the beginning stuff. i = 0; for (i = 0; i < #ycoord+1; i++) { # This turns gt ycoord[i] = sortycoord[#sortycoord] - ycoord[i]; # coordinates } # upside down. print TMP "%--------------- The nodes ---------------%\n"; i = 0; for (i = 0; i < #ycoord+1; i++) { if (ARGV[0] == 0 ){ print TMP "\\dotnode$$xcoord[i],ycoord[i]$$\{nodes[2*i]\}\n"; } else { print TMP "\\cnodeput$$xcoord[i],ycoord[i]$$\{nodes[2*i]\}\{nodes[2*i]\}\n"; } } print TMP "%--------------- The edges ---------------%\n"; i = 0; for (i = 0; i < #edges/3; i++) { print TMP "\\ncline\{edges[3*i+1]\}\{edges[3*i]\}\{edges[3*i+2]\}\n"; } print TMP "\\end\{pspicture\}\n \\end\{document\}"; close (TMP); rename "file.$$","$file.tex" || die "Cannot update$file\n";



• References: