diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex3/xor/xo-or.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex3/xor/xo-or.sty | 1251 |
1 files changed, 1251 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex3/xor/xo-or.sty b/Master/texmf-dist/tex/latex3/xor/xo-or.sty new file mode 100644 index 00000000000..418b9fbe118 --- /dev/null +++ b/Master/texmf-dist/tex/latex3/xor/xo-or.sty @@ -0,0 +1,1251 @@ +%% +%% This is file `xo-or.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% xo-or.dtx (with options: `package,progress') +%% +%% Not for distribution +%% +%% (C) Copyright 1999-2000 Frank Mittelbach, David Carlisle, Chris Rowley +%% All rights reserved. +%% +%% Not for general distribution. In its present form it is not allowed +%% to put this package onto CD or an archive without consulting the +%% the authors. +%% +%% (C) Copyright 1999-2000 Frank Mittelbach, David Carlisle, Chris Rowley +%% All rights reserved. +%% +%% Not for general distribution. In its present form it is not allowed +%% to put this package onto CD or an archive without consulting the +%% the authors. +%% + +\def\@tempa#1: #2.dtx,v #3 #4 #5 #6 #7${ + \ProvidesPackage{#2}[#4 #3 #5 #6]} +\@tempa$Id: xo-or.dtx,v 1.53 2000/08/11 07:14:25 latex3 Exp $ +\IgnoreWhiteSpace +\long\def\@gobblethree#1#2#3{} +\def\xin@#1#2{% + \expandafter\def\expandafter\in@@\expandafter##\expandafter1#1##2##3\in@@{% + \ifx\in@##2\in@false\else\in@true\fi}% + \expandafter\expandafter\expandafter\in@@\expandafter#2#1\in@\in@@} +\def\gincrement@num#1 { + \begingroup + \count@#1 + \advance\count@\@ne + \xdef#1{\the\count@} + \endgroup +} +\def\gdecrement@num#1 { + \begingroup + \count@#1 + \advance\count@\m@ne + \xdef#1{\the\count@} + \endgroup +} +\begingroup +\catcode`\M=12 +\catcode`\I=12 +\catcode`\N=12 +\catcode`\U=12 +\catcode`\S=12 +\catcode`\Z=12 +\lccode`\Z=`\p +\catcode`\T=12 +\catcode`\L=12 +\catcode`\F=12 +\lccode`\V=`\V +\lccode`\O=`\O +\lowercase{ +\gdef\split@skip #1#2#3#4{ + \@tempskipa#2\relax + \expandafter\check@for@fil \the\@tempskipa FIL\relax\check@for@fil + {\the\@tempskipa}{#3}{#4}{#1} + } +\gdef\check@for@fil #1FIL#2\check@for@fil#3#4#5#6{ + \ifx\relax#2 + \expandafter + \get@minus@part #3MINUS 0ZT \get@minus@part{#4}{#5} + \else + #4\z@ + #5\z@ + \PackageError{template}{Value~ for~ key~ #6~ contains~ `fil(ll)'} + {Only~ finite~ minus~ or~ plus~ parts~ are~ allowed~ for~ this~ key.} + \fi + } +\gdef\get@plus@part #1ZLUS#2ZT#3\get@plus@part#4{ + #4=#2pt\relax + } +\gdef\get@minus@part #1MINUS#2ZT#3\get@minus@part#4#5{ + \get@plus@part #1ZLUS 0ZT\get@plus@part{#4} + #5=#2pt\relax + } +} +\endgroup +\mathchardef\output@collect@penalty=20202 +\mathchardef\output@balance@penalty=10010 +\mathchardef\output@columnbreak@penalty=10005 +\mathchardef\output@flush@float@penalty=10006 +\mathchardef\output@here@float@penalty=10007 +\mathchardef\output@grid@align@penalty=10008 +\def\add@badly@guarded@penalty#1 { + \ifvmode + \nointerlineskip + \vbox to\z@{\vss\the#1}\penalty-#1\relax + \else + \@bsphack + \vadjust{\vbox to\z@{\vss\the#1}\penalty-#1\relax} + \@esphack + \fi +} +\def\add@guarded@penalty#1 + {\guard@box{BUG:~\string#1}\penalty-#1\relax} +\def\guard@box#1{ + \dimen@\prevdepth + \nointerlineskip + \vbox to0pt{\vss \rlap{#1}\kern\z@} + \prevdepth\dimen@ +} +\def\guard@box#1{ + \dimen@\prevdepth + \nointerlineskip + \begingroup + \setbox\z@\vbox to\z@{\vss \rlap{#1}} + \dp\z@\dimen@ + \box\z@ + \endgroup +} +\def\remove@guard@box@from@cclv{ + \global\setbox\@cclv \vbox{\boxmaxdepth\@maxdepth \unvbox\@cclv + \global\setbox\removed@guard@box\lastbox} +} +\def\readd@guarded@penalty#1 { + \box\removed@guard@box + \penalty-#1\relax} +\newbox\removed@guard@box +\let\col@count \col@number % reuse a register from LaTeX + % which is named differently there +\newcount\curr@col@count + +\expandafter\newbox\csname col@box@1\endcsname +\expandafter\newbox\csname col@box@2\endcsname +\expandafter\newbox\csname col@box@3\endcsname +\expandafter\newbox\csname col@box@4\endcsname +\expandafter\newbox\csname col@box@5\endcsname +\expandafter\newbox\csname col@box@6\endcsname +\expandafter\newdimen\csname col@ht@ 1\endcsname +\expandafter\newdimen\csname col@ht@ 2\endcsname +\expandafter\newdimen\csname col@ht@ 3\endcsname +\expandafter\newdimen\csname col@ht@ 4\endcsname +\expandafter\newdimen\csname col@ht@ 5\endcsname +\expandafter\newdimen\csname col@ht@ 6\endcsname +\def\forall@columns#1{ + \edef\saved@curr@col@count{\the\curr@col@count} + \global\curr@col@count\z@ + \@whilenum \curr@col@count<\col@count \do + {\global\advance\curr@col@count\@ne + #1 + } + \global\curr@col@count\saved@curr@col@count\relax +} +\def\initialise@column@data{ + \global\let\best@trial\@empty + + \forall@columns + { + + \global\csname col@ht@ \the\curr@col@count\endcsname\textheight + + \expandafter + \g@addto@macro\expandafter\best@trial\expandafter + { + \expandafter + \global + \csname col@ht@ \the\curr@col@count\endcsname + \textheight + } + \global\@namedef{col@t@floats@ \the\curr@col@count + @number}{0} + \global\@namedef{col@b@floats@ \the\curr@col@count + @number}{0} + \global\@namedef{col@t@delta@ \the\curr@col@count}{0pt} + \global\@namedef{col@b@delta@ \the\curr@col@count}{0pt} + } + +} +\def\columnbreak{ + \ifnum\col@count<\tw@ + \PackageError{xoutput} + {\noexpand\columnbreak~ in~ one-column~ mode} + {???} + \else + \ifvmode + \penalty -\output@columnbreak@penalty + \else + \@bsphack + \vadjust{\penalty -\output@columnbreak@penalty} + \@esphack + \fi + \fi} +\def\known@areas{} +\def\used@areas{ t11 b11 } +\let\@activelist\@empty +\let\@mvllist\@empty +\let\area@ddd\@empty +\def\pagesetup@ddd@class@close{\pagesetup@area@list} +\let\pagesetup@ddd@all@close\@empty +\let\this@open@areas\@empty +\let\saved@this@open@areas\@empty +\let\this@closed@areas\@empty +\let\this@page@closed\@empty +\expandafter\let\csname t11@float@count\endcsname \@topnum +\expandafter\let\csname b11@float@count\endcsname \@botnum +\expandafter\let\csname t12@float@count\endcsname \@dbltopnum +\expandafter\let\csname b12@float@count\endcsname \@dblbotnum +\newcount\ddd@float@count +\newskip\pagesetup@float@area@sep +\let\pagesetup@float@text@sep\textfloatsep % reuse register +\let\textfloatsep\@undefined +\let\pagesetup@float@float@sep\floatsep % reuse register +\let\floatsep\@undefined +\newdimen\pagesetup@float@text@shrink +\let\pagesetup@float@inline@sep\intextsep % reuse register +\let\intextsep\@undefined +\newdimen\pagesetup@float@inline@shrink +\def\initialise@areas{ + \expandafter\initialise@areas@loop + \used@areas + \relax\relax\relax +} +\def\initialise@areas@loop#1#2#3{ + \ifx#1\relax + \else + \global\csname #1#2#3@float@count\endcsname\z@ + \global\expandafter\let\csname area@#1#2#3\endcsname\@empty + \expandafter\initialise@areas@loop + \fi} +\def\first@of@type#1#2{ + \begingroup + \def\@tempb{#1} + \gdef\returned@sequence@number{-1} + \def\@elt{\expandafter\first@of@type@aux\the\toks} + \csname area@#2\endcsname + \endgroup +} +\def\first@of@type@aux#1#2#3#4#5#6#7{ + \def\@tempa{#6} + \ifx\@tempa\@tempb + \gdef\returned@sequence@number{#7} + \let\@elt\@gobble + \fi} +\def\last@of@type#1#2{ + \begingroup + \def\@tempb{#1} + \gdef\returned@sequence@number{-1} + \def\@elt{\expandafter\last@of@type@aux\the\toks} + \csname area@#2\endcsname + \endgroup +} +\def\last@of@type@aux#1#2#3#4#5#6#7{ + \def\@tempa{#6} + \ifx\@tempa\@tempb + \gdef\returned@sequence@number{#7} + \fi} +\def\setup@this@area #1 { + \xdef\this@area{#1} + \expandafter\gassign@area@type@col@and@span@aux\this@area +} +\def\gassign@area@type@col@and@span@aux #1#2#3{ + \gdef \this@area@type {#1} % type + \gdef \this@area@col@number {#2} % col + \gdef \this@area@span@number {#3} % span +} +\def\update@this@area@columns #1 { + \begingroup + \count@\this@area@col@number\relax + \advance\count@\this@area@span@number\relax + \loop + \ifnum \this@area@col@number < \count@ + \advance\count@\m@ne + #1 + \repeat + \endgroup +} +\def\setup@collection@or{ + \global\holdinginserts\@ne + \global\vsize\textheight + \global\advance\vsize 5\baselineskip + \global\multiply\vsize \col@count + \@flushseenfalse + \@flushfailfalse + \xdef\saved@topskip{\the\topskip} + \global\output{\collection@or} +} +\newif\if@collecting@new@material +\def\@collecting@new@materialfalse + {\global\let\if@collecting@new@material\iffalse} +\def\@collecting@new@materialtrue + {\global\let\if@collecting@new@material\iftrue} +\def\collection@or{ + \@testfalse + \ifnum\outputpenalty < -\@M + \ifnum\outputpenalty > -\output@balance@penalty + \@testtrue + \fi + \fi + \if@test + \remove@guard@box@from@cclv + \dimen@\dp\@cclv + \global\advance\vsize-\ht\@cclv + \global\setbox\partial@galley@box + \vbox{\ifvoid\partial@galley@box + \else + \unvbox\partial@galley@box + \fi + \unvbox\@cclv + \setbox\z@\vbox to-\dimen@{} + \dp\z@\dimen@ + \box\z@ + \penalty\outputpenalty + } + \global\topskip-\maxdimen % okay here? + \if@collecting@new@material + \ifnum \outputpenalty = -\output@columnbreak@penalty + \else + \setbox\z@\vbox to-\dimen@{} + \dp\z@\dimen@ + \box\z@ + \penalty\z@ + \fi + \fi + \ifnum\outputpenalty=-\output@flush@float@penalty + \@flushseentrue + \fi + \else + \ifnum\outputpenalty = -\output@collect@penalty + \remove@guard@box@from@cclv + \unvbox\@cclv + \ifnum\saved@outputpenalty > -\@M + \penalty + \ifnum\saved@outputpenalty=\@M + \z@ + \else + \saved@outputpenalty\relax + \fi + \else + \fi + \@collecting@new@materialtrue + \else + \ifnum\outputpenalty = -\output@balance@penalty + \@balancetrue + \xdef\saved@outputpenalty{0} + \else + \xdef\saved@outputpenalty{\the\outputpenalty} + \fi + \ifvoid\partial@galley@box + \global \setbox\@holdpg\box\@cclv + \else + \global\setbox\@holdpg\vbox{ + \unvbox\partial@galley@box + \unvbox\@cclv} + \fi + + + \if@balance + \global\setbox\@holdpg\vbox{ + \unvbox\@holdpg + \penalty\outputpenalty % short for "-\output@balance@penalty" + } + \fi + + \mark@save@state + \mark@update@structure + \global\holdinginserts\z@ + + \global\topskip\saved@topskip + + \setup@float@placement + + \@collecting@new@materialfalse + \fi + \fi + } +\newbox\partial@galley@box +\def\initialise@float@class#1{ + \count@0\LastMark{#1} + \global\expandafter\let\csname open@#1@areas\endcsname\used@areas + \global\expandafter\let\csname closed@#1@areas\endcsname\@empty + \forall@columns { + \ifnum \csname fl@ \the\curr@col@count @#1\endcsname>\z@ + \global\expandafter\let\csname fl@0@#1\expandafter\endcsname + \csname fl@ \the\curr@col@count @#1\endcsname + \expandafter\xdef + \csname fl@ \the\curr@col@count @#1\endcsname{0} + \fi + \expandafter\xdef + \csname tfl@ \the\curr@col@count @#1\endcsname{0} + } + } +\newif\if@fail +\def\@failfalse{\global\let\if@fail\iffalse} +\def\@failtrue{\global\let\if@fail\iftrue} +\def\setup@float@placement { + \def\@elt{\global\advance\trial@count\@ne\@gobble} + \@activelist + \let\@elt\relax + \progress@separator + \progress@nl{STATS:~ floats~ waiting~ =~ \the\trial@count + \space on~ page~ \the\absolute@page@number} + \progress@separator + \global\trial@count\z@ + \global\let\saved@herelist\@herelist + \tighten@float@placement@conditions + \run@with@floatsfalse + \float@placement@loop +} +\def\float@placement@loop{ + \deadcycles\z@ + \global\let\@activelist@empty@action\setup@best@column@or + \global\let\pretests@success@action\setup@grab@column@or + \mark@restore@state{ + \unvcopy\@holdpg + \ifnum\saved@outputpenalty > -1073741824\relax + \add@badly@guarded@penalty\output@collect@penalty + \fi + \global\let\@herelist\saved@herelist + \ifrun@with@floats + \trial@inner@loop + \else + \setup@grab@column@or + \fi + } + } +\def\trial@inner@loop{ + \if@fail + \@failfalse + \@flushfailfalse + \global\advance\trial@count\@ne + \do@next\try@this@area + \else + \do@next\try@next@float + \fi + \do@continue + } +\newcount\trial@count +\let\try@this@area\ERROR +\def\try@next@area{ + \xdef\this@open@areas{\expandafter\@gobblethree\this@open@areas} + \global\advance\trial@count\@ne + \try@this@area +} +\def\try@next@float{ + \@next\@currbox\@activelist{ + \progress{Float:~ \@currbox} + \expandafter\update@this@float@structure\the\toks\@currbox + \global\let\saved@this@open@areas\this@open@areas + \global\advance\trial@count\@ne + \try@this@area + } + { + \progress@nl{STATS:~ trials~ =~ \the\trial@count} + \global\trial@count\z@ + \@activelist@empty@action + } +} +\def\update@this@float@structure#1#2#3#4#5#6#7{ + \gdef\this@caption{#1} + \gdef\this@span@number{#2} + \gdef\this@usercnt{#4} + \gdef\this@fps{#5} + \gdef\this@type{#6} + \global\expandafter\let\expandafter + \this@class\csname sequence@class@#6\endcsname + \gdef\this@sequence@number{#7} + \global\let\this@open@areas\used@areas + \global\expandafter\let\expandafter\this@closed@areas + \csname closed@\this@class @areas\endcsname % FMi tmp + \global\let\this@float@box\@currbox +\progress{~{#7}} +\progress{~{#6}~(\this@class)} +\progress{~{#4}} +\toks@{#1}\progress@nl{~{\the\toks@}} +} +\def \extract@this@float@actual@structure #1#2#3#4#5#6#7 { + \gdef\this@caption{#1} + \gdef\this@span@number{#2} + \gdef\this@loglabel{#3} + \gdef\this@usercnt{#4} + \gdef\this@fps{#5} + \gdef\this@type{#6} + \global\expandafter\let\expandafter + \this@class\csname sequence@class@#6\endcsname + \gdef\this@sequence@number{#7} + } +\def\update@here@float@structure#1#2#3#4#5#6#7{ + \gdef\here@span@number{#2} + \gdef\here@type{#6} + \global\expandafter\let\expandafter + \here@class\csname sequence@class@#6\endcsname + \gdef\here@sequence@number{#7} + \gdef\here@usercnt{#4} + \gdef\here@caption{#1} + \global\let\here@float@box\@currbox +} +\let\page@float@count\@colnum +\newbox\this@captioned@float +\def\setup@grab@column@or{ + \ifnum\saved@outputpenalty = -1073741824\relax + \add@badly@guarded@penalty\output@collect@penalty + \fi + \@failfalse + \global\curr@col@count\z@ + \gdef\trial@flush@seen@num{0} + \gdef\trial@here@seen@num{0} + \ifrun@with@floats + \calculate@target@fl@column + \global\expandafter\let\expandafter\saved@fl@ + \csname fl@\the\count@ @\this@class\endcsname + \global\expandafter\let + \csname fl@\the\count@ @\this@class\endcsname + \this@sequence@number + \if t\this@area@type + \global\expandafter\let\expandafter\saved@tfl@ + \csname tfl@\the\count@ @\this@class\endcsname + \global\expandafter\let + \csname tfl@\the\count@ @\this@class\endcsname + \this@sequence@number + \fi + \fi + \if@flushseen + \count@\z@ + \@whilenum \flush@seq@num>\count@ \do + { \advance\count@\@ne + \global\expandafter\let + \csname saved@flush@min@col@\the\count@ \expandafter\endcsname + \csname flush@min@col@\the\count@\endcsname + } + \fi + \initialise@footins@action + \global\output{\grab@column@or} + \grab@column@loop +} +\let\calculate@target@fl@column \ERROR +\def\calculate@target@fl@column@flexible { + \count@\this@area@col@number\relax + \advance\count@\this@area@span@number\relax + \advance\count@\m@ne +} +\def\calculate@target@fl@column@strict { + \count@\this@area@col@number\relax +} +\newif\ifrun@with@floats +\def\run@with@floatsfalse{\global\let\ifrun@with@floats\iffalse} +\def\run@with@floatstrue{\global\let\ifrun@with@floats\iftrue} +\def\grab@column@loop{ + \global\advance\curr@col@count\@ne + \global\vsize\csname col@ht@ \the\curr@col@count\endcsname +} +\def\some@column@or #1#2#3#4{ + \handle@case@of@premature@ending + \handle@case@of@forced@pagebreak + \ifnum\outputpenalty=-\output@flush@float@penalty + \gincrement@num\trial@flush@seen@num + \remove@guard@box@from@cclv + \ifnum\csname flush@min@col@\trial@flush@seen@num\endcsname + > \curr@col@count + \gdecrement@num\trial@flush@seen@num + \readd@guarded@penalty\output@flush@float@penalty + #2 + \else + #3 + \fi + \else + \ifnum\outputpenalty=-\output@here@float@penalty + \gincrement@num\trial@here@seen@num + \remove@guard@box@from@cclv + \ifnum\csname here@min@col@\trial@here@seen@num\endcsname + > \curr@col@count + \split@off@last@line + \gdecrement@num\trial@here@seen@num + \readd@guarded@penalty\output@here@float@penalty + #2 + \else + \@tempdima \pagegoal + \advance\@tempdima -\pagetotal + \ifdim \@tempdima < + \csname + here@required@space@\trial@here@seen@num + \endcsname \relax + \split@off@last@line + \gdecrement@num\trial@here@seen@num + \readd@guarded@penalty\output@here@float@penalty + #2 + \else + \@reinserts + \unvbox\@cclv + \@next\@currbox\@herelist{ + \expandafter\update@here@float@structure\the\toks\@currbox + \def\@tempa{mpar} + \ifx\@tempa\here@type + \typeset@a@marginpar + \else + \def\@tempa{rspace} + \ifx\@tempa\here@type + % do nothing + \else + #4 + \fi + \fi + } + \ERROR + \fi + \fi + \else + \ifnum\outputpenalty=-\output@grid@align@penalty + \align@collected@galley@and@restart + \else + #2 + \fi + \fi + \fi +} +\def\grab@column@or{\some@column@or{grab} + \grab@column@or@finish + \grab@column@or@flushcheck + \check@and@typeset@a@here@float +} +\def\grab@column@or@flushcheck{ + \ifrun@with@floats + \expandafter\xin@\expandafter\this@class + \csname flush@classes@list@\trial@flush@seen@num\endcsname + \ifin@ + \count@\csname flush@last@float@\trial@flush@seen@num\endcsname\relax + \ifnum\this@sequence@number>\count@ + \else + \csname flush@fuzziness@\trial@flush@seen@num \endcsname + \fi + \fi + \fi + \if@fail + \@flushfailtrue + \global\setbox\@cclv\box\voidb@x + \global\setbox\footins\box\voidb@x + \global\curr@col@count\col@count + \grab@column@or@finish + \else + \ifnum\csname flush@min@col@\trial@flush@seen@num\endcsname<\curr@col@count + \expandafter\xdef + \csname flush@min@col@\trial@flush@seen@num\endcsname + {\the\curr@col@count} + \fi + \@reinserts + \unvbox\@cclv + % will change again + \fi +} +\def\flushcheck@page { +} +\def\flushcheck@spread { +} +\def\flushcheck@strict { + \ifnum\this@area@col@number<\curr@col@count + \else + \ifnum\this@area@col@number=\curr@col@count + \if b \this@area@type + \@failtrue + \progress@failed{area~ below~ flush~ point~ + (\this@area@col@number=\the\curr@col@count,~\this@area)} + \fi + \else + \@failtrue + \progress@failed{area~ after~ flush~ point~ + (\this@area@col@number>\the\curr@col@count,~\this@area)} + \fi + \fi +} +\def\flushcheck@column { + \ifnum\this@area@col@number>\curr@col@count + \@failtrue + \progress@failed{area~ after~ flush~ point~ column~ + (\this@area@col@number>\the\curr@col@count,~\this@area)} + \fi +} +\def\grab@column@or@finish{ + \mark@update@structure + \deal@with@footins@action + \if@fail\else + \ifrun@with@floats + \check@some@constraints + \fi + \fi + \if@fail\else + \ifrun@with@floats + \let\@elt\check@callout@constraints + \float@classes@list + \fi + \fi + \global\setbox\@cclv\box\voidb@x + \global\setbox\footins\box\voidb@x + \ifnum\curr@col@count=\col@count + \evaluate@results@of@trial + \setup@cleanup@or + \else + \grab@column@loop + \fi +} +\def\handle@case@of@premature@ending{ + \ifnum\outputpenalty=-\output@collect@penalty + \remove@guard@box@from@cclv + \readd@guarded@penalty\output@collect@penalty + \fi +} +\let\check@some@constraints\relax +\def\evaluate@results@of@trial{ + \ifrun@with@floats + \ifx\try@this@area\std@try@this@area + \count@\trial@here@seen@num\relax + \advance\count@\page@float@count + \ifnum \pagesetup@max@float@num < \count@ + \progress@failed{area~ +~ here~ floats~ exceed~ max~ floats} + \@failtrue + \fi + \fi + \fi + \if@fail + \if@flushseen + \count@\z@ + \@whilenum \flush@seq@num>\count@ \do + { \advance\count@\@ne + \global\expandafter\let + \csname flush@min@col@\the\count@ \expandafter\endcsname + \csname saved@flush@min@col@\the\count@\endcsname + } + \fi + + \if@flushfail + \ifx\try@this@area\relaxed@try@this@area + + \expandafter\gincrement@num + \csname flush@min@col@\trial@flush@seen@num\endcsname + \progress@failed{flush~ point~ \trial@flush@seen@num\space + moved~ to~ column~ + \csname flush@min@col@\trial@flush@seen@num\endcsname} + \else + + \ifx\saved@this@open@areas\@empty + \ERROR + \else + \global\let\this@open@areas\saved@this@open@areas + \fi + \relax@float@placement@conditions + \fi + \else + \xdef\this@open@areas{\expandafter\@gobblethree\this@open@areas} + \fi + + \calculate@target@fl@column + \global\expandafter\let + \csname fl@\the\count@ @\this@class\endcsname + \saved@fl@ + \if t\this@area@type + \global\expandafter\let + \csname tfl@\the\count@ @\this@class\endcsname + \saved@tfl@ + \fi + \update@this@area@columns + { + \global\csname col@ht@ \the\count@\endcsname + \csname saved@col@ht@ \the\count@\endcsname\relax + \global\expandafter\let + \csname col@ \this@area@type @delta@ \the\count@ + \expandafter \endcsname + \csname saved@col@ \this@area@type @delta@ \the\count@ \endcsname + } + \else + \let\progress@inform@later\@empty + \if@flushseen + \count@\flush@seq@num\relax + \loop + \ifnum \trial@flush@seen@num < \count@ + \global\@namedef{flush@min@col@\the\count@}{\maxdimen} + \advance\count@\m@ne + \repeat + \let\progress@inform@later\@empty + \ifrun@with@floats + \ifnum \count@ > \z@ + \ifnum \csname flush@last@float@\trial@flush@seen@num\endcsname = + \this@sequence@number \relax + \def\progress@inform@later{ + \progress@nl{->~ past~ flush~ point:~ -->~ + tighten~ conditions~ again} + \progress@nl{} + } + \partly@tighten@float@placement@conditions + \fi + \fi + \fi + \count@\z@ + \global\let\flush@classes@list@max\@empty + \loop + \ifnum \trial@flush@seen@num > \count@ + \advance\count@\@ne + \xdef\flush@classes@list@max{ + \flush@classes@list@max; + \csname flush@classes@list@\the\count@\endcsname + } + \repeat + \fi + \ifrun@with@floats + \update@best@trial + \progress@inform@later + \else + \run@with@floatstrue + \fi + \fi + } +\let\best@trial\@empty +\def\update@best@trial{ + \progress@nl{->~ accepted} + \global\let\best@trial\@empty + \forall@columns{ + \expandafter + \g@addto@macro\expandafter\best@trial\expandafter + { + \expandafter + \global + \csname col@ht@ \the\curr@col@count\expandafter\endcsname + \the\csname col@ht@ \the\curr@col@count\endcsname + } + } + \expandafter\@cons\csname area@\this@area\expandafter\endcsname + \this@float@box + \xdef\this@page@closed{\this@page@closed, + \csname pagesetup@\this@area @all@close\endcsname} + \xdef\this@closed@areas{\this@closed@areas, + \csname pagesetup@\this@area @class@close\endcsname} + \global\expandafter\let\csname open@\this@class + @areas\endcsname % FMi tmp + \this@open@areas + \global\expandafter\let\csname closed@\this@class + @areas\endcsname % FMi tmp + \this@closed@areas + \global\advance\page@float@count\@ne + \global\advance\csname \this@area @float@count\endcsname\@ne + \update@this@area@columns + { + \expandafter + \gincrement@num + \csname col@ \this@area@type + @floats@ \the\count@ @number\endcsname + } +} + +\def\setup@best@column@or{ + \global\curr@col@count\z@ + \gdef\trial@flush@seen@num{0} + \gdef\trial@here@seen@num{0} + \perhaps@write@placements@to@fpl@file + \best@trial + \initialise@footins@action + \global\output{\best@column@or} + \best@column@loop +} +\def\best@column@loop{ + \global\advance\curr@col@count\@ne + \global\vsize\csname col@ht@ \the\curr@col@count\endcsname +} +\def\best@column@or{\some@column@or{best} + \best@column@or@finish + { + \@reinserts + \unvbox\@cclv + } + { + \perhaps@write@to@fpl@file{ + \@spaces Area:~hhh^^J + \expandafter\perhaps@write@placements@to@fpl@file@aux\the\toks\@currbox} + \typeset@a@here@float + } +} +\def\best@column@or@finish{ + \mark@update@structure + \deal@with@footins@action + \produce@final@column + \ifnum\curr@col@count=\col@count + \produce@final@page + \initialise@next@page + \try@float@pages + \place@deferred@floats + \setup@collection@or + \else + \best@column@loop + \fi +} +\def\initialise@next@page{ + \initialise@column@data + \initialise@areas + \global\page@float@count\z@ + \initialise@flush@data + \initialise@here@data + \initialise@footins@action + \global\let\this@page@closed\@empty + \let\@elt\initialise@float@class + \float@classes@list + \let\@elt\relax + \global\let\this@float@box\@undefined + } +\def \handle@case@of@forced@pagebreak{ + \ifnum\curr@col@count<\col@count + \ifnum\outputpenalty=-\@M + \@emptycol + \fi + \fi + + \ifnum\outputpenalty=-\output@balance@penalty + \remove@guard@box@from@cclv + \ifnum\curr@col@count<\col@count + \@emptycol + \fi + \fi +} +\def\setup@cleanup@or{ + \global\vsize\maxdimen + \global\output{\cleanup@or} + } +\def\cleanup@or{ + \global\setbox\@cclv\box\voidb@x + \global\setbox\footins\box\voidb@x + \ifnum\outputpenalty=-\output@collect@penalty + \float@placement@loop + \fi +} +\def\try@float@pages { + \ifx\area@ddd\@empty + \else + \global\let\@activelist@empty@action\relax + \global\let\pretests@success@action\floatpage@pretests@success@action + \global\let\try@this@area\relaxed@try@this@area + \let\@elt\split@defer@list + \area@ddd + \let\@elt\relax + \global\let\area@ddd\@empty + \@floatpagetrue + \loop + \if@floatpage + \begingroup % no nesting of \loop without grouping ... + \def\@elt{\global\advance\trial@count\@ne\@gobble} + \@activelist + \let\@elt\relax + \progress@nl{} + \progress@separator + \progress@nl{STATS:~ floats~ waiting~ =~ \the\trial@count + \space on~ page~ \the\absolute@page@number\space (float~ page)} + \progress@separator + \global\trial@count\z@ + \try@float@page + \endgroup + \repeat + \global\let\try@this@area\std@try@this@area + \fi +} +\def\try@float@page { + \save@current@float@state + \trial@inner@loop + \dimen@\z@ + \forall@columns{ + \advance\dimen@ \csname + col@ht@ \the\curr@col@count \endcsname + } + \ifdim \dimen@ > 300pt \relax + \@floatpagefalse + \progress@failed{no~ float~ page~ made} + \progress@nl{} + \saved@float@state + \gdef\trial@flush@seen@num{0} + \gdef\trial@here@seen@num{0} + \initialise@next@page + \else + \progress@nl{succeeded} + \progress@nl{} + \forall@columns{ + \global\setbox\csname col@box@\the\curr@col@count\endcsname + \vbox to \csname col@ht@ \the\curr@col@count\endcsname{} + \produce@final@column + } + \perhaps@write@placements@to@fpl@file + \produce@final@page + \initialise@next@page + \xdef\@activelist{\area@ddd\@activelist} + \global\let\area@ddd\@empty + \fi +} +\newif\if@floatpage +\def\@floatpagefalse{\global\let\if@floatpage\iffalse} +\def\@floatpagetrue{\global\let\if@floatpage\iftrue} +\def\save@current@float@state { + \xdef\saved@float@state{\gdef\noexpand\@activelist{\@activelist}} + \forall@columns { + \expandafter + \g@addto@macro + \expandafter \saved@float@state + \expandafter { \expandafter \global + \csname col@ht@ \the\curr@col@count\expandafter\endcsname + \the \csname col@ht@ \the\curr@col@count\endcsname + } + } + \expandafter\save@area@info\used@areas ddd\relax\relax\relax +} +\def\save@area@info#1#2#3{ + \ifx#1\relax + \else + \edef\@tempa { + \global\csname #1#2#3@float@count\endcsname + \the\csname #1#2#3@float@count\endcsname + \gdef \expandafter\noexpand \csname area@#1#2#3\endcsname + {\csname area@#1#2#3\endcsname} + } + \expandafter + \g@addto@macro + \expandafter \saved@float@state + \expandafter { \@tempa } + + \expandafter\save@area@info + \fi} +\let\saved@float@state\@empty +\def\split@defer@list #1 { + \def\@currbox{#1} + \expandafter\extract@this@float@actual@structure\the\toks #1 + \ifnum 0\LastMark{\this@class} < \this@sequence@number + \@cons \@mvllist #1 + \else + \@cons \@activelist #1 + \fi +} +\def\place@deferred@floats { + \xdef\@activelist{\@activelist\@mvllist} + \global\let\@mvllist\@empty +} +\iffalse % we don't do it right now +\def\place@deferred@floats { + \global\let\@activelist@empty@action\relax + \global\let\pretests@success@action\floatpage@pretests@success@action +\showfloatlists + \trial@inner@loop + \xdef\@activelist{\area@ddd\@mvllist} + \global\let\area@ddd\@empty + \global\let\@mvllist\@empty +} +\fi +\def\floatpage@pretests@success@action{ + \update@best@trial + \trial@inner@loop + } +\newif\if@balance +\def\@balancefalse{\global\let\if@balance\iffalse} +\def\@balancetrue{\global\let\if@balance\iftrue} +\def\balancecolumns { + \add@badly@guarded@penalty\output@balance@penalty +} +\newif\if@flushseen +\def\@flushseenfalse{\global\let\if@flushseen\iffalse} +\def\@flushseentrue{\global\let\if@flushseen\iftrue} +\newif\if@flushfail +\def\@flushfailfalse{\global\let\if@flushfail\iffalse} +\def\@flushfailtrue{\global\let\if@flushfail\iftrue} +\DeclareDocumentCommand\flushfloats { o O{strict} } + { \flush@floats {#1} {#2} } +\def\flush@floats #1 #2 { + \add@badly@guarded@penalty\output@flush@float@penalty + \gincrement@num\flush@seq@num + \global\@namedef{flush@min@col@\flush@seq@num}{1} + \expandafter\xdef + \csname flush@last@float@\flush@seq@num \endcsname + {\the\float@sequence@count} + \IfNoValueTF{#1}{ + \def\@elt##1{##1;} + \expandafter\xdef + \csname flush@classes@list@\flush@seq@num \endcsname + {\float@classes@list} + \let\@elt\relax + } + {\expandafter\ifx\csname sequence@class@#1\endcsname + \relax + \ErrorArgumentNotAFloatType + \else + \global\expandafter\let + \csname flush@classes@list@\flush@seq@num + \expandafter\endcsname + \csname sequence@class@#1\endcsname + \fi + } + \@ifundefined {flushcheck@#2} + \userinputERROR + {\global\expandafter\let + \csname flush@fuzziness@\flush@seq@num \expandafter \endcsname + \csname flushcheck@#2\endcsname + } +} +\def\clearpage{ \flushfloats \newpage } +\def\doubleclearpage{ \clearpage } +\def\flush@seq@num{0} +\def\trial@flush@seen@num{0} + +\expandafter\let\csname flush@last@float@1 \endcsname\ERROR +\expandafter\let\csname flush@classes@list@1 \endcsname\ERROR +\expandafter\let\csname flush@min@col@1 \endcsname\ERROR +\expandafter\let\csname flush@fuzziness@1 \endcsname\ERROR +\expandafter\let\csname flush@last@float@2 \endcsname\ERROR +\expandafter\let\csname flush@classes@list@2 \endcsname\ERROR +\expandafter\let\csname flush@min@col@2 \endcsname\ERROR +\expandafter\let\csname flush@fuzziness@2 \endcsname\ERROR +\expandafter\let\csname flush@last@float@3 \endcsname\ERROR +\expandafter\let\csname flush@classes@list@3 \endcsname\ERROR +\expandafter\let\csname flush@min@col@3 \endcsname\ERROR +\expandafter\let\csname flush@fuzziness@3 \endcsname\ERROR +\let\flush@classes@list@max\@empty +\def \initialise@flush@data{ + \count@\flush@seq@num\relax + \advance\count@ -\trial@flush@seen@num + \xdef\flush@seq@num{\the\count@} + \@tempcnta\trial@flush@seen@num + \@tempcntb\z@ + \loop + \ifnum \@tempcntb < \count@ + + \advance\@tempcnta\@ne + \advance\@tempcntb\@ne + \global\expandafter\let + \csname flush@fuzziness@\the\@tempcntb \expandafter\endcsname + \csname flush@fuzziness@\the\@tempcnta \endcsname + + \global\expandafter\let + \csname flush@last@float@\the\@tempcntb \expandafter\endcsname + \csname flush@last@float@\the\@tempcnta \endcsname + + \global\expandafter\let + \csname flush@classes@list@\the\@tempcntb \expandafter\endcsname + \csname flush@classes@list@\the\@tempcnta \endcsname + + \global\@namedef{flush@min@col@\the\@tempcntb}{1} + \repeat + \global\let\flush@classes@list@max\@empty + \gdef\trial@flush@seen@num{0} +} +\def\here@seq@num{0} +\def\trial@here@seen@num{0} +\let\@herelist\@empty +\let\saved@herelist\@empty +\def\here@point #1#2{ + \@cons\@herelist#1 + \gincrement@num\here@seq@num + \global\@namedef{here@min@col@\here@seq@num}{1} + \setlength\dimen@{#2} + \expandafter\xdef + \csname here@required@space@\here@seq@num \endcsname + {\the\dimen@} + \add@badly@guarded@penalty\output@here@float@penalty +} +\def \initialise@here@data{ + \count@\here@seq@num\relax + \advance\count@ -\trial@here@seen@num + \xdef\here@seq@num{\the\count@} + \@tempcnta\trial@here@seen@num + \@tempcntb\z@ + \loop + \ifnum \@tempcntb < \count@ + + \advance\@tempcnta\@ne + \advance\@tempcntb\@ne + \global\expandafter\let + \csname here@required@space@\the\@tempcntb \expandafter\endcsname + \csname here@required@space@\the\@tempcnta \endcsname + + \global\@namedef{here@min@col@\the\@tempcntb}{1} + \repeat +} +\def \split@off@last@line{ + \dimen@\ht\@cclv + \advance\dimen@-\pageshrink + \advance\dimen@-1sp + \splitmaxdepth\@maxdepth + \setbox\z@\vsplit\@cclv to\dimen@ + \dimen@\csname + here@required@space@\trial@here@seen@num + \endcsname + \advance\dimen@\ht\@cclv + \advance\dimen@\dp\@cclv + \ifdim \dimen@ > \textheight + \ERROR-HERE-TOO-LARGE + \dimen@\textheight + \advance\dimen@-\ht\@cclv + \advance\dimen@-\dp\@cclv + \expandafter\xdef\csname + here@required@space@\trial@here@seen@num + \endcsname{\the\dimen@} + \fi + \unvbox\@cclv + \global\setbox\@cclv\box\z@ +} +\def \align@collected@galley@and@restart { + \remove@guard@box@from@cclv + \snap@to@grid{\ht\@cclv}\pagesetup@grid@point@sep + \ifdim \returned@size > \pagegoal + % \csname col@ht@ \the\curr@col@count\endcsname % not! + \ifdim \returned@lower@delta@size < \pageshrink + \global\let \returned@size \returned@lower@size + \xdef \returned@delta@size {-\returned@lower@delta@size } + \else + \OuchERROR + \fi + \else + \ifdim \returned@lower@delta@size < \returned@delta@size \relax + \ifdim \returned@lower@delta@size < \pageshrink + \global\let \returned@size \returned@lower@size + \xdef \returned@delta@size {-\returned@lower@delta@size } + \fi + \fi + \fi + \vbox to\returned@size{\unvbox\@cclv} + \@reinserts +} +\def\OuchERROR{ + \progress@failed{next~ possible~ grid~ point~ in~ column~ + \the\curr@col@count\space outside~ page} +} +\def\std@AlignToGrid{ + \add@badly@guarded@penalty\output@grid@align@penalty +} +\def\IgnoreAlignToGrid{ + \global\let\AlignToGrid\relax +} +\def\ObeyAlignToGrid{ + \global\let\AlignToGrid\std@AlignToGrid +} +\let\AlignToGrid\ERROR +\def\TextAlignToGrid{ \leavevmode \AlignToGrid } +\AtBeginDocument{ + \begingroup + \col@count6\relax + \initialise@column@data + \forall@columns { + \def\@elt#1{ + \global\@namedef{fl@\the\curr@col@count @#1}{0} + \global\@namedef{tfl@\the\curr@col@count @#1}{0} + } + \float@classes@list + } + \def\@elt#1{ + \global\expandafter\let\csname fps@#1\endcsname\known@areas + \global\@namedef{fl@0@#1}{0} + } + \float@classes@list + \endgroup + \@collecting@new@materialtrue + \setup@collection@or +} +\endinput +%% +%% End of file `xo-or.sty'. |