diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /usergrps/uktug/baskervi/5_5/hhflxbox.sty |
Initial commit
Diffstat (limited to 'usergrps/uktug/baskervi/5_5/hhflxbox.sty')
-rw-r--r-- | usergrps/uktug/baskervi/5_5/hhflxbox.sty | 519 |
1 files changed, 519 insertions, 0 deletions
diff --git a/usergrps/uktug/baskervi/5_5/hhflxbox.sty b/usergrps/uktug/baskervi/5_5/hhflxbox.sty new file mode 100644 index 0000000000..39ba9b077e --- /dev/null +++ b/usergrps/uktug/baskervi/5_5/hhflxbox.sty @@ -0,0 +1,519 @@ +% FLEXIBOX MACROS for LaTeX2e version 2.11, +% written by Herman Haverkort, 18 april 1995 +% See end of file for information on warranty, distribution etc. + +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{hhflxbox}[1995/04/18 Scalable frames] +\RequirePackage{hhunits}[1995/02/16] +\RequirePackage{hhutils0}[1995/03/08] + +% WARNING for those who had a hhflxbox 1.00 or 1.01: The parameter WIDTH +% for \iframe should be specified in thousands from version 1.02 on. + +% ****************************** +% º HORIZONTAL CENTERING º +% ****************************** + +\def\clap#1{\hbox to \z@{\hss #1\hss}} + +% ****************************** +% º IN-LINE VERTICAL CENTERING º +% ****************************** + +\def\lcenter#1{$\vcenter{\hbox{#1}}$} + +% ****************************** +% º ISOMORPHOUS FRAMES º +% ****************************** +% +% \iframe sets isomorphous frames. Isomorphous frames are stretchable +% neither horizontally nor vertically; they are only scalable by the +% same factor in all directions. +% +% The syntax of \iframe is the following: +% \iframe IFRAME (HPOS, VPOS) WIDTH MINHEIGHT HSTRETCH VSTRETCH +% UNITHEIGHT:CONTENTS +% +% * IFRAME should be a macro that draws the frame in a picture environment, +% assuming that the unitlength has been set equal to the height of the +% area which is to contain the frame's contents. +% +% * HPOS and VPOS determine the position of the frame's contents within +% the frame; they are given by the distance between the frame's lower +% left corner and the lower left corner of the contents area. +% HPOS and VPOS should be in units, assuming that the unitlength is +% the height of the contents area. +% +% * WIDTH is 1000 times the width/height ratio of the frame's contents area. +% +% * MINHEIGHT is the minimum height of the contents. +% +% * HSTRETCH should be a macro that takes two arguments: a dimension +% HSIZE and a box number BOX. HSTRETCH reads the box and enlarges +% it to have width HSIZE. The following HSTRETCH macros are defined: +% - \ifrl (sets the box flushed left) +% - \ifrr (sets the box flushed right) +% - \ifrch (sets the box centered) +% VSTRETCH does the similar thing for the vertical dimension: +% - \ifrt (sets the box flushed up by increasing its depth) +% - \ifrb (sets the box flushed down by increasing its height) +% - \ifrcv (sets the box `centerd' by increasing depth and height by +% the same amount) +% +% * UNITHEIGHT (optional) is an identifier (just some string of alphabetic +% characters) which identifies the so-called unit height. Every time +% a frame is set, the smaller of the contents height and the unit height +% is set to the larger one. After compiling the entire file, the unit +% height will have been increased to fit the largest contents which have +% been framed with it. The unit height is then saved, and reloaded the +% next time the file is compiled. All frames using that unit height +% will be set to the same size then, which is determined by the largest +% box which should fit in it. +% +% * CONTENTS is what is to be framed. + +\def\ifrl#1#2{\hbox to #1{\box#2\hss}} +\def\ifrr#1#2{\hbox to #1{\hss\box#2}} +\def\ifrch#1#2{\hbox to #1{\hss\box#2\hss}} +\def\ifrb#1#2{\hbox{{% + \@tempdima #1\advance\@tempdima-\dp#2\ht#2\@tempdima \box#2}}} +\def\ifrt#1#2{\hbox{{% + \@tempdima #1\advance\@tempdima-\ht#2\dp#2\@tempdima \box#2}}} +\def\ifrcv#1#2{\hbox{{% + \@tempdima #1\relax + \@tempdimb #1\relax + \advance\@tempdima \ht#2% + \advance\@tempdima-\dp#2% + \ht#2.5 \@tempdima + \advance\@tempdimb-\ht#2% + \dp#2\@tempdimb + \box#2}}} + +\def\iframe#1(#2,#3)#4#5#6#7#8:#9{{% + % + % box what is to be framed: + \sbox\@tempboxa{#9}% + % + % determine the total height of the box + \@tempdima\ht\@tempboxa \advance\@tempdima\dp\@tempboxa + % + % if it is less than the minimum height, stretch the box vertically + \ifdim\@tempdima<#5\setbox\@tempboxa #7{#5}{\@tempboxa}\@tempdima #5\fi + % + % calculate the natural height of the box, given its width + \setlength\@tempdimb{\wd\@tempboxa}% + \divide\@tempdimb#4% + \setlength\@tempdimb{1000\@tempdimb}% + % + \ifdim\@tempdimb>\@tempdima + % if the box is lower than its natural height then stretch it vertically + \setbox\@tempboxa #7{\@tempdimb}{\@tempboxa}\@tempdima\@tempdimb + \else + % if the box is higher than its natural height then stretch it horizontally + \setlength\@tempdimb{.001\@tempdima}% + \setbox\@tempboxa #6{#4\@tempdimb}{\@tempboxa}% + \fi + % + % determine if a unit name is specified + \def\@tempa{#8}\ifx\@tempa\@empty\else + % if so, get the right height for the box and stretch it to the extent + % that is necessary + \@tempdimb\unit #8:{\@tempdima}\@tempdima\@tempdimb% + \setbox\@tempboxa #7{\@tempdima}{\@tempboxa}% + \setlength\@tempdimb{.001\@tempdima}% + \setbox\@tempboxa #6{#4\@tempdimb}{\@tempboxa}% + \fi + % + % calculate the unit length for the frame drawing + \divide\@tempdima 1000 + % + % calculate the depth of the framed box, taking in account the + % width of the lower frame part and the depth of the framed box + \@tempdimb #3\@tempdima \advance\@tempdimb\dp\@tempboxa + % + % and finally put it all together + \hbox{\lower\@tempdimb\hbox{% + \unitlength\@tempdima + \begin{picture}(0,0)% + \put(#2,#3){\hbox{\raise\dp\@tempboxa\box\@tempboxa}}% + \end{picture}% + #1}}}} + +% ****************************** +% º ENCIRCLING º +% ****************************** +% +% The first encircling macro has the following syntax: +% \ringbox UNITHEIGHT:CONTENTS +% where the parameters are as described above. + +\def\ringbox{\iframe\@ringbox(200,200){1000}{0pt}\ifrch\ifrcv} +\def\@ringbox{% + \begin{picture}(1400,1400)\put(700,700){\circle{1400}}\end{picture}} + +% The second encircling macro is very much alike the first one. It also +% puts the CONTENTS in a square, which is surrounded by a circle. The +% circle, however, does not contribute anything to the size of the +% resulting box. The result of \outringbox is a box with the dimensions +% of the squared contents, causing the circle to stick out. + +\def\outringbox{\iframe\@outringbox(0,0){1000}{0pt}\ifrch\ifrcv} +\def\@outringbox{% + \begin{picture}(1000,1000)\put(500,500){\circle{1400}}\end{picture}} + +% Finally, \bellybox sticks out by 5% of its diameter on every side +\def\bellybox{\iframe\@bellybox(130,130){1000}{0pt}\ifrch\ifrcv} +\def\@bellybox{% + \begin{picture}(1260,1260)\put(630,630){\circle{1400}}\end{picture}} + +% ****************************** +% º STRETCHABLE FRAMES º +% ****************************** +% +% Stretchable frames consist of four parts: two side parts (left and right) +% and two ledger parts (top and bottom). +% The side and ledger parts are macros which take (unfortunately) a lot +% of arguments: eight to be exact. The first is the box in which the side or +% ledger part is to be set. The second is the basic width of the box to +% be framed. Imagine this is the top border of the box to be framed: +% ------*-------------------------*---. +% #3 #4 +% The asterisks specify the part of the border that has to be spanned by +% the top ledger of the frame. The total length of this border should be +% given by the second argument of the macro. The third and the fourth +% argument should specify the distances between the ends and the +% fastening points (indicated by the asterisks). Of course these distances +% are usually zero. After the ledger has been fastened the fastening +% points should be moved, because the fastening points are considered +% to be the corners of the framed box and could be needed to position +% the side parts of the frame. Imagine a strange ledger like this one: +% +% *################ +% #################################* +% ########################### +% ------o-------------------------o--- +% The asterisks indicate the new fastening points. The position of the left +% fastening point should be stored in the dimensions identified by argument +% five and seven. The fifth argument should be set to the horizontal distance +% from the left end of the framed box border to the new left fastening point. +% The seventh argument should be set to the vertical distance between the +% framed box border and the fastening point. This distance should be +% negative if the new fastening point is outside the box, which it usually +% is. Similarly, the position of the right fastening point should be +% stored in the sixth and eighth argument. Note that if a new fastening +% point is positioned to the left or right of the framed box, its +% horizontal coordinate should be set negative. For example: in the +% above figure the right fastening point sticks out horizontally, so +% the sixth argument should be set to a negative value. +% +% For left part macros, swap left en top, and swap right and bottom in +% the above explanation. For bottom part macros, mirror the above story +% in the horizontal axis. For right part macros, mirror the left part +% explanation in the vertical axis. +% +% The basic syntax of a stretchable frame call is: +% \sframe LEFTSIDE TOPLEDGER RIGHTSIDE BOTTOMLEDGER -HORIZALIGN |VERTALIGN +% CONTENTS +% LEFTSIDE to BOTTOMLEDGER are as explained above. +% -HORIZALIGN and |VERTALIGN are optional. If specified the aligns have +% the following syntax: +% [MINDIM] STRETCH UNITDIM: +% where [MINDIM] and UNITDIM are optional (however, it does not make sense +% to omit both of them). The effect of specifying aligns is similar to +% the effect of specifying minimal heights, stretches and unit heights for +% an \iframe. The difference is that \iframe aligns work in horizontal and +% vertical direction simultaneously, while \sframe offers independent +% handling of the horizontal and vertical directions. +% +% \sfrsrule is a predefined macro which can be used as a left or right +% side. It draws a vertical rule with thickness \fboxrule. +% \sfrlrule does the similar thing horizontally and can be used as a +% top or bottom ledger. Note however that +% \sframe\sfrsrule\sfrlrule\sfrsrule\sfrlrule{stuff} +% does _not_ draw a proper box around stuff. There will be no corners! +% The solution is to divide the frame constructing process in phases. +% The first phase is drawing the side parts. The second phase is +% drawing the ledger parts, taking in account the width contributed +% by the already drawn side parts. Up to four phases can be used. +% The phases can be specified simply by typing the phase number +% between brackets just before each part, for example: +% \sframe [1]\sfrsrule [2]\sfrlrule [1]\sfrsrule [2]\sfrlrule {stuff} +% Each part for which no phase is specified will be drawn in phase four. +% +% To specify an empty side or ledger, specify any macro with a invalid +% phase number, e.g.: "[0]\open". +% +% There is a environment variant of \sframe: use +% \begin{sframed}... STUFF\end{sframed} instead of \sframe...{STUFF}. +% ============================================================================= + +\newenvironment{sframed}% + {\begingroup\@h@sfrenvironmenttrue\h@Zsframe}% + {\h@Ksframe} +\def\sframe{\begingroup\@h@sfrenvironmentfalse\h@Zsframe} +\def\h@Zsframe{\@ifnextchar[{\h@Asframe}{\h@Asframe[4]}} +\def\h@Asframe[#1]#2{\def\h@sfrlphase{#1}\def\h@sfrlside{#2}% + \@ifnextchar[{\h@Bsframe}{\h@Bsframe[4]}} +\def\h@Bsframe[#1]#2{\def\h@sfrtphase{#1}\def\h@sfrtledger{#2}% + \@ifnextchar[{\h@Csframe}{\h@Csframe[4]}} +\def\h@Csframe[#1]#2{\def\h@sfrrphase{#1}\def\h@sfrrside{#2}% + \@ifnextchar[{\h@Dsframe}{\h@Dsframe[4]}} +\def\h@Dsframe[#1]#2{\def\h@sfrbphase{#1}\def\h@sfrbledger{#2}% + \@ifnextchar-{\h@Esframe}{\h@Esframe-\ifrch:}} +\def\h@Esframe-{\@ifnextchar[{\h@Fsframe}{\h@Fsframe[\z@]}} +\def\h@Fsframe[#1]#2#3:{% + \def\h@sfrhmin{#1}\def\h@sfrhstretch{#2}\def\h@sfrhunit{#3}% + \@ifnextchar|{\h@Gsframe}{\h@Gsframe|\ifrcv:}} +\def\h@Gsframe|{\@ifnextchar[{\h@Hsframe}{\h@Hsframe[\z@]}} +\def\h@Hsframe[#1]#2#3:{% + \def\h@sfrvmin{#1}\def\h@sfrvstretch{#2}\def\h@sfrvunit{#3}% + \if@h@sfrenvironment\def\next{\h@Jsframe\ignorespaces}% + \else\def\next{\h@Isframe}\fi\next} +\def\h@Isframe#1{\h@Jsframe #1\h@Ksframe} +\def\h@Jsframe{\mufoff\sbox\@tempboxa\bgroup} +\def\h@Ksframe{\egroup + \@tempdima\ht\@tempboxa \addtolength\@tempdima{\dp\@tempboxa}% + \ifdim\@tempdima<\h@sfrvmin + \setbox\@tempboxa\h@sfrvstretch{\h@sfrvmin}{\@tempboxa}\@tempdima\h@sfrvmin\fi + \ifx\h@sfrvunit\@empty\else + \@tempdimb\unit\h@sfrvunit:{\@tempdima}\@tempdima\@tempdimb + \setbox\@tempboxa\h@sfrvstretch{\@tempdima}{\@tempboxa}\fi + \ifdim\wd\@tempboxa<\h@sfrhmin + \setbox\@tempboxa\h@sfrhstretch{\h@sfrhmin}{\@tempboxa}\fi + \ifx\h@sfrhunit\@empty\else + \@tempdimb\unit\h@sfrhunit:{\wd\@tempboxa}% + \setbox\@tempboxa\h@sfrhstretch{\@tempdimb}{\@tempboxa}\fi + \setlength\@tempdimq{\dp\@tempboxa}% + \sbox\@tempboxa{\raise\@tempdimq\box\@tempboxa}% + \setlength\@tempdima\z@\setlength\@tempdimb\z@% + \setlength\@tempdimc\z@\setlength\@tempdimd\z@% + \setlength\@tempdime\z@\setlength\@tempdimf\z@% + \setlength\@tempdimg\z@\setlength\@tempdimh\z@% + \def\h@sfrphase{1}\h@sfrdophase + \def\h@sfrphase{2}\h@sfrdophase + \def\h@sfrphase{3}\h@sfrdophase + \def\h@sfrphase{4}\h@sfrdophase + \hbox{\lower\@tempdimq\box\@tempboxa}% + \muffin + \endgroup} +\newif\if@h@sfrenvironment\@h@sfrenvironmentfalse +\def\h@sfrdophase{% + \setlength\@tempdimi\@tempdima\setlength\@tempdimj\@tempdimb + \setlength\@tempdimk\@tempdimc\setlength\@tempdiml\@tempdimd + \setlength\@tempdimm\@tempdime\setlength\@tempdimn\@tempdimf + \setlength\@tempdimo\@tempdimg\setlength\@tempdimp\@tempdimh + \ifx\h@sfrphase\h@sfrlphase\h@sfrlside\@tempboxb{\ht\@tempboxa}\@tempdima\@tempdimb + \@tempdimi\@tempdimj\@tempdimm\@tempdimo\else\sbox\@tempboxb{}\fi + \ifx\h@sfrphase\h@sfrtphase\h@sfrtledger\@tempboxc{\wd\@tempboxa}\@tempdime\@tempdimf + \@tempdimm\@tempdimn\@tempdimi\@tempdimk\else\sbox\@tempboxc{}\fi + \ifx\h@sfrphase\h@sfrrphase\h@sfrrside\@tempboxd{\ht\@tempboxa}\@tempdimc\@tempdimd + \@tempdimk\@tempdiml\@tempdimn\@tempdimp\else\sbox\@tempboxd{}\fi + \ifx\h@sfrphase\h@sfrbphase\h@sfrbledger\@tempboxe{\wd\@tempboxa}\@tempdimg\@tempdimh + \@tempdimo\@tempdimp\@tempdimj\@tempdiml\else\sbox\@tempboxe{}\fi + \addtolength\@tempdimi{\ht\@tempboxc}\addtolength\@tempdimk{\ht\@tempboxc}% + \addtolength\@tempdimj{\ht\@tempboxe}\addtolength\@tempdiml{\ht\@tempboxe}% + \addtolength\@tempdimm{\wd\@tempboxb}\addtolength\@tempdimo{\wd\@tempboxb}% + \addtolength\@tempdimn{\wd\@tempboxd}\addtolength\@tempdimp{\wd\@tempboxd}% + \addtolength\@tempdimq{\ht\@tempboxe}% + \setbox\@tempboxa\vbox{\offinterlineskip + \hbox{\kern\wd\@tempboxb\kern\@tempdime\rlap{\box\@tempboxc}}% + \hbox{\raise\@tempdimb\copy\@tempboxb\box\@tempboxa\raise\@tempdimd\box\@tempboxd}% + \hbox{\kern\wd\@tempboxb\kern\@tempdimg\rlap{\box\@tempboxe}}}% + \setlength\@tempdima\@tempdimi\setlength\@tempdimb\@tempdimj + \setlength\@tempdimc\@tempdimk\setlength\@tempdimd\@tempdiml + \setlength\@tempdime\@tempdimm\setlength\@tempdimf\@tempdimn + \setlength\@tempdimg\@tempdimo\setlength\@tempdimh\@tempdimp} + +\def\sfrsrule{\sfrrule{height\@tempdimq width\fboxrule}} +\def\sfrlrule{\sfrrule{height\fboxrule width\@tempdimq}} +\def\sfrrule#1#2#3#4#5#6#7#8#9{% + \sbox#2{\sfrcalclength{#3}{#4}{#5}\vrule #1}% + \sfrsetoffsets{\fboxrule}{#4}{#5}#6#7#8#9} + +\def\sfrcalclength#1#2#3{% + \setlength\@tempdimq{#1}% + \addtolength\@tempdimq{-#2}\addtolength\@tempdimq{-#3}} +\def\sfrsetoffsets#1#2#3#4#5#6#7{% + \setlength#4#2\setlength#5#3% + \setlength#6{-#1}\setlength#7{-#1}} + +% ****************************** +% º UTILITY FRAMES º +% ****************************** +% +% Separation frames consist of blank space around a box, which forces +% surrounding self-scaling boxes to stretch and leave some space between +% the surrounding frame and its contents. +% +% The generic seperation frame macro takes four parameters: +% \sepbox(LEFTMARGIN, UPPERMARGIN, RIGHTMARGIN, LOWERMARGIN) +% A abbreviation for \mframe(MARGIN,MARGIN,MARGIN,MARGIN) is available too: +% \separbox MARGIN +% +% Instead of \sepbox and \separbox one can use the environment variants +% started by \begin{sepboxed} and \begin{separboxed} and ended by +% \end{sepboxed} and \end{separboxed}. + +\newenvironment{sepboxed}% + {\begingroup\@h@sbxenvironmenttrue\h@Asepbox}% + {\h@Dsepbox} +\def\sepbox{\begingroup\@h@sbxenvironmentfalse\h@Asepbox} +\def\h@Asepbox(#1,#2,#3,#4){% + \def\h@sbxlsep{#1}\def\h@sbxtsep{#2}\def\h@sbxrsep{#3}\def\h@sbxbsep{#4}% + \if@h@sbxenvironment\def\next{\h@Csepbox\ignorespaces}% + \else\def\next{\h@Bsepbox}\fi\next} +\long\def\h@Bsepbox#1{\h@Csepbox #1\h@Dsepbox} +\def\h@Csepbox{\sbox\@tempboxa\bgroup\mufoff{\kern\h@sbxlsep}} +\def\h@Dsepbox{{\kern\h@sbxrsep}\egroup + \setlength\@tempdima{\ht\@tempboxa}\addtolength\@tempdima{\h@sbxtsep}% + \ht\@tempboxa\@tempdima + \setlength\@tempdima{\dp\@tempboxa}\addtolength\@tempdima{\h@sbxbsep}% + \dp\@tempboxa\@tempdima + \box\@tempboxa\muffin\endgroup} +\newif\if@h@sbxenvironment\@h@sbxenvironmentfalse + +\newenvironment{separboxed}[1]% + {\begin{sepboxed}(#1,#1,#1,#1)}% + {\end{sepboxed}} +\def\separbox#1{\sepbox(#1,#1,#1,#1)} + +% \broadbox{DIMENSION}{CONTENTS} sets CONTENTS in a parbox which has width +% current linewidth minus DIMENSION. Instead of \broadbox{DIMENSION}{CONTENTS} +% one can also use \begin{broadboxed}{DIMENSION}CONTENTS\end{broadboxed}. + +\long\def\broadbox#1#2{\vtop{\h@leavespace{#1}\mufoff #2}\muffin} +\newenvironment{broadboxed}[1]% + {\vtop\bgroup\h@leavespace{#1}\mufoff\ignorespaces}% + {\egroup\muffin} + +% Putting \boxhigh in front of something that is boxed (that is: _in_ the +% box!) suppresses leading vertical blank space. \boxlow does the similar +% thing at the end of the box: put it at the end of the boxed material. + +\newif\if@boxhigh +\def\boxhigh{% + \ifx\h@boxhigh@addvspace\undefined + \let\addpenalty\@gobble + \let\h@boxhigh@addvspace=\addvspace + \def\addvspace{\if@boxhigh + \ifdim\prevdepth>-4774pt\relax + \@boxhighfalse\def\next{\h@boxhigh@addvspace}% + \else\def\next{\@gobble}\fi + \else\def\next{\h@boxhigh@addvspace}\fi\next}\fi + \setlength\prevdepth{-4774pt}\@boxhightrue} + +\def\boxlow{\unskip} + +% ****************************** +% º SOME INTERNAL UTILITIES º +% ****************************** + +\h@newdimen\@tempdima\h@newdimen\@tempdimb\h@newdimen\@tempdimc +\h@newdimen\@tempdimd\h@newdimen\@tempdime\h@newdimen\@tempdimf +\h@newdimen\@tempdimg\h@newdimen\@tempdimh\h@newdimen\@tempdimi +\h@newdimen\@tempdimj\h@newdimen\@tempdimk\h@newdimen\@tempdiml +\h@newdimen\@tempdimm\h@newdimen\@tempdimn\h@newdimen\@tempdimo +\h@newdimen\@tempdimp\h@newdimen\@tempdimq +\h@newbox\@tempboxb\h@newbox\@tempboxc\h@newbox\@tempboxd\h@newbox\@tempboxe + +\def\h@leavespace#1{% + \hsize\linewidth\advance\hsize-#1\linewidth\hsize + \parshape\@ne\@totalleftmargin\linewidth} + +\newif\if@squeezing +\newcount\h@tsqo@level +\def\topsqueezeout{% + \ifx\h@tsqo@addvspace\undefined + \let\h@tsqo@addvspace=\addvspace + \def\addvspace{\if@squeezing + \ifdim\prevdepth>-4774pt\relax + \@squeezingfalse\def\next{\h@tsqo@addvspace}% + \else\def\next{\h@tsqo@savesqueeze\h@tsqo@addvspace}\fi + \else\def\next{\h@tsqo@addvspace}\fi\next}% + \let\h@tsqo@addpenalty=\addpenalty + \def\addpenalty{\if@squeezing + \ifdim\prevdepth>-4774pt\relax + \@squeezingfalse\def\next{\h@tsqo@addpenalty}% + \else\def\next{\h@tsqo@savesqueeze\h@tsqo@addpenalty}\fi + \else\def\next{\h@tsqo@addpenalty}\fi\next}% + \fi + \def\topsqueezein{% + \global\advance\h@tsqo@level-1\relax + \global\setbox\h@tsqo@currentsqueeze\vbox{% + \unvbox\h@tsqo@currentsqueeze + \advance\h@tsqo@level 1\relax + \unvbox\h@tsqo@currentsqueeze}}% + \global\advance\h@tsqo@level 1\relax + \expandafter\expandafter\expandafter\h@newbox\h@tsqo@currentsqueeze + \global\setbox\h@tsqo@currentsqueeze\vbox{}% + \setlength\prevdepth{-4774pt}\@squeezingtrue} +\def\topsqueezein{\unvbox\h@tsqo@currentsqueeze + \global\advance\h@tsqo@level-1\relax} +\def\h@tsqo@currentsqueeze{\csname h@tsqo@squeeze\number\h@tsqo@level\endcsname} +\def\h@tsqo@savesqueeze#1#2{\global\setbox\h@tsqo@currentsqueeze\vbox{% + \unvbox\h@tsqo@currentsqueeze #1{#2}}} + +\newcount\h@bsqo@level +\newcount\h@bsqo@zeros +\newif\if@bsqo@zero +\def\botsqueezeout{\par + \global\advance\h@bsqo@level 1\relax + \expandafter\expandafter\expandafter\h@newbox\h@bsqo@currentsqueeze + \global\setbox\h@bsqo@currentsqueeze\vbox{}% + \h@bsqo@zeros=0\relax + \@whilenum\h@bsqo@zeros<3\do{% + \@bsqo@zerotrue + \ifdim\lastskip=\z@\relax\unskip\else + \setlength\@tempskipa\lastskip + \h@bsqo@savesqueeze\addvspace\@tempskipa + \unskip\@bsqo@zerofalse\fi + \ifnum\lastpenalty=\z@\relax\unpenalty\else + \@tempcnta=\lastpenalty + \h@bsqo@savesqueeze\addpenalty\@tempcnta + \unpenalty\@bsqo@zerofalse\fi + \if@bsqo@zero\advance\h@bsqo@zeros 1\else\h@bsqo@zeros=0\fi}} +\def\botsqueezein{\unvbox\h@bsqo@currentsqueeze + \global\advance\h@bsqo@level-1\relax} +\def\h@bsqo@currentsqueeze{\csname h@bsqo@squeeze\number\h@bsqo@level\endcsname} +\def\h@bsqo@savesqueeze#1#2{\global\setbox\h@bsqo@currentsqueeze\vbox{% + #1{#2}\unvbox\h@bsqo@currentsqueeze}} + +\providecommand\mufoff{} +\providecommand\muffin{} + +\endinput% ********************** +% * WARRANTY, DISTRIBUTION ETC. * +% ******************************* +% +% This is a TeX style file by Herman Haverkort. This file is distributed +% in the hope that it will be useful, but without any warranty; without +% even the implied warranty of merchantability or fitness for a particular +% purpose. The author does not accept any responsability for any damage, +% loss, injury, psychosis, annoyance, marital problems, murders etc. which +% are caused by this file. +% +% This style file has not been tested systematically, so there are +% probably undiscoverd errors in it. If you find one, if you have +% trouble using this file, if you have a suggestion for an extension or +% another modification, or if you are just a happy user, please report +% it to: +% Herman Haverkort +% Heyenoordseweg 40 +% NL-6813 GA Arnhem +% herman@fgbbs.iaf.nl +% +% You are allowed to change this file, but you are not allowed to distribute +% the changed version unless you obey the following: +% - give the changed file another name than the original one; +% - record clearly in the changed file: +% - the original name of the file; +% - its original author; +% - that it is a changed version; +% - do not remove the restrictions on distributing the file. +% +% You are not allowed to take money for the distribution or use of either +% this file or a changed version, except for a nominal charge for copying +% etc. +% +% Have fun! + |