summaryrefslogtreecommitdiff
path: root/dviware/dvi-augsburg/manual/dvigra.tex
blob: d0dd9cafb520568c25d2ba8b46b8a3c76d34e435 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
\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 \<befehl> \<argumente>}\}
\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~\<filename>}
An der aktuellen Seitenposition wird die in der Datei {\it \<filename>}
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~\<filename>}
An der aktuellen Position im \ps-Code wird der Inhalt der Datei
{\it \<filename>} 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~\<commands>}
Die \ps-Befehle aus {\it \<commands>} 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 \"~\<commands>}
Bedeutung wie {\it postscript~\<commands>} und nur aus Kompatibilit"atsgr"unden
zu {\tt DVIPS} von Tomas Rokicki vorhanden.

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

<factor>::=<real number> |
           <identifier> |
           <function evaluation> |
           (<expression>)

<function evaluation>::=<identifier(<exp1>,...,<expn>)
\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 \<dimen>~\<dimen>~\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 \<byte>,\<byte>,\<byte>,\<byte>,%
\<byte>,\<byte>,\<byte>,\<byte>}}
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 \<plain\/$\vert$round\/$\vert$arrow\/%
$\vert$wedge\/$\vert$triangle>~\<plain\/$\vert$round\/$\vert$arrow\/%
$\vert$wedge\/$\vert$triangle>}}
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 \<dimen>~\<dimen>}}
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 \<real>~\<real>}}
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\<dimen>}}
Bei Linienenden von Typ {\tt triangle} steuert dieser Befehl die Liniendicke der
Pfeilspitze.

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

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

\subsubsection{spline~{\it \<pointlist>}}
Zeichnet einen nat"urlichen Spline, der durch die Kontrollpunkte in {\it \<pointlist>}
definiert ist. 

\subsubsection{hermitespline~{\it \<pointlist>}}
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 \<pointlist>}}
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 \<pointlist>}}
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 \<pointlist>}}
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 \<name>} 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=<dimen>
\epsfysize=<dimen>
\end{verbatim}
\end{quote}

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