summaryrefslogtreecommitdiff
path: root/support/rumgraph/rumgraph.tex
blob: 8979d6d0a34847698b772adaee3f8c87f75b42c8 (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
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
% Dies ist RUMGRAPH.TEX vom 13.02.91 Ki/Kr
\documentstyle[11pt,german,refman,twoside]{article}

\frenchspacing

\newfont{\MetaFont}{logo10 scaled 1000}
\newcommand{\METAFONT}{{\MetaFont METAFONT}}

\input{rum}
\input{airplane}
\input{america}
\input{boat}
\input{clown}
\input{columbia}
\input{lion}
\input{monitor}
\input{rolls}
\input{inforum}
\input{singa}

\newcommand{\HWK}{H.$\!$-$\!$W$\!$.\ Kisker}
\newcommand{\RUMgraph}{\mbox{\RUMj{\sf graph}}}
\newcommand{\ADI}{{\sf ADI}}
\newcommand{\PCX}{{\sf PCX}}
\newcommand{\PXL}{{\sf PXL}}
\newcommand{\TFM}{{\sf TFM}}
%
\addtolength{\headheight}{1pt}
\setleftmarginwidth{1.0in}
%
\pagestyle{myheadings}

\begin{document}

\title{
\RUMt{\sf graph} \\
Einbindung von Pixel-Bildern in ein \TeX-Dokument
}

\author{
\HWK \and
Westf"alische Wilhelms-Universit"at \and
Universit"atsrechenzentrum \and
Einsteinstr. 60 \and
4400 M"unster \and
September 1990
}

\maketitle
\makeauthor

\maxipagerulefalse

\tableofcontents

\newpage

Der klassische Weg, in \TeX-Dokumente Bilder einzubinden, ist die Verwendung des
{\em special\/}-Kommandos. Dieses wird nicht von \TeX\ selbst, sondern
ausschlie"slich vom DVI-Treiber abgearbeitet. Ich selbst habe in den vergangenen
Jahren einige DVI-Treiber f"ur verschiedene Drucker geschrieben, um Grafiken
benutzen zu k"onnen. Nach meinem Daf"urhalten kranken aber alle L"osungen, die sich
auf eine {\em special\/}-L"osung abst"utzen, in zweierlei Hinsicht.

Wie sein Name schon andeutet, ist die Bedeutung des {\em special\/}-Kommando in
keiner Weise festgelegt. Jeder Treiber, der ein solches Kommando implementiert,
kann sowohl Syntax als auch Semantik selbst festlegen. Hiervon wird von den
Entwicklern der DVI-Treiber ungehemmt Gebrauch gemacht. Auch die momentanen
Normierungsbestrebungen werden an dieser Situation kaum etwas "andern. Jeder so
entwickelte Vorschlag hat n"amlich nicht den bindenden Charakter eines
\TeX-Kom\-man\-dos, sondern ist als Empfehlung zu verstehen, die man befolgen,
aber auch verwerfen kann. Die einzige allgemein anerkannte Autorit"at in der
\TeX-Gemeinde, die hier etwas "andern k"onnte, ist Donald Knuth selbst. W"urde er
\TeX\ mit Gra\-fik\-ele\-men\-ten versehen, so w"are die Frage der
Implementierung jeder Diskussion entzogen. Ich pers"onlich w"urde mir eine solche
Erweiterung w"unschen.

Der zweite Gesichtspunkt, der die Verwendung des {\em special\/}-Kommandos
unhandlich macht, ist seine Nichtbeachtung durch \TeX. \TeX\ hat keine
Vorstellungen "uber die Abmessungen einer Grafik, die durch einen solchen Befehl
in ein Dokument aufgenommen wird. F"ur den Benutzer bedeutet dies, da"s er das
Bild in eine Schale (z.B. {\em picture\/}-Umgebung) einbetten mu"s, um \TeX\
indirekt die M"oglichkeit zu geben, das grafische Element zu ber"ucksichtigen.
Dieses Verfahren schafft neue Fehlerquellen und zus"atzlichen Pf"|legeaufwand. So
k"onnen z.B. die Abmessungen eines Bildes falsch eingesch"atzt werden, und auf
eine "Anderung der Grafik mu"s mit einer "Anderung der Parameter f"ur die Schale aus
\TeX-Kommandos reagiert werden.

Beide Hindernisse haben mich schon vor einiger Zeit dazu veranla"st, L"osungen mit
dem {\em special\/}-Kommando nicht weiter zu verfolgen. Ich habe f"ur meine
Belange stattdessen einen anderen Weg realisiert. Ausgangspunkt war die
Feststellung, da"s \TeX\ standardgem"a"s mit "`Grafiken"' umzugehen wei"s, n"amlich
mit den Zeichen seiner Zeichens"atze. Aus diesem Blickwinkel betrachtet, h"alt
\TeX\ f"ur jede dieser "`Grafiken"' ein Rechteck auf der Seite frei, in das
dann der Dvi-Treiber das "`Bild"' des Zeichens hineinmalt. Die Zeichen werden
dabei f"ur Pixel-orientierte Drucker als Bitmap vorgehalten, f"ur
PostScript-f"ahige Drucker z.B. auch als das Aussehen beschreibende Algorithmen.

Ich habe mich bei meinen Entwicklungen auf Pixel-orientierte Drucker beschr"ankt.
Damit reduziert sich die Aufgabe, Bilder f"ur \TeX\ aufzubereiten auf die
Umwandlung von Grafik-File-Formaten in eines der von \TeX\ unterst"utzten
Zeichensatzformate \PXL\ oder {\sf PK}. Der Standardweg, solche Zeichens"atze
zu erzeugen, f"uhrt "uber \METAFONT\ und {\sf GFtoPX}. L"osungen, die hier
ansetzen und z.B. HPGL-Files in {\em mf\/}-Files umsetzen, sind bereits als
kommerzielle Produkte verf"ugbar. Allerdings liegen viele Grafiken nicht in
Vektor-Form (wie HPGL) vor, sondern als Pixel-Files. Insbesondere "uber einen
Scanner gewonnene Bilder werden fast immer in einem \PCX-, {\sf TIFF}- oder
{\sf GIF}-File abgelegt. Ich habe deshalb dem direkten Weg zur Erzeugung der
Zeichens"atze den Vorzug gegeben. Das unten vorgestellt Programm \RUMgraph\
wandelt \ADI- und \PCX-Grafik-Files in \TeX-\PXL-Files um. Die
Implementierung des \ADI-Formats ist als Abdeckung meines pers"onlichen
Bedarfs zu sehen: ich benutze bevorzugt {\sf AutoCAD} zur Erzeugung meiner
Bilder. Die gr"o"sere Bedeutung kommt aber sicherlich dem weit verbreiteten
\PCX-Format der Firma ZSoft zu. Auf die Implementierung anderer Grafikformate
habe ich verzichtet, da es sowohl im kommerziellen als auch im
Public-Domain-Bereich Programme gibt, die nahezu jedes Grafikformat -- sowohl
Pixel- als auch Vektor-orientiert -- nach \PCX\ umwandeln. Ich selbst habe
bereits erfolgreich {\sf GIF-, MSP-, TIFF-, HPGL-, PCL-, EPS-, WPG-, IGES- und
DXF-}Formate verwendet.

\section{Aufgabe des Programms}
\markboth{Aufgabe des Programms}
{Aufgabe des Programms}


Das Programm \RUMgraph\ wandelt Pixel-Bilder im \ADI- oder \PCX-Format in
\TeX-PXL-Zeichens"atze um. F"ur jeden Buchstaben des neu zu schaffenden
Zeichensatzes wird dabei ein eigener Grafik-File verwendet.

Eingabe f"ur das Programm sind dementsprechend neben einer Reihe von Angaben, die
den Zeichensatz beschreiben, ein oder mehrere Grafik-Files f"ur die
Buchstaben. Als Ergebnis wird ein \PXL-File mit zugeh"origem \TFM-File erzeugt.
Au"serdem wird ein sogenannter {\em Log-File\/} geschrieben, der ausf"uhrliche
Information "uber den jeweiligen Programmlauf enth"alt. Auf Anforderung hin kann
ein \TeX-Input-File bereitgestellt werden, der den Zugriff auf den Zeichensatz
und seine Zeichen erleichtert.

Es werden zwei Pixel-orientierte Grafikformate unterst"utzt:
das \ADI-Format der Firma AutoDesk und das \PCX-Format der Firma ZSoft.

Das Programm ist ablauf"|f"ahig auf IBM-kompatiblen Rechnern. Es l"auft unter den
Betriebssystemen {\sf MS-DOS} und {\sf OS/2}.


\section[Der Aufruf von \RUMgraph\ ]{Der Aufruf von \RUMo{\sf graph}}
\markboth{Der Aufruf von \RUMgraph}
{Der Aufruf von \RUMgraph}

Das Programm \RUMgraph\ wird in der "ublichen Weise durch eine Eingabe der
folgenden
Form aufgerufen:

{\sf \hspace*{.5in} RUMgraf\ \  option\ \ ...}

Die Optionen beginnen dabei mit den Zeichen / oder --. Unmittelbar danach folgt
ein einzelner Buchstabe: die Optionskennung. Welche Buchstaben zul"assig sind und
welche Bedeutung sie haben, wird weiter unten erl"autert. Gro"s- und
Kleinbuchstaben werden {\it nicht} unterschieden. An die Optionskennung schlie"st
sich der Wert der Option an. Zwischen Optionskennung und Wert kann als Trenner
eines der Zeichen : oder = eingeschoben werden. Leerzeichen sind als Trenner
nicht zul"assig. Enth"alt der Wert der Option ein Leerzeichen, so ist er in
Hochkommata\ ''\ einzuschlie"sen. Alle Angaben, die nicht mit / oder -- beginnen,
werden als Kommentar betrachtet und dementsprechend ignoriert.

Die Optionen gliedern sich in drei Gruppen:

\begin{itemize}
\item Die erste Gruppe spezifiziert die Parameter, die f"ur den gesamten
Zeichensatz gelten (z.B. Auf"|l"osung). Sie k"onnen sinnvollerweise nur
einmal angegeben werden. Erfolgt eine mehrfache Angabe, so hat nur der
letzte Wert G"ultigkeit.

\item Die zweite Gruppe beschreibt die einzelnen Zeichen (z.B.
metrische Angaben). Eine einem Zeichen zugeordnete Gruppe von Optionen
wird eingeleitet durch die c-Option (character number), die ein
bestimmtes Zeichen festlegt. Alle Angaben bis zur n"achsten c-Option
werden diesem Zeichen zugeordnet. Bei Mehrfachangaben beh"alt wieder nur
die letzte Angabe einer Gruppe ihre G"ultigkeit.

\item Die dritte Gruppe enth"alt nur eine einzelne Option, und zwar die m-Option.
"Uber sie wird der Name eines sogenannten {\em makefiles\/} angegeben. In ihm
k"onnen beliebige Optionen abgelegt sein. Die Angabe einer m-Option bewirkt, da"s
die in dem {\em makefile\/} enthaltenen Optionsangaben in die Reihe der Optionen
der Kommandozeile eingeschoben und abgearbeitet werden. Alle Optionen k"onnen in
einem {\em makefile\/} verwendet werden; insbesondere auch Kommentare.

\end{itemize}

\subsection*{Optionen der Gruppe 1: Angaben zum Zeichensatz}

\marginlabel{\bf /P} {\sf /P:}{\em Picture\/}

Mit der p-Option wird eine Kennung f"ur das zu erzeugende Bild
festgelegt. Sie wird benutzt f"ur:

\begin{itemize}

\item den Namen des \PXL-Files ({\sf ident.PXL}),

\item den Namen des TFM-Files ({\sf ident.TFM}),

\item den Namen des \TeX-Input-Files ({\sf ident.TEX}) und

\item den Namen des Log-Files ({\sf ident.RGL}).

\end{itemize}

Die Kennung mu"s aus 1 - 8 Buchstaben bestehen.

Beispiel: {\sf /P:SINGA}

\vspace*{.1in}

\marginlabel{\bf /R} {\sf /R:}{\em Resolution\/}

Die r-Option gibt die verwendete Auf"|l"osung der Bitmap an.

Ma"seinheit: dpi (= dot per inch)

Beispiel: {\sf /R:300}



\subsection*{Optionen der Gruppe 2: Angaben zu den einzelnen Zeichen}

\marginlabel{\bf /C} {\sf /C:}{\em Character\/}

Mit der c-Option wird der Beginn eines Parametersatzes f"ur das angegebene
Zeichen festgelegt. Alle Optionen der Gruppe 2 werden bis zur n"achsten c-Option
auf dieses Zeichen bezogen. Als Wert kann entweder ein Buchstabe oder eine Zahl
von 0 bis 127 angegeben werden.

Beispiele: {\sf /C:A} oder {\sf /C:65}

\vspace*{.1in}

\marginlabel{\bf /N} {\sf /N:}{\em Name\/}

Jedem Buchstaben kann "uber die n-Option ein Name zugeordnet werden. Der Name
dient zur Generierung eines \TeX-Kommandos im \TeX-Input-File. Wird der
Input-File benutzt, so kann der Buchstabe -- und somit auch das Bild -- durch
Angabe dieses Kommandos in das Dokument eingef"ugt werden. Fehlt die n-Option, so
wird f"ur diesen Buchstaben kein Kommando erzeugt. Wird f"ur keinen der Buchstaben
ein Name angegeben, so wird die Erzeugung des \TeX-Input-Files g"anzlich
unterdr"uckt. Ein Name kann aus einer beliebigen Anzahl von Buchstaben
zusammengestzt sein.

Beispiel: {\sf /N:Aleph}

\vspace*{.1in}

\marginlabel{\bf /T} {\sf /T:}{\em Type\/}

Die t-Option bezeichnet das Format des zu dem Buchstaben geh"orenden
Grafik-Files. Als Werte k"onnen die Kennungen \ADI\ und \PCX\ angegeben
werden. F"ur jeden Buchstaben kann ein anderer File-Typ angegeben werden.

Beispiel: {\sf /T:PCX}

\vspace*{.1in}

\marginlabel{\bf /F} {\sf /F:}{\em Filename\/}

"Uber die f-Option wird der Name des Grafik-Files angegeben, der f"ur die
Erzeugung der Bitmap des Zeichens verwendet werden soll. Es kann ein beliebiger
Pfadname angegeben werden.

Beispiel: {\sf /F:aleph.pcx}

\vspace*{.1in}

\marginlabel{\bf /D /H /W}
{\sf /D:}{\em Depth\/} {\sf /H:}{\em Height\/} {\sf /W:}{\em Width\/}

Die metrischen Angaben f"ur den \TFM-File werden "uber die d-Option ({\em depth\/}),
h-Option ({\em height\/}) und w-Option ({\em width\/}) spezifiziert. Die Bedeutung
dieser und der anderen metrischen Werte wird weiter unten erl"autert. Fehlen die
Optionen, so wird {\em width\/} gleich der Breite {\em x size\/} der Bitmap, {\em
height} gleich der H"ohe {\em y size\/} der Bitmap und {\em depth\/} gleich Null
gesetzt. Alle Angaben sind in Pica-Punkten {\em pt\/} zu machen.

Ma"seinheit: pt ({\sf 1 inch = 72.72 pt})

Beispiel: {\sf /W:20 /H:24 /D:8}

\vspace*{.1in}

\marginlabel{\bf /X /Y} {\sf /X:}{\em Xoffset\/} {\sf /Y:}{\em Yoffset\/}

"Uber die x-Option ({\em x offset\/}) und die y-Option ({\em y offset\/}) k"onnen die
metrischen Angaben f"ur den \PXL-File festgelegt werden.
Die Gr"o"sen {\em x size\/} und {\em y size\/} entnimmt \RUMgraph\ direkt dem
"uber die f-Option bestimmten Grafik-File. Fehlen die Angaben, so wird {\em x
offset\/} gleich 0 und {\em y offset\/} gleich {\em y size\/} gesetzt.

