diff options
Diffstat (limited to 'macros/plain/contrib/misc/newinsert.tex')
-rw-r--r-- | macros/plain/contrib/misc/newinsert.tex | 140 |
1 files changed, 140 insertions, 0 deletions
diff --git a/macros/plain/contrib/misc/newinsert.tex b/macros/plain/contrib/misc/newinsert.tex new file mode 100644 index 0000000000..bb37c41c76 --- /dev/null +++ b/macros/plain/contrib/misc/newinsert.tex @@ -0,0 +1,140 @@ + + +%%% ==================================================================== +%%% @TeX-file{ +%%% author = "Walter D. Neumann", +%%% version = "1.2", +%%% date = "22 July 1992", +%%% time = "15:57:20 EDT", +%%% filename = "newinsert.tex", +%%% address = "Department of Mathematics +%%% Ohio State University +%%% Columbus, OH 43201 +%%% USA", +%%% email = "neumann@mps.ohio-state.edu (Internet)", +%%% codetable = "ISO/ASCII", +%%% keywords = "plain TeX, AMS-TeX, inserts, figures", +%%% supported = "yes", +%%% abstract = "Bug fixes to plain TeX macros \midinsert and +%%% \topinsert", +%%% } +%%% ==================================================================== + +% Include with "\input newinsert.tex" to fix following problems +% with plain TeX's handling of \midinsert and \topinsert: +% +% 1. An insert that falls at the top of the page is too high: its +% top is at top-of-page rather than top-of-ink. +% 2. Plain uses \bigskip for space around inserts and assumes \bigskip +% is 12pt plus stretch, so \midinsert misbehaves if \bigskipamount +% is changed. This space should be an independent quantity. +% 3. Consecutive midinserts that did not float are spaced twice +% as far apart as consecutive topinserts or floated midinserts. +% 4. Midinserts can get out of order (see Exercise 15.5 of TeXbook). +% 5. A midinsert can incorrectly convert to a topinsert if TeX is +% reading ahead (see top of page 116 of TeXbook). +% 6. \removelastskip fails after a floated insert. This is relevant for +% an insertion before any construction (such as a proclamation in +% plain TeX) that does an explicit or implicit \removelastskip. +% 7. The routine to split an insertion in the program TeX fails if +% the insertion would fit on the current page after subtracting +% shrink. To avoid this, INSERTIONS SHOULD NOT CONTAIN SHRINK. +% +% Remaining problem: With the default values of 10pt and 12pt for +% \topskip and \baselineskip, TeX puts 2pt less space between a +% topinsert or floated midinsert and following text than between a +% middle insertion and following text. To avoid this without rewriting +% the plain output routine use: +% +% \topskip=\baselineskip +% +% PARAMETERS: +% Plain.tex puts \bigskipamount of space before and after inserts. As +% described above, this should be an independent parameter with no shrink. +% We provide \insertskipamount for this purpose (default 6pt plus 2pt; +% this makes \insertskip behave like an unshrinkable \medskip). +% In addition, \inserthardskipamount of glue is added at the top of EVERY +% insert; it remains even at top of page (default 6pt; it should be at +% least \topskipamount-(text height)). +% These defaults give good balance for figure insertions of the form: +% \midinsert +% [Commands to include a graphics file] +% \insertskip \centerline{Figure Title} +% \endinsert. +% Note use of \insertskip instead of \medskip to avoid shrink. +% +\chardef\newinsCatAt\the\catcode `\@ +\catcode `\@=11 +% +%%%%%%%%%%%% Corrected insert macros for plain.tex %%%%%%%%%%%%%%%%% +% +% New skipamounts: +% +\newskip\insertskipamount\newskip\inserthardskipamount +\insertskipamount 6pt plus2pt % Redefine as desired, but with no +\inserthardskipamount 6pt % shrink (see above). +\def\insertskip{\vskip\insertskipamount} +% +% Save and restore \lastskip: +% +\newskip\LastSkip +\def\SaveLastSkip{\LastSkip\lastskip} +\def\RestoreLastSkip{\nobreak\vskip-\LastSkip\vskip\LastSkip} +% +% Larry Siebenmann's test for split topinserts: +% +\newcount\SplitTest% will be set to -1 if a topinsert has split +\def\SetSplitTest{\SplitTest\insertpenalties + \insert\topins{\floatingpenalty1}% + \advance\SplitTest-\insertpenalties} +% +% From here on we modify definitions in plain.tex. +% +% Redefine \midinsert to convert to \topinsert if a topinsert has been +% split, to prevent midinserts getting out of order (cf. TeXbook Exercise +% 15.5). As in plain.tex, a \midinsert still converts to a \topinsert +% (which then splits) if the insert is too big for current page. +% Was: \def\midinsert{\@midtrue\@ins} +\def\midinsert{\par + \SaveLastSkip\penalty-150\SetSplitTest\RestoreLastSkip + \ifnum\SplitTest=-1 + \@midfalse\else\@midtrue\fi\@ins} +% Redefine \@ins to add \inserthardskipamount of glue above. +% Was: \def\@ins{\par\begingroup\setbox\z@\vbox\bgroup} +\def\@ins{\par\begingroup\setbox\z@\vbox\bgroup% + \vglue\inserthardskipamount} +% Changes to \endinsert of plain.tex 3.0: +% - Use \insertskipamount instead of \bigskipamount throughout. +% - Use larger of previous skip and insertskip before middle insert. +% - Add \nointerlineskip to avoid unwanted extra 1pt skip. +% - Save and restore lastskip when an insert floats. +\def\endinsert{\egroup % finish the \vbox + \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@ + \advance\dimen@\insertskipamount% was 12pt (wn) + \advance\dimen@\pagetotal\advance\dimen@-\pageshrink + \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi +% Next 3 lines replace: \if@mid \bigskip\box\z@\bigbreak (wn) + \if@mid% + \ifdim\lastskip<\insertskipamount\removelastskip\insertskip\fi + \nointerlineskip\box\z@\penalty-200\insertskip + \else% + \SaveLastSkip% added (wn) + \insert\topins{\penalty100 % floating insertion + \splittopskip\z@skip + \splitmaxdepth\maxdimen \floatingpenalty\z@ + \ifp@ge \dimen@\dp\z@ + \vbox to\vsize{\unvbox\z@\kern-\dimen@}% depth is zero + \else \box\z@\nobreak\insertskip\fi}% was \bigskip\fi (wn) + \RestoreLastSkip% added (wn) + \fi\endgroup} +%%%%%%%%%%%%%%%%%% Done correcting insert macros %%%%%%%%%%%%%%%%%%% +% +\catcode `\@=\newinsCatAt +\endinput +%% end newinsert.tex +%% Revision history: +%% Version 1.2, 21 July 1992: midinserts still occasionally converted +%% wrongly to topinsert if Tex is scanning ahead. Added \penalty-150 +%% to fix this. +% Changed \medskipamount to 6pt plus2pt to avoid shrink in inserts. +%% Version 1.1, 02 April 1990: used L.Siebenmann's split test |