Consider the following example:
\showboxdepth=\maxdimen \showboxbreadth=\maxdimen \tracingonline=1
\baselineskip=12pt plus 2pt
\lineskip=3pt minus 1pt
\lineskiplimit=2pt
\setbox0=\vbox{
\hbox{\vrule height 5pt depth 3pt} % this has depth 3pt
\hbox{\vrule height 5pt} % this has height 5pt
}
\showbox0
\setbox0=\vbox{
\hbox{\vrule height 5pt depth 3pt} % this has depth 3pt
\hbox{\vrule height 8pt} % this has height 8pt
}
\showbox0
\bye
The output on the terminal is
> \box0=
\vbox(17.0+0.0)x0.4
.\hbox(5.0+3.0)x0.4
..\rule(5.0+3.0)x0.4
.\glue(\baselineskip) 4.0 plus 2.0
.\hbox(5.0+0.0)x0.4
..\rule(5.0+*)x0.4
! OK.
l.11 \showbox0
?
> \box0=
\vbox(19.0+0.0)x0.4
.\hbox(5.0+3.0)x0.4
..\rule(5.0+3.0)x0.4
.\glue(\lineskip) 3.0 minus 1.0
.\hbox(8.0+0.0)x0.4
..\rule(8.0+*)x0.4
! OK.
l.17 \showbox0
?
that reflects what's said in your quotation from the TeXbook.
Now, let's modify the example as
\showboxdepth=\maxdimen \showboxbreadth=\maxdimen \tracingonline=1
\baselineskip=12pt plus 2pt
\lineskip=3pt minus 1pt
\lineskiplimit=2pt
\setbox0=\vbox spread 2pt{
\hbox{\vrule height 5pt depth 3pt} % this has depth 3pt
\hbox{\vrule height 5pt} % this has height 5pt
}
\showbox0
\setbox0=\vbox spread 2pt{
\hbox{\vrule height 5pt depth 3pt} % this has depth 3pt
\hbox{\vrule height 8pt} % this has height 8pt
}
\showbox0
\bye
Now the output on the terminal is
> \box0=
\vbox(19.0+0.0)x0.4, glue set 1.0
.\hbox(5.0+3.0)x0.4
..\rule(5.0+3.0)x0.4
.\glue(\baselineskip) 4.0 plus 2.0
.\hbox(5.0+0.0)x0.4
..\rule(5.0+*)x0.4
! OK.
l.11 \showbox0
?
Underfull \vbox (badness 10000) detected at line 16
\vbox(21.0+0.0)x0.4
.\hbox(5.0+3.0)x0.4
..\rule(5.0+3.0)x0.4
.\glue(\lineskip) 3.0 minus 1.0
.\hbox(8.0+0.0)x0.4
..\rule(8.0+*)x0.4
> \box0=
\vbox(21.0+0.0)x0.4
.\hbox(5.0+3.0)x0.4
..\rule(5.0+3.0)x0.4
.\glue(\lineskip) 3.0 minus 1.0
.\hbox(8.0+0.0)x0.4
..\rule(8.0+*)x0.4
! OK.
l.17 \showbox0
?
The first box has enough stretching for being filled up, whereas the second box hasn't.
Conversely, if we change spread 2pt
into spread -1pt
, the output on the terminal will be
Overfull \vbox (1.0pt too high) detected at line 10
\vbox(16.0+0.0)x0.4
.\hbox(5.0+3.0)x0.4
..\rule(5.0+3.0)x0.4
.\glue(\baselineskip) 4.0 plus 2.0
.\hbox(5.0+0.0)x0.4
..\rule(5.0+*)x0.4
> \box0=
\vbox(16.0+0.0)x0.4
.\hbox(5.0+3.0)x0.4
..\rule(5.0+3.0)x0.4
.\glue(\baselineskip) 4.0 plus 2.0
.\hbox(5.0+0.0)x0.4
..\rule(5.0+*)x0.4
! OK.
l.11 \showbox0
?
> \box0=
\vbox(18.0+0.0)x0.4, glue set - 1.0
.\hbox(5.0+3.0)x0.4
..\rule(5.0+3.0)x0.4
.\glue(\lineskip) 3.0 minus 1.0
.\hbox(8.0+0.0)x0.4
..\rule(8.0+*)x0.4
! OK.
l.17 \showbox0
?
The first box is overfull by 1pt, because there's no shrinkability; on the other hand, the second box is good, because it has shrinkability.
As you can see, the .\glue(\baselineskip)
and \glue(\lineskip)
lines are the same in all three cases.
What “when stretching and shrinking are ignored” means is that the computations of the interline glue are performed by taking into account only the natural size of \baselineskip
; if \lineskiplimit
is not exceeded, the \baselineskip
is inserted with suitably reduced natural size and with the stated plus
and minus
components; otherwise the \lineskip
glue is inserted, with its plus
and minus
components. The stretchability and shrinkability will act when the vertical list being constructed (typically, but not necessarily, a paragraph) is packed in a vertical box (typically for shipping out a page).
Thus the computation of glue in the first box is: 12 - 3 - 5 = 4 > \lineskiplimit
, so the baseline skip glue is set to 4pt plus 2pt
; in the second box we have 12 - 3 - 8 = 1 < \lineskiplimit
, so \lineskip
is used. The stretchability and shrinkability of \baselineskip
play no role in this computation: TeX has no way of knowing whether the box which the current vertical list will end up in will need to stretch or shrink glue.
\lineskiplimit
without taking the stretch and shrink components of\baselineskip
into account.texbook.tex
. Also the math is quite fuzzy.3pt minus 1pt
in this case)?\showbox
does not help, because it shows general glue, not exact values (e.g.,\glue 0.0 plus 1.0fil minus 1.0fil
)