Ma"seinheit: pixel

Beispiel: {\sf /X:--5 /Y:22}

\vspace*{.1in}

\marginlabel{\bf /S} {\sf /S:}{\em Splitcount\/}

Werden Bilder in Buchstaben umgewandelt, so entstehen h"aufig "au"serst gro"se
Buchstaben. Eine Zeichnung, die eine ganze DIN A4-Seite einnimmt ist keine
Besonderheit. Viele Treiber (und auch viele {\sf PXTOPK}-Implementierungen)
k"onnen so gro"se Zeichen nicht handhaben. Deshalb besteht "uber die s-Option die
M"oglichkeit, das Bild in mehrere Teilbilder in Form von vertikalen Streifen zu
zerschneiden. Diese Streifen werden dann einzeln in Buchstaben umgewandelt und
unbelegten Codes des Zeichensatzes zugewiesen. Die metrischen Angaben im \TFM-
und \PXL-File werden dabei so angepa"st, da"s alle Buchstaben, wenn sie
unmittelbar
aufeinander folgen, wieder das Gesamtbild ergeben.

Ma"seinheit: Bytes

Beispiel: {\sf /S:20}


\vspace*{.1in}

\marginlabel{\bf /I} {\sf /I}

Mit Hilfe der i-Option kann ein Bild invertiert werden.

