<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">\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 \&lt;befehl&gt; \&lt;argumente&gt;}\}
\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~\&lt;filename&gt;}
An der aktuellen Seitenposition wird die in der Datei {\it \&lt;filename&gt;}
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~\&lt;filename&gt;}
An der aktuellen Position im \ps-Code wird der Inhalt der Datei
{\it \&lt;filename&gt;} 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~\&lt;commands&gt;}
Die \ps-Befehle aus {\it \&lt;commands&gt;} 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 \"~\&lt;commands&gt;}
Bedeutung wie {\it postscript~\&lt;commands&gt;} und nur aus Kompatibilit"atsgr"unden
zu {\tt DVIPS} von Tomas Rokicki vorhanden.

\subsubsection{\it ps:~\&lt;commands&gt;}
Die \ps-Befehle aus {\it \&lt;commands&gt;} 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=\&lt;filename&gt; llx=\&lt;llx&gt; lly=\&lt;lly&gt; urx=\&lt;urx&gt; ury=\&lt;ury&gt; rwi=\&lt;rwi&gt;}
"Ahnlich dem {\it ps}-Special wird an der aktuellen Position im \ps-Code
der Inhalt der Datei {\it \&lt;filename&gt;} 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 \&lt;identifier&gt;=\&lt;expression&gt;;
\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 \&lt;identifier&gt;(\&lt;p1&gt;,$\dots$,\&lt;pn&gt;)=\&lt;expression&gt;;
\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}
&lt;expression&gt;::=&lt;expression&gt;+&lt;expression&gt; |
               &lt;expression&gt;-&lt;expression&gt; |
               &lt;expression&gt;*&lt;expression&gt; |
               &lt;expression&gt;/&lt;expression&gt; |
               &lt;factor&gt;

&lt;factor&gt;::=&lt;real number&gt; |
           &lt;identifier&gt; |
           &lt;function evaluation&gt; |
           (&lt;expression&gt;)

&lt;function evaluation&gt;::=&lt;identifier(&lt;exp1&gt;,...,&lt;expn&gt;)
\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 &amp; $0.4$ {\it pt\/}\\
Linienmuster &amp; durchgezogen\\
Pfeilspitze &amp; $1.2$ {\it pt\/} breit, $6.4$ {\it pt\/} lang\\
Pfeilart &amp; Geradenst"ucke, keine Ablenkung\\
Punktdicke &amp; $2.4$ {\it pt\/}\\
Linienenden &amp; abgerundet (round)\\
Punktz"ahler &amp; $0$\\
\verb|\unitlength| &amp; $1$ {\it pt\/}\\
\hline
\end{tabular}
\end{center}
\caption{Standardwerte der Grafikparameter}\label{la101}
\end{figure}

\subsubsection{setunitlength~\&lt;{\it dimen}&gt;}
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~\&lt;{\it dimen}&gt;}
Stellt den Punktdurchmesser auf \&lt;{\it dimen}&gt;.

\subsubsection{setlinewidth~\&lt;{\it dimen}&gt;}
Stellt die Liniendicke auf \&lt;{\it dimen}&gt;.

\subsubsection{setdash~{\it \&lt;dimen&gt;~\&lt;dimen&gt;~\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 \&lt;byte&gt;,\&lt;byte&gt;,\&lt;byte&gt;,\&lt;byte&gt;,%
\&lt;byte&gt;,\&lt;byte&gt;,\&lt;byte&gt;,\&lt;byte&gt;}}
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 \&lt;plain\/$\vert$round\/$\vert$arrow\/%
$\vert$wedge\/$\vert$triangle&gt;~\&lt;plain\/$\vert$round\/$\vert$arrow\/%
$\vert$wedge\/$\vert$triangle&gt;}}
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 \&lt;dimen&gt;~\&lt;dimen&gt;}}
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 \&lt;real&gt;~\&lt;real&gt;}}
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\&lt;dimen&gt;}}
Bei Linienenden von Typ {\tt triangle} steuert dieser Befehl die Liniendicke der
Pfeilspitze.

\subsubsection{setpoint~{\it \&lt;point number&gt; \&lt;repeated&gt; \&lt;position&gt;}~\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}
&lt;repeated&gt;::=&lt;&gt; |
             &lt;repeated&gt; |
             &lt;identifier&gt;=&lt;expr1&gt;..&lt;expr2&gt;:&lt;expr3&gt;
\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}
&lt;position&gt;::=&lt;&gt; |
             [&lt;expr1&gt;,&lt;expr2&gt;] |
             [&lt;expr1&gt;,&lt;expr2&gt;,&lt;rotate&gt;]

&lt;rotate&gt;::=&lt;expression&gt; |
           &lt;expression&gt;[&lt;ex1&gt;,&lt;ex2&gt;]
\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 \&lt;pointlist&gt;}}
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 \&lt;n\/&gt;}, bezieht man sich auf die
{\it \&lt;n\/&gt;} zuletzt eingegebenen Punkte. Ohne Angabe einer Zahl bezieht sich
\verb|@| auf den in der Liste vorangehenden Punkt. Ist der Betrag von {\it \&lt;n\/&gt;}
negativ, wird au"serdem der Punktz"ahler um den Betrag von {\it \&lt;n\/&gt;}
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}
\&lt;command&gt; \&lt;pointlist&gt; \&lt;pieces&gt; \&lt;repeated&gt; \&lt;position&gt;
\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}
&lt;pieces&gt;::=:&lt;expr1&gt;..&lt;expr2&gt; |
           :&lt;expr1&gt;..&lt;expr2&gt;&lt;pieces&gt;
\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 \&lt;pointlist&gt;}} 
Die Punkte der Punktliste werden mit dem voreingestellten Durchmesser
als gef"ullte Kreise dargestellt.

\subsubsection{spline~{\it \&lt;pointlist&gt;}}
Zeichnet einen nat"urlichen Spline, der durch die Kontrollpunkte in {\it \&lt;pointlist&gt;}
definiert ist. 

\subsubsection{hermitespline~{\it \&lt;pointlist&gt;}}
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 \&lt;pointlist&gt;}}
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 \&lt;pointlist&gt;}}
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 \&lt;pointlist&gt;}}
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 &amp; bisherige Elemente der Zeichnung werden nicht verdeckt\\
\tt whiteclip &amp; der Clipbereich wird gel"oscht\\
\tt patclip &amp; der Clipbereich wird mit dem durch {\tt defpattern}\\
            &amp; 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 \&lt;name&gt;} 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=&lt;dimen&gt;
\epsfysize=&lt;dimen&gt;
\end{verbatim}
\end{quote}

absetzen, um das Bild horizontal bzw.\ vertikal zu skalieren. Der Parameter
\verb|&lt;dimen&gt;| 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.


</pre></body></html>