% ASCREEN-3.2-HANDBUCH --- Anhang B (ASCREEN und Graphik)
% Copyright (C) 1992 by Anselm Lingnau
%
\chapter{\ASCREEN\ und Graphik}

\section{�berblick}

Viele Dokumente gewinnen durch Hinzuf�gen von Graphik.
Dazu geh�ren nicht nur Schemazeichnungen
mathematischer oder physikalischer Sachverhalte,
sondern auch zum Beispiel chemische Strukturformeln
oder Fotos, die mit einem Scanner eingelesen wurden.

Das Einbinden von Graphiken in Texte
ist ein traditioneller Schwachpunkt
des sonst so leistungsf�higen \TeX-""Systems.
In zehn Jahren ist es der Benutzergemeinde nicht gelungen,
ein halbwegs brauchbares Verfahren zum portablen Verwenden von Graphik
zu finden, geschweige denn zu standardisieren
und �berall verf�gbar zu machen.
Die einzige Methode, die wirklich sowohl weit verbreitet
als auch f�r naive Benutzer einigerma�en zug�nglich ist,
ist die {\tt picture}-Graphik von \LaTeX,
deren Verwendung aber einen gewissen Masochismus voraussetzt.
Inhaber moderner WYSIWYG-""Textsysteme
w�lzen sich regelm��ig vor Lachen auf dem Boden,
wenn der gestre�te \LaTeX-""Bildchenmaler
wieder zu Lineal und Millimeterpapier greift.
Verst�ndlicherweise haben sich daher
verschiedene Schulen alternativer Graphikeinbindung gebildet:
wohlhabende Personen benutzen PostScript mit einem entsprechenden Drucker,
die Treiber f�r billigere Drucker unterst�tzen oft besondere
(untereinander inkompatible) Graphikbefehle,
und wieder andere Benutzer wandeln ihre Graphiken
mit speziellen Programmen in \TeX-""Zeichens�tze um,
wozu wenigstens keine ger�teabh�ngigen Treiber n�tig sind
(man braucht aber Treiber, die robust genug sind,
um eventuell ziemlich gro�e Zeichen zu verkraften).
Der Turmbau zu Babel d�rfte gegen�ber dieser Vielfalt von "`Sprachen"'
geradezu ein Muster an Koordination und Verst�ndigung gewesen sein.

Abhilfe ist leider zun�chst nicht abzusehen.
Der beflissene Implementierer eines Druckertreibers oder Previewers
hat darum die Qual der Wahl
(bzw. Wahl der Qual, wenn es ans Implementieren geht).

Auf dem Atari~ST ist das Standardformat f�r Rasterbilder
das IMG- oder {\em Image\/}-Format,
das einfarbige oder bunte Bilder beliebiger Gr��e und Auf"|l�sung
komprimiert speichern kann.
Das IMG-Format hat seine M�ngel,
vor allem wohl die Tatsache, da� Farbinformationen nicht gespeichert werden
(f�r einen Hack, der dies beheben kann, siehe Gei�$^2$,
{\em Vom Anf�nger zum GEM-Profi}, Heidelberg: H�thig 1990).
Nichtsdestotrotz sollte jedes Graphikprogramm,
das sein Geld wert ist,
das IMG-Format bearbeiten k�nnen.
\begin{aha}
Nicht da� das immer so w�re.
Ein bekannter Shareware-""Iconeditor etwa
gibt seinen IMG-Dateien offenbar v�llig unmotiviert
die Versionsnummer~2 statt~1,
was konservative und vorsichtige Programme wie \ASCREEN\
an den eigenen F�higkeiten zweifeln l��t --- unn�tigerweise, wie sich zeigt.
Bei den IMG-Dateien anderer Programme stimmt die Versionsnummer,
aber daf�r sind zum Beispiel die Abmessungen der Graphik falsch usw.\ usf.
Seufz.
\end{aha}

Sowohl die Treiber der \TeX-""Implementierung von Stefan Lindner
als auch die der Implementierung von Christoph Strunk
k�nnen IMG-Dateien einlesen, skalieren und ausgeben.
Die Syntax hierf�r ist selbstverst�ndlich bei beiden Familien verschieden,
wobei Christoph Strunk neuerdings auch die Lindner-Befehle unterst�tzt.
\ASCREEN\ versteht auch beides.

Die Strunkschen Treiber kennen au�erdem noch einen Satz von
\verb|\special|-Befehlen f�r verschiedene Graphikprimitive.
Dazu geh�ren Linien mit unterschiedlichen Mustern, Kreise und Ellipsen
und heuer sogar Splines und andere nicht ganz simple Sachen.
\ASCREEN\ unterst�tzt die allermeisten Befehle
dieser ``CSG-Level-2-Graphik''.