Beispiel: {\sf /I}

\vspace*{.1in}

\marginlabel{\bf Anmerkung} Die Standardwerte der metrischen Angaben sind so
gew"ahlt, da"s sowohl aus der Sicht von \TeX\ als auch aus der des DVI-Treibers
der Referenzpunkt des Zeichens stets in der linken unteren Ecke liegt und da"s um
die Bitmap herum keinerlei Rand bleibt. Wird \RUMgraph\ zur Einbindung von
Bildern
in ein Dokument genutzt, so ist diese Setzung naheliegend.

\subsection*{Optionen der Gruppe 3: Umlenken der Eingabe auf einen {\em
makefile\/}}


\marginlabel{\bf /M} {\sf /M:}{\em Makefile\/}

"Uber die m-Option kann \RUMgraph\ angewiesen werden, seine Optionen aus einer
Datei zu lesen. Insbesondere wenn ein zu erzeugender Zeichensatz mehrere
Buchstaben umfa"st, ist die Einf"uhrung eines {\em makefiles\/} unumg"anglich. Die
Anzahl der Optionen, die in der Kommandozeile m"oglich sind, ist eben deutlich
beschr"ankt. Ein {\em makefile\/} kann alle Optionen enthalten. Wird allerdings in
einem {\em makefile\/} eine m-option angegeben, so werden alle folgenden Optionen
ignoriert. Ein {\em makefile\/} kann deshalb innerhalb eines {\em makefiles\/}
sinnvoll nur mit der letzten Option angegeben werden.

Beispiel: {\sf /M:Singa}




