Re: pdftex Digest, Vol 190, Issue 2
Doug McKenna <doug-Nf2trSL5CZG0AFT+FuuGOlaTQe2KTcn/@public.gmane.org> Tue, 27 Feb 2024 11:46:18 -0700 (MST)
| Newsgroups | gmane.comp.tex.pdftex |
|---|---|
| Message-ID | <160958237.4179948.1709059578435.JavaMail.zimbra@mathemaesthetics.com> |
\interlinepenalties 3 10 20 30
\clubpenalties 3 66 77 88
The etex.ch file introduces code to add the interlinepenalties to the clubpenalties:
@x [39] m.890 l.17427 - eTeX penalties
begin pen:=inter_line_penalty;
if cur_line=prev_graf+1 then pen:=pen+club_penalty;
if cur_line+2=best_line then pen:=pen+final_widow_penalty;
@y
begin q:=inter_line_penalties_ptr;
if q<>null then
begin r:=cur_line;
if r>penalty(q) then r:=penalty(q);
pen:=penalty(q+r);
end
else pen:=inter_line_penalty;
q:=club_penalties_ptr;
if q<>null then
begin r:=cur_line-prev_graf;
if r>penalty(q) then r:=penalty(q);
pen:=pen+penalty(q+r);
end
else if cur_line=prev_graf+1 then pen:=pen+club_penalty;
if d then q:=display_widow_penalties_ptr
else q:=widow_penalties_ptr;
if q<>null then
begin r:=best_line-cur_line-1;
if r>penalty(q) then r:=penalty(q);
pen:=pen+penalty(q+r);
end
else if cur_line+2=best_line then
if d then pen:=pen+display_widow_penalty
else pen:=pen+widow_penalty;
@z
but the plain text run log file shows no adding:
Completed box being shipped out [1]
\vbox(667.20255+0.0)x469.75499
.\vbox(0.0+0.0)x469.75499, glue set 14.0fil
..\glue -22.5
..\hbox(8.5+0.0)x469.75499, glue set 469.75499fil
...\vbox(8.5+0.0)x0.0
...\glue 0.0 plus 1.0fil
..\glue 0.0 plus 1.0fil minus 1.0fil
.\vbox(643.20255+0.0)x469.75499, glue set 585.20255fill
..\glue(\topskip) 5.69446
..\hbox(4.30554+0.0)x469.75499
...\hbox(0.0+0.0)x20.0
...\tenrm a
...\penalty -10000
...\glue(\rightskip) 0.0
..\penalty 66
..\glue(\baselineskip) 5.05556
..\hbox(6.94444+0.0)x469.75499, glue set 273.18797
...\tenrm b
...\tenrm b
...\glue 3.33333 plus 1.66666 minus 1.11111
...\penalty -10000
...\glue(\rightskip) 0.0
..\penalty 77
..\glue(\baselineskip) 7.69446
..\hbox(4.30554+0.0)x469.75499, glue set 277.18802
...\tenrm c
...\glue 3.33333 plus 1.66666 minus 1.11111
...\penalty -10000
...\glue(\rightskip) 0.0
..\penalty 88
..\glue(\baselineskip) 5.05556
..\hbox(6.94444+0.0)x469.75499, glue set 276.52135
...\tenrm d
...\glue 3.33333 plus 1.66666 minus 1.11111
...\penalty -10000
...\glue(\rightskip) 0.0
..\penalty 238
..\glue(\baselineskip) 7.69446
..\hbox(4.30554+0.0)x469.75499, glue set 465.31055fil
...\tenrm e
...\penalty 10000
...\glue(\parfillskip) 0.0 plus 1.0fil
...\glue(\rightskip) 0.0
..\glue 0.0 plus 1.0fill
.\glue(\baselineskip) 17.55556
.\hbox(6.44444+0.0)x469.75499, glue set 232.37749fil
..\glue 0.0 plus 1.0fil minus 1.0fil
..\tenrm 1
..\glue 0.0 plus 1.0fil minus 1.0fil
I tried your sample code in my own private JSBox interpreter, which I developed using the etex.ch file to understand the algorithms to write my code. Mine adds them (the right thing, as near as I can tell). Here's the JSBox log for shipped page:
Shipping out a completed page with \count 0..0 = [1]:
vbox : [id=15] (667.20255 + 0.0) ✕ 469.75499 [rigid], contains 4 items
vbox : [id=12] (0.0 + 0.0) ✕ 469.75499, stretched using 14.0fil, contains 3 items
glue : [\vskip] -22.5
hbox : [id=11] (8.5 + 0.0) ✕ 469.75499, stretched using 469.755fil, contains 2 items
vbox : [id=10] (8.5 + 0.0) ✕ 0.0 [empty]
glue : [\hfil] 0.0 plus 1.0fil
glue : [\vss] 0.0 plus 1.0fil minus 1.0fil
vbox : [id=13] (643.20255 + 0.0) ✕ 469.75499, stretched using 585.20251fill, contains 15 items
glue : [\topskip] 5.69446
hbox : [id=4] (4.30554 + 0.0) ✕ 469.75499, contains 4 items
[uses font \tenrm = cmr10.tfm [unscaled]]
hbox : [id=3, \parindent] (0.0 + 0.0) ✕ 20.0 [rigid] [empty]
text : \tenrm a [1 char, wd=5.00002pt] [`a = "61 = 97]
cost : \penalty -10000 [always]
glue : [\rightskip] 0.0
cost : \penalty 76
glue : [\baselineskip (adjusted)] 5.05556
hbox : [id=5] (6.94444 + 0.0) ✕ 469.75499, stretched using 273.18799, contains 5 items
[uses font \tenrm = cmr10.tfm [unscaled]]
text : \tenrm bb [2 chars, total wd=11.11115pt] [`b = "62 = 98] [`b = "62 = 98]
glue : [interword space] 3.33333 plus 1.66666 minus 1.11111
cost : \penalty -10000 [always]
glue : [\rightskip] 0.0
cost : \penalty 97
glue : [\baselineskip (adjusted)] 7.69446
hbox : [id=6] (4.30554 + 0.0) ✕ 469.75499, stretched using 277.18802, contains 4 items
[uses font \tenrm = cmr10.tfm [unscaled]]
text : \tenrm c [1 char, wd=4.44444pt] [`c = "63 = 99]
glue : [interword space] 3.33333 plus 1.66666 minus 1.11111
cost : \penalty -10000 [always]
glue : [\rightskip] 0.0
cost : \penalty 118
glue : [\baselineskip (adjusted)] 5.05556
hbox : [id=7] (6.94444 + 0.0) ✕ 469.75499, stretched using 276.52133, contains 4 items
[uses font \tenrm = cmr10.tfm [unscaled]]
text : \tenrm d [1 char, wd=5.55557pt] [`d = "64 = 100]
glue : [interword space] 3.33333 plus 1.66666 minus 1.11111
cost : \penalty -10000 [always]
glue : [\rightskip] 0.0
cost : \penalty 268
glue : [\baselineskip (adjusted)] 7.69446
hbox : [id=8] (4.30554 + 0.0) ✕ 469.75499, stretched using 465.31055fil, contains 4 items
[uses font \tenrm = cmr10.tfm [unscaled]]
text : \tenrm e [1 char, wd=4.44444pt] [`e = "65 = 101]
cost : \penalty 10000 [never]
glue : [\parfillskip] 0.0 plus 1.0fil
glue : [\rightskip] 0.0
glue : [\vfill] 0.0 plus 1.0fill
glue : [\baselineskip (adjusted)] 17.55556
hbox : [id=14] (6.44444 + 0.0) ✕ 469.75499, stretched using 232.37749fil, contains 3 items
[uses font \tenrm = cmr10.tfm [unscaled]]
glue : [\hss] 0.0 plus 1.0fil minus 1.0fil
text : \tenrm 1 [1 char, wd=5.00002pt] [`1 = "31 = 49]
glue : [\hss] 0.0 plus 1.0fil minus 1.0fil
76 = 66 + 10
97 = 77 + 20
118 = 88 + 30
268 = 238 + 30
So it's a mystery to me what "reality" is here, or where a bug may have been introduced. Sure seems like cumulative penalties is the intent, especially given the original tex.web code that etex.ch changes.
Doug McKenna