summaryrefslogtreecommitdiff
path: root/macros/mtex/documentation/mdoc5.tex
blob: 2b64cd0ecd22ce3c80491ba2517af78c49259c59 (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
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
\heading{\TeX\ - Konzepte}
In diesem Kapitel sollen die Konzepte von \TeX\ erl"autert werden, die
die Grundlage f"ur das entwickelte Notensatzsystem  sind. Dies ist im
wesentlichen das Box-Glue-Konzept f"ur den Seitenaufbau, das f"ur die
Konstruktion der Notenschriftelemente verwendet wurde, und der
Zeilen- und Seitenumbruchalgorithmus.

Alle anderen Konzepte (z.B. Definitionen von Makros und
die Definition und
Behandlung der internen Parameter) will ich als bekannt voraussetzen und
f"ur Informationen dazu auf das \TeX book \lit{\Texbook}
verweisen. Daf"ur seien die
obigen Konzepte ausf"uhrlicher dargestellt.
Das vorliegende Kapitel ist im wesentlichen eine Zusammenfassung der
Kapitel~14 und~15 des \TeX book unter Ber"ucksichtigung des Artikels
``Breaking Paragraphs Into Lines'' von D. E. Knuth und M. Plass
\lit\Knuth. Dabei wurden die verwendeten Begriffe: Box, Glue, Penalty,
Kern, Rule, Badness, Interline Glue und Interword Glue
als Fachbegriffe "ubernommen und nicht "ubersetzt.

\subheading{Basiselemente}
Eine \TeX-Seite wird im wesentlichen aus zwei verschiedenen
Basiselementen aufgebaut:
$$\align &\hbox{1. Box,}\cr&\hbox{2. Glue.}\endalign$$

Boxes k"onnen nebeneinander oder untereinander geheftet werden, wobei
sie durch Glue verbunden werden.
Die verschiedenen Formen, in denen Boxes und Glue auftreten k"onnen, und
die Verfahren, wie sie aneinandergeheftet werden, sollen
 Gegenstand dieses Abschnitts sein.

\subsubheading{Die Box}
Eine \defi{Box}
ist ein zweidimensionales Gebilde von rechteckiger Gestalt, die
durch das Tripel $(w,h,d)\in\rz^3 $ vollst"andig
beschrieben ist. Dabei gibt $w$ die Breite, $h$ die H"ohe und $d$ die
Tiefe an. Durch $h$ und $d$ ist die Grundlinie (\tex{baseline}) oder auch
Schriftlinie der Box definiert. Der linke Endpunkt der Grundlinie ist
als Referenzpunkt (\tex{reference point}) ausgezeichnet.
\medskip
{\eightpoint
\setbox0=\hbox{$\uparrow$}
\setbox1=\hbox to \wd0{$\hss\mid\hss$} % with luck, they'll line up
\setbox2=\vbox{\copy0
  \nointerlineskip \kern-.5pt \copy1
  \nointerlineskip \kern-.5pt \copy1
  \moveleft 1em\hbox{H"ohe}
  \copy1 \nointerlineskip \kern-.5pt
  \copy1 \nointerlineskip \kern-.5pt
  \hbox{$\downarrow$}
  \kern.2pt}
\setbox3=\vbox{\kern.2pt\copy0
  \moveleft 1em\hbox{Tiefe}
  \hbox{$\downarrow$}
  \kern0pt}
\setbox4=\vtop{\kern-3pt % this cancels the null text above the samplebox
  \hbox{\samplebox{\ht2}{\ht3}{6em}{}%
    \kern-6em
    \raise3pt\hbox to 6em{\hss Grundlinie\hss}}
  \kern3pt
  \arrows{6em}{Breite}}
\medskip\indent\hskip30pt
\setbox0=\hbox{$\vcenter{}$}% \ht0 is the axis height
\lower\ht0\hbox{Referenzpunkt$-$\kern-.2em$\rightarrow$\kern2pt}%
\raise\ht2\box4
\kern1.5em
\raise\ht2\vtop{\kern0pt\box2\nointerlineskip\box3}}
\medskip

\Beispiel
Die Box wird zur Beschreibung der Schriftelemente verwendet, z.B.
Buchstaben eines Zeichensatzes (\tex{characters}), aber auch Elemente,
die aus
mehreren Zeichen zusammen gesetzt sind, z.B. \`a  oder eine mathematische
Formel $\root n \of {x^n+y^n}$. \item{}
Ein Spezialfall ist ein ausgef"ulltes
Rechteck, eine sogenannte \defi{Rule}.
\endBeispiel

\Bemerkung
F"ur alle Berechnungen werden nur die Werte von $w$, $h$ und $d$
verwendet, unabh"angig von Inhalt der Box. Viele Zeichen sind z.B. so
konstruiert, da\3 sie entweder die Box nicht ganz ausf"ullen oder
"uber den  Rand hinaus ragen, wie z.B. bei \tex{kursiver} Schrift.
Wie sich sp"ater zeigen wird, ist dies eine n"utzliche Eigenschaft. Man
kann Boxes konstruieren, die  nichts zur horizontalen Berechnung
beitragen und somit andere Zeichen "uberlappen.
\endBemerkung

Wie oben bemerkt, kann eine Box wiederum aus mehreren Elementen
bestehen. Diese Elemente k"onnen wiederum Boxes, aber auch Glue sein.
Man unterscheidet Boxes, deren Elemente horizontal aneinander gereiht
werden, von solchen, deren Elemente vertikal untereinandergeheftet
werden.

\subsubheading{Der Glue}
\defi{Glue}
beschreibt das Ausschlu\3material, das Hilfsmaterial zum F"ullen
der Zeilen. Glue mu\3 also wie der Ausschlu\3 beim Handsatz sowohl
erweiterbar als auch verringerbar sein, um gleiche Zeilenl"angen zu
erhalten. (F"ur die satztechnische Definition der Begriffe: Ausschlu\3,
Erweiterung und Verringerung, verweise ich auf das Buch von F. Genzmer,
``Das Buch des Setzers'' \lit{\genzmer}.)

Glue wird durch das Tripel $(w,y,z)\in\rz^3 $ vollst"andig
beschrieben. Dabei gibt die Gr"o\3e
$w$ den nat"urlichen Abstand (\tex{natural
space}) an, $y$ den Wert, um den der Abstand erweitert werden kann,
und $z$ den Wert, um den der Abstand verk"urzt werden
kann. D. E. Knuth und M. Plass \lit\Knuth\ beschreiben
die ``variablen'' Gr"o\3en $y$ und $z$ mit ``\tex{strechability}'' und
``\tex{shrinkability}''.
F"ur das folgende Zeilenumbruchverfahren ist es wichtig, da\3
die Gr"o\3en, die den Glue bestimmen, nach bestimmten Kriterien gew"ahlt
werden. Da
$w$ der Betrag ist, um den in horizontaler  bzw. vertikaler Richtung
vorger"uckt (falls $w>0$)  bzw. zur"uckgesetzt wird (falls $w<0$),
sollte dieser Wert
so gew"ahlt werden, da\3 der Abstand zwischen den Boxes
optisch gef"allig aussieht. Die ``variablen'' Gr"o\3en $y$ und $z$
sollten so gew"ahlt werden, da\3
beim Ausschlu\3 der Zeile der freie Raum $w+y$ bzw. $w+z$ noch akzeptabel
ist. Es sei dabei betont, da\3
$w$, $y$ und $z$ auch negative Werte annehmen k"onnen.
\Bemerkung
Dimensionen:\par
\item{}
Eine der leistungsf"ahigsten Eigenschaften des Glue-Konzeptes ist,
Streck- und Stauchwerte verschiedener St"arke angeben zu
k"onnen. Es gibt neben den gew"ohnlichen Dimensionsangaben, z.B. 10 \pt\
(s.\lit{\Texbook, Kapitel 10}),
 drei Ma\3einheiten, mit denen ``unbegrenzter'' Glue beschrieben werden
kann. Diese werden in
Einheiten von \fil, \fill\ und \filll\ angegeben.
Im folgenden bezeichne \defi{Glue der Ordnung} $j\in\{0,\ldots,3\}
$
Glue, dessen  Streck- bzw. Stauchwerte in Einheiten von
\pt, \fil, \fill, oder \filll\ angegeben wurden.  Glue der
Ordnung 0 ist also ``begrenzter Glue''.
\item{}Im folgenden Ausschlu\3verfahren (\the\chap.2\XX)
wird die Wirkung der verschiedenen M"oglichkeiten, Glue anzugeben,
noch n"aher betrachtet.
\endBemerkung

Ein Spezialfall von Glue ist \defi{Kern}. Darunter versteht man einen
Freiraum, der nicht variabel ist. Er wird benutzt, um Zeichen zu einer
Einheit zu verbinden, z.B. f"ur das \TeX-Logo, wobei die  einzelnen
Buchstaben T, E und X durch Kern ineinander geschoben sind.

Die Einf"uhrung von Kern im Unterschied zu Glue ohne Streck- und
Stauchwerte ist notwendig, um Glue, an dem  eine
Zeile oder Seite umgebrochen werden darf, von Freiraum zu unterscheiden,
bei dem dies verboten ist. (Das \TeX-Logo kann nicht getrennt
werden.)

Ein weiterer Spezialfall f"ur Glue ist das Ausf"ullen von Leerraum mit
Boxes \verbatimon(|\leaders|).
Dabei wird die Box oder auch Rule so oft gesetzt, wie Glue
daf"ur vorhanden ist. Dies wird z.B. beim Auf{}f"ullen einer Zeile mit
Punkten benutzt \leaders\hbox to 5pt{\hss.\hss}\hfill.

\subsubheading{Kontrollsequenzen im Zusammenhang mit Box und
Glue}

Im folgenden seien einige Kontrollsequenzen angegeben. (Die Angaben in
eckigen Klammern ($\lit{ }$) bedeuten, da\3 diese Angabe optional ist.)
\subsubsubheading{Box-Kontrollsequenzen}

$\left \{{\hbox{\vo|\vbox|\voff}\atop\hbox{\vo|\vtop|\voff}}\right\}
\hbox{\vo| to |\voff}\text{\<Dimensionsangabe>}\{\text
{\<Material f"ur eine vertikale Liste>}\}$\par
\indent\hbox{\vo|\hbox to |\voff}\<Dimensionsangabe>$\{$\<%
Material f"ur eine horizontale Liste>$\}$\par
\verbatimon\rm
\indent\hbox{|\hrule |}$\lbrack$
|width | \<Dimensionsangabe>$\rbrack$%
$\lbrack$|height |\<Dimensionsangabe>$\rbrack$%
$\lbrack$|depth |\<Dimensionsangabe>$\rbrack$%
\par
\indent\hbox{|\vrule |}$\lbrack$%
|width |\<Dimensionsangabe>$\rbrack$%
$\lbrack$|height |\<Dimensionsangabe>$\rbrack$%
$\lbrack$|depth |\<Dimensionsangabe>$\rbrack$%
\par
\subsubsubheading{Glue-Kontrollsequenzen}

\indent\hbox{|\vskip |}\<Dimensionsangabe>%
$\lbrack$|plus |\<Dimensionsangabe>$\rbrack$%
$\lbrack$|minus |\<Dimensionsangabe>$\rbrack$%
\par\indent
\hbox{|\hskip |}\<Dimensionsangabe>%
$\lbrack$|plus |\<Dimensionsangabe>$\rbrack$%
$\lbrack$|minus |\<Dimensionsangabe>$\rbrack$
\par\indent
\hbox{|\kern |}\<Dimensionsangabe>\par\indent
\hbox{|\leaders |}\<Box oder Rule>\<Glueangabe>\par
\verbatimon\rm

\subsubheading{Anwendung f"ur den Notensatz}

Da eine Box einen rechtwinkligen Umri\3 besitzt, k"onnen Boxes nur
horizontaler und vertikaler Richtung aneinandergeheftet werden.
Es besteht daher zun"achst keine M"oglichkeit,
Linien in beliebiger Richtung zu setzen. Dies ist jedoch f"ur den
Notensatz zur korrekten Darstellung der Balken notwendig.
 Dieses Problem tritt bei allen
pixel-orientierten Graphiksystemen auf.
Mit dem \TeX-Konzept kann es gel"ost werden durch eine
geeignete Zerlegung  der Linie in mehrere Rules,  die passend
aneinandergeheftet  werden.
Das folgende Beispiel zeigt einen Balken, der gegen die
Horizontale um 45 Grad geneigt ist, wobei die verwendeten Rules jeweils
1\pt\ breit sind. Mit
{\obeylines
\begindisplay
|\def\vr{\vrule width 1pt height 4pt depth 0pt}|\cr
|\def\diag#1#2{\length=#1 \gradient=#2pt \m=0|\cr
|  \hbox{\loop\advance\length by -1 $\raise\m\gradient\hbox{\vr}$|\cr
|  \advance\m by 1|\cr
|  \ifnum\length>0 \repeat}|\cr
\enddisplay
}
\def\vr{\vrule width 1pt height 4pt depth 0pt}
\def\diag#1#2{\count1=0 \count2=#1 \dimen3=#2pt%
 \hbox{\loop\advance\count2 by -1 $\raise\count1\dimen3\hbox{\vr}$%
 \advance\count1 by 1
 \ifnum\count2>0 \repeat}}

ergibt |\diag{20}{1}| : \hskip20pt{\diag{20}{1}}

Die Anwendung dieses Verfahrens f"ur den Notensatz
ist jedoch
sehr zeit- und speicherplatzintensiv, wenn eine hohe Aufl"osung erreicht
werden soll, da auf einem Notenblatt eine gro\3e Anzahl solcher Balken
zu setzen sind.
Da \TeX\ selbst keine bessere L"osung dieses Problems bietet, wurden
die notwendigen Balken``linien'' in einem Zeichensatz erzeugt (s. Kapitel
{\advance\chap4 \the\chap}).
\subheading{Verfahren zum Ausschlu\3 einer Box auf gew"unschte Breite
bzw. H"ohe}
\defi{Ausschlu\3} (\tex{setting the glue}) ist der Proze\3,
Glue innerhalb
einer Box so zu erweitern oder zu verringern, da\3 eine bestimmte
Breite erreicht wird.

Fa\3t man eine Zeile als horizontale Liste von Box- und
Glue-Elementen auf, so bedeutet Zeilenausschlu\3 das Vergr"o\3ern oder
Verkleinern der Glue-Elemente dieser Liste auf die gew"unschte
Zeilenl"ange. Ebenso bedeutet Seitenausschlu\3 das Erweitern oder
Verringern der Glue-Elemente einer Seite, die als vertikale Liste
aufgefa\3t werden kann.

\subsubheading{Ausschlu\3 einer horizontalen Box}
Der Ausschlu\3 einer horizontalen Box
(\hbox{\vo|\hbox|})
erfolgt in drei Schritten:

\item{1)}
Bestimmung der nat"urlichen Breite $x\in\rz$ (\tex{natural width}) der
Box und der zur Verf"ugung stehenden totalen Streck- und
Stauchbarkeit $Y$  bzw. $Z$.

\item{2)} Sei $\omega>0$ die gew"unschte Breite der Box. Dann wird der
Proportionalit"atsfaktor $r$ (\tex{glue set}) bestimmt, der $x$ in
$\omega$
"uberf"uhrt, abh"angig von der Ordnung des Ausschlu\3materials $i$
(\tex{glue set order}).

\item{3)}
Bestimmung der H"ohe und Tiefe der neuen Box und Festlegung ihres
Referenzpunktes.
\medskip
Diese sollen im folgenden n"aher erl"autert werden.

Seien $x_1,\ldots,x_m$ die Basiselemente der horizontalen Liste
und $(w_1,y_1,z_1),\ldots ,(w_m,y_m,z_m)$ die zu\-ge\-h"o\-ri\-gen
Tripel, wobei, falls ein $x_j, j\in \{1,\ldots,m\}$  eine Box oder Kern
beschreibt, die Variablen $y_j$ und
$z_j$ verschwinden. Dann erh"alt man die
na\-t"ur\-liche Breite
durch Aufsummieren aller  na\-t"ur\-lichen Ab\-st"ande:
$x=\sum_{j=1}^m  w_j$.

Die totale Streckbarkeit $Y$ bzw. Stauchbarkeit $Z$ ergibt sich
ebenfalls durch Bilden von
$Y=\sum_{j=1}^m y_j$ und $Z=\sum_{j=1}^m z_j$. Da die $y_i$ bzw $z_i$
jeweils Werte verschiedener Ordnungen (im Sinne von \the\chap.1.2)
darstellen,
k"onnen diese
Summen nach den jeweiligen Einheiten aufgespalten werden, d.h. in
$$Y=Y_0+Y_1\fil+Y_2\fill+Y_3\filll$$
und
$$Z=Z_0+Z_1\fil+Z_2\fill+Z_3\filll\;,$$
wobei $Y_k$ bzw. $Z_k$, $k\in\{0,\ldots,3\}$ Anzahl der Einheiten von
Glue der Ordnung $k$
                         angeben. Dabei bezeichnet $k=0$ ``begrenzten''
Glue              (in Einheiten von z.B. \pt).

Die \defi{Ordnung des Ausschlu\3materials}
$i$ wird definiert als:
$$i:=\cases 0\;,&\text{falls f"ur alle }k\in\{0,\ldots,3\}\text{ gilt: }
 Y_k=0\\\max_{k\in\{0,\ldots.3\}}\{k,Y_k\ne0\}\;,&
 \text{sonst}\endcases$$bzw.
$$i:=\cases 0\;,&\text{falls f"ur alle }k\in\{0,\ldots,3\}\text{ gilt: }
 Z_k=0\\\max_{k\in\{0,\ldots.3\}}\{k,Z_k\ne0\}\;,&
 \text{sonst}\;.\endcases$$
\medskip
Der Proportionalit"atsfaktor $r$ berechnet sich wie folgt:
\hfil\break
Sei $\omega>0$ die gew"unschte Breite der Box.

F"ur $x= \omega$ gilt: $r=0$ und jeder Glue erh"alt seinen
nat"urlichen Abstand.

F"ur $x< \omega$ ist eine Erweiterung erforderlich und es gilt:

$$r= \cases (\omega -x)/Y_i,&\text{falls $i\ne0$,}\\
            (\omega -x)/Y_0,&\text{falls $i=0$ und $Y_0\ne0$,}\\
            0,              &\text{falls $i=0$ und $Y_0=0$.}\endcases$$

F"ur $x> \omega$ ist ein Verringern   erforderlich und es gilt:

 $$r= \cases (x -\omega )/Z_i,&\text{falls $i\ne0$,}\\
             (x -\omega )/Z_0,&\text{falls $i=0$ und $((x-\omega)\le Z_0
             $,}\\
0,&\text{falls $i=0$ und $Z_0=0$,}\\
1,&\text{falls $i=0$ und $(x-\omega)>Z_0$.}\endcases$$
\medskip
Damit ergibt sich f"ur jeden Glue $(w,y,z)$ der horizontalen Liste mit
einem Streckwert $y$ von $j$-ter Ordnung und einem
Stauchwert $z$ von $k$-ter Ordnung die neue Breite
\item{a)}bei Erweiterung: $\; w_{{\rm neu}}=\cases w+r\cdot y\;,&
\text{f"ur $j=i$,}\\
w\;,&\text{sonst,}\endcases$\par
\item{b)}bei Verringerung: $w_{{\rm neu}}=\cases w-r\cdot z\;,&
\text{falls $k=i$,}\\
w\;,&\text{sonst.}\endcases$

\Bemerkung
\item{1)}Da die Glue-Elemente $w$, $y$, $z$ auch negative Werte annehmen
k"onnen, ist es m"oglich, da\3 die Werte f"ur $Y$ und $Z$ auch negativ
werden k"onnen. Dies soll jedoch ausgeschlossen sein, da $\omega$ nur
positive Werte annimmt.
\item{2)}Der Glue wird nur erweitert bzw. verringert, falls die
zugeh"orige Ordnung des Glue der Ordnung des Ausschlu\3materials
$i$ entspricht. Das Einf"ugen von Glue hoher Ordnung                 kann
also eine Erweiterung oder Verringerung an anderen Stellen
unterdr"ucken. Ebenso kann es vorkommen, da\3 Glue h"oherer Ordnung
ausgel"oscht wird.
\endBemerkung
\medskip
Alle Boxelemente werden so aneinandergereiht, da\3 ihre
Referenzpunkte auf einer Horizontalen liegen. Die Grundlinie der neuen
Box ist demnach die gemeinsame Grundlinie der inneren Elemente. Die
H"ohe bzw. Tiefe der neuen Box ergibt sich als der Maximum der Tiefen
bzw. H"ohen der eingeschlossenen
Boxes.  Eine horizontale Box
kann demnach keine negative H"ohe bzw. Tiefe besitzen jedoch eine
negative Breite.
\Bemerkung
Um bei der Eingabe von Texten nicht hinter jedem Wort eine
Kontrollsequenz
einf"ugen zu m"ussen, die den Zwischenraum zum n"achsten Wort angibt,
wird das erste Leerzeichen hinter einem Wort als
Glue interpretiert.
(Gleiches kann mit \hbox{{|\|\tt\char`\ }} erreicht werden.)
Der Wert des Glue richtet sich nach dem
dem aktuell g"ultigen Zeichensatz (\defi{Interword Glue}).
Jedem Zeichensatz ist ein solcher Glue zugeordnet.
In einem Zeichensatz, der f"ur Textsatz verwendet wird,
entspricht der nat"urliche Abstand
der gew"unschten Breite eines Leerzeichens.
Da bei mathematischen
Formeln ein anderer Ausschlu\3 verwendet wird und  einige
mathematische Zeichen (z.B. gro\3e Klammern) aus mehreren Elementen der
mathematischen Zeichens"atze zusammengesetzt werden, ist der
{Interword
Glue} in diesem Fall mit |0pt plus 0pt minus 0pt| vorbelegt.
Der {Interword  Glue} kann
durch "Andern des Wertes des Parameters |\spaceskip|
ver"andert werden.
Verschwindet dieser Wert nicht, so wird der Wert
dieses Parameters an Stelle des Glue des aktuellen Fonts eingef"ugt.
Da im Notensatz der Glue abh"angig vom Notenwert der vorangegangenen
Note gesetzt werden mu\3, ist dies eine M"oglichkeit, den Glue zwischen
den Noten zu variieren.
\endBemerkung
\verbatimon
\subsubheading{Beispiele und Anwendungen zum  horizontalen Ausschlu\3}
\item{1)}Im Notensatz ist es oft notwendig, die Breite eines
oder mehrerer Zeichen zu ignorieren (z.B. f"ur die Oktavstellung von
Versetzungszeichen (s. {\advance\chap3 \the\chap}.1),
f"ur die Textunterlage ({\advance\chap5 \the\chap}.2) oder auch
f"ur die Unterlage des Notenliniensystems).
Dies ist eine einfache Anwendung des
Ausschlu\3verfahrens. Man kann eine Box der Breite Null erzeugen, wobei
der Boxinhalt links- oder rechts"uberlappend erscheint. Das Prinzip soll
am mathematische Zeichen $\ne$ demonstriert werden. Es kann
erzeugt werden durch die Eingabe
\begindisplay
|\hbox to 0pt{/\hskip0pt minus1fil}=|
\enddisplay
\item{}Durch den Glue der Ordnung               1 ist gen"ugend
Stauchm"oglichkeit vorhanden. Das Zeichen |/| wird gesetzt, ohne jedoch
in die horizontale Berechnung einzugehen. Es wird also rechts "uber den
``Rand'' der Box hinausgeschoben. Anschlie\3end wird das
Gleichheitszeichen gesetzt, und man  erh"alt $\ne$.

\item{}Umgekehrt kann das Ergebnis auch erreicht werden durch die Eingabe
\begindisplay
|/\hbox to 0pt{\hskip0pt minus1fil=}|
\enddisplay
\item{}
In diesem Fall wird der Inhalt der Box "uber den linken ``Rand'' der
Box hinausgeschoben.
\item{2)} Die Zeichen |ab| k"onnen in einer Zeile zentriert werden durch
die Eingabe
\begindisplay
|\hbox to\hsize{\hskip0pt plus1fil ab\hskip0pt plus1fil}|
\enddisplay
\item{}Man erh"alt