\section{Die Verwaltung von Zeichens"atzen durch \TeX}
\markboth{Die Verwaltung von Zeichens"atzen durch \TeX}
{Die Verwaltung von Zeichens"atzen durch \TeX}

Ein Zeichensatz, wie er von \TeX\ verwendet wird, enth"alt grunds"atzlich zwei
Arten von Angaben:

\begin{itemize}

\item metrische Angaben wie Breite und H"ohe der Zeichen und

\item die grafische Beschreibung des Zeichens selbst -- meistens wie bei \PXL-
und PK-Files in Form einer Bitmap.

\end{itemize}

Die Angaben f"ur jeden Zeichensatz sind auf zwei Dateien verteilt: den \TFM-File
und den \PXL-File. Die Angaben in beiden Files sind teilweise redundant. Etwas
vereinfacht kann man aber sagen, da"s der \TFM-File metrische Angaben enth"alt,
die
den Platz beschreiben, der f"ur das Zeichen auf der Seite reserviert werden soll,
und da"s der \PXL-File die Bitmap beinhaltet, die zur eigentlichen Darstellung
des
Zeichens benutzt wird. Entsprechend dieser Aufteilung werden bei der Erstellung
eines Dokuments mit \TeX\ die Angaben eines Zeichensatzes von unterschiedlichen
Programmen ausgewertet.

{\small

\input{la}

}

Das eigentliche \TeX-Programm benutzt nur die metrischen Angaben aus dem
TFM-File. Aus der Sicht von \TeX\ sind Buchstaben einfach Rechtecke. Zur
Positionierung dieser Rechtecke wird eine fiktive {\em Schreiblinie\/} und auf
dieser ein fiktiver {\em Schreibpunkt\/} verwaltet. Die Buchstabenrechtecke
werden auf dieser Schreiblinie so positioniert, da"s zum einen ihr linker Rand
durch den Schreibpunkt hindurch geht und da"s sie zum anderen eine vorgegebene
H"ohe ({\em height\/}) "uber der Linie und eine vorgegebene Tiefe ({\em depth\/})
unter der Linie hinaus ragen. Die Schreibstelle wird von \TeX\ nach der
Positionierung des Zeichens um die Breite {\em width\/} des Zeichens verschoben.
Man kann auch sagen, da"s die Angaben von {\em height\/} und {\em depth\/} auf dem
linken Rand des Zeichens einen {\em Referenzpunkt\/} festlegen, der von \TeX\ mit
dem Schreibpunkt zur Deckung gebracht wird. \TeX\ ber"ucksichtigt in keiner
Weise das durch die Bitmap festgelegte grafische Ausssehen eines Zeichens. Es
h"alt nur den Platz f"ur diese Bitmap frei. Das {\em Ausmalen\/} dieses Platzes ist
Aufgabe des DVI-Treibers.


Ein DVI-Treiber "ubertr"agt also die im \PXL-File (oder auch {sf PK}-File)
enthaltene Bitmap auf die Seite. Dabei werden auch von ihm metrische Angaben,
die sich aber auf die Abmessungen der Bitmap beziehen, ausgewertet. Konkret
sind dies vier Werte. Zum einen existieren auch hier Angaben zur H"ohe ({\em y
size\/}) und Breite ({\em x size\/}) eines jeden Zeichens. Sie spiegeln
das engste
Rechteck wieder, das um die Bitmap gezogen werden kann. Zum anderen wird mit
einem horizontalen ({\em x offset\/}) und vertikalen ({\em y offset\/}) Versatz
ebenfalls ein Referenzpunkt definiert. Da beide Offset-Angaben auch negativ
sein k"onnen, kann der Referenzpunkt beliebig au"serhalb der Bitmap liegen. Ein
DVI-Treiber verwaltet -- wie das \TeX-Progamm selbst -- Schreiblinie und
Schreibpunkt und positioniert Zeichen, indem Schreibpunkt und Referenzpunkt der
Bitmap zur Deckung gebracht werden. Bei Verschiebung der Schreibstelle wird
allerdings der gleiche Wert f"ur die Breite des Zeichens verwendet wie vom
\TeX-Programm.

Prinzipiell sind die Angaben im \TFM- und \PXL-File unabh"angig voneinander. In
der
Praxis werden die Angaben aber nat"urlich aufeinander abgestimmt verwendet. Der
von \TeX\ reservierte Platz ist meistens so gew"ahlt, da"s um den gedruckten
Buchstaben herum ein ausreichender Abstand zu benachbarten Zeichen entsteht.
Erforderlich ist dies allerdings nicht; so kann die vom DVI-Treiber auf die
Seite "ubertragene Bitmap durchaus au"serhalb des von \TeX\ freigehaltenen Platzes
zu liegen kommen.




\section[Die Arbeitsweise von \RUMgraph\ ]{Arbeitsweise von \RUMo{\sf graph}}
\markboth{Die Arbeitsweise von \RUMgraph}
{Die Arbeitsweise von \RUMgraph}


Bei der Erzeugung von Zeichen mit dem Programm \RUMgraph\ k"onnen die Angaben
{\em width\/}, {\em height\/} und {\em depth\/} f"ur den \TFM-File und {\em x offset\/}
und {\em y offset\/} f"ur den \PXL-File vom Benutzer festgelegt werden. Die
fehlenden Gr"o"sen {\em x size\/} und {\em y size\/} f"ur den \PXL-File entnimmt
\RUMgraph\ direkt dem Ursprungs-Grafik-File.

Die oben beschriebene M"oglichkeit, Bitmaps auch au"serhalb des von \TeX\
freigehaltenen Platzes zu positionieren, wird genutzt, wenn ein gro"ses
Bild in mehrere Buchstaben zerlegt werden mu"s. Dabei wird n"amlich der
Referenzpunkt f"ur jeden Teilbuchstaben an die Stelle gelegt, die durch den
Referenzpunkt des Gesamtbildes bestimmt ist. Die Breiten der ersten Teilbilder
werden s"amtlich auf Null gesetzt und nur die Breite des letzten Teilbuchstabens
wird gleich der Weite des Gesamtbildes gew"ahlt. Zur Erl"auterung werde das
folgende Bild betrachtet.

\input{lb}

Der Referenzpunkt des Bildes ist die linke untere Ecke. Wird es mit einer
Setzung {\sf /S:3} in einen \PXL-File umgewandelt, so entstehen drei
Teilbuchstaben mit folgenden Referenzpunkten:

\input{lc}

Werden die drei Buchstaben unmittelbar nacheinander ausgegeben, so entsteht
wieder das obige Bild.

Nat"urlich h"atte auch die M"oglichkeit bestanden, f"ur die Teilbuchstaben den
Referenzpunkt stets auf die jeweilige linke untere Ecke zu legen und die Breite
gleich der jeweiligen Pixel-Ausdehnung zu w"ahlen. Diese L"osung birgt aber eine
Gefahr in sich. F"ur die Positionierung seiner Buchstaben auf der Schreiblinie
verwaltet ein {\sf DVI}-Treiber zwei Koordinatenwerte: zum einen die idealen
hochgenauen \TeX-Koordinaten und zum anderen die realen durch die Auf"|l"osung
bestimmten Pixel-Koordinaten. Durch Rundungsfehler driften diese beiden Werte
auseinander. Deswegen "uberpr"uft der Treiber bei jeder Positionierung, ob die
Differenz eine vorgegebene Schwelle (Stichwort: {\em max drift\/}) "uberschreitet.
Ist dies der Fall, so wird die Position um ein oder mehrere Pixel korrigiert.
F"allt nun diese Korrektur zwischen zwei zu einem Bild geh"orenden
Teilbuchstaben, so entstehen entweder wei"se Streifen im Bild oder zwei
Teilbilder "uberlappen sich. Beides ist nicht tolerierbar. Die L"osung mit der
Breite von Null f"ur die ersten Buchstaben vermeidet dieses Problem.


\subsection*{Anmerkungen}

\marginlabel{ADI-Format}
ADI ist ein Grafikformat, das von der Firma AutoDesk definiert wurde, um
Herstellern von Hardware-Komponenten den Anschlu"s ihrer Ger"ate an die von
AutoDesk angebotenen Programme zu erm"oglichen. F"ur verschiedene Ger"ate -- wie
Bildschirm, Drucker, Plotter oder Digitizer -- sind verschiedene Formate
festgelegt. Das von \RUMgraph\ verwendete \ADI-Format dient dazu, einfache
Grafikdrucker -- {\em printer/plotter\/} im Jargon von AutoDesk -- zu betreiben.

\marginlabel{\PCX-Format}
\PCX\ ist das Grafik-Format der Firma ZSoft. Es geh"ort wohl zu den verbreitetsten
Grafik-Formaten "uberhaupt. Fast alle Pixel-orientiert arbeitenden Programme
unterst"utzen es. Auch Bilder, die "uber einen Scanner gewonnen werden, k"onnen
meistens (neben TIFF) auch im \PCX-Format abgelegt werden. \PCX\ umfa"st neben
monochromen Bildern auch Graustufen- und Farbgrafiken. \RUMgraph\ bearbeitet nur
monochrome \PCX-Files. Farb- bzw. Graustufenbilder m"ussen also vorher in
monochrome Bilder umgewandelt werden. Auf dem Markt (auch im
Public-Domain-Bereich) existiert eine gro"se Anzahl von Programmen, die diese
Umwandlung vornehmen. Entsprechendes gilt auch f"ur die Umwandlung anderer
Grafikformate nach \PCX.

\marginlabel{Entfernen von Leerraum}
Das Programm \RUMgraph\ entfernt s"amtlichen Leerraum rund um das Bild. "Ubrig
bleibt ein Rechteck, das auf jeder Seite mit wenigstens einem schwarzen Punkt
besetzt ist. Soll um das Bild herum Leerraum vorgesehen werden, um Platz zu den
Nachbarzeichen zu gewinnen, so ist dies "uber die Optionen f"ur die metrischen
Werte (x, y, w, h und d) zu erreichen.

\marginlabel{Zuordnung von Zeichen zu Teilbildern}
Wird ein gro"ses Bild in Teilbilder zerlegt, so werden diese fortlaufend freien
Zeichen zugeordnet. Die Zuordnung beginnt mit der in der c-Option angegebenen
Zeichennummer. Wird ein Zeichen erreicht, das bereits belegt ist, so wird es
"ubersprungen. Wird das Zeichen mit der Nummer 127 erreicht, so wird anschlie"send
mit dem Zeichen mit der Nummer 0 fortgefahren. Die von \RUMgraph\ vorgenommene
Zuordnung kann sowohl dem Log-File (Erweiterung: {\sf RGL}) als auch dem
\TeX-Input-File entnommen werden.

\newpage

\section[\RUMgraph\ --\ Workshop]{\RUMo{\sf graph}\ --\ Workshop}
\markboth{\RUMgraph\ --\ Workshop}
{\RUMgraph\ --\ Workshop}

Ich m"ochte im folgenden einige Wege zur Gewinnung von Bildern aus verschiedenen
Quellen aufzeigen, die sich f"ur meine Arbeiten als Standard herausgebildet
haben. Wenn man sich, so wie ich, nur sporadisch mit der Einbindung von Grafik
besch"aftigt, so ist das Herausarbeiten von Standardwegen, die man ohne gro"se
Vorkehrungen nutzen kann, "au"serst wichtig. Denn, das soll nicht verschwiegen
werden, die Aufbereitung von Bildern und ihre Einbindung in ein Dokument kann
m"uhsam und auch sehr zeitaufwendig sein. Dies gilt besonders dann, wenn man sich
die Methoden erst erarbeiten oder auch nur wieder ins Ged"achnis rufen mu"s.

\subsection{Anmerkungen zur Erzeugung der Bilder}
\markboth{Anmerkungen zur Erzeugung der Bilder}
{Anmerkungen zur Erzeugung der Bilder}

Quellen f"ur die Gewinnung von Bildern sind neben Scannern und
Bildschirmmitschnitten vor allem spezielle Programme, die zu diesem Zweck
entworfen wurden. Ich selbst nutze zur Zeit die Programme AutoCAD f"ur technische
Zeichnungen, CorelDraw f"ur Pr"asentationsgrafiken, PC Paintbrush f"ur Pixelbilder
und Framework f"ur Diagramme. Aber auch mit OrCAD entworfene Schaltpl"ane, Bilder
vom Apple MacIntosh oder Darstellungen statistischer Daten von StatGraphics sind
von mir schon genutzt worden.

Die Programme legen ihre Bilder im allgemeinen in einem Programm-spezifischen
Format ab. Nur einige wenige gestatten es, direkt die Formate \ADI\ bzw.
\PCX\ zu erzeugen. Allerdings stellt die gro"se Uneinheitlichkeit der
Grafikformate kein wirkliches Hindernis f"ur unser Vorhaben dar. Denn es gibt
heute sowohl im kommerziellen wie auch im Public-Domain- und Shareware-Bereich
gen"ugend Programme, die beinahe jedes Format in jedes umwandeln. Ich benutze
manchmal z.B. das Programm HiJaak, das die Formate PXL (ZSoft), FAX (CCITT), GIF
(CompuServ), TIFF, DXF (AutoDesk), IFF (Amiga), IMG (Digital Research), CUT
(Halo), PCL (HP Drucker), HPGL (HP Plotter), PIX (North American Software), PIC
(Lotus), MAC (Apple), MSP (Microsoft), WPG (WordPerfect) usw. ineinander
umwandelt. Auch wenn Programme wie dieses eine gute Basis darstellen, bevorzuge
ich jedoch meistens einen anderen Weg. Alle Programme k"onnen n"amlich
selbstverst"andlich einen Drucker ansteuern, und meistens kann die Druckausgabe
auch in einer Datei abgelegt werden. Ist letzteres nicht der Fall, so mu"s man
sich eines Drucker-Spoolers oder anderer Spezialprogramme bedienen. Die
Druckausgabe ist wohl die universellste Quelle zur Gewinnung von Bildern. Ich
benutze Ausgaben f"ur den HP LaserJet (PCL-Format) und f"ur PostScript-Drucker
(PS-Format); seltener auch Ausgaben f"ur einen HP-Plotter (HPGL-Format). Ich
kenne eigentlich kein wesentliches Programm, das nicht wenigstens eines dieser
Formate erzeugen kann.

Ein besonders zu behandelndes Problem ist die Festlegung der Bildabmessungen,
insbesondere wenn das gleiche Bild f"ur verschiedene Drucker mit
unterschiedlichen Auf"|l"osungen erzeugt werden soll. Am Rechenzentrum betreiben
wir z.B. neben den "ublichen Laserdruckern mit 300-dpi-Auf"|l"osung auch einen
Drucker der Firma Agfa mit einer Auf"|l"osung von 406 dpi. Hier liegt eine der
St"arken von Programmen wie AutoCAD. Bei der Erzeugung eines \ADI-Files kann
jede gew"unschte Abmessung und jede Auf"|l"osung exakt spezifiziert werden.
Schwieriger ist dagegen die Anpassung von Druckausgaben, die typischerweise in
einer Auf"|l"osung von 300 dpi erstellt werden. Zwar kann, wie wir unten sehen
werden, die Auf"|l"osung bei der Umwandlung auch in gewissen Grenzen beeinflu"st
werden, aber so exotische Werte wie 406 dpi sind meistens nicht spezifizierbar.

Hier hilft eine Besonderheit der Umwandlung durch \RUMgraph\ weiter. Jeder
Ein\-ga\-be-File wird n"amlich grunds"atzlich nur als Pixel-Quelle verstanden.
Zwar enthalten sowohl \ADI- als auch \PCX-Files eine Auf"|l"osungsangabe,
diese wird jedoch von \RUMgraph\ v"ollig ignoriert. Extrahiert wird nur das in
der jeweiligen Datei enthaltene Bitmuster, und die Gr"o"se eines Bildpunktes wird
ausschlie"slich durch die Angabe im {\em makefile\/} bestimmt. Damit hat man aber
die M"oglichkeit, auch Bilder, die "uber eine 300-dpi-LaserJet-Ausgabe gewonnen
werden, in gewissen Grenzen an andere Auf"|l"osungen anzupassen.

Hat man z.B. ein Bild f"ur eine Auf"|l"osung von 300 dpi erzeugt und m"ochte das
gleiche Bild auch in anderen Auf"|l"osungen, z.B. 100 dpi und 406 dpi, vorhalten,
so mu"s man mit Hilfe des erzeugenden Programms das Ausgangsbild manipulieren.
F"ur die 100-dpi-Auf"|l"osung mu"s man es auf 1/3 verkleinern, f"ur die
406-dpi-Auf"|l"osung mu"s man es um ca. 1/3 (genauer 106/300) vergr"o"sern. Gibt man
diese so manipulierten Bilder als Druckerausgabe aus, so haben sie zwar erst
einmal alle die Auf"|l"osung von 300 dpi; die Gr"o"sen der Bilder verhalten sich aber
wie 1:3:4. Wandelt man diese Bilder nun um in \PXL-Files mit den Auf"|l"osungen
100, 300 und 406 dpi, so haben die drei Bilder bei Ausgabe auf Druckern mit
entsprechender Auf"|l"osung alle drei die gleiche reale Gr"o"se.

Mir ist klar, da"s dieser Vorgehensweise Grenzen gesetzt sind. Vor allem hohe
Auf\-l"o\-sun\-gen (z.B. 2400 dpi) sind auf diese Art nur f"ur sehr kleine Bilder
zu realisieren. F"ur "`unser aller Tagesgesch"aft"' jedoch, das von Druckern mit
Auf"|l"osungen von 300 dpi bestimmt wird, ist der Ansatz gut praktizierbar.

\subsection{Die Einbindung von PostScript-Bildern}
\markboth{Die Einbindung von PostScript-Bildern}
{Die Einbindung von PostScript-Bildern}

Die Nutzung der PostScript-Ausgabe eines Programms ist f"ur mich zum bevorzugten
Weg zur Gewinnung von Bildern geworden. Selbst bei Programmen, wie z.B.
CorelDraw, die eine direkte \PCX-Ausgabe anbieten, lohnt sich h"aufig der
"`Umweg"' "uber PostScript. Denn viele Programme bieten ihren vollen
Leistungsumfang nur dann, wenn eine PostScript-Ausgabe angestrebt wird. Meistens
gibt es drei Varianten f"ur die PostScript-Ausgabe:

\marginlabel{PostScript} Diese Ausgabe ist direkt f"ur einen PostScript
Drucker bestimmt.

\marginlabel{EPS} Die Variante {\em encapsulated PostScript\/} bezeichnet eine
Variante, die dem Austausch mit anderen Programmen dient. Bestimmte
PostScript-Kommandos werden vermieden, und in vorangestellten Kommentaren sind
Zusatzangaben f"ur das Zielprogramm enthalten.

\marginlabel{EPS mit Header-File} Hierbei handelt es sich ebenfalls um eine {\sf
EPS}-Ausgabe, der aber ein {\sf TIFF}-Pixel-File vorangestellt ist. Dieser wird
von manchen weiterverarbeitenden Programmen (z.B. PageMaker oder Ventura
Publisher) genutzt, um ein Pseudo-Preview zu erm"oglichen.


Je nach Programm, das f"ur die Umwandlung verwendet wird, k"onnen ein oder mehrere
dieser Formate genutzt werden. F"ur den von mir beschriebenen Weg ist nur die
Ausgabe "uber den echten PostScript Drucker m"oglich.

Zur Umwandlung von PostScript nach \PCX\ sind mehrere Programme auf dem Markt
verf"ugbar. Ich benutze das Programm {\sf GoScript} der Firma LaserGo. Es bietet
einen echten Preview f"ur PostScript-Files, wird zu einem vern"unftigen Preis
angeboten und kann unter anderem direkt \PCX-Ausgaben erzeugen. Die Auf"|l"osung
kann dabei in engen Grenzen festgelegt werden.

F"ur den Aufruf des Programms ist {\sf GoScript} "uber eine eigene
Umgebungsvariable {\em gs\/} mitzuteilen, wo seine Konfigurationsdaten, seine
Zeichens"atze usw. zu finden sind; z.B.

\hspace*{1in} {\sf set\ \ gs=d:\verb+\+goscript}

Danach kann das Programm gestartet werden mit einem Kommando der Form:

\hspace*{1in} {\sf gs\ \ /P:treiberangabe\ \ postscriptfile} \newline
z.B. \newline
\hspace*{1in}
{\sf gs\ \ /P:"d:\verb+\+goscript\verb+\+pcx.drv\ \ \verb+\+300x300"\ \
airplane.ps}

Die Angabe {\sf 300x300} im Beispiel bezeichnet die gew"unschte Auf"|l"osung. F"ur
weitere Auf"|l"osungen und andere Optionen sei auf das {\sf GoScript}-Handbuch
verwiesen. Erzeugt wird ein monochromer \PCX-File, der unter dem Namen {\sf
GSWxxxx.PCX}, wobei {\sf xxxx} eine fortlaufende Nummer ist, auf der Platte
abgelegt wird. Eine sofortige Umbenennung in einen aussagekr"aftigeren Namen ist
zu empfehlen. Die Bilder werden "ubrigens wei"s auf schwarz dargestellt, so da"s
sich eine Umwandlung mit der i-Option anbietet.

Die Clipart-Bilder der Beispiele wurden auf diese Weise gewonnen.




\subsection{Die Einbindung von HP-LaserJet-Ausgaben}
\markboth{Die Einbindung von HP-LaserJet-Ausgaben}
{Die Einbindung von HP-LaserJet-Ausgaben}

Der Weg zu einem Bild "uber eine HP-LaserJet-Ausgabe (PCL-File) ist sozusagen die
{\em ultima ratio\/}. Man kann davon ausgehen, da"s jedes ernstzunehmende Programm
in der PC-Welt zumindest dieses Ausgabeformat anbietet. Ganz ohne Probleme, die
zu beachten sind, geht es aber auch hier nicht ab.

\begin{enumerate}

\item Die von HP definierte Druckersteuersprache PCL hat bereits eine l"angere
Geschichte hinter sich. Sie ist im Laufe der Zeit immer wieder an neuere Drucker
angepa"st worden. HP versucht diese Entwicklung durch die Definition
verschiedener Level in den Griff zu bekommen, allerdings etwas halbherzig, denn
auch innerhalb eines Levels gibt es leider immer wieder Unterschiede. Gerade die
Steuersprache des ansonsten sehr attraktiven HP DeskJet gestattet einige
ansonsten nicht vorhandene Sonderbefehle, die bei der Umwandlung Schwierigkeiten
bereiten k"onnen. Im allgemeinen ist man aber auf der sicheren Seite, wenn man
eine Druckerausgabe f"ur einen HP LaserJet, einen HP LaserJet Plus oder einen HP
LaserJet Serie II aufbereitet.

\item Die Definition von PCL umfa"st neben der Grafiksteuerung auch ein
leistungs\-f"ahi\-ges Font-Management. Befehle, die in den letzteren Rahmen
fallen, werden von manchen Umwandlungsprogrammen nicht bearbeitet. Zwar reicht
dies in der "uberwiegenden Zahl der F"alle v"ollig aus, im Einzelfall k"onnen aber
doch gerade Beschriftungen bei der Umwandlung verloren gehen.

\end{enumerate}

Ich benutze zur Umwandlung von PCL nach \PCX\ das Programm {\sf HP2PCX} der
Firma ZSoft. Es ist Bestandteil des Lieferumfangs des Programms {\em PC
Paintbrush IV Plus\/}. Das Programm behandelt auch Font-Befehle und sieht
zus"atzlich einen Ersetzungsmechanismus f"ur nicht vorhandene Zeichens"atze vor.
Einzelheiten sind dem Handbuch zu entnehmen.

Der Aufruf des Programms erfolgt in der "ublichen Weise durch eine
Kommandoeingabe der wohl nicht weiter erkl"arungsbed"urftigen Form:

\hspace*{1in} {\sf HP2PCX\ \ pcl-eingabe-file\ \ pcx-ausgabe-file}

Es sei noch darauf hingewiesen, da"s auch das \TeX-Paket em\TeX\ von Eberhard
Mattes ein "ahnliches Programm mit Namen {\sf PCLtoMSP} enth"alt. Es bearbeitet
jedoch keine Zeichensatzbefehle, und als Ausgabe wird ein {\sf MSP}-File des
Windows-Paint-Programms erzeugt, der noch mit einem Programm wie {\em HiJaak\/}
nach \PCX\ umgewandelt werden mu"s.



\subsection{Farbbilder}
\markboth{Farbbilder}
{Farbbilder}

Ein Farbdrucker wirklich guter Qualit"at ist zur Zeit ein "au"serst selten
verf"ugbares Ausgabeger"at. Den meisten Lesern wird wohl wie mir nur ein
monochromer Drucker zur Verf"ugung stehen. Nun liegen aber viele Bilder,
insbesondere Fotos, in Farbe vor. Dies bedeutet, da"s auch nach Wegen gesucht
werden mu"s, Farbbilder in monochrome Bitmaps umzuwandeln.

Hierzu bedient man sich "ublicherweise eines Farbzerstreuungsverfahrens ({\em
dithering\/}). Dabei wird jeder Farbpunkt nach einem bestimmten Muster in
Grauwerte zerlegt, die dann anteilm"a"sig auf die Nachbarpunkte zerstreut werden.
"Uberschreiten die aufsummierten Grauwerte eines Punktes eine vorgegebene
Schwelle, so wird der Punkt schwarz gesetzt, sonst bleibt er wei"s. So entstehen
Pseudo-Graustufenbilder, die eine durchaus akzeptable Qualit"at erreichen. Das
Shareware-Produkt {\sf GWS} ({\em Grafic Work Shop\/}) bietet hier besonders
vielf"altige und ausgefeilte Verfahren zur Farbverteilung. Leider ist es
unm"oglich, ein Verfahren zu benennen, das in jedem Fall beste Ergebnisse
erzielt. Man wird von Fall zu Fall mehrere Methoden ausprobieren m"ussen. Da aber
gerade die besonders guten Verfahren "au"serst zeitintensiv sind, ist der
erforderliche Zeitaufwand betr"achtlich.

