#!/bin/ksh # Erzeugung Stapeldiagramm (Einzelwerte werden gestapelt) als LaTeXdraw-Datei # Information, die nachfolgend in einer Zeile, muss auch in der # Eingabe-Datei in einer Zeile sein # Trennzeichen zwischen Eingabeeinheiten in einer Zeile ist der Zwischenraum # Falls nur eine Einheit in einer Zeile verlangt wird, koennen auch # Zwischenraeume in der Einheit sein # Die eingegebenen Zahlenwerte werden automatisch normalisiert # Die Zahlenwerte in einer Zeile werden gestapelt # Eingabe ueber stdin, Ausgabe ueber stdout # Leerzeilen werden ueberlesen # Kommentarzeilen (mit # oder % beginnend) werden ueberlesen # stdin: unterschrift # Bezeichnung y-Achse # Bezeichnung Spalte 1 (x-Achse) Bezeichnung Spalte 2 usw. # text1 werta wertb wertc ... # text2 werta wertb wertc ... # usw. # # falls Schluesselwort farbig allein in Zeile auftritt, # wird farbiges Diagramm erzeugt # falls Schluesselwort Folie allein in Zeile auftritt, # wird die Schrift als 18pt-Schrift erzeugt # (Makro \FXVIIIpt) # falls Schluesselwort Anmerkung allein in einer Zeile # auftritt, werden alle folgenden Zeilen als Anmerkungen # betrachtet und nach der Bildunterschrift zeilenweise # ausgegeben # stdout:LaTeXdraw-Datei, die in latexdraw eingelesen werden kann # Stand 6.3.96 Siegert # Dimension ggf durch xpixel und ypixel aendern # # Farben durch andere Zuweisung von Werten an farbe[] aenderbar # Farbnummern aus LaTeXdraw # Farben spaeter auch durch chatt in LaTeXdraw aenderbar # Farben werden im Diagramm ggf. zyklisch wiederholt awk 'BEGIN{xpixel=600; xmm=190; ypixel = 300; schwarz=0;grau90=2;grau80=3;grau70=4;grau60=5; grau50=6;grau40=7;grau30=8;grau20=9; grau10=10; rot=11; gruen=29; blau=33; magenta=36;orange=27; gelb=14; cyan=32; hellgruen=44; hellblau=52; hellrot=48; farbe[1]=schwarz;farbe[2]=grau80;farbe[3]=grau60; farbe[4]=grau40;farbe[5]=grau20;farbe[6]=grau90; farbe[7]=grau70;farbe[8]=grau50;farbe[9]=grau30; farbe[10]=grau10; anzfarben=10; farbe[11]=gruen;farbe[12]=blau;farbe[13]=rot; farbe[14]=magenta;farbe[15]=orange;farbe[16]=cyan; farbe[17]=hellgruen;farbe[18]=hellblau; farbe[19]=gelb; anzffarben=9; x0pixel = 250; y0pixel = 130; xupixel= x0pixel-30; yupixel = y0pixel-70; schrift=1; anzstapel = 0; anzteilstapel=0; maxwert=0; unterschrift=""; yachse = ""; xachse=""; anzanm=0; istanmerkung = 0; } {if (NF==0) next; if (substr($0,1,1)=="#") next; if (substr($0,1,1)=="%") next; if (istanmerkung == 1) {anzanm++; anmerkung[anzanm]=$0; next;} if ((NF==1)&&($1=="farbig")) { for (k=1;k<=anzffarben;k++) farbe[k]=farbe[k+anzfarben]; anzfarben=anzffarben; next;} if ((NF==1)&&($1=="Folie")) {schrift=6; next;} if ((NF==1)&&($1=="folie")) {schrift=6; next;} if ((NF==1)&&(substr($1,1,9)=="Anmerkung")) { istanmerkung = 1; next;} if ((NF==1)&&(substr($1,1,9)=="anmerkung")) { istanmerkung = 1; next;} if (unterschrift=="") {unterschrift = $0; next; } if (yachse=="") {yachse = $0; next; } if (xachse=="") {xachse = $1; for (s=2;s<=NF;s++) stapelname[s]=$s; anzteilstapel = NF; next; } anzstapel++; text[anzstapel] = $1; anz[anzstapel]=NF; summe = 0; for (j=2;j<=NF;j++) {wert[100*anzstapel+j]=$j; summe += $j;} if (summe > max) max = summe; } END{ print "LaTeXdraw (Siegert, TUM, C14.14)Digi"; printf(" %.3f (TEXFAKTOR) \n", xmm/xpixel ); print " 2.00000E+00 (TEXDASHLAENGE)"; print " 1.80000E+00 (TEXDOTGAP)"; print " 8.00000E-01 (TEXINTERDOTGAP)"; print " 16.667 16.667 562.800 295.000 1.000 0.000 0.000 1.000 (GITTERWERTE)"; print " 446 295 547 411 101 116 240 160 1 0 (AUSGABEOPTIONEN)"; dx = xpixel/2/(anzstapel+1); yfaktor = ypixel/max; xakt=x0pixel+dx; for (k=1;k<=anzstapel;k++) { yakt=y0pixel; m = anzfarben; for (j=2;j<=anz[k];j++) { m++; if (m>anzfarben) m -= anzfarben; dy=wert[100*k+j]*yfaktor; printf("14 %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f 0 3600 %d01 0 1 0 0 0 \n", \ xakt,yakt,xakt+dx,yakt+dy,xakt+dx,yakt,xakt,yakt+dy,farbe[m]); yakt = yakt+dy; } yakt=y0pixel; printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 0 1 0 0 0 \n", \ xakt,yakt,xakt+dx,yakt); for (j=2;j<=anz[k];j++) { dy=wert[100*k+j]*yfaktor; printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 0 1 0 0 0 \n", \ xakt,yakt,xakt,yakt+dy); printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 0 1 0 0 0 \n", \ xakt+dx,yakt,xakt+dx,yakt+dy); printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 0 1 0 0 0 \n", \ xakt,yakt+dy,xakt+dx,yakt+dy); yakt = yakt+dy; } printf("2 %.3f %.3f 0 0 0 0 0 0 0 3600 1 2 %d 2 6 0 \n", \ xakt+dx/2,y0pixel-10,schrift); print text[k]; xakt += 2*dx; } printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 2 1 0 0 0 \n", \ x0pixel,y0pixel,x0pixel+xpixel,y0pixel); printf("3 %.3f %.3f %.3f %.3f 0 0 0 0 0 3600 1 2 1 0 0 0 \n", \ x0pixel,y0pixel,x0pixel,y0pixel+ypixel+20); f=1; if (max >1) {while (max >f) f = f*10; f=f*0.1; a=max/f;} if (max <1) {while (max 1) printf("%s (Einheit %d) \n", yachse,f,schrift); if (f == 1) print yachse; if (f < 1) printf("%s (Einheit 1/%d) \n", yachse,1/f); printf("2 %.3f %.3f 0 0 0 0 0 0 0 3600 1 2 %d 4 0 0 \n", \ xupixel,yupixel,schrift); print unterschrift; dy =20; yakt=yupixel-dy/2; for (j=1;j<=anzanm;j++) { yakt -= dy; printf("2 %.3f %.3f 0 0 0 0 0 0 0 3600 1 2 %d 4 0 0 \n", \ xupixel,yakt,schrift); print anmerkung[j]; } dy = 20; dx = 15; xakt=x0pixel+xpixel+5; xakttext=xakt+2*dx; yakt=y0pixel+2*dy; m = anzfarben; for (j=2;j<=anzteilstapel;j++) { m++; if (m>anzfarben) m -= anzfarben; yakt += dy; printf("14 %.3f %.3f %.3f %.3f %.3f %.3f %.3f %.3f 0 3600 %d01 0 1 0 0 0 \n", \ xakt,yakt,xakt+dx,yakt+dx,xakt+dx,yakt,xakt,yakt+dx,farbe[m]); printf("2 %.3f %.3f 0 0 0 0 0 0 0 3600 1 2 %d 4 7 0 \n", \ xakttext,yakt+dy/2,schrift); print stapelname[j];} printf("2 %.3f %.3f 0 0 0 0 0 0 0 3600 1 2 %d 4 0 0 \n", \ x0pixel+xpixel+5,y0pixel,schrift); print xachse print "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 "; print "0 "; print "0 0 "; print ; }'