\hbox to\hsize{\hskip\iindent\hskip0pt plus1fil \bf ab\hskip0pt plus1fil}
\item{}
Auf beiden Seiten der Zeichen befindet sich Glue der
Ordnung 1. Die Box wird auf Zeilenbreite (|\hsize|)
ausgeschlossen, indem der zur Verf"ugung stehende Raum zu gleichen
Teilen vor |a| bzw. nach |b| aufgeteilt wird.
Verwendet man
\begindisplay
|\hbox to\hsize{\hskip0pt plus2fil ab\hskip0pt plus1fil}|
\enddisplay
\item{}so erh"alt man\par\nobreak
\hbox to\hsize{\hskip\iindent\hskip0pt plus2fil \bf ab\hskip0pt plus1fil}
\item{}
In diesem Fall wird der Glue im Verh"altnis 2:1 aufgeteilt. F"ugt man
zwischen |a| und |b| Glue der Ordnung 2 ein durch die
Eingabe
\begindisplay
\hskip-20pt|\hbox to\hsize{\hskip0pt plus2fil a\hskip0pt plus1fill
b\hskip0pt plus1fil}|
\enddisplay
\item{}so erh"alt man:\par
\hbox to\hsize{\hskip\iindent\hskip0pt plus2fil \bf a\hskip0pt plus1fill
b\hskip0pt plus1fil}
\item{}In diesem Fall werden also die Streckwerte der
Ordnung 1
unterdr"uckt und die Zeichen jeweils an  den linken bzw. rechten
Zeilenrand geschoben.
Die Ausl"oschung von Glue h"oherer Ordnung sei mit dem folgenden Beispiel
demonstriert. Die Eingabe
\begindisplay
\hskip-20pt|\hbox to\hsize{\hskip0pt plus1fill a\hskip0pt plus1fil
b\hskip0pt plus-1fill}|
\enddisplay
\item{}ergibt

