[comp.text.tex] midinserts

neumann@FUNCTION.MPS.OHIO-STATE.EDU ("Walter D. Neumann") (03/19/91)

The following is my attempt to correct some problems Larry Siebenmann
and I have been having with the \midinsert and \topinsert macros of
plain.  Our use of these is to include figures into articles in a
Proceedings we are editing, as in:
 
\midinsert
\special{<appropriate command to load graphics file>}
\medskip\centerline{Figure 1.1}
\endinsert
 
Comments would be appreciated.                       -walter neumann
 
%% newinsert.tex  3/17/91
% walter neumann (neumann@mps.ohio-state.edu)
%
% Include with ``\input newinsert.tex'' to fix following
% problems with plain'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 (baseline of an imaginary line of text
%    above the top line of text on page) rather than top-of-ink.
% 2. Space around inserts is given by \bigskip, rather than being
%    independently setable.
% 3. Too much space between inserts that directly follow each other.
% 4. Inserts can get out of order (see Exercise 15.5 of TeXbook).
%
\chardef\OldCatAt\the\catcode `\@
\catcode `\@=11
%
%%%%%%%%%%%%%%%%%
% Corrected insert macros for plain.tex
%
% 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).
%
% The following is new
%
\newskip\insertskipamount\newskip\inserthardskipamount
\insertskipamount\medskipamount
\inserthardskipamount 6pt
\def\insertskip{\vskip\insertskipamount}
%
% From here on we modify definitions in plain.tex.
%
% Redefine \midinsert so it converts to \topinsert if any middle
% insertions have already been split, to prevent inserts getting
% out of order (cf. TeXbook Exercise 15.5).
% Was:    \def\midinsert{\@midtrue\@ins}
\def\midinsert{\ifnum\insertpenalties>0
 \topinsert\else\@midtrue\@ins\fi}
% Redefine \@ins to put in the \inserthardskipamount of glue
% 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.
% - Remove previous skip if less than skip to be inserted.
% - Add \nointerlineskip to avoid unwanted extra 1pt skip.
\def\endinsert{\egroup % finish the \vbox
  \if@mid \dimen@\ht\z@ \advance\dimen@\dp\z@
    \advance\dimen@\insertskipamount% was 12pt
    \advance\dimen@\pagetotal\advance\dimen@-\pageshrink
    \ifdim\dimen@>\pagegoal\@midfalse\p@gefalse\fi\fi
% The following ...
  \if@mid\ifdim\lastskip<\insertskipamount
         \removelastskip\insertskip\fi
    \nointerlineskip\box\z@\penalty-200\insertskip
% ... was:   \if@mid \bigskip\box\z@\bigbreak
  \else\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}\fi\endgroup}
%
% End of changes
%
\catcode `\@=\OldCatAt
\endinput
%%% end newinsert.tex
 
 
 
 
--
 Walter Neumann                     Email:       neumann@mps.ohio-state.edu
 Department of Mathematics                       neumann@ohstpy.bitnet
 Ohio State University              Fax: 614-292-3639 to Neumann, Math Dept
 Columbus, OH 43210          Tel: (614)-292-4886(office) 292-4975(messages)