-
Notifications
You must be signed in to change notification settings - Fork 18
/
chapter29.tex
578 lines (520 loc) · 24.1 KB
/
chapter29.tex
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
% -*- coding: utf-8 -*-
\documentclass{book}
\input{preamble}
\setcounter{chapter}{28}
\begin{document}
%\chapter{Insertions}\label{insert}
\chapter{Insertions}\label{insert}
%Insertions are \TeX's way of handling floating information.
%\TeX's page builder calculates what insertions and how many
%of them will fit on the page; these insertion items are then
%placed in insertion boxes which are to be handled by the
%output routine.
Insertions are \TeX's way of handling floating information.
\TeX's page builder calculates what insertions and how many
of them will fit on the page; these insertion items are then
placed in insertion boxes which are to be handled by the
output routine.
%\label{cschap:insert}\label{cschap:newinsert}\label{cschap:insertpenalties}\label{cschap:floatingpenalty}\label{cschap:holdinginserts}\label{cschap:footins}\label{cschap:topins}\label{cschap:topinsert}\label{cschap:pageinsert}\label{cschap:midinsert}\label{cschap:endinsert}
%\begin{inventory}
%\item [\cs{insert}]
% Start an insertion item.
\label{cschap:insert}\label{cschap:newinsert}\label{cschap:insertpenalties}\label{cschap:floatingpenalty}\label{cschap:holdinginserts}\label{cschap:footins}\label{cschap:topins}\label{cschap:topinsert}\label{cschap:pageinsert}\label{cschap:midinsert}\label{cschap:endinsert}
\begin{inventory}
\item [\cs{insert}]
Start an insertion item.
%\item [\cs{newinsert}]
% Allocate a new insertion class.
\item [\cs{newinsert}]
Allocate a new insertion class.
%\item [\cs{insertpenalties}]
% Total of penalties for split insertions.
% Inside the output routine, the number of held-over insertions.
\item [\cs{insertpenalties}]
Total of penalties for split insertions.
Inside the output routine, the number of held-over insertions.
%\item [\cs{floatingpenalty}]
% Penalty added when an insertion is split.
\item [\cs{floatingpenalty}]
Penalty added when an insertion is split.
%\item [\cs{holdinginserts}]
% (\TeX3 only)
% If this is positive, insertions are not placed in their boxes
% at output time.
\item [\cs{holdinginserts}]
(\TeX3 only)
If this is positive, insertions are not placed in their boxes
at output time.
%\item [\cs{footins}]
% Number of the footnote insertion class in plain \TeX.
\item [\cs{footins}]
Number of the footnote insertion class in plain \TeX.
%\item [\cs{topins}]
% Number of the top insertion class.
\item [\cs{topins}]
Number of the top insertion class.
%\item [\cs{topinsert}]
% Plain \TeX\ macro to start a top insert.
\item [\cs{topinsert}]
Plain \TeX\ macro to start a top insert.
%\item [\cs{pageinsert}]
% Plain \TeX\ macro to start an insert that will take
% up a whole page.
\item [\cs{pageinsert}]
Plain \TeX\ macro to start an insert that will take
up a whole page.
%\item [\cs{midinsert}]
% Plain \TeX\ macro that places its argument if there is space,
% and converts it into a top insert otherwise.
\item [\cs{midinsert}]
Plain \TeX\ macro that places its argument if there is space,
and converts it into a top insert otherwise.
%\item [\cs{endinsert}]
% Plain \TeX\ macro to wind up an insertion item
% that started with \cs{topinsert}, \cs{midinsert},
% or \cs{pageinsert}.
\item [\cs{endinsert}]
Plain \TeX\ macro to wind up an insertion item
that started with \cs{topinsert}, \cs{midinsert},
or \cs{pageinsert}.
%\end{inventory}
\end{inventory}
%%\point Insertion items
%\section{Insertion items}
%\point Insertion items
\section{Insertion items}
%Floating information, items that are not bound to a fixed
%place in the vertical list, such as figures or footnotes,
%are handled by \indexterm{insertions}.
%The treatment of insertions is a strange interplay between the
%user, \TeX's internal workings, and the output routine.
%First the user specifies an insertion, which is
%a certain amount of vertical material;
%then \TeX's page builder decides what insertions should go
%on the current page and puts these insertions in insertion boxes;
%finally, the output routine has to do something with these boxes.
Floating information, items that are not bound to a fixed
place in the vertical list, such as figures or footnotes,
are handled by \indexterm{insertions}.
The treatment of insertions is a strange interplay between the
user, \TeX's internal workings, and the output routine.
First the user specifies an insertion, which is
a certain amount of vertical material;
then \TeX's page builder decides what insertions should go
on the current page and puts these insertions in insertion boxes;
finally, the output routine has to do something with these boxes.
%An insertion item looks like
%\cstoidx insert\par
%\begin{disp}\cs{insert}\gr{8-bit number}\lb\gr{vertical mode material}\rb
%\end{disp} where the 8-bit number should not be~255,
%because \cs{box255} is used by \TeX\ for passing the page to the output
%routine.
An insertion item looks like
\cstoidx insert\par
\begin{disp}\cs{insert}\gr{8-bit number}\lb\gr{vertical mode material}\rb
\end{disp} where the 8-bit number should not be~255,
because \cs{box255} is used by \TeX\ for passing the page to the output
routine.
%The braces around the vertical mode material in an insertion
%item can be implicit; they imply a new level of grouping.
%The vertical mode material is processed in internal
%vertical mode.
The braces around the vertical mode material in an insertion
item can be implicit; they imply a new level of grouping.
The vertical mode material is processed in internal
vertical mode.
%Values of \cs{splittopskip}, \cs{splitmaxdepth},
%and \cs{floatingpenalty} are relevant for split insertions
%(see below); the values that are current just before
%the end of the group are used.
Values of \cs{splittopskip}, \cs{splitmaxdepth},
and \cs{floatingpenalty} are relevant for split insertions
(see below); the values that are current just before
the end of the group are used.
%Insertion items can appear in vertical mode, horizontal
%mode, and math mode. For the latter two modes they have to
%migrate to the surrounding vertical list
%(see page~\pageref{migrate}).
%After an insertion item is put on the vertical list the
%page builder is exercised.
Insertion items can appear in vertical mode, horizontal
mode, and math mode. For the latter two modes they have to
migrate to the surrounding vertical list
(see page~\pageref{migrate}).
After an insertion item is put on the vertical list the
page builder is exercised.
%%\point Insertion class declaration
%\section{Insertion class declaration}
%\point Insertion class declaration
\section{Insertion class declaration}
%In the plain format
%the number for a new insertion class
%is allocated by \csidx{newinsert}:
%\begin{verbatim}
%\newinsert\myinsert % new insertion class
%\end{verbatim}
%which uses \cs{chardef} to assign a number to the control
%sequence.
In the plain format
the number for a new insertion class
is allocated by \csidx{newinsert}:
\begin{verbatim}
\newinsert\myinsert % new insertion class
\end{verbatim}
which uses \cs{chardef} to assign a number to the control
sequence.
%Insertion classes are allocated numbering from 254 downward.
%As box~255 is used for output, this allocation scheme leaves
%\cs{skip255}, \cs{dimen255}, and \cs{count255}
%free for scratch use.
Insertion classes are allocated numbering from 254 downward.
As box~255 is used for output, this allocation scheme leaves
\cs{skip255}, \cs{dimen255}, and \cs{count255}
free for scratch use.
%%\point Insertion parameters
%\section{Insertion parameters}
%\point Insertion parameters
\section{Insertion parameters}
%For each insertion class~$n$ four registers are allocated:
%\begin{itemize}
%\item \cs{box}$\,n$ When the output routine is active this
% box contains the insertion items of class~$n$ that should
% be placed on the current page.
%\item \cs{dimen}$\,n$ This is the maximum space allotted for
% insertions of class~$n$ per page. If this amount would
% be exceeded \TeX\ will split insertions.
%\item \cs{skip}$\,n$ Glue of this size is added the first
% time an insertion item of class~$n$ is added to the
% current page. This is useful for such phenomena as a rule
% separating the footnotes from the text of the page.
%\item \cs{count}$\,n$ Each insertion item is a vertical list,
% so it has a certain height. However, the effective height,
% the amount of influence it has on the text height of the
% page, may differ from this real height.
% The value of \cs{count}$\,n$
% is then 1000 times the factor by which the height should
% be multiplied to obtain the effective height.
%
% Consider the following examples:
%
%\begin{itemize}\item Marginal notes do not affect
% the text height, so the factor should be~0. \item Footnotes
% set in double column mode affect the page by half of their height:
% the count value should by~500. \item Conversely, footnotes
% set at page width underneath a page in double column mode
% affect both columns, so \ldash provided that the double column mode
% is implemented by applying \cs{vsplit} to a double-height column \rdash
% the count value should be~2000.\end{itemize}
%\end{itemize}
For each insertion class~$n$ four registers are allocated:
\begin{itemize}
\item \cs{box}$\,n$ When the output routine is active this
box contains the insertion items of class~$n$ that should
be placed on the current page.
\item \cs{dimen}$\,n$ This is the maximum space allotted for
insertions of class~$n$ per page. If this amount would
be exceeded \TeX\ will split insertions.
\item \cs{skip}$\,n$ Glue of this size is added the first
time an insertion item of class~$n$ is added to the
current page. This is useful for such phenomena as a rule
separating the footnotes from the text of the page.
\item \cs{count}$\,n$ Each insertion item is a vertical list,
so it has a certain height. However, the effective height,
the amount of influence it has on the text height of the
page, may differ from this real height.
The value of \cs{count}$\,n$
is then 1000 times the factor by which the height should
be multiplied to obtain the effective height.
Consider the following examples:
\begin{itemize}\item Marginal notes do not affect
the text height, so the factor should be~0. \item Footnotes
set in double column mode affect the page by half of their height:
the count value should by~500. \item Conversely, footnotes
set at page width underneath a page in double column mode
affect both columns, so \ldash provided that the double column mode
is implemented by applying \cs{vsplit} to a double-height column \rdash
the count value should be~2000.\end{itemize}
\end{itemize}
%%\point Moving insertion items from the contributions list
%\section{Moving insertion items from the contributions list}
%\point Moving insertion items from the contributions list
\section{Moving insertion items from the contributions list}
%The most complicated issue with insertions is the algorithm
%that adds insertion items to the main vertical list,
%and calculates breakpoints if necessary.
The most complicated issue with insertions is the algorithm
that adds insertion items to the main vertical list,
and calculates breakpoints if necessary.
%\TeX\ never changes the \cs{vsize}, but it diminishes the
%\csidx{pagegoal} by the (effective) heights of the insertion
%items that will appear before a page break. Thus the output
%routine will receive a \cs{box255} that has height \cs{pagegoal},
%not necessarily \cs{vsize}.
\TeX\ never changes the \cs{vsize}, but it diminishes the
\csidx{pagegoal} by the (effective) heights of the insertion
items that will appear before a page break. Thus the output
routine will receive a \cs{box255} that has height \cs{pagegoal},
not necessarily \cs{vsize}.
%\begin{enumerate}
%\item When the first insertion of a certain class $n$ occurs
% on the current page \TeX\ has to account for the quantity
% \cs{skip}$\,n$. This step is executed only if no earlier
% insertion item of this class occurs on the vertical list
% \ldash this includes insertions that were split \rdash but \cs{box}$\,n$
% need not be empty at this time.
%
% If \cs{box}$\,n$ is not empty, its height plus depth is multiplied
% by \cs{count}$\,n/1000$ and the result is subtracted
% from \cs{pagegoal}. Then the \cs{pagegoal} is diminished
% by the natural component of \cs{skip}$\,n$. Any stretch and
% shrink of \cs{skip}$\,n$ are incorporated in \cs{pagestretch}
% and \cs{pageshrink} respectively.
%\item If there is a split insertion of class $n$ on the page
% \ldash this case and the previous step in the algorithm are
% mutually exclusive \rdash the \csidx{floatingpenalty} is added to
% \csidx{insertpenalties}. A~split insertion is an insertion item
% for which a breakpoint has been calculated as it will not
% fit on the current page in its entirety. Thus the insertion
% currently under consideration will certainly not wind up
% on the current page.
%\item After the preliminary action of the two previous points
% \TeX\ will place the actual insertion item on the main vertical
% list, at the end of the current contributions.
% First it will check whether the item will fit without being split.
%
% There are two conditions to be checked:
%\begin{itemize}\item
% adding the insertion item (plus all previous insertions of that class)
% to \cs{box}$\,n$ should not let
% the height plus depth of that box exceed \cs{dimen}$\,n$, and
% \item either the effective height of the insertion is negative, or
% \cs{pagetotal} plus \cs{pagedepth} minus \cs{pageshrink}
% plus the effective size of the insertion should be less than
% \cs{pagegoal}.\end{itemize}
% If these conditions are satisfied, \cs{pagegoal} is diminished
% by the effective size of the insertion item, that is,
% by the height plus depth, multiplied by \cs{count}$n/1000$.
\begin{enumerate}
\item When the first insertion of a certain class $n$ occurs
on the current page \TeX\ has to account for the quantity
\cs{skip}$\,n$. This step is executed only if no earlier
insertion item of this class occurs on the vertical list
\ldash this includes insertions that were split \rdash but \cs{box}$\,n$
need not be empty at this time.
If \cs{box}$\,n$ is not empty, its height plus depth is multiplied
by \cs{count}$\,n/1000$ and the result is subtracted
from \cs{pagegoal}. Then the \cs{pagegoal} is diminished
by the natural component of \cs{skip}$\,n$. Any stretch and
shrink of \cs{skip}$\,n$ are incorporated in \cs{pagestretch}
and \cs{pageshrink} respectively.
\item If there is a split insertion of class $n$ on the page
\ldash this case and the previous step in the algorithm are
mutually exclusive \rdash the \csidx{floatingpenalty} is added to
\csidx{insertpenalties}. A~split insertion is an insertion item
for which a breakpoint has been calculated as it will not
fit on the current page in its entirety. Thus the insertion
currently under consideration will certainly not wind up
on the current page.
\item After the preliminary action of the two previous points
\TeX\ will place the actual insertion item on the main vertical
list, at the end of the current contributions.
First it will check whether the item will fit without being split.
There are two conditions to be checked:
\begin{itemize}\item
adding the insertion item (plus all previous insertions of that class)
to \cs{box}$\,n$ should not let
the height plus depth of that box exceed \cs{dimen}$\,n$, and
\item either the effective height of the insertion is negative, or
\cs{pagetotal} plus \cs{pagedepth} minus \cs{pageshrink}
plus the effective size of the insertion should be less than
\cs{pagegoal}.\end{itemize}
If these conditions are satisfied, \cs{pagegoal} is diminished
by the effective size of the insertion item, that is,
by the height plus depth, multiplied by \cs{count}$n/1000$.
%\item Insertions that fail on one of the two conditions in the
% previous step of the algorithm will be considered for splitting.
% \TeX\ will calculate the size of the maximal portion to
% be split off the insertion item, such that
%
%\begin{enumerate}\item adding this portion
% together with earlier insertions of this class to \cs{box}$\,n$
% will not let the size of the box exceed \cs{dimen}$\,n$,
% and \item the effective size of this portion,
% added to \cs{pagetotal} plus \cs{pagedepth}, will not
% exceed \cs{pagegoal}. Note that \cs{pageshrink} is not taken
% into account this time, as it was in the previous step.
% \end{enumerate}
%
% Once this maximal size to be split off has been determined,
% \TeX\ locates the least-cost breakpoint in the current
% insertion item that will result in a box with a height
% that is equal to this maximal size. The penalty associated
% with this breakpoint is added to \cs{insertpenalties},
% and \cs{pagegoal} is diminished by the effective height plus
% depth of the box to be split off the insertion item.
\item Insertions that fail on one of the two conditions in the
previous step of the algorithm will be considered for splitting.
\TeX\ will calculate the size of the maximal portion to
be split off the insertion item, such that
\begin{enumerate}\item adding this portion
together with earlier insertions of this class to \cs{box}$\,n$
will not let the size of the box exceed \cs{dimen}$\,n$,
and \item the effective size of this portion,
added to \cs{pagetotal} plus \cs{pagedepth}, will not
exceed \cs{pagegoal}. Note that \cs{pageshrink} is not taken
into account this time, as it was in the previous step.
\end{enumerate}
Once this maximal size to be split off has been determined,
\TeX\ locates the least-cost breakpoint in the current
insertion item that will result in a box with a height
that is equal to this maximal size. The penalty associated
with this breakpoint is added to \cs{insertpenalties},
and \cs{pagegoal} is diminished by the effective height plus
depth of the box to be split off the insertion item.
%\end{enumerate}
\end{enumerate}
%%\point Insertions in the output routine
%\section{Insertions in the output routine}
%\point Insertions in the output routine
\section{Insertions in the output routine}
%When the output routine comes into action \ldash more precisely:
%when \TeX\ starts processing the tokens in the \cs{output}
%token list \rdash all insertions that should be placed on the
%current page have been put in their boxes, and
%it is the responsibility of the output routine
%to put them somewhere in the box that is going to be shipped out.
When the output routine comes into action \ldash more precisely:
when \TeX\ starts processing the tokens in the \cs{output}
token list \rdash all insertions that should be placed on the
current page have been put in their boxes, and
it is the responsibility of the output routine
to put them somewhere in the box that is going to be shipped out.
%\begin{example} The plain \TeX\ output routine
%handles top inserts and footnotes by packaging the following
%sequence:
%\begin{verbatim}
%\ifvoid\topins \else \unvbox\topins \fi
%\pagebody
%\ifvoid\footins \else \unvbox\footins \fi
%\end{verbatim}
%Unboxing the insertion boxes makes the glue on various parts
%of the page stretch or shrink in a uniform manner.
%\end{example}
\begin{example} The plain \TeX\ output routine
handles top inserts and footnotes by packaging the following
sequence:
\begin{verbatim}
\ifvoid\topins \else \unvbox\topins \fi
\pagebody
\ifvoid\footins \else \unvbox\footins \fi
\end{verbatim}
Unboxing the insertion boxes makes the glue on various parts
of the page stretch or shrink in a uniform manner.
\end{example}
%With \TeX3 the insertion mechanism has been extended slightly:
%\handbreak \cstoidx holdinginserts\par
%\thecstoidxsub{TeX}{version 3}
%the parameter \cs{holdinginserts} can be used to specify that
%insertions should not yet be placed in their boxes.
%This is very useful if the output routine wants to
%recalculate the \cs{vsize}, or if the output routine
%is called to do other intermediate calculations instead of
%ejecting a page.
With \TeX3 the insertion mechanism has been extended slightly:
\handbreak \cstoidx holdinginserts\par
\thecstoidxsub{TeX}{version 3}
the parameter \cs{holdinginserts} can be used to specify that
insertions should not yet be placed in their boxes.
This is very useful if the output routine wants to
recalculate the \cs{vsize}, or if the output routine
is called to do other intermediate calculations instead of
ejecting a page.
%During the output routine the parameter
%\csidx{insertpenalties} holds the number of insertion items that
%are being held over for the next page.
%In the plain \TeX\ output routine this is used after the
%last page:
%\begin{verbatim}
%\def\dosupereject{\ifnum\insertpenalties>0
% % something is being held over
% \line{}\kern-\topskip\nobreak\vfill\supereject\fi}
%\end{verbatim}
During the output routine the parameter
\csidx{insertpenalties} holds the number of insertion items that
are being held over for the next page.
In the plain \TeX\ output routine this is used after the
last page:
\begin{verbatim}
\def\dosupereject{\ifnum\insertpenalties>0
% something is being held over
\line{}\kern-\topskip\nobreak\vfill\supereject\fi}
\end{verbatim}
%%\point Plain \TeX\ insertions
%\section{Plain \TeX\ insertions}
%\point Plain \TeX\ insertions
\section{Plain \TeX\ insertions}
%The plain \TeX\ format has only two insertion classes:
%the footnotes and the top inserts.
%The macro \csidx{pageinsert} generates
%top inserts that are stretched to be exactly \cs{vsize} high.
%The \csidx{midinsert} macro tests whether the vertical material
%specified by the user fits on the page; if so, it is placed
%there; if not, it is converted to a top insert.
The plain \TeX\ format has only two insertion classes:
the footnotes and the top inserts.
The macro \csidx{pageinsert} generates
top inserts that are stretched to be exactly \cs{vsize} high.
The \csidx{midinsert} macro tests whether the vertical material
specified by the user fits on the page; if so, it is placed
there; if not, it is converted to a top insert.
%Footnotes are allowed to be split, but once one has been
%split no further footnotes should appear on the current
%page. This effect is attained by setting
%\begin{verbatim}
%\floatingpenalty=20000
%\end{verbatim}
%The \cs{floatingpenalty} is added to \cs{insertpenalties}
%if an insertion follows a split insertion of the same
%class. However, \cs{floatingpenalty}${}>10\,000$ has infinite
%cost, so \TeX\ will take an earlier breakpoint for
%splitting off the page from the vertical list.
Footnotes are allowed to be split, but once one has been
split no further footnotes should appear on the current
page. This effect is attained by setting
\begin{verbatim}
\floatingpenalty=20000
\end{verbatim}
The \cs{floatingpenalty} is added to \cs{insertpenalties}
if an insertion follows a split insertion of the same
class. However, \cs{floatingpenalty}${}>10\,000$ has infinite
cost, so \TeX\ will take an earlier breakpoint for
splitting off the page from the vertical list.
%Top inserts essentially contain only a vertical box
%which holds whatever the user specified. Thus such an insert
%cannot be split. However, the \csidx{endinsert} macro
%puts a \cs{penalty100} on top of the box, so the
%insertion can be split with an empty part before the split.
%The effect is that the whole insertion is carried over to
%the next page. As the \cs{floatingpenalty} for top inserts
%is zero, arbitrarily many of these inserts can be moved forward
%until there is a page with sufficient space.
Top inserts essentially contain only a vertical box
which holds whatever the user specified. Thus such an insert
cannot be split. However, the \csidx{endinsert} macro
puts a \cs{penalty100} on top of the box, so the
insertion can be split with an empty part before the split.
The effect is that the whole insertion is carried over to
the next page. As the \cs{floatingpenalty} for top inserts
is zero, arbitrarily many of these inserts can be moved forward
until there is a page with sufficient space.
%Further examples of insertion macros can be found
%in~\cite{Sal3}.
Further examples of insertion macros can be found
in~\cite{Sal3}.
%%\message{Maybe spaceleft example?}
%\message{Maybe spaceleft example?}
%\endofchapter
%%%%% end of input file [page]
\endofchapter
%%%% end of input file [page]
\end{document}