Was die Graphik durch \verb|\special|-Befehle angeht,
so ist der am besten etablierte Standard wohl der,
den das UNIX-Programm {\sl tpic\/} gesetzt hat.
Viele Treiber auf unterschiedlichen Rechnern und Betriebssystemen
verstehen heute diese {\sl tpic\/}-\verb|\special|s,
nicht zuletzt auf dem Atari der Post"-Script-""Treiber {\sl dvips\/}
und (wieder mal) die Treiber von Christoph Strunk.
Und \ASCREEN.

\section{IMG-Graphik im Detail}

Nach der etwas oberfl�chlichen Erkl�rung der IMG-""Graphikeinbindung
im vorigen Abschnitt hier eine etwas genauere Diskussion.
Aber zun�chst noch eine kritische Vorbemerkung:

{\em IMG-Einbindung ist gro�er Mist.}
Da� so etwas nur auf Ataris funktioniert,
ist notfalls zu verschmerzen ---
Nicht alle haben ja (etwa in der Uni) Zugriff auf eine UNIX-""Workstation
nebst schnellem Laserdrucker,
um die daheim formatierten Dokumente zu drucken.
Tatsache ist allerdings, da� die Auf"|l�sung bezahlbarer Drucker
f�r eine saubere Halbtondarstellung effektiv nicht ausreicht,
insbesondere wenn man an dem Bild noch herumzerren und -stauchen mu�,
um es ins richtige Format zu bringen:
Unsch�ne Schmiereffekte oder Verzerrungen sind meist die Folge.
Ferner kommen die dekorativen Graustufen-""F�llmuster,
die auf dem Bildschirm so nett aussehen,
auf den meisten Druckern solide schwarz heraus
(zumindest wenn diese Drucker das Bild mit Nadeln aufs Papier pieksen,
soll's ja geben).
Halbtongraphiken sind also meist Keine Gute Idee.
Und f�r Strichzeichnungen sollte man,
wenn irgend m�glich,
auf einen der \verb|\special|-S�tze oder gar auf \LaTeX-""{\tt picture}s
zur�ckgreifen,
die wenigstens vektororientiert und daher auf"|l�sungsunabh�ngig sind.
Es gibt heute schon viele Programme,
f�r den Atari etwa {\sl\TeX draw\/} oder {\sl ZP"-CAD},
die das interaktive "`Malen"' von solchen Graphiken
auch ohne Vorzeichnen auf Millimeterpapier unterst�tzen.

Wer nun partout die IMG-Einbindung verwenden m�chte,
hat bei \ASCREEN\ die Auswahl zwischen dem Lindner-Stil und dem Strunk-Stil
bei den \verb|\special|-Befehlen:
\begin{verse}
L: \verb*|\special{graphic img |\<Dateiname>\verb|}|\\
S: \verb*|\special{CS!g |$f$\verb*| |\<Dateiname>\verb|}|
\end{verse}
Beide Befehle bewirken im wesentlichen dasselbe:
Die Datei \<Dateiname> wird gelesen
und auf der entsprechenden Seite dargestellt,
wobei die linke untere Ecke der Graphik
an der gerade aktuellen Position auf der Seite zu stehen kommt.
(Der reelle Faktor $f$ bei Christoph Strunk dient zur Skalierung der Graphik.)
Die Position auf der Seite wird durch die Graphikeinbindung nicht ver�ndert,
so da� die Graphik aus der Sicht von \TeX\ keinen Platz einnimmt.
Dieses Problem l�sen sowohl Stefan und Lutz als auch Christoph
ziemlich auf dieselbe Weise;
namentlich mu� die \TeX-""Datei wissen, wie gro� die Graphik sein wird,
und entsprechend Platz reservieren.
Die Anleitungen zu den jeweiligen \TeX-""Systemen enthalten hierzu
und dar�ber, wie man diese Gr��en herausfinden oder gar �ndern kann,
ausf�hrliche Informationen,
f�r die hier leider kein Platz ist.
Oft gibt es auch vorgefertigte Makros und Hilfsprogramme,
die die Hauptarbeit des Einbindens �bernehmen.

Ein Problem beim Einbinden von IMG-Dateien sind die Pfadnamen.
Insbesondere die \TeX-""Implementierung von Christoph Strunk
legt die Verwendung absoluter Pfadnamen f�r die IMG-Dateien nahe.
Dies ist aber nicht empfehlenswert,
denn dadurch werden die \DVI-Dateien systemabh�ngig
--- sie enthalten ja den Namen des IMG-""Verzeichnisses
auf dem System, wo der \TeX-Lauf stattgefunden hat.
Solche \DVI-Dateien kann man nicht mehr ohne weiteres weitergeben,
nicht mal, wenn man auf dem Atari bleibt und alle IMG-Dateien dazutut.
Viel besser ist es, bei der Graphikeinbindung
nur den eigentlichen Namen der IMG-""Datei ohne den Pfadanteil anzugeben
und den Treiber den Suchpfad beisteuern zu lassen.
Sowohl die Treiber von Christoph Strunk als auch die von Stefan Lindner
unterst�tzen eine Option,
mit der man ein Verzeichnis f�r die IMG-""Dateien festlegen kann.
Auch \ASCREEN\ erlaubt im Dialog "`Pfade"', einen "`IMG-Pfad"' einzugeben.
Dies kann sogar eine durch Kommata getrennte Folge
mehrerer Verzeichnisnamen sein,
die dann von links nach rechts durchsucht wird.
\begin{aha}
Der "`popul�rste"' Fehler in der vorigen \ASCREEN-Version
bestand darin,
da� Schr�gstriche in absoluten Pfadnamen bei IMG-""Dateien
nicht in die Atari-""�blichen R�ckw�rtsschr�gstriche umgesetzt wurden.
Zumindest gingen dar�ber die meisten Beschwerden ein --- sicher zu Recht.
Inzwischen wird diese Transformation in allen Dateinamen vorgenommen.
\end{aha}

\section{CSG-Graphik}

Von Christoph Strunk stammt die Definition einer Reihe von Graphikprimitiven,
die �ber den \verb|\special|-Befehl implementiert werden.
Der \TeX-Befehl \verb|\special| macht es m�glich,
Zeichenketten ohne Bearbeitung durch \TeX\ in die \DVI-Datei zu schreiben,
wo der Ger�tetreiber sie vorfinden und auswerten kann.
Dies ist zwar eine praktische M�glichkeit,
um Sachen zu tun, die in \TeX\ selbst schwierig sind (etwa Graphik\dots),
aber \verb|\special|-Befehle sind mit Vorsicht zu genie�en:
wenn Sie einen solchen Befehl geben,
verlassen Sie sich darauf, da� der Ger�tetreiber ihn auch verstehen kann.
Und das ist beileibe nicht garantiert.

Von Christoph Strunks "`CSG-Graphik-\verb|\special|s"' gibt es zwei
Geschmacksrichtungen:
die etwas �ltere Stufe~1 und die aktuelle Stufe~2.
Die Stufe~2 ist zum gr��ten Teil eine Obermenge von Stufe~1.
\ASCREEN\ unterst�tzt die allermeisten Befehle der Stufe~2,
lediglich zwei Kommandos wurden nicht implementiert (siehe Tabelle).
Hier ist eine Liste der CSG-Befehle der Stufe~2.
F�r eine genaue Diskussion verweise ich aus Platzgr�nden
auf die Dokumentation zu Christoph Strunks \TeX-""Implementierung.
Alle Befehle beginnen mit der Zeichenfolge "`{\tt CS!}"'.
Der Punkt $(x, y)$ ist die aktuelle Position auf der Druckseite,
alle Ma�e sind in Einheiten der mit {\tt CS!u} festgelegten "`Einheitsl�nge"'.
Die Koordinatenachsen sind wie in der Mathematik �blich angeordnet.
\begin{description}
\item[CS!a] $dx$ $dy$ $\phi$ $\alpha$ $\beta$
	Ellipsenbogen um $(x, y)$ mit den Halbachsen $dx$ und $dy$,
	gedreht um den Winkel $\phi$ zur $x$-Achse,
	beginnend bei $\alpha$~Grad (relativ zum Ende der Halbachse $dx$)
	und endend bei $\beta$~Grad.
\item[CS!b2] $dx_0$ $dy_0$ $dx_1$ $dy_1$
	Quadratische B\'ezierkurve mit den Kontrollpunkten
	$(x, y)$, $(x+dx_0, y+dy_0)$ und $(x+dx_1, y+dy_1)$.
\item[CS!b3] $dx_0$ $dy_0$ $dx_1$ $dy_1$ $dx_2$ $dy_2$
	Kubische B\'ezierkurve mit den Kontrollpunkten
	$(x, y)$, $(x+dx_0, y+dy_0)$, $(x+dx_1, y+dy_1)$
	und $(x+dx_2, y+dy_2)$.
\item[CS!c] $r$
	Kreis mit dem Radius $r$ um den Punkt $(x, y)$.
\item[CS!c0] $d$
	Kreis mit dem Durchmesser $d$ um den Punkt $(x, y)$.
\item[CS!d] $r$
	Ausgef�llter Kreis mit dem Radius $r$ um den Punkt $(x, y)$.
\item[CS!d0] $d$
	Ausgef�llter Kreis mit dem Durchmesser $d$ um den Punkt $(x, y)$.
\item[CS!e] $dx$ $dy$
	Ausgef�llte Ellipse um $(x, y)$ mit den Halbachsen $dx$ und $dy$.
\item[CS!g] $f$ $n$
	Bindet die IMG-Graphik $n$ um den (reellen) Faktor $f$ vergr��ert ein.
	Die linke untere Ecke der Graphik liegt bei $(x, y)$.
\item[CS!G] $f$ $n$
	Entspricht in \ASCREEN\ dem vorigen Befehl.
	In Christoph Strunks Treibern wird f�r R�ckw�rtskompatibilit�t
	ein anderer Algorithmus verwendet.
\item[CS!i] $n$
	Liest die Datei mit dem Namen $n$ ein.
	$n$ mu� weitere CSG-Befehle enthalten;
	das genaue Format kann hier nicht erl�utert werden
	(siehe Dokumentation zum Strunk-\TeX).
	In der CSG-Stufe~1 sind in einer solchen Datei
	weitere {\tt i}-Befehle zul�ssig.
	Diese M�glichkeit wurde in der Stufe~2 entfernt;
	\ASCREEN\ unterst�tzt dies jedoch weiter.
\item[CS!l] $dx$ $dy$
	Zieht eine Linie von $(x, y)$ nach $(x + dx, y + dy)$.
	Dabei wird der mit {\tt CS!t} eingestellte Linientyp verwendet.
\item[CS!m] $n$
	Bindet das GEM-Metafile $n$ ein.
	Dieses Kommando wird von \ASCREEN\ {\em nicht\/} unterst�tzt,
	da es sich (ohne ein hypermodernes GDOS)
	nicht sauber realisieren l��t.
\item[CS!r]
	Setzt die Einheitsl�nge auf {\tt 1pt}
	und den Linientyp auf "`durchgezogene Linie"' zur�ck.
\item[CS!t] $t$
	Wahl eines Linientyps. Die Typen sind: 0 -- durchgezogene Linie,
	1 -- lang gestrichelt, 2 -- gepunktet, 3 -- Strich-Punkt,
	4 -- kurz gestrichelt, 5 -- Strich-Punkt-Punkt, 6 -- weit gepunktet
\item[CS!u] $l$
	Setzt die Einheitsl�nge auf $l$.
	$l$ kann dabei eine beliebige \TeX-""Dimension sein.
\item[CS!w] $w$
	Setzt die Linienbreite auf $w$.
	Dieser Befehl wird einstweilen ignoriert.
\end{description}
Urspr�nglich sollten die CSG-Befehle eine ef"|fiziente Implementierung
der auch in \LaTeX-""{\tt picture}-""Umgebungen erlaubten Elemente erm�glichen.
Wie man sieht, sind sie �ber dieses Ziel inzwischen hinausgeschossen.
Programme wie {\sl\TeX draw\/} oder {\sl ZPCAD}
k�nnen CSG-Befehle erzeugen.

\section{tpic-Befehle}

Konzeptuell den CSG-Befehlen �hnlich sind die {\em tpic-""Befehle}.
Auch sie definieren \verb|\special|-""Kommandos
f�r Graphikoperationen.
Dieser Satz von Graphikbefehlen geht auf das Programm {\sl tpic} zur�ck,
eine Anpassung des bekannten Unix-""Programms {\sl pic\/} an \TeX.
F�r das Programm {\sl tpic\/} selbst
braucht man eine Unix-""Quellcodelizenz von AT\&T,
die wohl die wenigsten Ataribenutzer haben d�rften;
die {\sl tpic}-\verb|\special|s sind aber inzwischen sehr weit verbreitet
und werden von bekannten Programmen wie {\sl Gnuplot},
{\sl Xfig} (unter Unix) und {\sl\TeX draw\/} unterst�tzt.
Die Stiloption {\tt eepic.sty} f�r \LaTeX\ benutzt sie,
um in {\tt picture}-""Umgebungen Linien beliebiger Steigung zuzulassen.
Auch auf der Treiberseite sind {\sl tpic}-\verb|\special|s weithin bekannt:
au�er von Christoph Strunks neuen Treibern
werden sie von Tom Rokickis {\sl DVIPS\/} (der auch auf dem Atari~ST l�uft)
oder von {\sl xdvi\/} (unter Unix) verstanden.
Im �brigen enth�lt das {\sl groff}-Paket,
der {\sl troff}-Clone der {\em Free Software Foundation},
ein zu {\sl pic} und {\sl tpic} kompatibles Programm, {\sl gpic}.
Auch von {\sl groff} gibt es inzwischen eine Anpassung f�r den Atari~ST.

Hier wieder eine Tabelle mit den {\sl tpic}-\verb|special|s.
Alle Ma�e sind hier zur Abwechslung in Milli-Zoll.
Die Koordinatenangaben beziehen sich auf die obere linke Ecke
eines gedachten Rechtecks, das die ganze Graphik umschlie�t.
Die $y$-Achse verl�uft also verkehrtherum.
Winkel werden im Gegenuhrzeigersinn gemessen (also von $+x$ nach $+y$)
und werden immer im Bogenma� angegeben.
\begin{description}
\item[pn] $s$
	Setzt die Stiftbreite auf $s$ Millizoll.
	Dieser Befehl wird einstweilen ignoriert.
\item[pa] $x$ $y$
	F�gt den Punkt $(x, y)$ einem intern gespeicherten "`Pfad"' hinzu.
\item[fp]
	Gibt den vorher definierten Pfad aus,
	d.\ h.\ die Punkte auf dem Pfad werden mit einer Linie
	der aktuellen Stiftbreite verbunden.
	Danach werden die Punkte gel�scht.
	Wenn Ausmalen gew�nscht wurde und der Pfad geschlossen ist,
	dann sollte er ausgemalt werden.
\item[ip]
	Entspricht {\tt fp}, aber der Pfad selbst wird nicht gezeichnet.
	Ausmalen findet statt, falls gew�nscht.
\item[da] $f$
	Entspricht {\tt fp}, aber der Pfad wird als gestrichelte Linie
	gezeichnet. Ein Strich ist $f$ Zoll lang ($f$ ist reell).
\item[dt] $f$
	Entspricht {\tt da}, aber der Pfad wird als gepunktete Linie
	gezeichnet. Die Strecke zwischen den Punkten ist jeweils $f$ Zoll.
\item[sp] $d$
	Entspricht {\tt fp},
	aber zwischen den Punkten wird eine Splinekurve gezeichnet.
	Diese Kurve geht nur durch den ersten und den letzten Punkt,
	aber ihr Aussehen h�ngt von den relativen Positionen
	der anderen Punkte ab.
	Das reelle Argument $d$ ist fakultativ;
	falls $d=0$ oder gar nicht da ist, wird die Kurve durchgezogen;
	falls $d>0$, wird sie wie bei {\tt da} $d$ gestrichelt
	und, falls $d<0$, wie bei {\tt dt} $-d$ gepunktet.
\item[ar] $x$ $y$ $dx$ $dy$ $\alpha$ $\beta$
	Zeichnet einen Bogen mit dem Mittelpunkt bei $(x,y)$,
	beginnend beim Winkel $\alpha$ und endend bei $\beta$.
	Handelt es sich um einen Vollkreis oder eine Ellipse,
	dann bestimmen $dx$ und $dy$ die Halbachsen in $x$- bzw.\ $y$-Richtung.
	Ansonsten ist $dx=dy$, und es wird ein Kreisbogen gezeichnet.
\item[ia] $x$ $y$ $dx$ $dy$ $\alpha$ $\beta$
	Dies verh�lt sich zu {\tt ar} wie {\tt ip} zu {\tt fp}.
\item[sh] $s$
	Malt das n�chste aus drei oder mehr {\tt pa}- und einem
	{\tt fp}- oder {\tt ip}-Kommando
	oder aus einem {\tt ar}- oder {\tt ia}-Kommando bestehende Objekt aus.
	Der Parameter $s$ ist eine Gleitkommazahl zwischen 0 und 1;
	0 steht f�r wei� (inklusive �bermalen des Untergrunds)
	und 1 f�r schwarz; 0.5 ist grau.
	Wenn $s$ nicht angegeben wurde, wird 0.5 benutzt.
	Dieser Befehl ist laut dem {\sl tpic}-Standard optional;
	\ASCREEN\ unterst�tzt darum nur die Parameter 0 und 1.
\item[wh]
	Entspricht {\tt sh 0}.
\item[bk]
	Entspricht {\tt sh 1}.
\item[tx]
	Veraltetes und nicht unterst�tztes Kommando.
\end{description}

\begin{chapterquote}
The nice thing about standards is
that you have so many to choose from.
Furthermore, if you do not like any of them,
you can just wait for next year's model.
\author ANDREW S. TANENBAUM, {\sl Computer Networks\/} (1989)
\end{chapterquote}
