Szczegóªy algorytmu TEXowego do ªamania akapitów
Details of the TEX line-breaking algorithm
Jan ustek, Ostrava, Czech Republic
BachoTEX 2010
Jednym z najciekawszych algorytmów u»ywanych w TEXu jest algorytm optimum t do ªamania akapitów na wiersze. Algorytm zale»y od wielu parametrów.
One of the most interesting algorithms used in TEX is the optimum t algorithm for breaking paragraphs into lines. The algorithm depends on many parameters.
\adjdemerits, \doublehyphendemerits, \emergencystretch, \exhyphenpenalty, \finalhyphendemerits, \fontdimen, \hangafter, \hangindent, \hsize, \hyphenpenalty, \leftskip, \linepenalty, \looseness, \parfillskip, \parindent, \parshape, \pretolerance, \rightskip, \tolerance
Najlepszym sposobem poznania zale»no±ci od tych parametrów jest zaimplementowanie algorytmu.
The best way to understand the dependence on these parameters is to implement the algorithm.
Zaimplementowaªem w j¦zyku TEX uproszczon¡ wersj¦ pierwszego przej±cia algorytmu.
I have implemented in TEX a simplied version of the rst pass of the algorithm.
\adjdemerits, \doublehyphendemerits, \emergencystretch, \exhyphenpenalty, \finalhyphendemerits, \fontdimen, \hangafter, \hangindent, \hsize, \hyphenpenalty, \leftskip, \linepenalty, \looseness, \parfillskip, \parindent, \parshape, \pretolerance, \rightskip, \tolerance
Nie dziaªa ªamanie wyrazów i liczenie wierszy.
Word-breaking and lines counting does not work.
Parametry Parameters \parindent, \leftskip, \rightskip, \parfillskip, \hsize (\leftskip)[\parindent]3,14145 92653 589(\rightskip) (\leftskip)7932 384626 4338 327950 288(\rightskip) (\leftskip)41 9716 939 937510 58 20974(\rightskip) (\leftskip)944592 307 816(\parfillskip)(\rightskip) \hsize
Zwykle
Usually
\parindent=20pt, \parfillskip=0pt
plus 1l,
\leftskip=0pt, \rightskip=0pt
Obliczenie marno±ci
Computation of badness
\hbox to 20cm{% \hbox to 1cm{\hfil}\hskip 2cm plus 2cm minus 1cm \hbox to 3cm{\hfil}\hskip 2cm plus 3cm minus 2cm \hbox to 2cm{\hfil}}
s = 10cm
f0 = 5cm
⇒
b ≈ 100
10cm 5cm
!3
= 800
Ogólne wyra»enie
General expression
3 s b ≈ 100 f0
If
s0 > 0
If
and
s0 < 0
b ≥ 8192
and
b ≥ 100
Warto±¢ b jest tylko aproksymacj¡, bo TEX woli szybko±¢ ni» precyzj¦. Wewn¦trzny algorytm TEXa daje tylko 1095 ró»nych warto±ci b.
then then
b := 10000. b := −∞.
The value b is only an approximation, since TEX prefers speed than accuracy. The internal TEX algorithm can return only 1095 values of b.
Obliczenie kosztu i \linepenalty
Computation of demerits and \linepenalty
d = (min{l + b, 10000})2 + p2 sgn p + d0
gdzie l jest warto±ci¡ \linepenalty, p jest kar¡ dodan¡ przez u»ytkownika i d0 jest kosztem dodatkowym zgodnie z rejestrami
where l is the value of \linepenalty, p is a penalty inserted by the user and d0 are additional demerits according to registers
\adjdemerits, \doublehyphendemerits, \finalhyphendemerits.
TEX szuka takiego ªamania na wiersze, by suma kosztów byªa najmniejsza.
TEX is looking for the sequence of line-breaks so that the sum of demerits is minimal.
i spacje pomi¦dzy sªowami
\fontdimen
\fontdimen
spaces
and interword
h
i
= \hskip \fontdimen2\font +\fontdimen7\font \spacefactor 1000 1000 minus \fontdimen4\font × \spacefactor
plus \fontdimen3\font ×
Warto±¢ \fontdimen7 jest dodawana tylko w przypadku
The value \fontdimen7 is added only in case
\spacefactor ≥ 2000
\pretolerance
Kryterium szybko±ci powoduje, »e w pierwszym przej±ciu algorytm testuje tylko takie przeªamania, gdzie
For the reason of speed, the algorithm tests in the rst pass only breakpoints that satisfy
b ≤ \pretolerance
Zwykle jest
Usually
\pretolerance = 100
wi¦c algorytm testuje tylko przeªamania speªniaj¡ce
hence the algorithm tests only breakpoints satisfying
|s| ≤ |f0|
Przykªady
Examples
Sto rok· v~ ²acht¥ ºil, ml£el jsem, sto rok· kopal jsem uhlí, za sto let v~ rameni bezmasém svaly mi v~ ºelezo ztuhly. Uhelný prach sedl mi do o£í, rubíny ze rt· mi uhly, ze vlas·, z~ vous· a z~ obo£í visí mi rampouchy uhlí. Chléb s~ uhlím beru si do práce, z~ roboty jdu na robotu, p°i Dunaji strmí paláce z~ krve mé a z~ mého potu. Sto rok· v~ kopaln¥ ml£el jsem, kdo mi t¥ch sto rok· vrátí? Kdyº jsem pohrozil kladivem, kdekdo se za£al mi smáti. Abych m¥l rozum, ²el v~ kopalnu zas, pro pány robil jak prve: máchl jsem kladivem -- teklo vráz na Polské Ostrav¥ krve! V²ichni vy na Slezské, v²ichni vy, dím, nech je vám Petr neb Pavel, m¥jº prs kryt kruný°em ocelovým, tisíc·m k~ útoku zavel, v²ichni vy na Slezské, v²ichni vy, dím, hlubokých páni vy dol·: p°ijde den, z~ dol· jde plamen a dým, p°ijde den, zú£tujem spolu!
1 12
324
15 7632
0 10
49 00
36 19
7 72 12 14 21 0 0 9 4 0 0 1 7271 1 7853 9389 361 2 10 16 19 00 29 5 9 2 5 8581 7171 7415 7753 121 100 5 8 13 22 24 1 1 21 49 41 6 8 152 5867 8 4671 14905 18619 7953 3 10 11 12 17 20 38 44 21 0 1 5 1 4346 6256 15026 17778 289 6 9 14 98 23 01 4446 4735 6377 21622 18 16178 10 0
16 00
22 5
5
62
6 435 4225 0 1 12 1 0 4225
4 4 8 4 9065 100
361
Line break: 0–1–3–6–8–10–12–15–19–21–24 0 Sto roků v šachtě žil, mlčel jsem, sto roků kopal jsem uhlí, za sto let v rameni 1 bezmasém svaly mi v železo ztuhly. Uhelný prach sedl mi do očí, rubíny ze rtů 2mi 3 uhly, ze vlasů, z vousů a z obočí visí mi rampouchy uhlí. Chléb s uhlím beru 4si 5do 6 práce, z roboty jdu na robotu, při Dunaji strmí paláce z krve mé a z mého 7potu. 8 Sto 9roků v kopalně mlčel jsem, kdo mi těch sto roků vrátí? Když jsem pohrozil 10 kdekdo se začal mi smáti. Abych měl rozum, šel v kopalnu zas, pro pány 12 kladivem, 11 robil 13jak 14prve: máchl jsem kladivem – teklo vráz na Polské Ostravě krve! Všichni 15 vy 16 na 17 Slezské, 18 všichni vy, dím, nech je vám Petr neb Pavel, mějž prs kryt krunýřem 19 ocelovým, 20 tisícům k útoku zavel, všichni vy na Slezské, všichni vy, dím, hlubokých 21 páni vy 22 dolů: 23 přijde den, z dolů jde plamen a dým, přijde den, zúčtujem spolu! 24
Sto text width desired width desired stretching calculated badness actual badness
16.97092pt plus 0.0pt minus 0.0pt 426.79134pt 409.82042pt (16383.99998) 10000 (10000) 10000
Sto text width desired width desired stretching calculated badness actual badness
roků 44.06091pt plus 1.95831pt minus 1.30554pt 426.79134pt 382.73042pt (195.43884) 10000 (10000) 10000
Sto text width desired width desired stretching calculated badness actual badness
roků v 89.49377pt plus 5.87494pt minus 3.91663pt 426.79134pt 337.29756pt (57.41295) 10000 (10000) 10000
Sto text width desired width desired stretching calculated badness actual badness
roků v šachtě 108.42413pt plus 7.83325pt minus 5.22217pt 426.79134pt 318.3672pt (40.64304) 10000 (10000) 10000
šachtě
žil,
desired stretching 318.3672pt (40.64304) calculated badness 10000 (10000) actual badness 10000 Sto roků v šachtě žil, text width 139.10437pt plus 9.79156pt minus 6.52771pt desired width 426.79134pt desired stretching 287.68697pt (29.3811) calculated badness 10000 (10000) actual badness 10000
mlčel
Sto roků text width desired width desired stretching calculated badness actual badness
v šachtě žil, mlčel 169.5235pt plus 11.74988pt minus 7.83325pt 426.79134pt 257.26784pt (21.89536) 10000 (10000) 10000
jsem,
Sto roků text width desired width desired stretching calculated badness actual badness
v šachtě žil, mlčel 188.51913pt plus 13.70819pt minus 9.1388pt 426.79134pt 238.2722pt (17.38174) 10000 (10000) 10000
Sto roků text width desired width desired stretching calculated badness actual badness
v šachtě žil, mlčel jsem, 215.60913pt plus 15.6665pt minus 10.44434pt 426.79134pt 211.1822pt (13.47986) 10000 (10000) 10000
jsem,
sto
sto
roků
Sto roků v text width desired width desired stretching calculated badness actual badness
šachtě žil, mlčel jsem, sto 246.94214pt plus 17.62482pt minus 11.74988pt 426.79134pt 179.8492pt (10.20432) 10000 (10000) 10000
Sto roků v text width desired width desired stretching calculated badness actual badness
šachtě žil, mlčel jsem, sto roků 274.09741pt plus 19.58313pt minus 13.05542pt 426.79134pt 152.69392pt (7.79721) 10000 (10000) 10000
Sto roků v šachtě žil, mlčel jsem, sto roků kopal text width 300.86102pt plus 21.54144pt minus 14.36096pt desired width 426.79134pt desired stretching 125.93031pt (5.84596) calculated badness 10000 (10000) actual badness 10000
roků
kopal
kopal
jsem
Sto roků v šachtě žil, mlčel jsem, sto roků kopal jsem text width 315.87476pt plus 23.49976pt minus 15.6665pt desired width 426.79134pt desired stretching 110.91658pt (4.71991) calculated badness 10000 (10000) actual badness 10000
uhlí,
jsem
uhlí,
za
desired width desired stretching calculated badness actual badness
426.79134pt 110.91658pt (4.71991) 10000 (10000) 10000
Sto roků v šachtě žil, mlčel jsem, sto roků kopal jsem uhlí, za sto text width 334.87039pt plus 25.45807pt minus 16.97205pt desired width 426.79134pt desired stretching 91.92094pt (3.61069) calculated badness 4707 (4707.2755) actual badness 4699 Sto roků v šachtě žil, mlčel jsem, sto roků kopal jsem uhlí, za sto let text width 351.84244pt plus 27.41638pt minus 18.27759pt desired width 426.79134pt desired stretching 74.9489pt (2.73372) calculated badness 2043 (2042.96793) actual badness 2035 Sto roků v šachtě text width desired width desired stretching calculated badness actual badness demerits line
žil, mlčel jsem, sto roků kopal jsem uhlí, za sto let v rameni 401.12665pt plus 31.33301pt minus 20.88867pt 426.79134pt 25.66469pt (0.81909) 55 (54.95378) 55 4225 (total 4225) 0–1
Sto roků v šachtě žil, mlčel jsem, sto roků kopal jsem uhlí, za sto let v rameni 1bezmasém text width 457.65662pt plus 33.29132pt minus 22.19421pt desired width 426.79134pt desired shrinking 30.86528pt (1.39069) calculated badness 15000 (15000) actual badness 15000 bezmasém text width 52.61221pt plus 0.0pt minus 0.0pt desired width 426.79134pt desired stretching 374.17912pt (16383.99998) calculated badness 10000 (10000) actual badness 10000 Sto roků v šachtě žil, mlčel jsem, sto roků kopal jsem uhlí, za sto let v rameni 1bezmasém svaly text width 487.42297pt plus 35.24963pt minus 23.49976pt desired width 426.79134pt desired shrinking 60.63164pt (2.5801) calculated badness 15000 (15000) actual badness 15000 bezmasém svaly text width 82.37857pt plus 1.95831pt minus 1.30554pt desired width 426.79134pt desired stretching 344.41277pt (175.87218) calculated badness 10000 (10000) actual badness 10000
desired shrinking 414.52936pt (9.33868) calculated badness 15000 (15000) actual badness 15000 si 5do 6práce, z roboty jdu na robotu, při Dunaji strmí paláce z krve mé a z mého 7potu. text width 443.19566pt plus 35.24963pt minus 23.49976pt desired width 426.79134pt desired shrinking 16.40433pt (0.69806) calculated badness 34 (34.01546) actual badness 34 demerits 1936 (total 11001) line 4–8 do 6práce, z roboty jdu na robotu, při Dunaji strmí paláce z krve mé a z mého 7potu. text width 431.38051pt plus 33.29132pt minus 22.19421pt desired width 426.79134pt desired shrinking 4.58917pt (0.20677) calculated badness 1 (0.88403) actual badness 1 demerits 121 (total 5988) line 5–8 práce, z roboty jdu na robotu, při Dunaji strmí paláce z krve mé a z mého 7potu. text width 415.06123pt plus 31.33301pt minus 20.88867pt desired width 426.79134pt desired stretching 11.7301pt (0.37437) calculated badness 5 (5.24707) actual badness 5 demerits 225 (total 4671) line 6–8
196
52 4
47
9 26
09
14
4
94
1
12
0
10
0
10
64 4
32 1
12
1
12
56
0
1
36
29
59
39 40377
10
00
49
6
22
5
1
12
5
62
100 121 38 40 77491 7953 100
100
21
0
31
4
14
9
36
72
19
37 102277
10
100 14 20 334 0 89 0 1 54010 39989 324 44521 4 7 10 73 26 32 9 484 9065 9389 53910 6 73478 40277 9604 2 10 15 21 9 6 0 5 34 30580 43 8581 0 2 7632 4225 121 2500 0 1 12 8 11 10 27 33 1 5 2 1 0 5 1 0 4225 5867 4671 7171 40133 7853 144 3 10 16 22 36 0 1 4346 7271 7415 289 1521 6 9 12 86 34 6 28 49 371 7753 2 4446 4735 6256 74422 121 17 23 14905 15026 841 29 35 0 0 16 17778 18619 9801 18 24 6377 16178 36 21622
29 100 844 3
2500 25 31 86004 73647
0
10
4 66
56
19 53 2 80675 9
30 86148 161
11
13 80479
16 324 14 00 4 9
\pretolerance=300
44
38
Line break: 0–1–3–6–8–11–16–21–28–33–40 0 Sto roků v šachtě žil, mlčel jsem, sto roků kopal jsem uhlí, za sto let v rameni 1 bezmasém svaly mi v železo ztuhly. Uhelný prach sedl mi do očí, rubíny ze rtů 2mi 3 uhly, ze vlasů, z vousů a z obočí visí mi rampouchy uhlí. Chléb s uhlím beru 4si 5do 6 práce, z roboty jdu na robotu, při Dunaji strmí paláce z krve mé a z mého 7potu. 8 Sto 9roků v kopalně mlčel jsem, kdo mi těch sto roků vrátí? Když jsem 10pohrozil 11 kladivem, 12 kdekdo se začal mi smáti. Abych měl rozum, šel v kopalnu 13 zas, 14 pro 15 pány 16 robil 17jak 18prve: máchl jsem kladivem – teklo vráz na Polské Ostravě 19krve! 20Všichni 21 vy 22 na 23 Slezské, 24 všichni vy, dím, nech je vám Petr neb Pavel, mějž 25 prs 26 kryt 27 krunýřem 28 ocelovým, 29 tisícům k útoku zavel, všichni vy na Slezské, všichni 30 vy, 31 dím, 32 hlubokých 33 páni 34 vy 35 dolů: 36 přijde den, z dolů jde plamen a dým, přijde 37 den, 38 zúčtujem 39 spolu! 40
\pretolerance=100, \hsize=90mm
0 0
1 4 53 504 13998 29 576 100 8281 1764 484 1 2 3 10 6 7 8 1 0 36 9418 576 676 8957 11182 11666 5 9057
Line break: 0–1–2–3–5–6–7–8–PARAGRAPH NOT COMPOSED 0 Sto roků v šachtě žil, mlčel jsem, sto roků kopal 1 jsem uhlí, za sto let v rameni bezmasém svaly mi 2 v železo ztuhly. Uhelný prach sedl mi do očí, rubíny 3 ze rtů mi uhly, ze vlasů, z vousů a z obočí visí 4mi 5 rampouchy uhlí. Chléb s uhlím beru si do práce, 6 z roboty jdu na robotu, při Dunaji strmí paláce 7 z krve mé a z mého potu. Sto roků v kopalně mlčel 8 jsem, kdo mi těch sto roků vrátí? Když jsem pohrozil kladivem, kdekdo se začal mi smáti. Abych měl rozum, šel v kopalnu zas, pro pány robil jak prve: máchl jsem kladivem – teklo vráz na Polské Ostravě krve! Všichni vy na Slezské, všichni vy, dím, nech je vám Petr neb Pavel, mějž prs kryt krunýřem ocelovým, tisícům k útoku zavel, všichni vy na Slezské, všichni vy, dím, hlubokých páni vy dolů: přijde den, z dolů jde plamen a dým, přijde den, zúčtujem spolu!
\pretolerance=400
42025 64009 6 9 22 25 30 33 0 4 5 0 4 1 1 42510 84535 229861 213985 277994 625 5184 112896 484 41209 2 4 12 14 16 19 21 23 28 1 9 0 5 1 2 0 0 302 45656 46151 159047 1 348 213841 412 41785 42410 289 188068 188552 229761 576 155236 24964 100 0 1 10 7 10 18 31 26 31 34 36 6 1 1 9 8 3 4 0 6 50 13998 42631 184 210360 364 229670 214385 193489 0 576 159168 8281 484 32761 1296 3 5 10 13 15 17 20 22 24 48 29 10 4 6 0 4 0 41 7 8 1 676 8957 11182 11666 46347 162304 190568 191864 193189 361 100 8 11 27 32 35 9057 9418 192348 193289 193389 100
0
2 53
9
10 0
69
0 25
6 19
34 9
0 10
0 40
1 12
Line break: 0–1–3–5–8–11–13–14–16–18–19–22–24–27–29–32–35–36 0 Sto roků v šachtě žil, mlčel jsem, sto roků kopal 1 jsem uhlí, za sto let v rameni bezmasém svaly 2mi 3 v železo ztuhly. Uhelný prach sedl mi do očí, 4rubíny 5 ze rtů mi uhly, ze vlasů, z vousů a z obočí 6visí 7mi 8 rampouchy uhlí. Chléb s uhlím beru si 9do 10práce, 11 z roboty jdu na robotu, při Dunaji strmí 12paláce 13 z krve mé a z mého potu. Sto roků v kopalně 14 mlčel 15jsem, kdo mi těch sto roků vrátí? Když 16 jsem 17 pohrozil kladivem, kdekdo se začal mi smáti. 18 Abych měl rozum, šel v kopalnu zas, pro pány 19 robil 20 jak prve: máchl jsem kladivem – teklo vráz 21 na 22 Polské Ostravě krve! Všichni vy na Slezské, 23 všichni 24 vy, dím, nech je vám Petr neb Pavel, mějž 25 prs 26 kryt 27 krunýřem ocelovým, tisícům k útoku zavel, 28 všichni 29 vy na Slezské, všichni vy, dím, hlubokých 30 páni 31 vy 32 dolů: přijde den, z dolů jde plamen a 33dým, 34přijde 35 den, zúčtujem spolu! 36
\pretolerance=100, \leftskip=\rightskip=0pt plus
1000pt
text width desired width desired stretching calculated badness actual badness demerits line
Sto 16.97092pt plus 2000.0pt minus 0.0pt 256.0748pt 239.10388pt (0.11955) 0 (0.17087) 0 100 (total 100) 0–1
text width desired width desired stretching calculated badness actual badness demerits line
Sto 1roků 44.06091pt plus 2001.95831pt minus 1.30554pt 256.0748pt 212.01389pt (0.1059) 0 (0.11874) 0 100 (total 100) 0–2
text width desired width desired stretching calculated badness actual badness demerits line
roků 23.17224pt plus 2000.0pt minus 0.0pt 256.0748pt 232.90256pt (0.11646) 0 (0.15793) 0 100 (total 200) 1–2
Sto 1roků 2v šachtě text width 89.49377pt plus 2005.87494pt minus 3.91663pt desired width 256.0748pt desired stretching 166.58102pt (0.08305) calculated badness 0 (0.05728) actual badness 0 demerits 100 (total 100) line 0–3 roků 2v šachtě text width 68.6051pt plus 2003.91663pt minus 2.61108pt desired width 256.0748pt desired stretching 187.4697pt (0.09355) calculated badness 0 (0.08186) actual badness 0 demerits 100 (total 200) line 1–3 v šachtě text width 41.5151pt plus 2001.95831pt minus 1.30554pt desired width 256.0748pt desired stretching 214.5597pt (0.10718)
127 2409 0
64 25
100 729
6
577
125 3023
100
10
00
202 256 5
100
00
625
21 4
1600 169
144
484
15 78
8281
118 2289
10
1260 10 0 2762 100
100
115 6 576 1
256
240
1296
39 9
44
256 100 676
100
69 121
00 10201 324
25
121
25
100 484
12
225
196
16
5
562
04
361
121 121
42 2 05 0 100
324 2809
6 225
100
100
100
9
11
4 40
25
30
00
921
361 3136
144
121
9
864
6
49
484 1
504
04 96
10
29
2916
124 3426
1
36
Line break: 0–3–6–13–21–29–37–46–55–62–70–79–88–97–104–112–120–128 0 Sto roků v šachtě žil, mlčel jsem, sto 1roků 2kopal 3 jsem uhlí, za sto let v rameni 4bezmasém 5svaly 6 mi 7v železo ztuhly. Uhelný 8prach 9sedl 10 mi 11 do 12 očí, 13 14 15 16 17 18 1920 rubíny ze rtů mi uhly, ze vlasů, z vousů a z obočí 21 visí 22mi 23rampouchy 24uhlí. 25Chléb 26s uhlím 27beru 28si 29 do 30práce, 31z roboty 32jdu 33na 34robotu, 35při 36Dunaji 37 strmí 38 paláce 39 z krve 40 mé 41 a 42 z mého 43 potu. 44 Sto 45 roků 46 47 48 49 50 51 52 53 54 v kopalně mlčel jsem, kdo mi těch sto roků vrátí? 55 Když 56jsem 57pohrozil 58kladivem, 59kdekdo 60se 61začal 62 mi 63smáti. 64Abych 65měl 66rozum, 67šel 68v kopalnu 69zas, 70 pro 71pány 72robil 73jak 74prve: 75máchl 76jsem 77kladivem 78– 79 teklo 80 vráz 81 na 82 Polské 83 Ostravě 84 krve! 85 Všichni 86 vy 87 na 88 89 90 91 92 93 94 95 96 Slezské, všichni vy, dím, nech je vám Petr neb 97 Pavel, 98 mějž 99 prs 100 kryt 101 krunýřem 102 ocelovým, 103 tisícům 104 k útoku 105 zavel, 106 všichni 107 vy 108 na 109 Slezské, 110 všichni 111 vy, 112 113 114 115 116 117 118 119 dím, hlubokých páni vy dolů: přijde den, z dolů 120 jde 121 plamen 122 a 123 dým, 124 přijde 125 den, 126 zúčtujem 127 spolu! 128
111 2032
100
98 5049
104 28 9 1743
9
100
8281
117 2662
1
225
97 1643
1764 12
110 2168
52
1912
0
10
23
144
864
1
144
90 86 4 3458 9
12
9
28
100
361
196
76 2051
83
9 940 3097
1743
89 60 8 4824 4
96
9
16
2736
484 12
100
100
9
1882
100
72
36 82 112 4363 3844 68 75 36 1
4 4624 21 1
100
3875
48
9
28
2007
0 100 250 144
100
193
122
0
4900
4 169 147060
115
10
121 4629
0
100
441
40
1
12
114 3802
120 1943
1 0 828 121 250
1156
119 2288
0 2916 21 1
10
576
113 4508
0
108
1521
6084 10
107
841 3975
101 3134
112 1843
6
100 3602
3721 25
106
100 3702
5
87 22 0 1547 9
99 4083
22
100
94 2426
6 625 69 576 13090 64 121 7 84
86 50 4 1703 1
95 2 162
2500
93 2320
39
729
100
80
6
100
4 3136 25 2
4956
25
79
2282
6 6 100 883 144 129 441
4
14
9 100 532 121
14
62 1157
1213
92
0 490 2509 85 32 4
105
169 4252
400 2841 3282 4202 2601 102 12 9 95 0 1 6 0 3586 4219 5929 1 2144 2441 441 8464 81 88 90 109 116 123 0 0 0 6 3 4703 1499 2562 2962 3971 10816 169 67 74 67 96 103 25 6 6
21
56 5997
79
144
2220
78
0 640 1313 2025 66 73 48 4
1 12000 2025
5 169 302
55 1013
10
61 1402
70 16 9 1278
5 722 1399 3249 65 72 44 1
3994
225
121
6 121 921
54 1281
1446
400
5 122 1447 1600 64 71 44 1
4812
9
1
5 100 302
42 3169
1346
1
4 48 384 4362
44
225
121
6 100 115
35 2012
484
441
4 100 102
0
21 444
100
5
10
576
22
100
4
14
1
828
14 8481
34 32 4 2923
181 0 121 11 448 10
4 729 518 169
100
100
100
4 27 518 856
1
100
4
14
6 3 144 244 24 2823 4267 913 289 3 10 19 21 4 12 9 40 3969 1 6 8 0 6 7 0 1 568 1 4137 100 857 4900 7 22 26 33 19 47 6 5 6 577 2082 200 3048 5828 841 13 20 14 41 13 4 841 3244 69 344 712
91
9 396 3197 2209 77 84 28 9
2138
0
3465
52
12
36
2561
69 20 2 1502 5
10
22
100
529
1225
1
5
100
225
544
63 1113
5
44
22
144
3269
69 100
121
6 5329 00 1
100
0
1 1 100 121 31428
100
0 160
19
529
5
873
2 729
2336
4 37 38 102 813 44 900 4356 2704 23 30 10 44 51 58 0
8581
17 44 1 7514
588
7396
57 4587
1 38 86 152 644 49 9604 3025 196 31 10 45 52 59 00 24 0 0 0 1 7955 8681 1181 1586 1782 3364 11 18 84 4 39 1 462 8781 994 1982 1444 6084 100 25 32 16 46 53 60 9 62
729 10
0 0
1 36 18 828 1081 49 841 1225 22 29 22 43 50 5
8602
16 11856
121
5 12 1 144
0 121 160
4 4 144 11048 1 32 10 4 484 1357 9604 9
6 4 4 193 144 14
4
32
6400
9
100 5914
49 3365
39
4761 8 15 94 0 11532 16293 9
28 26 0 805 1
plus 1cm
100
\leftskip=\rightskip=0pt
128
100 2043
\leftskip=\rightskip=\parfillskip=0pt 0 0
576
1 576
100
2 676
8281
1 4 5329 4 0 5 13998
3 10 0 8957
361
6 9418
1764
7 11182
5 9057
Line break: 0–1–2–3–5–6–7–8–PARAGRAPH NOT COMPOSED 0 Sto roků v šachtě žil, mlčel jsem, sto roků kopal 1 jsem uhlí, za sto let v rameni bezmasém svaly mi 2 v železo ztuhly. Uhelný prach sedl mi do očí, rubíny 3 ze rtů mi uhly, ze vlasů, z vousů a z obočí visí 4mi 5 rampouchy uhlí. Chléb s uhlím beru si do práce, 6 z roboty jdu na robotu, při Dunaji strmí paláce 7 z krve mé a z mého potu. Sto roků v kopalně mlčel 8 jsem, kdo mi těch sto roků vrátí? Když jsem pohrozil kladivem, kdekdo se začal mi smáti. Abych měl rozum, šel v kopalnu zas, pro pány robil jak prve: máchl jsem kladivem – teklo vráz na Polské Ostravě krve! Všichni vy na Slezské, všichni vy, dím, nech je vám Petr neb Pavel, mějž prs kryt krunýřem ocelovým, tisícům k útoku zavel, všichni vy na Slezské, všichni vy, dím, hlubokých páni vy dolů: přijde den, z dolů jde plamen a dým, přijde den, zúčtujem spolu!
484
8 11666
\pretolerance=500
29
299
5 22
28 29 37 4 49 1 521 604 144 608794 212 779425 6 161 898382 33 10 5 45 29 00 24 422 649 202 607350 16 121 566904 5 165 736778 0 42025 242064 576 100 227529 144 6 9 12 15 18 21 36 29 19 42 50 6 38 0 5 1 6 0 8 1 42510 84535 326599 327175 327275 554804 33 605181 605325 571129 610266 625 4 34 46 640 9 2 4 25 16 0 0 44 2 1 270 330100 9 41 41785 42410 571325 213985 9 576 155236 3025 5184 112896 0 1 10 7 10 13 16 19 22 30 46 39 43 51 24 41 0 00 0 1 5 0 576 13998 42631 45656 46151 159047 327396 330269 229861 213841 277994 8281 3 5 10 26 48 35 47 249 0 9 1 0 0 8 0 289 188068 4 412 229761 364 229670 64 676 8957 361 1764 484 258064 8 11 14 17 20 23 31 31 44 10 52 96 40 3 184 210360 193189 0 9057 9418 11182 11666 46347 159168 6 188552 214385 27 327 48 10 6 36 48 6 0 129 191864 4 162304 1 193289 32 41 53 190568 192348 193389 1
34 8
69
00 25
84 1
1
34 9
12
6
19
29
53
0 40
23 0
40 0
1
12
5
22
1
12
Line break: 0–1–2–4–6–9–12–15–18–21–24–29–34–38–42–45–49–54 0 Sto roků v šachtě žil, mlčel jsem, sto roků kopal 1 jsem uhlí, za sto let v rameni bezmasém svaly 2 mi 3v železo ztuhly. Uhelný prach sedl mi do očí, 4 rubíny 5ze rtů mi uhly, ze vlasů, z vousů a z obočí 6 visí 7 mi 8 rampouchy uhlí. Chléb s uhlím beru si 9 do 10práce, 11z roboty jdu na robotu, při Dunaji 12 strmí 13paláce 14z krve mé a z mého potu. Sto roků 15 v kopalně 16 mlčel 17 jsem, kdo mi těch sto roků vrátí? 18 Když 19jsem 20pohrozil kladivem, kdekdo se začal 21 mi 22smáti. 23Abych měl rozum, šel v kopalnu zas, 24 pro 25pány 26robil 27jak prve: máchl jsem kladivem 28– 29 teklo 30vráz 31na 32Polské Ostravě krve! Všichni vy 33na 34 Slezské, 35všichni 36vy, dím, nech je vám Petr 37neb 38 Pavel, mějž 39prs 40kryt 41krunýřem ocelovým, tisícům 42 k útoku zavel, 43všichni 44vy na Slezské, všichni vy, 45 dím, hlubokých 46páni 47vy 48dolů: přijde den, z dolů 49 jde 50plamen a 51dým, 52přijde 53den, zúčtujem spolu! 54
54 638723
\pretolerance=200, \leftskip=\rightskip=0pt plus
1mm 9 448
5 22
50 61 28 72 25 37 441 90323 285 110337 9 272 132525 576 42 46 29 0 33 100 1 24 1024 1 0 0 2 5 4 1 89306 89882 16 2 81776 22 105300 7569 40000 289 100 23409 6 9 12 15 18 21 36 29 14 51 1 38 0 1 4 10 8008 624 89185 15577 55577 55866 55966 79375 82800 92798 256 2 4 25 1 34 47 132 6 81 43 9 729 56795 21 73 7652 436 88937 47614 25 7908 82944 256 26244 784 5184 19321 0 1 10 7 10 13 16 19 22 30 46 39 52 0 24 0 0 100 45256 16 10237 0 256 8108 8892 14076 33397 56066 56916 60839 8281 3 5 10 44 48 54 9 26 22 4 35 0 625 47493 49444 76 532 38847 5 608 45156 356 8637 169 529 484 42849 8 11 14 17 20 23 31 31 40 53 36 25 2 4 8737 8906 9435 9919 14272 33518 39072 46868 48014 100 27 59 36 48 45 49 10 6 1 2 84 43968 44068 0 129 42643 4 36654 9 32 41 54 41347 43127 44168 12 1
00
25
54 76
84 64
1 12
6 19
29 53
0 40
38 02 5
0 10
5 22
0 10
Line break: 0–1–2–4–6–9–12–15–18–21–24–29–34–38–42–46–50–55 0 Sto roků v šachtě žil, mlčel jsem, sto roků kopal 1 jsem uhlí, za sto let v rameni bezmasém svaly 2 mi 3v železo ztuhly. Uhelný prach sedl mi do očí, 4 rubíny 5ze rtů mi uhly, ze vlasů, z vousů a z obočí 6 visí 7 mi 8 rampouchy uhlí. Chléb s uhlím beru si 9 do 10práce, 11z roboty jdu na robotu, při Dunaji 12 strmí 13paláce 14z krve mé a z mého potu. Sto roků 15 v kopalně 16 mlčel 17 jsem, kdo mi těch sto roků vrátí? 18 Když 19jsem 20pohrozil kladivem, kdekdo se začal 21 mi 22smáti. 23Abych měl rozum, šel v kopalnu zas, 24 pro 25pány 26robil 27jak prve: máchl jsem kladivem 28– 29 teklo 30vráz 31na 32Polské Ostravě krve! Všichni vy 33na 34 Slezské, 35všichni 36vy, dím, nech je vám Petr 37neb 38 Pavel, mějž 39prs 40kryt 41krunýřem ocelovým, tisícům 42 k útoku 43zavel, 44všichni 45vy na Slezské, všichni vy, 46 dím, hlubokých 47páni 48vy 49dolů: přijde den, z dolů 50 jde 51plamen a 52dým, 53přijde 54den, zúčtujem spolu! 55
55 94812
Sto roků v text width desired width desired stretching calculated badness actual badness
šachtě žil, mlčel jsem, 169.5235pt plus 17.4404pt minus 7.83325pt 256.0748pt 86.5513pt (4.96269) 10000 (10000) 10000
Sto roků v šachtě žil, mlčel jsem, sto text width 188.51913pt plus 19.39871pt minus 9.1388pt desired width 256.0748pt desired stretching 67.55566pt (3.48248) calculated badness 4223 (4223.44629) actual badness 4217 Sto roků v šachtě žil, mlčel jsem, sto roků text width 215.60913pt plus 21.35703pt minus 10.44434pt desired width 256.0748pt desired stretching 40.46567pt (1.89473) calculated badness 680 (680.20798) actual badness 677 Sto roků v šachtě žil, mlčel jsem, sto roků kopal text width 246.94214pt plus 23.31534pt minus 11.74988pt desired width 256.0748pt desired stretching 9.13266pt (0.39171) calculated badness 6 (6.01018) actual badness 6 demerits 256 (total 256) line 0–1 Sto roků v šachtě žil, mlčel jsem, sto roků kopal 1jsem text width 274.09741pt plus 25.27365pt minus 13.05542pt desired width 256.0748pt desired shrinking 18.02261pt (1.38046) calculated badness 15000 (15000) actual badness 15000 jsem text width 23.23752pt plus 5.69052pt minus 0.0pt desired width 256.0748pt desired stretching 232.83728pt (40.91669)
I ONT
AT
NOKRYTOENUTRAO
HA I AITONYT OU F N
I
NORYTENTRA
U FON I OKYO OU
T T NT I T A N HA
O O U Y R E RA
HU FORYOURF
THAN O U Y F K
N U UR I ONTH T NTANKRYYOOUFA H O ENUR UUFRTAITONT TH T N ANKYOU A
NO
H NT NKYOU A HAFOARTTYEOURF
RATT OUNT I ONTE
E ANKY THU FORYOO
O
H
N
O RATT OEUNTANI KOYNTE
ETNHANKYOT
RY TOU FRO ATT O OU T I ON E
¶
TON
KRYTOEUNTRAI OTTY
TONYTOHU FONRKYN
KRYTOEUNTA AI OTTY
TONYTOURFORKY
Y T N E R T HANI ONT
F U O O R Y R U Y A O T K