bed_gdg@SHSU.BITNET ("George D. Greenwade") (04/27/91)
This is being forwarded to INFO-TeX on behalf of Walter Neumann <neumann@mps.ohio-state.edu>. The mailer which drives INFO-TeX and the mailer from which Walter submitted this (unfortunately) just don't want to discuss things. I thank him for his patience and perseverence on getting this to me so I can get it to you. His post follows. --GDG -=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- This is an update to the corrections I posted a while ago to TeX's default insert macros (\midinsert, \topinsert). I am editing a topology proceedings with lots of included figures and have found the default macros seriously deficient. The changes to the previous posting are an improved test (suggested by L. Siebenmann) for a split insertion on the current page, and protection of \lastskip (item 5 below). The macros are also useful with AMSTeX. I do not know if similar problems exist in Latex. Latex has its own fairly sophisticated insert macros. Comments appreciated. -walter neumann %% newinsert.tex (4/2/91) by walter neumann (neumann@mps.ohio-state.edu) % % 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: it's % 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. \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. % % Remaining problem: TeX uses \topskip instead of \baselineskip for the % first line of a page after any topinserts. With the default values % of 10pt and 12pt respectively, this gives 2pt less space between a % topinsert or floated midinsert and following text than between a % middle insertion and following text. To avoid this use: % % \topskip=\baselineskip % % PARAMETERS: % Plain.tex puts \bigskipamount of space before and after inserts. % We provide \insertskipamount for this purpose (default \medskipamount). % 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 insertions of the form: % \midinsert % [Text or commands to include a graphics file] % \medskip \centerline{Figure Title or Table Title} % \endinsert. % \chardef\OldCatAt\the\catcode `\@ \catcode `\@=11 % %%%%%%%%%%%% Corrected insert macros for plain.tex %%%%%%%%%%%%%%%%% % % New skipamounts: % \newskip\insertskipamount\newskip\inserthardskipamount \insertskipamount\medskipamount % Change as desired. \inserthardskipamount 6pt % Change as desired (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 \SaveLastSkip\insert\topins{\floatingpenalty1}\RestoreLastSkip \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\SetSplitTest\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 `\@=\OldCatAt \endinput %% end newinsert.tex -- Walter Neumann Email: neumann@mps.ohio-state.edu Department of Mathematics neumann@ohstpy.bitnet Ohio State University Tel: 614-292-4886 (office) Columbus, OH 43210 -292-4975(Math. Dept.) -292-1479 (Dept. Fax)