#!/usr/local/bin/perl -w require "getopts.pl"; &Getopts('x:y:lpo:s:t:uvhX:Y:'); ################################### # Default output file $default_out="paper"; ################################### # getopts Options print "****** GENPAP by A. Bussmann (c) 1997 ******\n"; if($opt_h){$opt_h=0;die &usage;} if($opt_x){$anzx=$opt_x;} else{$anzx=3;$opt_x=0;} if($opt_y){$anzy=$opt_y;} else{$anzy=3;$opt_y=0;} if($opt_o){$out=$opt_o;} else{$out=$default_out;$opt_o=0;} if($opt_s){$s=$opt_s;} else{$s=1;$opt_s=0;} if($opt_t){$t=$opt_t;} else{$t=1;$opt_t=0;} if($opt_X){$XL=$opt_X;} else{$XL="";$opt_X=0;} if($opt_Y){$YL=$opt_Y;} else{$YL="";$opt_Y=0;} if(!$opt_l){$opt_l=0;} if(!$opt_p){$opt_p=0;} if(!$opt_u){$opt_u=0;} if(!$opt_v){$opt_v=0;} ################################### # commands to produce dvi- and postscript-file $command_latex="latex " . $out . ".tex >/dev/null 2>/dev/null"; $command_dvips="dvips " . $out . ".dvi >/dev/null 2>/dev/null"; $command_gs="gs " . $out . ".ps -q -c quit >/dev/null"; ################################### # common vars $X=270*$s; $Y=180*$t; $f=$Y*$anzy**(-1); $g=$X*$anzx**(-1); $ff=$Y*$anzx**(-1); $gg=$X*$anzy**(-1); ################################### # open tex-file print "****** Writing " . $out . ".tex\n"; open(DAT,">$out".".tex"); ################################### # tex-file head print DAT "\\documentstyle[11pt,psfig,pictex,graphics,colordvi,landscape,rotating]{article}\n"; print DAT "\\addtolength{\\textwidth}{7cm}\n"; print DAT "\\addtolength{\\textheight}{11cm}\n"; print DAT "\\begin{document}\n"; print DAT "\\pagestyle{empty}\n"; if($opt_l || ($opt_l==0 && $opt_p==0)){ print DAT "\\oddsidemargin=-.7in\n"; } else{ print DAT "\\oddsidemargin=-.2in\n"; } print DAT "\\topmargin=-1.2in\n"; print DAT "\\enlargethispage{2in}\n"; if($opt_l || ($opt_l==0 && $opt_p==0)){ print DAT "\\begin{sideways}\n"; } ################################### # now starting the picture print DAT "\\Red{\n"; print DAT "\\beginpicture\n"; ################################### # set units and plotarea if($opt_y && $opt_x ==0 ){ if($opt_l || ($opt_l==0 && $opt_p==0)){ printf DAT "\\setcoordinatesystem units <1mm,%fmm>\n",($f); printf DAT "\\setplotarea x from 0 to $X, y from 1 to %d\n",$anzy+1; } else{ printf DAT "\\setcoordinatesystem units <1mm,%fmm>\n",($gg); printf DAT "\\setplotarea x from 0 to $Y, y from 1 to %d\n",$anzy+1; } } if($opt_y == 0 && $opt_x){ if($opt_l || ($opt_l==0 && $opt_p==0)){ printf DAT "\\setcoordinatesystem units <%fmm,1mm>\n",($g); printf DAT "\\setplotarea x from 1 to %d, y from 0 to $Y\n",$anzx+1; } else{ printf DAT "\\setcoordinatesystem units <%fmm,1mm>\n",($ff); printf DAT "\\setplotarea x from 1 to %d, y from 0 to $X\n",$anzx+1; } } if($opt_y && $opt_x){ if($opt_l || ($opt_l==0 && $opt_p==0)){ printf DAT "\\setcoordinatesystem units <%fmm,%fmm>\n",($g),($f); printf DAT "\\setplotarea x from 1 to %d, y from 1 to %d\n",$anzx+1,$anzy+1; } else{ printf DAT "\\setcoordinatesystem units <%fmm,%fmm>\n",($ff),($gg); printf DAT "\\setplotarea x from 1 to %d, y from 1 to %d\n",$anzx+1,$anzy+1; } } if($opt_x == 0 && $opt_y == 0 ){ printf DAT "\\setcoordinatesystem units <1mm,1mm>\n"; if($opt_l || ($opt_l==0 && $opt_p==0)){ printf DAT "\\setplotarea x from 0 to $X, y from 0 to $Y\n"; } else{ printf DAT "\\setplotarea x from 0 to $Y, y from 0 to $X\n"; } } ################################### # now starting x-axis # print DAT "\\axis right label {\\begin{turn}{-90}\\tiny\\ \\ \\hfill Fachhochschule Osnabrück, Fachbereich Werkstoffe und Verfahren\\end{turn}} / \n"; if($opt_x){ print DAT "\\axis bottom label {$XL}\n"; print DAT "ticks logged andacross length <3mm> "; for($i=0;$i<$anzx;$i++){ printf DAT "width <0.2pt> from %.0f to %.0f by %.0f\n", 10**($i+1),9*10**($i+1),10**($i+1); } print DAT "length <1.5mm> "; for($i=0;$i<$anzx;$i++){ printf DAT "width <0.2pt> from %.0f to %.0f by %.0f\n", 10**($i+1)+(10**($i+1))/2,9*10**($i+1)+(10**($i+1))/2,10**($i+1); } if($opt_u){ print DAT "length <.5mm> "; for($i=0;$i<$anzx;$i++){ printf DAT "width <0.2pt> from %.0f to %.0f by %.0f\n", 10**($i+1)+(10**($i+1))/4,9*10**($i+1)+(10**($i+1))/4,10**($i+1); } for($i=0;$i<$anzx;$i++){ printf DAT "width <0.2pt> from %.0f to %.0f by %.0f\n", 10**($i+1)+(10**($i+1))/4*3,9*10**($i+1)+(10**($i+1))/4*3,10**($i+1); } } printf DAT "length <4mm> width <0.5pt> at "; for($i=1;$i<=$anzx+1;$i++){ printf DAT "%.0f ",10**($i); } printf DAT " / /\n"; } else{ if($opt_l || ($opt_l==0 && $opt_p==0)){ print DAT "\\axis bottom label {$XL}\n"; print DAT "ticks andacross width <0.4pt> quantity 28\n"; print DAT "short width <0.2pt> from 1 to $X by 1\n"; print DAT "length <4mm> width <0.5pt> at "; for($i=0;$i<=$X;$i+=50){ printf DAT "%d ",$i; } print DAT " / /\n"; } else{ print DAT "\\axis bottom label {$XL}\n"; print DAT "ticks andacross width <0.4pt> quantity 19\n"; print DAT "short width <0.2pt> from 1 to $Y by 1\n"; print DAT "length <4mm> width <0.5pt> at "; for($i=0;$i<=$Y;$i+=50){ printf DAT "%d ",$i; } print DAT " / /\n"; } } ################################### # now starting y-axis if($opt_y){ print DAT "\\axis left label {$YL}\n"; print DAT "ticks logged andacross length <3mm> "; for($i=0;$i<$anzy;$i++){ printf DAT "width <0.2pt> from %.0f to %.0f by %.0f\n", 10**($i+1),9*10**($i+1),10**($i+1); } print DAT "length <1.5mm> "; for($i=0;$i<$anzy;$i++){ printf DAT "width <0.2pt> from %.0f to %.0f by %.0f\n", 10**($i+1)+(10**($i+1))/2,9*10**($i+1)+(10**($i+1))/2,10**($i+1); } if($opt_v){ print DAT "length <.5mm> "; for($i=0;$i<$anzy;$i++){ printf DAT "width <0.2pt> from %.0f to %.0f by %.0f\n", 10**($i+1)+(10**($i+1))/4,9*10**($i+1)+(10**($i+1))/4,10**($i+1); } for($i=0;$i<$anzy;$i++){ printf DAT "width <0.2pt> from %.0f to %.0f by %.0f\n", 10**($i+1)+(10**($i+1))/4*3,9*10**($i+1)+(10**($i+1))/4*3,10**($i+1); } } printf DAT "length <4mm> width <0.5pt> at "; for($i=1;$i<=$anzy+1;$i++){ printf DAT "%.0f ",10**($i); } printf DAT " / /\n"; } else { if($opt_l || ($opt_l==0 && $opt_p==0)){ print DAT "\\axis left label {$YL}\n"; print DAT "ticks andacross width <0.4pt> quantity 19\n"; print DAT "short width <0.2pt> from 1 to $Y by 1\n"; print DAT "length <4mm> width <0.5pt> at "; for($i=0;$i<=$Y;$i+=50){ printf DAT "%d ",$i; } print DAT " / /\n"; } else{ print DAT "\\axis left label {$YL}\n"; print DAT "ticks andacross width <0.4pt> quantity 28\n"; print DAT "short width <0.2pt> from 1 to $X by 1\n"; print DAT "length <4mm> width <0.5pt> at "; for($i=0;$i<=$X;$i+=50){ printf DAT "%d ",$i; } print DAT " / /\n"; } } print DAT "\\endpicture\n"; print DAT "}\n"; ################################### # picture finished if($opt_l || ($opt_l==0 && $opt_p==0)){ print DAT "\\end{sideways}\n"; } print DAT "\\end{document}\n"; close(DAT); ################################### # produce dvi- and postscript-file print "****** Executing: " . $command_latex . "\n"; system($command_latex); print "****** Executing: " . $command_dvips . "\n"; system($command_dvips); ################################### print "****** Executing: " . $command_gs . "\n"; # view postscript-file system($command_gs); sub usage{ $h=" genpap - perlscript to produce mm- and log-scaled paper. written by A. Bussmann (c) 1997 Usage: genpap [options] Options: -x num - x-axis num(1-8) times log-scaled -y num - y-axis num(1-8) times log-scaled -o file - write output to file (default=paper) -v num - x-size times num (default=1) -t num - y-size times num (default=1) -u - additional x-tics -v - additional y-tics -p - portrait -l - landscape (default) -h - this help -X text - x-label (may be latex-formated) -Y text - y-label (may be latex-formated) Examples: genpap - xy-axis mm-scaled. genpap -x3 - x-axis log-scaled,y-axis mm-scaled genpap -x3 -y2 - xy-axis logscaled genpap -p -y2 - y-axis log-scaled,x-axis mm-scaled, portrait\n"; $h; }