Ich habe mit gutem Erfolg einen anderen Weg beschritten. Zum Lieferumfang des
{\sf GWS} geh"ort auch ein Programm mit Namen {\sf PostGif}. Es wandelt Farb-{\sf
GIF}-Files in Graustufen-PostScript-Files um. Ein Farbbild, das nicht im {\sf
GIF}-Format vorliegt, kann mit dem {\sf GWS}-Hauptprogramm hierhin umgewandelt
werden. Die erzeugten PostScript-Bilder k"onnen dann, wie oben beschrieben,
weiterverarbeitet werden.

Das Beispiel des Clown-Fotos wurde auf diesem Weg gewonnen.


\subsection{Aufbereitung gescannter Bilder mit AutoCAD}
\markboth{Aufbereitung gescannter Bilder mit AutoCAD}
{Aufbereitung gescannter Bilder mit AutoCAD}

Bilder, die "uber einen Scanner gewonnen werden, sind zun"achst in ihrer Gr"o"se
und Auf"|l"osung festgefroren. M"ochte man sie als Basis f"ur eine Reihe von
gleichen Bildern unterschiedlicher Gr"o"se nutzen, so m"ussen sie vektorisiert
werden. Auch zu diesem Zweck existieren Spezialprogramme, wie z.B. ScanPro oder
Streamline, und auch manche Grafikprogramme bieten eine entsprechende
Dienstleistung an. Besonders bei Graustufen- oder Farbbildern "uberzeugen die so
automatisch gewonnenen Bilder nicht immer.