\hbox to\hsize{\hskip\iindent\hskip0pt plus1fill \bf a\hskip0pt plus1fil
b\hskip0pt plus-1fill}
\item{3)} Als weiteres Beispiel sei ein spezielles Notensatzproblem
angef"uhrt:
\item{}
Unabh"angig von der Umgebung, in der eine Note auftritt, soll
die Breite der Noten
immer auf gleiche Art in
die horizontale Rechnung eingehen, d.h. gleich auch f"ur Noten mit und
ohne Hilfslinien (dies sind
kurze Notenlinien, die die Bestimmung der Tonh"ohe
einer Note erleichtert, die nicht au\3erhalb des
Liniensystems plaziert wurde)
denn die Breite solcher Hilfslinien soll nicht
ber"ucksichtigt werden.
\verbatimon
\item{}Die Hilfslinien sind (horizontal) zentriert den Noten zu
unterlegen. Dies geschieht am einfachsten, indem man Note und Hilfslinien
in je einer Box der Breite Null zentriert und diese zusammen zu einer
Box der Breite |\nhw| ausschlie\3t.
Mit
\begindisplay
|\hbox to\nhw{\hskip0pt plus1fil minus 1fil|\cr
|\hbox to0pt{\hskip0pt minus1fil |\<Note>|\hskip0pt minus1fil}|\cr
\hskip2\iindent
|\hbox to0pt{\hskip0pt minus1fil |\<Hilfslinien>|\hskip0pt minus1fil}|\cr
|\hskip0pt minus1fil}|
\enddisplay
\item{}erh"alt man z.B. \quad \v{14}\global\sk=0pt
\subsubheading{Ausschlu\3 einer vertikalen Box}
Der Ausschlu\3 einer vertikalen Box
(\hbox{\vo |\vbox| oder |\vtop|})
verl"auft "ahnlich wie bei der
horizontalen Box, jedoch erfolgt die Aneinanderheftung nach einem
komplizierteren Schema.

