\chapter{Die Grafikbefehle von \dvi\ und \dvilw} Als letzter Aspekt der Treiber bleibt noch die Erkl"arung der Gra\-fik\-m"og\-lich\-kei\-ten. \dvi\ und \dvilw\ zeichnen sich hier durch besondere F"ahigkeiten aus. Sowohl zwei Fremdgrafikformate, als auch ein Satz von eingebauten Befehlen werden unterst"utzt. Um die Kompatibilit"at des \TeX-Eingabetextes zu wahren, werden alle Grafikbefehle von \TeX\ mittels {\tt $\backslash$special}-Befehlen angesteuert, auch die eingebauten Befehle. \section{Specials} \attention Um unn"otige Wiederholungen zu vermeiden, wird im folgenden jeweils nur der {\tt $\backslash$special}-Text beschrieben, obwohl in der Eingabedatei jeweils \begin{compout} $\backslash$special\{{\it \ \}\} \end{compout} stehen mu"s, um die korrekte \TeX-Syntax zu erhalten. \attention Beachten Sie bitte unbedingt die Klein-/Gro"sschreibung der Befehle, da die Treiber bei unbekannten Specials keine Warnung ausgeben und bei eigenen Befehlen Klein-/Gro"sschreibung beachten! Falls Sie also keine Grafikausgabe erhalten, sollten Sie einmal die genaue Syntax beachten. \subsection{Fremdgrafikformate} Zwei Fremdformate werden unterst"utzt. Zum einen die \imgg\ von {\sc Gem}, zum anderen \ps. \subsubsection{\it graphic~img~\} An der aktuellen Seitenposition wird die in der Datei {\it \} gespeicherte \img-Grafik eingef"ugt. Die linke obere Ecke der Grafik kommt dabei am sog.\ \glqq current point\grqq\ zu liegen. Der \glqq current point\grqq\ wird nicht ver"andert. Der Benutzer hat selbst von \TeX\ aus f"ur Platz f"ur die Grafik zu sorgen.\seealso{\ref{lmacro}} \subsubsection{\it ps~\} An der aktuellen Position im \ps-Code wird der Inhalt der Datei {\it \} eingef"ugt. Naturgem"a"s funktioniert dieser Befehl nur mit \dvilw, da \dvi\ (vorerst) keinen eingebauten \ps\ Interpreter hat. Es liegt vollkommen in Ihrer Hand, was Sie in die Datei schreiben\seealso{\ref{lmacro}}. Sie sollten aber auf den Aufbau der \TeX-Seite achten, d.h.\ mit \verb|\hbox|- und \verb|\vbox|-Befehlen gen"ugend Platz f"ur die Grafik reservieren. Der Inhalt der Datei wird "ubrigens in ein \verb|gsave|/\verb|grestore|-Paar eingebunden und der \verb|showpage|-Operator lahmgelegt, so da"s der \TeX-Teil der Ausgabeseite nicht manipuliert werden kann. \subsubsection{\it postscript~\} Die \ps-Befehle aus {\it \} werden in das \ps-Pro\-gramm ein\-ge\-f"ugt, das die aktuelle Druckseite beschreibt. Sehr geeignet f"ur Unsinn jeglicher Art! Auch dieser Befehl ist nur unter \dvilw\ verf"ugbar. Ein Anwendungsbeispiel f"ur diesen Befehl ist folgender \TeX/\LaTeX-Code: \begin{verbatim} \vbox to 100bp{\vss % a bp is the same as a PostScript point \special{postscript newpath 0 0 moveto 100 100 lineto 354 0 lineto closepath gsave 0.8 setgray fill grestore stroke}} \end{verbatim} Das Ergebnis ist Abbildung~\ref{llitps}. Das Beispiel stammt "ubrigens aus der Anleitung von {\tt DVIPS} von Tomas Rokicki. Die Befehle werden "ubrigens zur Sicherheit in ein \verb|gsave|/\verb|grestore|-Paar eingebunden. \begin{figure}[hbtp]\centering \vbox to 100bp{\vss % a bp is the same as a PostScript point \special{postscript newpath 0 0 moveto 100 100 lineto 394 0 lineto closepath gsave 0.8 setgray fill grestore stroke}} \caption{Anwendungsbeispiel f"ur das {\it postscript\/}-Special}\label{llitps} \end{figure} \subsubsection{\it \"~\} Bedeutung wie {\it postscript~\} und nur aus Kompatibilit"atsgr"unden zu {\tt DVIPS} von Tomas Rokicki vorhanden. \subsubsection{\it ps:~\} Die \ps-Befehle aus {\it \} werden in das \ps-Pro\-gramm ein\-ge\-f"ugt, das die aktuelle Druckseite beschreibt. Sehr geeignet f"ur Unsinn jeglicher Art! Auch dieser Befehl ist nur unter \dvilw\ verf"ugbar. Die \ps-Befehle werden "ubrigens {\it nicht\/} zur Sicherheit in \verb|gsave| und \verb|grestore| eingebunden, so da"s Sie wirklich Unsinn anstellen k"onnen. Die Anzahl der Doppelpunkte im {\it ps:\/}-Kommando ist "ubrigens --- wiederum aus Kompatibilit"atsgr"unden --- freigestellt. In Bild~\ref{lps2} folgt noch ein Beispiel f"ur dieses Special, das wiederum der Anleitung von {\tt DVIPS} von Tomas Rokicki entnommen wurde. Wie im Original wird auch hier auf jeglichen Kommentar verzichtet! \begin{quote} \begin{verbatim} \def\rotninety{\special{ps:currentpoint currentpoint translate 90 rotate neg exch neg exch translate}} \font\huge=cmbx10 at 14.4truept \setbox0=\hbox to0pt{\huge A\hss}\vskip16truept \centerline{\copy0\special{ps:gsave}\rotninety\copy0 \rotninety\copy0\rotninety\box0\special{ps:grestore}} \vskip16truept \end{verbatim} \end{quote} \begin{figure}[hbtp] {\def\rotninety{\special{ps:currentpoint currentpoint translate 90 rotate neg exch neg exch translate}}\font\huge=cmbx10 at 14.4truept \setbox0=\hbox to0pt{\huge A\hss}\vskip16truept\centerline{\copy0 \special{ps:gsave}\rotninety\copy0\rotninety\copy0\rotninety \box0\special{ps:grestore}}\vskip16truept} \caption{Spa"s mit \ps}\label{lps2} \end{figure} \subsubsection{\it PSFile=\ llx=\ lly=\ urx=\ ury=\ rwi=\} "Ahnlich dem {\it ps}-Special wird an der aktuellen Position im \ps-Code der Inhalt der Datei {\it \} eingef"ugt. Allerdings mu"s "uber eine Reihe weiterer Parameter die Bounding Box des Bildes und die tats"achliche Breite des Bildes in \ps-Punkten angegeben werden. Aus diesen Angaben wird dann das Bild richtig skaliert und positioniert. Direkte Verwendung dieses Special erscheint nicht sinnvoll, da "uber die {\tt EPSF.STY}-Macros f"ur \TeX\ und \LaTeX\ die Verwendung automatisiert ist. Lesen Sie hierf"ur bitte Abschnitt~\ref{lepsf}. Naturgem"a"s funktioniert das {\it PSFile\/}-Special nur mit \dvilw, da \dvi\ (vorerst) keinen eingebauten \ps\ Interpreter hat. \subsection{Eingebaute Grafikbefehle} Die eingebauten Grafikbefehle werden alle durch {\tt gr} eingeleitet. Danach kann eine Liste von verschiedenen Grafikbefehlen kommen, die jeweils durch \cstok{;} getrennt werden m"ussen. Nat"urlich kann man auch jeden Befehl einzeln mit {\tt $\backslash$special\{gr \dots\}} abschicken. \attention Die direkte Angabe der \verb|\special|-Befehle, so wie im Tutorial aus didaktischen Gr"unden geschehen, f"uhrt zu Problemen mit dem \verb|\put|-Befehl (siehe dazu Abschnitt~\ref{lbildmac}). Es wird dringendst empfohlen, die {\tt BILDMAC}-Macros zu verwenden! \attention Nachfolgend erkl"arte Befehle erwarten meistens Parameter eines bestimmten Typs. Es werden die Parameterbezeichnungen {\it real\/} f"ur Gleitpunktzahlen und {\it dimen} f"ur L"angenangaben in \TeX-"ahnlicher-Syntax (wie z.B.\ -5.33~{\it cm\/} oder 5.1~{\it pt\/}) bzw.\ ebenfalls Gleitpunkzahlen verwendet. Im Unterschied zu \TeX\ ben"otigen die Treiber zum korrekten Erkennen der Bema"sungseinheiten Leerzeichen zwischen syntaktischen Einheiten. So ist z.B.\ in \TeX\ die Angabe von \verb|1 truecm| zul"assig, mu"s aber in der Treibersyntax als \verb|1 true cm| geschrieben werden. Andererseits verstehen die Treiber als Zahlenwerte bei L"angenangaben Ausdr"ucke aus den vier Grundrechenarten und Klammern, w"ahrend \TeX\ wirklich eine Zahl erwartet. \attention Alle Einstellungen der Grafikparameter sind nur auf der Druckseite g"ultig, auf der sie ver"andert wurden. Durch einen Seitenumbruch werden alle Parameter wie durch ein {\tt setdefaults}-Kommando zur"uckgesetzt. \subsubsection{\%} Wie in \TeX\ dient das \%-Zeichen dazu, den Rest der Eingabezeile als Kommentar zu markieren. \subsubsection{def} Das Schl"usselwort {\tt def} dient zum Definieren von Variablen und Funktionen. Die Syntax einer Variablendefinition/-"anderung ist wie folgt: \begin{compout} def \=\; \end{compout} wobei {\tt identifier} ein beliebiger Name ist. Falls der Name schon vorhanden sein sollte, wird der bisherige Wert durch die neue Definition "uberschrieben. Eine Funktionsdefinition sieht wie folgt aus: \begin{compout} def \(\,$\dots$,\)=\; \end{compout} wobei {\tt identifier} ein noch nicht benutzter Name ist. Die Parameter {\tt p1} bis {\tt pn} d"urfen schon als Variablen benutzt sein. In diesem Fall wird aber eine lokale Kopie beim definierenden Ausdruck {\tt expression} verwendet, so da"s die Variable nicht ver"andert wird und auch nicht zur Definition herangezogen werden kann. Der definierende Ausdruck {\tt expression} hat in beiden F"allen folgenden rekursiven Aufbau: \begin{quote}\begin{verbatim} ::=+ | - | * | / | ::= | | | () ::=,...,) \end{verbatim}\end{quote} Zahlreiche Variablen und Funktionen sind schon vordefiniert. Bitte informieren Sie sich durch Abbildung~\ref{lkofu}. \subsubsection{Tx,Ty} Es gibt zwei vordefinierte Funktionen {\tt Tx} und {\tt Ty}, die bei Angabe von Offsets bei {\tt setpoint} Kommandos dazu dienen, eine Koordinatentransformation nach folgender Formel durchzuf"uhren: \begin{compout} setpoint x[a,b] $\longrightarrow$ setpoint x[Tx(a,b),Ty(a,b)] \end{compout} Diese Funktionen sind als \begin{compout} def Tx(a,b) = a;\\ def Ty(a,b) = b; \end{compout} vordefiniert. Im Normalfall wird also beim Erzeugen eines {\tt setpoint}-Offsets durch die Funktion {\tt Tx} der $x$-Koordinatenanteil ausgeblendet, durch die Funktion {\tt Ty} der $y$-Koordinatenanteil. Durch Umdefinition dieser Abbildung lassen sich Effekte wie Transformationen, Skalierungen, Drehungen, etc.\ auf einfache Weise erzeugen. Konsultieren Sie f"ur diese M"oglichkeiten am Besten ein Buch zur grafischen Datenverarbeitung wie {\em Computer Graphics: Principles and Practice\/} von Foley/van Dam/Feiner/Hughes. \subsubsection{undef} Mit dem Schl"usselwort {\tt undef} lassen sich mittels {\tt def} vereinbarte Variablen und Funktionen wieder l"oschen. \subsubsection{setdefaults} Stellt die wichtigsten Parameter auf die Standardwerte zur"uck, wie in Abbildung~\ref{la101} zu sehen. Au"serdem werden alle Variablen- und Funktionsdefinitionen gel"oscht! \begin{figure}[hbtp] \begin{center} \begin{tabular}{|l|l|} \hline Liniendicke & $0.4$ {\it pt\/}\\ Linienmuster & durchgezogen\\ Pfeilspitze & $1.2$ {\it pt\/} breit, $6.4$ {\it pt\/} lang\\ Pfeilart & Geradenst"ucke, keine Ablenkung\\ Punktdicke & $2.4$ {\it pt\/}\\ Linienenden & abgerundet (round)\\ Punktz"ahler & $0$\\ \verb|\unitlength| & $1$ {\it pt\/}\\ \hline \end{tabular} \end{center} \caption{Standardwerte der Grafikparameter}\label{la101} \end{figure} \subsubsection{setunitlength~\<{\it dimen}>} Stellt den multiplikativen Faktor auf den Offset des {\tt setpoint}-Befehls ein und bestimmt dadurch die Gr"o"se des Bildes. Beachten Sie bitte, da"s per Voreinstellung durch {\tt setdefaults} ein Wert von 1~{\it pt\/} eingetragen wird und deshalb auch relative Faktoren in der Form von Gleitpunktwerten jederzeit benutzt werden k"onnen. Bei Verwendung von expliziten Ma"sangaben wird dieser Faktor nat"urlich {\em nicht\/} aufmultipliziert! \subsubsection{setdotsize~\<{\it dimen}>} Stellt den Punktdurchmesser auf \<{\it dimen}>. \subsubsection{setlinewidth~\<{\it dimen}>} Stellt die Liniendicke auf \<{\it dimen}>. \subsubsection{setdash~{\it \~\~\dots}} Stellt das Linienmuster ein. Ohne Parameter wird das Muster zur"uckgesetzt auf durchgehend gezeichnete Linien. Ansonsten geben die Parameter abwechselnd die Strecken an, die schwarz bzw.\ wei"s gezeichnet werden. Wird nur ein Parameter angegeben, ist das Muster gleichf"ormig schwarz-wei"s, wie z.B.\ bei \verb|setdash 2pt|. \subsubsection{defpattern~{\it \,\,\,\,% \,\,\,\}} Definiert ein $8\times 8$-F"ullmuster f"ur den {\tt patclip}-Befehl. Die Parameter sind Dezimalzahlen im Bereich 0--255. Jedes gesetzte Bit in der Bin"ardarstellung der Zahl ergibt ein gesetztes Pixel im F"ullmuster. Jede Zahl stellt eine Zeile des F"ullmusters dar, wobei die erste Zahl der obersten Zeile entspricht. Es m"ussen zur Zeit genau acht Zahlen angegeben werden! \subsubsection{setlinecap~{\it \~\}} Stellt das Aussehen von Linienenden ein. Der erste Parameter steht f"ur den Linienanfang, der zweite f"ur das Linienende. Die f"unf m"oglichen Werte bedeuten \glqq plain\grqq\ f"ur eine abgeschnittene Linie, \glqq round\grqq\ f"ur eine Linie mit abgerundeten Enden, \glqq arrow\grqq\ f"ur eine Linie mit geschlossener ausgef"ullter Pfeilspitze, \glqq wedge\grqq\ f"ur eine Linie mit offener Pfeilspitze ohne Abschlu"s und \glqq triangle\grqq\ f"ur eine Linie mit geschlossener ungef"ullter Pfeilspitze. \subsubsection{setarrowsize~{\it \~\}} Stellt die Gr"o"se von Pfeilspitzen ein. Der erste Parameter gibt an, wie weit sich die Schenkel des Pfeils vom Stamm entfernen, der zweite Parameter gibt die L"ange der Pfeilspitze an. \subsubsection{setarrowshape~{\it \~\}} Stellt das Aussehen von Pfeilspitzen ein. Die Schenkel und der Abschlu"s der Pfeilspitzen bestehen aus drei B\'ezierkurven mit doppeltem Kontrollpunkt auf halber L"ange der Kurve. Die beiden Parameter beeinflussen die Lage dieser Kontrollpunkte, wobei der erste Parameter die Schenkel, der zweite den Abschlu"s steuert. Die Parameter sind Gleitpunktzahlen, wobei das Vorzeichen "uber die Richtung der Ablenkung der B\'ezierkurven entscheidet. Positive Werte ziehen die Schenkel und den Abschlu"s nach innen in Richtung Schwerpunkt des Dreiecks, das die Pfeilspitze umschlie"st. Negative Werte dr"ucken entsprechend nach au"sen. Bei Aufruf ohne Parameter wird auf die Standardeinstellung zur"uckgesetzt (Pfeil aus Geradenst"ucken), bei Aufruf mit einem Parameter wird nur der Schenkelparameter gesetzt. \subsubsection{setarrowline~{\it\}} Bei Linienenden von Typ {\tt triangle} steuert dieser Befehl die Liniendicke der Pfeilspitze. \subsubsection{setpoint~{\it \ \ \}~\dots} Setzt einen oder mehrere der 500--1000 internen Kontrollpunkte (je nach Ger"at). Der Parameter {\it point number\/} steht dabei f"ur die Nummer des zu definierenden Punktes. Falls mit einem {\tt setpoint}-Kommando mehrere Punkte definiert werden, k"onnen die definierenden Ausdr"ucke durch Leerzeichen oder, falls wegen Eindeutigkeit notwendig, durch \cstok{,} getrennt werden. Der Parameter {\it repeated\/} ist ein Wiederholfaktor, der die Erzeugung mehrerer Punkte mit aufeinanderfolgenden Indizes bewirkt. Ein Wiederholfaktor hat folgenden rekursiven Aufbau: \begin{quote} \begin{verbatim} ::=<> | | =..: \end{verbatim} \end{quote} Der Wiederholfaktor kann also optional (leer) oder verschachtelt angegeben werden. Ein einfacher Wiederholfaktor besteht aus einem noch nicht definierten Bezeichner und drei Ausdr"ucken, wobei der erste {\tt expr1} und zweite {\tt expr2} den Parameterbereich des Bezeichners definieren und der dritte die Anzahl zu erzeugender Punkte. Der Parameterbereich wird in "aquidistante Abschnitte zerlegt und der Bezeichner erh"alt f"ur jeden erzeugten Punkt einen dieser Werte im Parameterbereich. Durch Verwendung des Bezeichners im folgenden {\it position\/}-Parameter k"onnen die Punkte auf diese Weise an verschiedene Positionen gesetzt werden. Optional kann in eckigen Klammern ein Offset zur aktuellen Position angegeben werden, der folgendes Aussehen hat: \begin{quote} \begin{verbatim} ::=<> | [,] | [,,] ::= | [,] \end{verbatim} \end{quote} In eckigen Klammern wird durch die Ausdr"ucke {\tt expr1} und {\tt expr2} ein Verschiebungsfaktor in $x$- und $y$-Richtung angegeben. Dieser Wert wird entweder mit dem mittels {\tt setunitlength} eingestellten Wert multipliziert oder absolut durch eine bema"ste Gr"o"se angegeben und ergibt den tats"achlichen Offset. Falls ein {\it repeated\/} Parameter vorausgegangen ist, kann durch Angabe eines Rotationsfaktors der erzeugte Punkt noch gedreht werden. Der Bezugspunkt f"ur die Drehung ist entweder der letzte eingegebene Punkt oder der durch {\tt ex1} und {\tt ex2} spezifizierte Punkt. Gedreht wird in beiden F"allen um den Winkel {\tt expression}, der im Bogenma"s angegeben werden mu"s. F"ur Beispiele lesen Sie bitte das Grafiktutorial, Anhang~\ref{lagratut}. \subsubsection{{\it \}} F"ur die nun folgenden Befehle wird als Parameter jeweils eine Punktliste erwartet. Die Punktliste bezieht sich auf die mit {\tt setpoint} vergebenen Nummern, falls ein direkter Bezug auf diese Punkte gew"unscht ist. Einzelne Punkte in der Punktliste k"onnen wegen Eindeutigkeit durch \cstok{,} getrennt werden. Bei Eindeutigkeit ist das Trennen durch Leerzeichen statthaft. Sollen mehrere direkt hintereinander definierte Punkte verwendet werden, reicht die Angabe des Bereichs, z.B.\ 105--113. Bereiche und Einzelpunkte k"onnen in der Punktliste beliebig gemischt werden. Gibt man statt einer Punktnummer den Ausdruck $[p,q]\lambda$ an, so wird damit der Punkt $p(1-\lambda)+q\lambda$ spezifiziert, also ein Punkt auf der Verbindungsgeraden von $p$ und $q$. F"ur $\lambda$ darf ein beliebiger Ausdruck aus den vier Grundrechenarten und runden Klammern eingesetzt werden. Selbstverst"andlich k"onnen die Punkte $p$ und $q$ wieder von der Form $[r,s]\mu$ sein. Eine weitere M"oglichkeit zur Angabe eines Punktes besteht in einem Ausdruck der Form $(p,q)$. In diesem Fall hat der erzeugte Punkt die $x$-Ko\-or\-di\-na\-te von $p$ und die $y$-Koordinate von $q$. Auch diese Notation darf wieder beliebig verschachtelt verwendet werden. Als Kurznotation ist statt der Angabe von $p$ oder $q$ das Zeichen {\verb|@|} zul"assig, das den zuletzt definierten Punkt der Punktliste einsetzt. Durch Angabe von \cstok{\verb|@|}, direkt gefolgt von einer Zahl {\it \}, bezieht man sich auf die {\it \} zuletzt eingegebenen Punkte. Ohne Angabe einer Zahl bezieht sich \verb|@| auf den in der Liste vorangehenden Punkt. Ist der Betrag von {\it \} negativ, wird au"serdem der Punktz"ahler um den Betrag von {\it \} zur"uckgesetzt. Als Besonderheit kann man eine Punktliste auch mit einigen speziellen Parametern versehen, die das Zeichnen von Teilobjekten und das wiederholte Zeichnen von Objekten erlauben. Ein Linienbefehl mit einer solchen modifizierten Punktliste hat dann folgendes Aussehen: \begin{compout} \ \ \ \ \ \end{compout} Das Aussehen der Parameter {\tt repeated} und {\tt position} entspricht den gleichbezeichneten Parametern des {\tt setpoint}-Kommandos. Allerdings ist die Bedeutung dahingehend ge"andert, da"s das "ubergeordnete Kommando {\tt command} entsprechend dem {\tt repeat}-Faktor wiederholt wird, und zwar an den durch den {\tt position}-Parameter bezeichneten Stellen. Ein {\tt position}-Parameter darf nur angegeben werden, falls ein {\tt repeated}-Parameter vorausgeht! Der Parameter {\tt pieces} kann verschachtelt angegeben werden und hat folgendes Aussehen: \begin{quote} \begin{verbatim} ::=:.. | :.. \end{verbatim} \end{quote} Durch die Parameter {\tt expr1} und {\tt expr2} wird nur ein Teil der Punktliste zum Zeichen des mit {\tt command} erzeugten Objektes herangezogen. Die Werte k"onnen sich auf die Punktnummern der Punkteliste beziehen und d"urfen in diesem Fall bei $n$ Punkten im Bereich $0\le{\tt expr}\le n$ liegen. Bei bema"sten Werten wird das Zeichnen des Objekts bis zur Position {\tt expr1} unterdr"uckt und dann nur bis Position {\tt expr2} gezeichnet. F"ur Beispiele lesen Sie bitte das Grafiktutorial, Anhang~\ref{lagratut}. \subsubsection{dot~{\it \}} Die Punkte der Punktliste werden mit dem voreingestellten Durchmesser als gef"ullte Kreise dargestellt. \subsubsection{spline~{\it \}} Zeichnet einen nat"urlichen Spline, der durch die Kontrollpunkte in {\it \} definiert ist. \subsubsection{hermitespline~{\it \}} In der Praxis hat man h"aufig das Problem, Kurven zeichnen zu m"ussen, die eine bestimmte Anfangs- und/oder Endrichtung haben sollen. Der Grafikbefehl zum Setzen eines solchen Hermiteschen Splines ist ist analog zum {\tt spline}-Befehl, nur da"s er eben {\tt hermitespline} hei"st. Bitte lesen Sie die Abschlu"sbemerkung zu Hermiteschen Splines! \subsubsection{lefthermitespline, righthermitespline {\it \}} Es ist auch m"oglich, nur an einem Ende des Splines die Richtung vorzugeben, und am anderen Ende des Splines eine nat"urliche Randbedingung zu fordern. Dies ist durch Verwendung von {\tt lefthermitespline} und {\tt righthermitespline} m"oglich. \attention Die Befehle zum Zeichnen Hermitescher Splines haben als Parameter eine Kontrollpunktliste, wobei der erste bzw.\ letzte bzw.\ erste und letzte Punkt der Liste eine Richtung vorgeben, die umso st"arker ausgepr"agt ist, je weiter der Punkt von der Kurve entfernt ist. \subsubsection{closedspline~{\it \}} Durch diesen Befehl wird ein glatter geschlossener nat"urlicher Spline gezeichnet, wobei der erste und letzte Punkt der Punktliste miteinander verbunden werden. \subsubsection{poly, closedpoly {\it \}} Diese beiden Befehle zeichnen einen offenen bzw.\ geschlossenen Polygonzug, der durch die jeweilige Punktliste definiert ist. \subsubsection{defclip, clip, whiteclip, patclip, endclip} Diese Funktionen dienen zum Definieren eines Clippfades, bez"uglich dessen Begrenzungslinie bis zum {\tt endclip}-Kommando folgende \TeX- und Grafik-Ausgaben gekappt werden. Die Begrenzungslinie {\em mu"s\/} geschlossen und in einem durchgehendem St"uck definiert sein, unterliegt aber ansonsten keinerlei Be\-schr"an\-kun\-gen. \glqq Durchgehendes St"uck\grqq\ soll in diesem Zusammenhang bedeuten, da"s man nicht nachtr"aglich auseinanderklaffende St"ucke mit einem dritten schlie"st, sondern die Umri"slinie \glqq wie mit einem Pinselstrich\grqq\ erzeugt. Durch Angabe von {\tt defclip} wird der Beginn des Clippfades markiert. Alle folgenden Angaben definieren diesen Clippfad, bis ein {\tt clip}-, {\tt whiteclip}- oder {\tt patclip}-Kommando die Eingabe des Clippfades abschlie"st. Alle folgenden \TeX-Ausgaben, {\em also auch jeder Text\/}, werden bez"uglich dieses Pfades gekappt, bis das {\tt endclip}-Kommando diesen Modus beendet. Beim Clippen beeinflussen die drei Clipbefehle die Ausgabe wie folgt: \begin{tabular}{ll} \tt clip & bisherige Elemente der Zeichnung werden nicht verdeckt\\ \tt whiteclip & der Clipbereich wird gel"oscht\\ \tt patclip & der Clipbereich wird mit dem durch {\tt defpattern}\\ & definierten F"ullmuster ausgef"ullt \end{tabular} \subsubsection{input~''\it{filename}''} Der Treiber liest die Grafikkommandos aus der Datei {\it filename\/}. Die Angabe des Dateinamens mu"s den Konventionen des verwendeten Betriebssystems entsprechen. Die Definition eines Pfades f"ur solche externen Grafikdateien ist m"oglich. Lesen Sie dazu die entsprechenden Kapitel beim verwendeten Treiber! Bitte beachten\attention\ Sie, das das ''-Zeichen bei manchen Macropaketen wie den Anpassungen an die deutsche Sprache {\tt german.sty} eine Spezialfunktion bekommen hat, die die normale Verwendung wie beim {\tt input}-Befehl unm"oglich macht! In solchen F"allen mu"s vor Absetzen des {\tt input} die Spezialbedeutung ausgeschaltet werden. Bei {\tt german.sty} beschieht das z.B.\ durch eine Klammerung mit \verb|\originalTeX| und \verb|\germanTeX| Befehlen. \section{Macros zur Grafikeinbindung}\label{lmacro} Um Ihnen das Kopfzerbrechen zu ersparen, alle {\tt $\backslash$special}-Befehle zu lernen bzw.\ Ihre Grafiken auszumessen und mit {\tt $\backslash$hbox} und {\tt $\backslash$vbox} Befehlen zu hantieren, um Platz f"ur Grafiken zu schaffen, gibt es eine ganze Anzahl vorgefertigter \TeX-Macros, die Ihnen diese Arbeit abnehmen. Diese Macropakete sollten im Standard-Suchpfad von \TeX\ liegen und k"onnen mit {\tt $\backslash$input \} geladen werden, wobei {\tt name} f"ur {\tt graphic}, {\tt bildmac}, {\tt epsf}, etc.\ steht. \subsection{Die {\tt GRAPHIC}-Macros}\label{lgraph} Die Datei {\tt GRAPHIC.TEX} enth"alt die Macros zur Verwendung von Grafiken im Fremdformat. \imgg\ werden auf dem Atari~ST zun"achst mit {\tt IMGTOTEX.TTP} bearbeitet. Dabei wird die gew"unschte Auf\/l"osung der Grafik in dpi erfragt und in der Datei eingetragen und eine Zusatzdatei erstellt, die die Gr"o"se des Bildes in \TeX-Einheiten enth"alt. Als Richtwert zur Auf\/l"osung kann bei Laserdruckern ein Wert von 150 dpi f"ur Grafiken, die den ganzen Atari Bildschirm enthalten, angegeben werden. Die erzielte Gr"o"se im Ausdruck liegt in der Breite in etwa richtig f"ur ein \LaTeX-Dokument. Als Beispiel siehe Abbildung \ref{ldis}. In der \TeX-Eingabe wird die bearbeitete Grafik dann mittels {\tt $\backslash$includegraphic\{filename\}} eingebunden. Der Platz f"ur das Bild wird automatisch freigehalten. Zudem kann das Bild behandelt werden, wie ein einzelner Buchstabe, d.h.\ zentriert werden, etc. An der Universit"at Augsburg wurde im Rahmen einer Diplomarbeit das objektorientierte Zeichenprogramm {\tt PCDRAW} erstellt, das \ps-Code als Ausgabe erzeugen kann. Zudem ist ein "ahnlicher Mechanismus, wie f"ur \imgg\ auf dem Atari eingebaut. Mittels des Men"upunktes \glqq Picture to \TeX\grqq\ wird interaktiv die beabsichtigte Bema"sung abgefragt, der \ps-Code des Bildes passend abgespeichert und eine Zusatzdatei f"ur \TeX\ erstellt. Das Bild kann dann mittels {\tt $\backslash$psdraw\{filename\}} in den Text eingebunden werden. Auch hier kann das Bild wie ein einzelner Buchstabe behandelt werden. Genaueres entnehmen Sie bitte der Beschreibung von \pcd. Falls man selbst in \ps\ programmiert, kann man sein fertiges Bild per Hand ausmessen und in eine zweite Datei die Gr"o"seninformation folgenderma"sen ablegen: \begin{quote} \begin{verbatim} \grwd = 108.160 mm \grht = 67.600 mm \end{verbatim} \end{quote} Dabei mu"s \verb|\grwd| die Breite des Bildes und \verb|\grht| die H"ohe des Bildes zugewiesen bekommen. Wenn z.B.\ die erste Datei mit dem \ps-Bild unter {\tt ESCHER.PS} und die zweite Datei mit der Gr"o"seninformation unter {\tt ESCHER.TEX} abgespeichert sind, so kann durch den Aufruf \begin{compout} \verb|\includeps{ESCHER}| \end{compout} dieses Bild in einen \TeX-Text eingebunden werden, wobei automatisch ge\-n"u\-gend Platz freigehalten wird. Ein Beispiel f"ur diese Technik ist Bild~\ref{ebild} von Peter Henderson und Peter Bumbulis frei nach Maurits C.\ Escher. \begin{figure}[hbtp]\centering \centerline{\includeps{texfish}} \caption{Eine fl"achenf"ullende Grafik nach Escher}\label{ebild} \end{figure} Bitte beachten Sie, da"s dieser Mechanismus zum Einbinden von Bildern, die mittels \ps\ erstellt wurden, inzwischen veraltet ist und nur aus Kompatibilit"atsgr"unden unterst"utzt wird. Neue Projekte sollten gleich auf die {\tt EPSF}-Macros zur"uckgreifen (siehe Abschnitt~\ref{lepsf}), die "ubrigens von Tomas Rokicki und Donald E.~Knuth f"ur {\tt DVIPS}, einen anderen \ps-\dvi-Treiber, entwickelt wurden. \subsection{Die {\tt BILDMAC}-Macros}\label{lbildmac} Die Datei {\tt BILDMAC.TEX} enth"alt einige Macros zur Verwendung der eingebauten Grafikbefehle. Die Entwicklung an diesen Macros dauert noch an. Die Macros k"onnen jedoch als eine Anregung verstanden werden, eigene Macros zu definieren. Trotz der noch andauernden Entwicklung empfehlen die Autoren dringend die Verwendung dieser Macros anstelle der ausf"uhrlichen \verb|\special|-Befehle, da durch jeden \verb|\special|-Befehl mit anschlie"senden Zeilentrenner ein Leerzeichen erzeugt wird, das das ordnungsgem"a"se Funktionieren des \verb|\put|-Befehls beeintr"achtigt. Die Kompatibilit"at von neuen {\tt BILDMAC}-Dateien zu vorherigen Versionen wird ab Treiberversion~2.2 weitestgehend bewahrt. Falls dies aus irgendeinem Grund einmal nicht m"oglich sein sollte, ist im Handbuch eine M"oglichkeit angegeben, dieselben Ausgaben mit anderen Konstruktionen zu erreichen. Das prinzipielle Schema der {\tt BILDMAC}-Befehle ist immer gleich. Die jeden Grafikbefehl einleitende \verb|\special{gr|-Sequenz und etwaiger Leerraum, der den Befehlen folgt, wird herausgefiltert. Auf diese Weise wird \begin{compout} \verb|\special{gr setpoint 0}| \end{compout} zu \begin{compout} \verb|\setpoint{0}|$\,${\rm ,} \end{compout} usw. Bitte drucken Sie sich die Datei {\tt BILDMAC.TEX} aus und sehen selbst, welche Befehle zur Verf"ugung stehen. Macros, die "uber Textersatz hinausgehen, sind jeweils (hoffentlich) kommentiert. \subsection{Die {\tt EPSF}-Macros}\label{lepsf} In den Dateien {\tt EPSF.TEX} bzw.\ {\tt EPSF.STY} liegen Macros vor, die zur Einbindung von Bildern in Encapsulated \ps\ dienen. Wenn man eine \ps-Datei vorliegen hat, sollte man zun"achst feststellen, ob sie in Encapsulated \ps-Form vorliegt. Falls dies nicht der Fall ist, mu"s man die Datei in diese Form bringen. Laden Sie also die Datei mit der Grafik in einen Editor. Sollte es dabei Probleme mit der Zeilenl"ange geben, hat das erzeugende Programm den \ps-Standardzeilentrenner LF verwendet und Sie m"ussen die Datei mit {\tt UNIX2DOS} oder {\tt CRLF}\footnote{Quellcode wird mitgeliefert} bearbeiten, so da"s eine Standard-ASCII-Datei entsteht, die Ihr Dru"cker "ubrigens problemlos verdaut. Haben Sie die Datei erfolgreich geladen, sollte unter den ersten paar Dutzend Zeilen ein \ps-Kommentar \begin{quote} \begin{verbatim} %%BoundingBox: 1 2 3 4 \end{verbatim} \end{quote} oder zumindest \begin{quote} \begin{verbatim} %%BoundingBox: (atend) \end{verbatim} \end{quote} zu finden sein. Im zweiten Fall kopieren Sie den richtigen {\tt Bounding Box} Kommentar vom Dateiende an den Dateianfang und l"oschen die jetzt obsolete {\tt atend}-Zeile. Die Datei ist jetzt problemlos durch \TeX\ und \dvilw\ zu verarbeiten. Haben Sie keinen {\tt \%\%Bounding Box}-Kommentar gefunden, m"ussen Sie selbst einen einf"ugen. Dazu steht Ihnen die Hilfsdatei {\tt BB.PS} von Bernie Cosell zur Verf"ugung. Kopieren Sie den Inhalt von {\tt BB.PS} und Ihres Bildes in eine neue Datei und drucken dieses Bild aus. Dazu m"ussen Sie evtl.\ am Ende der Datei ein {\tt showpage}-Kommando einf"ugen. Das neue Bild hat jetzt einen Rahmen und die notwendigen Parameter f"ur die {\tt Bounding Box} stehen am linken unteren Ende der Grafik. Laden Sie nun erneut das urspr"ungliche Bild und f"ugen irgendwo am Anfang der Datei eine Zeile \begin{quote} \begin{verbatim} %%BoundingBox: 1 2 3 4 \end{verbatim} \end{quote} ein, wobei Sie anstelle von {\tt 1}, {\tt 2}, {\tt 3} und {\tt 4} die richtigen Werte von Ihrem Testausdruck "ubernehmen. Falls Ihre Datei eine {\tt showpage}-Anweisung enthielt, brauchen Sie diese nicht entfernen, da das Ausdrucken der Grafik jetzt im Zusammenhang mit dem \TeX-Text geschieht und die entsprechenden Befehle von \dvilw\ erzeugt werden, d.h.\ das {\tt showpage} wird lokal von \dvilw\ umdefiniert. Zum Setzen des Bildes im laufenden Text ben"otigt \TeX\ einige Macros, die --- wie schon vorher erw"ahnt --- in der Datei {\tt EPSF.STY} gespeichert sind. Laden Sie diese Datei durch \begin{quote} \begin{verbatim} \input epsf.sty \end{verbatim} \end{quote} (\TeX) oder durch \begin{quote} \begin{verbatim} \documentstyle[...,epsf,...]{...} \end{verbatim} \end{quote} (\LaTeX). Sie k"onnen nat"urlich in \TeX\ auch die Datei {\tt EPSF.TEX} werwenden und sich die Endung beim \verb|\input|-Befehl sparen. Der Inhalt der Dateien ist gleich! Jetzt k"onnen Sie Ihr Bild durch \begin{quote} \begin{verbatim} \epsfbox{bild.ps} \end{verbatim} \end{quote} setzen lassen, wobei durch \TeX\ bzw.\ \LaTeX\ automatisch durch die {\tt Bounding Box}-Anweisung gen"ugend freier Platz gelassen wird. Au"serdem haben Sie die M"oglichkeit, das \ps-Bild in der Gr"o"se dem Text anzupassen. Dazu m"ussen Sie lediglich {\em vor\/} dem \verb|\epsfbox|-Kommando\footnote{Achtung: in "alteren Versionen der {\tt EPSF}-Macros hei"st $\backslash${\tt epsfbox} $\backslash${\tt epsffile}.} eines der Kommandos \begin{quote} \begin{verbatim} \epsfxsize= \epsfysize= \end{verbatim} \end{quote} absetzen, um das Bild horizontal bzw.\ vertikal zu skalieren. Der Parameter \verb|| ist eine g"ultige \TeX-Ma"seinheit wie 150pt oder 5.7cm. Falls Sie beide Kommandos absetzen, hat das \verb|\epsfxsize|-Kommando Vorrang. Dadurch k"onnen keine Verzerrungen entstehen! Ein g"unstiger Wert f"ur die horizontale Skalierung ist z.B.\ f"ur \TeX\ \verb|\hsize| bzw.\ f"ur \LaTeX\ \verb|\textwidth|. Dadurch ist das Bild genauso breit, wie der umgebende Text. Bei Verwendung\attention\ von \LaTeX\ kann es bei manchen Environments notwendig sein, unmittelbar vor das \verb|\epsfbox|-Kommando ein \verb|\leavevmode|-Kom\-man\-do zu stellen. Sie werden die entsprechende Fehlermeldung bekommen und k"onnen ganz gelassen reagieren! Durch Absetzen des Befehls \verb|\epsfverbosetrue| {\em vor\/} den \verb|\epsfbox|-Be\-feh\-len k"onnen Sie sich die Gr"o"se der eingebundenen \ps-Grafiken am Bildschirm anzeigen lassen.