Ich habe mir deshalb eine andere M"oglichkeit zur "`Vektorisierung per Hand"'
geschaffen. Ich "ubernehme die gescannten Bilder nach AutoCAD und zeichne ihre
Konturen mit den dort zur Verf"ugung stehenden Werkzeugen nach. F"ur weniger
komplexe Bilder ist dies mit ertr"aglichem Aufwand zu bewerkstelligen.

Zur "Ubernahme eines \PCX-Files nach AutoCAD dient das von mir geschriebene
Programm {\sf PCXtoDXB}. Es wird aufgerufen durch eine Kommandoeingabe der Form:

\hspace*{1in} {\sf PCXtoDXB\ \ pcx-file\ \ dxb-file}

Das Ergebnis ist ein sogenannter {\sf DXB}-File. Dies ist ein bin"ares
AutoCAD-spe\-zi\-fi\-sches Austauschformat, das von AutoCAD mit dem Befehl {\sf
DXBIN} eingelesen werden kann. Um die Gr"o"se des {\sf DXB}-Files in Grenzen zu
halten, wird der Eingabe-Pixel-File nicht, wie es sich anbieten w"urde, in eine
Punktwolke umgewandelt, sondern in eine Anh"aufung von waagerechten und
senkrechten Linien. Diese grobe Vorlage lege ich innerhalb von AutoCAD in ein
eigenes {\em layer\/} und w"ahle dabei eine helle Grundfarbe, z.B. gelb; das
Nachzeichnen geschieht dann in einem anderen {\em layer\/} in einer dunkleren
Farbe, z.B. schwarz.

Das Bild des \LaTeX-L"owen ist so entstanden, und ein Institut der Universit"at
hat auf diese Weise "uber den Scanner einen singalesischen Zeichensatz generiert.


\subsection{Ger"ateunabh"angigkeit}
\markboth{Ger"ateunabh"angigkeit}
{Ger"ateunabh"angigkeit}

Die Ergebnisse meiner Vorgehensweise sind im strengen Sinne {\bf nicht}
ge\-r"a\-te\-un\-ab\-h"an\-gig. \RUMgraph\ geht von Pixel-Quellen aus, und deren
Auf"|l"osung und Abmessung spiegelt sich im \TFM- und \PXL-File wieder. F"ur die
Einbindung von Einzelbildern in ein bestimmtes Dokument, das nur auf einem
Drucker ausgegeben werden soll, st"ort diese Abh"angigkeit in keiner Weise.

Hat man jedoch mit den in diesem Abschnitt beschriebenen Methoden aus einem Bild
mehrere Varianten f"ur Drucker verschiedener Auf"|l"osungen gewonnen, so m"ochte
man f"ur alle Varianten nat"urlich nur einen \TFM-File verwenden.
Entsprechendes gilt auch f"ur das in den Beispielen wiedergegebene singalesische
Alphabet, das in mehreren Vergr"o"serungen erzeugt wurde.

\RUMgraph\ bietet das Handwerkszeug an, um die Ger"ateunabh"angigkeit in diesem
Sinne zu erreichen. Jedes der Bilder und jeder der Zeichens"atze mit
unterschiedlicher Auf"|l"osung bzw. Vergr"o"serung entstehen durch einen eigenen
\RUMgraph-Lauf mit eigenem {\em makefile\/}. Jeder dieser {\em makefiles\/} enth"alt
Angaben, die den \TFM-File beeinflussen. Konkret sind dies die Werte der w-, h-,
d- und s-Option. M"ochte man also aus allen L"aufen einer Serie identische
\TFM-Files gewinnen, so m"ussen in allen {\em makefiles\/} diese Werte gleich
angesetzt werden. Dies ist m"oglich, da genau diese Optionen in absoluten, von
der Pixel-Auf"|l"osung unabh"angigen Ma"seinheiten angegeben werden k"onnen. Die
automatischen Festlegungen dieser Optionen sind jedoch weniger geeignet. Sie
benutzen die in Pixeln gemessenen Abmessungen der Bitmaps, werden demnach also
auch, durch Rundungsfehler bedingt, f"ur jeden Lauf einen anderen \TFM-File
erzeugen. Dies hei"st aber nichts weiter, als da"s der Benutzer diese Optionen
explizit spezifizieren mu"s.

\newpage

Zusammenfassend kann man sagen:

\begin{quote}

{\bf Will man f"ur eine Serie von Bildern, die aus Varianten des gleichen
Bildes mit unterschiedlichen Auf"|l"osungen bzw. Vergr"o"serungen besteht, gleiche
\TFM-Files erhalten, so sind in allen zugeh"origen makefiles die gleichen Werte
f"ur die Optionen w, h, d und s explizit einzutragen.}

\end{quote}


\section{{\em makefile\/}-Beispiele}
\markboth{{\em makefile\/}-Beispiele}
{{\em makefile\/}-Beispiele}


\marginlabel{Das Flugzeug}
\begin{quote}
{\sf
 /P:airplane \newline
 /R:300 \newline
 /C:A \ \ /N:AirPlane \ \ /T:PCX \ \ /F:airplane.pcx \ \ /S:3 \newline
}
\end{quote}

\marginlabel{Das gro"se America-Bild}
\begin{quote}
{\sf
 /P:america \newline
 /R:300 \newline
 /C:A \ \ /N:America \ \ /T:PCX\ \ /F:america.pcx \ \ /I \ \ /S:61 \newline
}
\end{quote}

\marginlabel{Das singalesische Alphabet}
\begin{quote}
{\sf
\begin{tabbing}
 /M:MM \ \ \= /M:MMMM \ \ \= /M:MMM \ \ \= /M:vokal11s.adi \kill
 /P:singa \\
 /R:300   \\
 /C:65 \> /N:Th   \> /T:ADI \> /F:t08.adi      \\
 /C:66 \> /N:BbS  \> /T:ADI \> /F:b02s.adi     \\
 /C:67 \> /N:Bf   \> /T:ADI \> /F:b06.adi      \\
 /C:68 \> /N:Ca   \> /T:ADI \> /F:c01.adi      \\
 /C:69 \> /N:Da   \> /T:ADI \> /F:d01.adi      \\
 /C:70 \> /N:DbS  \> /T:ADI \> /F:d02s.adi     \\
 /C:71 \> /N:Dc   \> /T:ADI \> /F:d03.adi      \\
 /C:72 \> /N:Dg   \> /T:ADI \> /F:d07.adi      \\
 /C:73 \> /N:DDbs \> /T:ADI \> /F:dd02s.adi    \\
 /C:74 \> /N:DHAS \> /T:ADI \> /F:dhas.adi     \\
 /C:75 \> /N:Kg   \> /T:ADI \> /F:k07.adi      \\
 /C:76 \> /N:Vks  \> /T:ADI \> /F:vokal11s.adi \\
\end{tabbing}
}
\end{quote}

\begin{fullpage}

\section{Bilder}
\markboth{Bilder}
{Bilder}

\parbox{1in}{Mein Lieblingsl"owe}
\parbox{5.45in}{\centering \Lion}

\vspace*{2cm}

\parbox{1in}{Clipart}
\parbox{5.45in}
 {\centering
    \parbox{4cm}{\Rolls}
    \hspace*{2cm}
    \parbox{5.5cm}{\Monitor}
 }

\vspace*{2cm}

\parbox{1in}{AutoCAD}
\parbox{5.45in}{\centering \Columbia}

\newpage

\parbox{1in}{MacIntosh}
\parbox{5.45in}{\centering \Boat}

\vspace*{2cm}

\parbox{1in}{Photo}
\parbox{5.45in}{\centering \Clown}

\vspace*{2cm}

\parbox{1in}{Ein Logo}
\parbox{5.45in}{\centering \infoRUM}

\vspace*{2cm}

\parbox{1in}{Singalesisch}
\parbox{5.45in}
 {\centering
 \Th \ \BbS \ \Bf \ \Ca \ \Da \ \DbS \  \Dc \ \Dg \ \DDbs \ \DHAS \ \Kg \ \Vks
 }

\newpage
\America

\end{fullpage}

\end{document}