Ist kein Glue angegeben,  wird der Zeilenzwischenraum nach folgendem
Verfahren berechnet:

Um einen gleichm"a\3igen Ausschlu\3 zu erhalten, sollte der Abstand
zwischen den Grundlinien m"oglichst  gleich bleiben.

Sei der gew"unschte Abstand der Grundlinien
(\hbox{\vo|\baselineskip|\voff})
zweier
benachbarter Zeilen durch  Glue der Form $b$ |plus| $y$ |minus| $z$
(s. \the\chap.3.2)
gegeben. Sei $l$ Glue (|\lineskip|),
der eingef"ugt werden soll, falls der
berechnete Zwischenraum den Wert $\bar l$
(\hbox{\vo|\lineskiplimit|\voff}) unterschreitet. Weiter sei
$d$ die Tiefe der oberen Box und $h$ die H"ohe der unteren Box.

Dann ergibt sich f"ur den Glue, der zwischen den Boxes eingef"ugt wird
(\defi{Interline Glue}):

\item{1)} Falls $d\le-1000\pt$, wird kein {Interline Glue}
eingef"ugt.
\item{2)} Falls $d>1000\pt$ und $(b-d-h)\ge \bar l$,
wird ein {Interline Glue}  von $(b-d-h)$ |plus| $y$ |minus| $z$
vor der unteren Box eingef"ugt.
\item{3)}Gilt  weder 1) noch 2), wird $l$ als {Interline Glue}
eingef"ugt.
\par
\midinsert
\medskip
{\eightpoint
\setbox0=\hbox{$\uparrow$}
\setbox1=\hbox to \wd0{$\hss\mid\hss$} % with luck, they'll line up
\setbox2=\vbox{\copy0
  \nointerlineskip \kern-.5pt \copy1
  \moveleft0em\hbox{$h$}%
  \copy1 \nointerlineskip \kern-.5pt
  \hbox{$\downarrow$}%
  \kern.2pt}
\setbox3=\vbox{\kern.2pt\copy0
  \moveleft 0em\hbox{$d$}%
  \hbox{$\downarrow$}%
  \kern0pt}
\setbox4=\vbox{\kern.2pt\copy0
  \moveleft 1em\hbox{$(b-d-h)$}%
  \hbox{$\downarrow$}%
  \kern0pt}
\setbox5=\vbox to 0pt{\vss\copy0
  \nointerlineskip \kern-.5pt \copy1
  \nointerlineskip \kern-.5pt \copy1
  \nointerlineskip \kern-.5pt \copy1
  \nointerlineskip \kern-.5pt \copy1
  \nointerlineskip \kern-.5pt \copy1
  \moveleft0em\hbox{$b$}
  \copy1 \nointerlineskip \kern-.5pt
  \copy1 \nointerlineskip \kern-.5pt
  \copy1 \nointerlineskip \kern-.5pt
  \copy1 \nointerlineskip \kern-.5pt
  \hbox to \wd0{$\hss\vrule height4pt\hss$}\nointerlineskip \kern-.5pt
  \hbox{$\downarrow$}%
  \kern.2pt}
\setbox6=\vtop{\kern-3pt % this cancels the null text above the samplebox
  \hbox{\samplebox{\ht2}{\ht3}{6em}{}%
    \kern-6em
    \lower\ht3\hbox to 6em{\hskip1em \vtop{\copy3\nointerlineskip
    \copy4}\hss}}%
  \kern-3.4pt
  \hbox{\samplebox{\ht2}{\ht3}{6em}{}%
    \kern-6em
    \hbox to 6em{\hbox to 0pt{\hss\box5\hskip1em}\hskip1em \copy2\hss}}%
    }
\hbox to \hsize{\hfil\box6\hfil}
}
\medskip
\centerline{{\eightrm Skizze zum Verdeutlichen des Interline Glue
(\the\chap.2.3) }}
\endinsert
\goodbreak
\Bemerkung
\item{1)}
Vor oder hinter einer Rule wird dieser Algorithmus nicht angewendet.
\item{2)}Dieses Verfahren wurde so konzipiert, da\3
 zwischen den Zeilen
immer ein Mindestabstand eingehalten wird,
 falls der nat"urliche Abstand von $l$ gleich $\bar l$ ist.
 Jedoch k"onnen durch
Ver"andern der Parameter $b$, $l$, $\bar l$ auch andere Effekte erzielt
werden, z.B. wird mit |\baselineskip -10000pt| |\lineskip 0pt| und
|\lineskiplimit 0pt| kein {Interline Glue}
zwischen den Zeilen eingef"ugt.
%Dies wird durch die Kontrollsequenz |\offinterlineskip| erreicht.
\endBemerkung
\goodbreak

Die vertikale Box wird nach folgendem Verfahren
ausgeschlossen:\item{1)}Bestimmung der ``nat"urlichen H"ohe'', der Tiefe
und Breite sowie des Referenzpunktes,
\item{2)}Bestimmung des Proportionalfaktors $r$.
\medskip
Dazu werden die
Elemente einer vertikalen Liste werden unter
Einbeziehung des {Interline Glue}
so untereinander geheftet, da\3 ihre
Referenzpunkte auf einer Vertikalen liegen.

{}Der neue Referenzpunkt ist, falls
|\vbox| verwendet wurde,  der
Referenzpunkt der untersten inneren Box, bei |\vtop| der der obersten.

{}Das genaue Verfahren zur Bestimmung des Referenzpunktes, der
nat"urlichen H"ohe $h$ und  Tiefe $d$ bei |\vbox| lautet:
\item{I)} Enth"alt die  Liste keine Box, gilt $d=0\pt$.
\item{} Ebenso, falls das letzte Element keine  Box ist.
Der neue
Referenzpunkt ist also in diesem Fall die linke untere Ecke der
umfassenden Box.
\item{}
Ist das letzte Element eine Box mit Tiefe $\bar d$, gilt $d=\bar  d $.
\item{II)}
Ist $d>\hbox{\vo|\boxmaxdepth|\voff}$, wobei dies die Tiefe
 ist, die eine Box h"ochstens annehmen kann, gilt
  $d:=\hbox{\vo|\boxmaxdepth|\voff}$.
Dieser Paramter wurde eingef"uhrt, damit die Box der letzten Zeile
vollst"andig auf der Seite erscheint.
\item{}Der "Uberschu\3 wird in diesem Fall
 zur nat"urlichen H"ohe addiert, was  eine Verschiebung des
Referenzpunktes nach unten bewirkt.
\item{III)}Die Breite der neuen Box ist das Maximum des Abstandes
einer eingeschlossenen Box rechts vom Referenzpunkt der neuen Box.
Die Breite einer vertikalen Box ist also immer nicht-negativ.
\medskip
 Der Proportionalfaktor $r$ wird wie bei einer horizontalen Box berechnet
in Abh"angigkeit von der Differenz nat"urlicher
H"ohe $h$, die sich aus dem Maximalabstand der inneren Boxes
oberhalb der Grundlinie zur Grundlinie ergibt,
und gew"unschter H"ohe $\omega$
und den zur Verf"ugung stehenden Dehn- und Stauchm"oglichkeiten.
\medskip
Das genaue Verfahren zur Bestimmung des Referenzpunktes, der
nat"urlichen H"ohe $h$ und  Tiefe $d$ bei \hbox{\vo|\vtop|\voff} lautet:
\item{i)}Die  Konstruktion  und der Ausschlu\3 erfolgt wie in den Regeln
f"ur \hbox{\vo|\vbox|\voff}.
Dabei wird die nat"urliche H"ohe $\bar d $ und Tiefe $\bar h$ bestimmt.
\item{ii)}F"ur die endg"ultige H"ohe $h$ gilt:
$$h=\cases 0\pt\;,&
\text{falls das 1. Listenelement keine Box ist,}\\
\text{die H"ohe der obersten Box, }&\text{sonst.}\endcases$$
\item{iii)}Der Referenzpunkt wird so verschoben, da\3 gilt:
$d:= \bar h+\bar d-h$.

\subsubheading{Beispiele und Anwendungen zum vertikalen Ausschlu\3}
Im folgenden sollen die Unterschiede von |\vtop| und
|\vbox| bei verschiedenen Anwendungen verdeutlicht werden.
\item{1)}Als einfache Anwendung ergibt sich zun"achst der Aufbau des
Liniensystems. Da nach Rules kein Interline Glue eingef"ugt wird, ergibt
sich das Liniensystem durch f"unfmaliges Auf{}f"uhren einer Rule der
L"ange der Zeilenbreite, die durch Kern voneinander getrennt sind:
\begindisplay
|\vbox{|\<Linie>\<Kern>\<Linie>\<Kern>\<Linie>\<Kern>\<Linie>\<Kern>%
\<Linie>|}|
\enddisplay
\item{}
Dies ergibt eine Box, deren Grundlinie die unterste Linie ist, ohne Tiefe
und mit einer H"ohe vom F"unf{}fachen
der Linienh"ohe und Vierfachen des Kern.
W"urde man in diesem Beispiel |\vtop| verwenden, so erg"abe sich als
Grundlinie die oberste Linie, wobei die H"ohe der Box die H"ohe der
Linie betr"agt, und die Tiefe das Vierfache
der Linienh"ohe und des Kerns. Dies wird zum Beispiel bei der
Konstruktion der Hilfslinien unterhalb des Liniensystems ben"otigt.
\item{2)}
Das Ansetzen der F"ahnchen an den Notenhals:
\item{}Da die Notenhalsl"angen variabel sind (s. Kapitel %\XX
{\advance\chap3 \the\chap}), k"onnen
die F"ahnchen nicht zusammen mit dem Notenhals als ein Zeichen in den
Zeichensatz aufgenommen werden. Es gilt nun, eine Konstruktion zu finden,
so da\3 die F"ahnchen am jeweiligen Notenhalsende positioniert werden.
\item{}Dies kann f"ur den nach oben gestielten Hals durch eine
|\vbox|-Konstruktion und f"ur den nach unten gestielten Hals durch eine
|\vtop|-Konstruktion erreicht werden. Zu beachten ist, da\3 in beiden
F"allen kein Interline Glue eingef"ugt werden darf.
\begindisplay
|\vbox to|\<Notenhalsl"ange>|{\hbox{}|\<F"ahnchen>%
|\vskip0pt plus 1fil}|\cr
|\vtop to|\<Notenhalsl"ange>|{\hbox{}\vskip0pt plus1fil|\<F"ahnchen>%
|\hbox{}}|
\enddisplay

\hbox to\hsize{\hfill
\leaders\hrule\hskip20pt\kern-5pt{\music\char\hex21}%
\vrule height 16pt depth 0pt
\vbox to16pt{\offinterlineskip\hbox{}\hbox{\music
\char\hex29}\vss\hbox{}}%
\leaders\hrule\hskip20pt\kern-3pt\vrule height 0pt
depth16pt\vtop to 16pt{\offinterlineskip\hbox{}\vss\hbox{\music\char
\hex2E}\hbox{}}{\music\char\hex21}\kern-5pt
\leaders\hrule\hskip20pt \hfill}

\item{}Nach den oben angegebenen Regeln f"ur den Ausschlu\3 der
vertikalen  Box ist also der Referenzpunkt die linke untere Ecke
der umfassenden Box, die zu der   H"ohe der aktuellen Notenhalsl"ange
ausgeschlossen wurde, so da\3, unabh"angig von der H"ohe und Tiefe
des F"ahnchens, der obere Rand des F"ahnchens mit dem oberen Rand der
Box abschlie\3t. Umgekehrt ist dies im zweiten Fall. Diese Box erh"alt
als Tiefe die Notenhalsl"ange, w"ahrend die H"ohe verschwindet. Der
Referenzpunkt ist also die obere linke Ecke der Box.

\item{3)}F"ur das genaue Ansetzen der Balken an den Notenhals ist es
notwendig, die Box, in der der Balken zusammengesetzt wurde (s.
\the\chap.1.4), so auszuschlie\3en, da\3 die H"ohe bzw. Tiefe des
Balkens nicht in die
vertikale Berechnung eingeht.
Die Box, in der der Balken zusammengesetzt wurde, hat nach den obigen
Regeln als Breite $w$ den (horizontalen) Abstand des ersten und letzten
Notenhalses der zu verbalkenden Noten. Die H"ohe ergibt sich als Produkt
der Steigung des Balkens mit $w$ zuz"uglich der
Balkenst"arke. Die Tiefe betr"agt
in diesem Fall gleich Null. F"ur die weitere Plazierung anderer
Notenschriftelemente in der N"ahe
einer solchen Box sind diese Ausma\3e hinderlich.
Es reicht aus, den Balken so zu setzen, da\3 die H"ohe nicht in die
Berechnungen eingeht. Dazu wird die Box noch einmal in einer vertikalen
Box ausgeschlossen, so da\3 der Referenzpunkt der ``Balkenbox'' mit dem
Ansatzpunkt des Balkens "ubereinstimmt und die Box keine H"ohe und keine
Tiefe besitzt.
Dies kann "ahnlich wie in den Beispielen
zum horizontalen Ausschlu\3  durch Einf"ugen von Glue der
Ordnung 1 erreicht werden.
\item{}
F"ur positive Steigungen wird dazu die
|\vbox|-Konstruktion
\begindisplay
|\vbox to0pt{\vskip0pt minus1fil\diag{20}{1}\hbox{}}|,
\enddisplay\item{}
verwendet,
w"ahrend f"ur negative Steigungen die
|\vtop|-Konstruktion
\begindisplay
|\vtop to0pt{\hbox{}\diag{20}{1}\vskip0pt minus1fil}|
\enddisplay
benutzt wird. Der so gewonnene Ansatzpunkt soll in der folgenden Skizze
verdeutlicht werden.
\par\par\vskip30pt
{\offinterlineskip
\hbox to\hsize{\hfill \leaders\hrule\hskip20pt
\hbox to0pt{\vbox to0pt{\vskip0pt minus1fil\diag{20}{1}\hbox{}}\hss}%
\leaders\hrule\hskip20pt
\hbox to0pt{\vtop to0pt{\hbox{}\diag{20}{-1}\vskip0pt minus1fil}\hss}%
\leaders\hrule\hskip40pt\hfill}}
\vskip20pt
\item{}Weitere Beispiele im Zusammenhang findet man
in den Notenbeispielen von Kapitel {\advance\chap4 \the\chap}
und im Anhang A.

\subheading{Der Zeilenumbruchalgorithmus}
F"ur ein Textsatzsystem ist es notwendig, ein Verfahren bereitzustellen,
das eine Folge von Schriftelemen\-ten, d.h. einen Absatz, in Zeilen
einteilt, so da\3  ein gleich\-m"a\3iges Bild entsteht.
Zu l"osen ist also das Optimierungsproblem:

{\leftskip30pt \sl
Finde eine Folge von Umbruchpunkten,
so da\3 der gesamte Absatz ``m"oglichst gleichm"a\3ig'' umbrochen
wird.\par}

Ob ein Absatz (\tex{paragraph}) gut ausgeschlossen ist, wird nach drei
Kriterien beurteilt:
\item{$\bullet$}Ist ein Bruch der Zeile an \disp{dieser} Stelle geeignet?
\item{}Dies ist ein lokales Kriterium. Es wird bewertet, ob zum Beispiel
eine Formel ung"unstig getrennt wurde.
\item{$\bullet$}Ist der Ausschlu\3 der Zeile angenehm?
\item{}Dies ist ein globales Kriterum f"ur die Zeile. Bewertet wird, ob
z.B. eine Zeile zu locker oder zu eng ausgeschlossen wurde.
\item{$\bullet$}Gibt es gro\3e Unterschiede im Ausschlu\3 benachbarter
Zeilen?
\item{}Bewertet wird, ob z.B. eine Zeile eng ausgeschlossen wurde und
die folgende sehr locker.

Es ist also eine Bewertungsfunktion gesucht, die diese Kriterien
ber"ucksichtigt, und das Optimierungsproblem wird durch Minimierung
dieser Bewertungsfunktion gel"ost.

\subsubheading{Die Penalty}
D. E. Knuth f"uhrt ein weiteres Basiselement
ein, das eine Bewertung nach dem ersten Kriterium er\-m"oglicht. Die
\defi{Penalty} $p\in\rz$ beschreibt die ``"asthetischen Kosten'' f"ur
einen Umbruch an einer Stelle.  Kleine Penalty-Werte bedeuten dabei
einen  g"unstigen Umbruch, gro\3e einen ung"unstigen. \par
F"ur
$p\le-10\,000$ wird erzwungen, da\3 die Zeile an dieser Stelle
gebrochen wird,
w"ahrend  $p\ge10\,000$ dies verhindert.

Ein Spezialfall ist eine Penalty, der eine Breite $w$ zugeordnet ist.
Diese wird im Falle eines Umbruchs ber"ucksichtigt. Mu\3 z.B. ein Wort
getrennt werden, so ist $w$ die Breite des einzuf"ugenden
Trennungsstriches `-'. Es ist also m"oglich, zwischen Text, der
innerhalb einer Zeile gesetzt werden soll, und Text, der am Zeilenrand
auftritt, zu unterscheiden und ihm eine andere Bewertung zuzuordnen.

Das zugeh"orige Kommando lautet:
\begindisplay
\hbox{\vo|\discretionary{|\voff}\<pre-break text>|}|%
|{|\<post-break text>|}{|\<no-break
text>|}|\;,\enddisplay
wobei die jeweiligen Textelemente vom Typ Box oder Kern sein m"ussen.
Wird die Zeile and dieser Stelle gebrochen,
wird der \tex{pre-break text} am  Zeilenende und
der \tex{post-break text} am neuen Zeilenanfang eingef"ugt. Ist dies
nicht der Fall,  so wird der \tex{no-break text} gesetzt. Der Wert der
Penalty an einem \tex{discretionary}-Kommando ist der Wert des
Parameters \hbox{\vo|\hyphenpenalty|\voff},
falls ein \tex{pre-break text} angegeben wurde,
 und der Wert des Parameters \hbox{\vo|\exhyphenpenalty|\voff}, falls der
\tex{pre-break text} fehlt.
\goodbreak
\subsubheading{Vereinbarung}
Im folgenden beschreibe die Folge \folg xn einen Absatz, wobei die
\folgi xjn Basis-Elemente sind. Die Folge \folgi tjn gebe den Typ des
jeweiligen Basis-Elementes an, d.h.
$t_j=\tbox$, falls $x_j$ eine Box\footnote{$^*$}{\noindent\verbatimon
F"ur die folgenden
"Uberlegungen bezeichne \tbox\ alle nicht entfernbaren Elemente. Dazu
geh"oren: Box-Elemente, wie sie in \XX\the\chap.1.1 beschrieben wurden,
|\discretionary|-Komandos
sowie |\special|-,
|\mark|-, |\vadjust|-
und
|\insert|-Kommandos,
die im \TeX-Book \lit{\Texbook} n"aher beschrieben
sind.}
 ist,
$t_j=\tglue$, falls $x_j$ Glue ist,
$t_j=\tkern$, falls $x_j$ Kern ist und
$t_j=\tpenalty$, falls $x_j$ eine Penalty ist.
\folg wn , \folg yn und \folg zn seien
die jeweils zugeh"origen Attribute wie in \the\chap.1.2\XX, wobei
$y_j=z_j=0$ f"ur $t_j=\tbox$ oder $t_j=\tkern$ oder $t_j=\tpenalty$.

\subsubheading{Definition der Umbruchpunkte}
Ein \defi{m"oglicher Umbruchpunkt} ist ein Index $e\in\{1,\ldots,n\}$,
f"ur den eine der folgenden Bedingungen  (I)--(IV) erf"ullt  ist:

\item{(I)} $t_e=\tglue$ und $t_{e-1}=\tbox$,
\item{(II)} $t_e=\tkern$ und $t_{e+1}=\tglue$,
\item{(III)} $t_e=\tpenalty$, wobei $w_e=0$,
\item{(IV)} $x_e$ ist ein \tex{discretionary}-Kommando.

Jedem Umbruchpunkt wird eine Penalty zugewiesen.
Dabei ist f"ur die F"alle
(I) und (II) $p_e=0$. F"ur (III) ist $p_e$ der Wert von $x_e$.
Der Wert der Penalty von (IV) ist, wie oben erw"ahnt, der
Wert von \hbox{\vo|\hypenpenalty|\voff}
bzw. von \hbox{\vo|\exhyphenpenalty|\voff}.

Nicht jeder Umbruchpunkt ist jedoch als Zeilenendpunkt geeignet,
falls dadurch z.B. die
Zeile zu locker oder zu eng ausgeschlossen werden m"u\3te. "Ubersteigt
die Bewertung des Zeilenausschlusses (s. \the\chap.3.4\XX)
eine bestimmte Toleranzgrenze (i.e. der
Wert von \hbox{\vo|\tolerance|\voff}),
so wird dieser Umbruchpunkt aus der Liste der
m"oglichen Umbruchpunkte entfernt. Ein  Punkt, dessen Bewertung kleiner
als die Toleranzgrenze ausf"allt, hei\3t \defi{legaler Umbruchpunkt}.

\subsubheading{Bewertung der G"ute des Zeilenausschlusses}
Sei $r$ der zum Zeilenausschlu\3 geh"orige Proportionalfaktor
(s. \the\chap.2.1\XX)
mit der zugeh"origen Ordnung $i$ des Ausschlu\3materials
der Zeile. Die G"ute des Zeilenausschlusses wird quantitativ durch die
folgende Funktion ausgedr"uckt:
$$\beta(r,i)=\cases 0,&i\ne0\,,\\\min(100\,r^3,10000),&i=0\,.\endcases$$
D. E. Knuth bezeichnet den Wert $\bar\beta=\beta(r,i)$ als
\defi{Badness} der Zeile.
Diese Funktion ist heuristisch so festgelegt worden, da\3 sie f"ur
kleine $r$ niedrige Werte liefert und f"ur  gr"o\3ere $r$  schnell
anw"achst.

Mit dieser Funktion k"onnen nun die Zeilenausschl"usse klassifiziert
werden:

{\advance\iindent by 40pt
\item{$\bar\beta>100$}
Dieser Wert kann nur durch eine Erweiterung der Zeile
 erreicht werden. In diesem Fall gilt $r>1$. Dies bedeutet eine
Streckung um "uber 100\% der totalen Streckbarkeit.
Eine solche Zeile wird  als \disp{sehr locker} (\tex{very loose})
klassifiziert.
\item{$12.5<\bar\beta\le100$}In diesem Fall gilt $0.5\le r\le 1$.
Es ist eine
Streckung bzw. Stauchung um mindestes 50\% der totalen Steckbarkeit bzw.
Stauchbarkeit notwendig.
Die Zeile wird daher bei Erweiterung als \disp{locker}
(\tex{loose}) und bei
Verringerung als \disp{eng} (\tex{tight}) klassifiziert.
\item{$0<\bar\beta\le12.5$} Es gilt $0\le r<0.5$ in beiden F"allen.
Eine solche Zeile wird als \disp{%
unauf\-f"allig} (\tex{decent}) klassifiziert.

}
Man erh"alt also vier  Klassen: {sehr locker, locker, unauff"allig
} und
{eng}.
Man definiert zwei aufeinanderfolgende Zeilen als
\defi{optisch inkompatibel},
wenn sie nicht in der gleichen und nicht in benachbarten Klassen liegen.
\Bemerkung
Die Festlegung der Bewertungsfunktion $\beta(r,i)$ und damit die
Klassifizierung beruht auf der Annahme, da\3 die einzelnen
Gluekomponenten wie in \the\chap.1.2
gew"ahlt wurden, so da\3 im Fall $r=1$ der
dadurch entstehende Freiraum noch akzeptabel ist. Bei Zeilenerweiterung
ist $r>1$ zul"assig, aber unerw"unscht, so da\3 die Funktion in diesem
Fall schnell hohe Werte annimmt.
\endBemerkung

\subsubheading{Bewertung der Zeilen}
Eine Indexfolge
 $b_1<\ldots<b_k$  legaler Umbruchpunkte eines Absatzes von
$k$ Zeilen, so da\3
%Folgenelement $b_j$ angenommen wird, da\3
$x_{b_j}$ letztes Element
der $j$-ten  Zeile des Absatzes ist, hei\3t Zeilenendpunktfolge.

\Bemerkung
Jeder erzwungene Umbruchpunkt mu\3 in jeder solchen Folge enthalten
sein. Es gilt immer $b_k=n$, denn beim Abschlie\3en einer horizontalen
Liste wird das letzte Element, falls es
Glue ist, entfernt. Gleichzeitig werden als weitere
Elemente
\begindisplay \verbatimon
|\penalty10000\hskip\parfillskip\penalty-10000|\verbatimoff
\enddisplay
\verbatimon
eingef"ugt. $x_n$ ist also immer eine Penalty, die erzwingt, da\3 die
Zeile an dieser Stelle gebrochen wird.
\endBemerkung

Sei nun
$b_1<\ldots<b_k$
die Folge von Zeilenendpunkten.                               Dann ist
dieser eine Indexfolge
$a_1<\ldots<a_k$  f"ur Zeilenelemente $x_{a_j}$
zugeordnet, die jeweils
den Anfang der Zeile zu den jeweiligen Endpunkten markiert.
Diese Punkte werden festgelegt, indem man die Zeile an den Umbruchpunkten
$b_j$ teilt und zu Beginn jeder neuen Zeile alle Glue- und
Penalty-Elemente entfernt. Der Zeilenanfangspunkt $a_{j+1}$ ist dann
das erste Element f"ur das gilt $t_{a_{j+1}}=\tbox$.

Genauer gilt: Sei $b_0=0 $. Ist
$$I_j =\{b_{j-1}<i<b_j\mid t_i=\tbox \text{ oder }t_i=\tpenalty
\text{ mit } p_i\ge-10000\}\;$$ aus allen Elementen der $j$-ten Zeile.
Dann ist $$a_j= \cases b_j\;,&\text{falls }I_j =\emptyset\\
                \min I_j\;,&\text{sonst.}\endcases$$
Die $j$-te Zeile enth"alt dann also alle Elemente $x_i$ mit
$a_j\le i \le b_j$ und $i=b_j$, falls $t_{b_j}=\tpenalty$.


\Bemerkung
Die legalen Umbruchpunkte werden im Verfahren
 so gew"ahlt, da\3 normalerweise kein
Glue am Zeilenende und am Zeilenanfang
steht, es sei denn durch ausdr"uckliches Kommando. Glue am Zeilenende
ist im Notensatz
jedoch erforderlich f"ur den Fall eines Zeilenumbruchs in der Taktmitte,
d.h. nach einer Note innerhalb des Taktes.\item{}
Glue am Zeilenende erh"alt man, indem man den {%
Interword Glue} ersetzt
durch eine Glue-Penalty-Folge der Art:
\begindisplay
|\penalty10000\hskip|$w$|\penalty0|,
\enddisplay
\item{}
wobei $w$ den zu setzenden  Wert des Glue bezeichnet.
\item{}
Die Penalty 10000 unterdr"uckt, da\3 die Zeile an dieser Stelle gebrochen
wird.
Der Glue
wird nicht in die Liste der m"oglichen Umbruchpunkte aufgenommen, da die
Bedingung (I) nicht erf"ullt ist. Als Ausgleich wird die Penalty 0 in
die Liste aufgenommen. Wird die Zeile an dieser  Stelle gebrochen, so
erscheint also Glue am Zeilenende.
\item{}
Glue am Zeilenanfang erh"alt man, indem man dem normalen
{Interword Glue}
die Box-Glue-Penalty-Folge
\begindisplay
|\penalty0\hskip|$-w$|\penalty10000\hskip|$w$
\enddisplay
\item{}
hinzuf"ugt.
\item{}
Innerhalb der Zeile heben sich die Glues auf. Der einzige m"ogliche
Umbruchpunkt  in dieser Folge ist die erste Penalty. Wird die Zeile an
dieser Stelle gebrochen, so wird der Glue bis zur Box entfernt, und es
erscheint Glue am Zeilenanfang. Ein Fehlen der leeren Box w"urde also
auch die Entfernung des zweiten Glues im Falle eines Zeilenbruchs an der
ersten Penalty bewirken.
\endBemerkung

Mit diesen Voraussetzungen kann nun die Bewertung der einzelnen Zeilen
erfolgen.

Seien $\beta_j$ und $p_j$ die dem Zeilenendpunkt der $j$-ten Zeile
zugeordnete Badness bzw. Penalty. Dann sind die sogenannten Kosten
(\tex{demerits}) $d_j$ f"ur diese Zeile definiert durch:

$$d_j=\cases (l_j+\beta_j)^2 + p_j^2\;,&\text{falls }0\le p_j<10000,\\
             (l_j+\beta_j)^2 - p_j^2\;,&\text{falls }-10000< p_j<0,\\
         (l_j+\beta_j)^2\;,\hfill  &\text{falls }p_j\le-10000,\endcases$$
wobei $l_j$ ein Parameter ist, der je nach Wert die Gesamtkosten
erh"ohen oder senken kann. Dabei ist $l_j$ der aktuelle Wert von
 \hbox{\vo|\linepenalty|\voff}.

\Bemerkung
Die Unstetigkeitsstelle der Funktion f"ur $p_j\le-10000$ ist aus
programmiertechnischen Gr"unden eingef"ugt worden. Da in diesem Fall
$\beta_j$ in jeder Zeilenendpunktfolge enthalten ist, tr"agt es  auch
nicht  zur Minimierung der Bewertungsfunktion des gesamten
Absatzes bei (s. \the\chap.3.8\XX).
Es wird in diesem Fall also nicht zus"atzlich
noch ein gro\3er Wert abgezogen, um einem arithmetischen "Uberlauf
vorzubeugen.
\endBemerkung

Zus"atzlich werden zu $d_j$ noch Kosten      in Abh"angigkeit von der
Umgebung der Zeile addiert, und zwar:
der Wert von  \hbox{\vo|\adjdemerits|\voff}, falls die Zeilen
 $j-1$ und $j$ inkompatibel sind,
der Wert von {\vo|\doublehyphendemerits|\voff},
falls sowohl $x_{b_{j-1}}$ als auch $x_{b_j}$ ein
\tex{discretionary}-Kommando ist, und
der Wert von {\vo|\finalhyphendemerits|\voff},
falls  $x_{b_{k-1}}$ ein \tex{discretionary}-Kommando ist.

\subsubheading{Bewertung des Absatzes}

Die Folge $b_1<\ldots<b_k$ von Umbruchpunkten, f"ur die
$\sum_{j=1}^k d_j$ minimal ist (Minimum der Summe der Quadrate der
Penalties und Badness jeder Zeile) wird als endg"ultige Folge
ausgew"ahlt. Damit wird meistens auch
$\max \beta_j$ minimiert,
aber nicht notwendigerweise. Dies ist auch nicht
erw"unscht, da mit der Methode der kleinsten Quadrate ein gleichm"a\3iger
Ausschlu\3 des gesamten Absatzes erzielt werden soll.

\subsubheading{Bemerkungen zum Zeilenumbruch
 und zur Wahl von Parametern}

\item{1)}Durch Ver"andern der Parameter k"onnen verschiedenen Effekte
erzielt werden, z.B.:
\itemitem{a)}F"ur normalen Textsatz wird man
\hbox{\vo|\parfillskip 0pt plus 1fil|\voff} verwenden.
Setzt man
\hbox{\vo|\parfillskip 0pt|\voff}, so wird die letzte Zeile des
Absatzes bis zum Ende ausgeschlossen, was f"ur den Notensatz
erforderlich ist.
Ist der Text nicht lang genug oder
zu schmal, gibt es Schwierigkeiten, da zu wenig Streckm"oglichkeit
vorhanden ist  und nicht gen"ugend Umbruchpunkte zur Wahl stehen.
\itemitem{b)}
Durch Erh"ohen von \hbox{\vo|\adjdemerits|\voff} kann man verhindern,
da\3 die Zeilen zu unterschiedlich ausgeschlossen werden.

\item{2)} Der \TeX-Zeilenumbruchalgorithmus ist so konzipiert,
da\3 nicht sofort bei
der ersten Gelegenheit, sondern abh"angig von
den benachbarten Zeilen umgebrochen wird. Der
Algorithmus ist also  in gewisser Weise voraus- bzw.
zur"uckschauend.

\subheading{Der Seitenumbruch}

Ist die optimale Folge von Umbruchpunkten gefunden, werden die einzelnen
Zeilen, verbunden durch {Interline Glue} (s. \the\chap.2.3\XX)
an die aktuelle ``Seitenliste'' angef"ugt.

Zus"atzlich wird vor jedem Glue eine Penalty
eingef"ugt und danach vertikales Material,
das aus
der jeweiligen Zeile mit
\hbox{\vo|\vadjust{|\voff}\<vertical list>|}| ausgelagert wurde
in der Reihenfolge des Erscheinens (d.h. von links nach rechts).
Dieses eingef"ugte vertikale Material beeinflu\3t also nicht den
{Interline Glue}.

\subsubheading{Die Seitenumbruchpunkte}
Das Verfahren f"ur den Seitenumbruch ist dem
Zeilenumbruchalgorithmus "ahnlich.

Ein Seitenumbruch kann stattfinden
\item{a)} vor Glue, dem unmittelbar eine Box
der vertikalen Liste vorangeht,
\item{b)} vor Kern, falls dieser unmittelbar von Glue gefolgt
wird,
\item{c)}an einer Penalty.

\subsubheading{Die Bewertung des Seitenumbruchs}
Eine Penalty $p\le-10000$ erzwingt somit einen Seitenumbruch.

Jede Seite wird  einzeln bearbeitet, d.h. es wird nicht wie beim
Zeilenumbruch voraus- oder zu\-r"uck\-schauend gearbeitet,
da dies zu viel  Speicherungsaufwand erfordern w"urde.
Zu jedem in
Erw"agung gezogenen Seitenumbruchpunkt werden mittels einer
Bewertungsfunktion die ``Kosten'' $c$ berechnet:
$$c=\cases \beta\;,   &\text{falls }\beta<\infty\text{ und }
                                p\le-10000\;,\\
       \beta+p\;, &\text{falls }\beta<10000 \text{ und }-10000<p<10000
       \;,\\
           100000,&\text{falls }\beta\ge10000\text{ und }-10000<p<10000
       \;,\endcases$$
wobei $\beta$ die Badness und  $p$ die
zugeordnete  Penalty bezeichnet.
Die {Badness} einer vertikalen Liste
wird im wesentlichen genauso berechnet wie die der horizontalen Liste.

Die Kosten werden an jedem legalen Umbruchpunkt berechnet, solange bis
ein Umbruchpunkt gefunden wird, an dem das neuberechnete
$c$ gr"o\3er ist als das zuvorberechnete. Dann wird die Seite am
vorletzten Seitenumbruchpunkt umbrochen.
Nach dem Seitenumbruch werden alle folgenden
Glue-, Kern- und Penalty-Elemente der horizontalen
Liste solange entfernt, bis ein Box-Element erscheint.
Es kann also durch
\hbox{\vo|\penalty-10000\penalty-10000|\voff} in der vertikalen
Liste keine  Leerseite erzeugt werden.

\vfill\eject