summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex3/xor/xo-or.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex3/xor/xo-or.dtx')
-rw-r--r--Master/texmf-dist/source/latex3/xor/xo-or.dtx5188
1 files changed, 0 insertions, 5188 deletions
diff --git a/Master/texmf-dist/source/latex3/xor/xo-or.dtx b/Master/texmf-dist/source/latex3/xor/xo-or.dtx
deleted file mode 100644
index 6aef48254b1..00000000000
--- a/Master/texmf-dist/source/latex3/xor/xo-or.dtx
+++ /dev/null
@@ -1,5188 +0,0 @@
-% \iffalse
-%%
-%% (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.
-%%
-% \fi
-%
-
-% \begin{macrocode}
-\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 $
-% \end{macrocode}
-%
-% \subsection{A flowchart of the algorithm}
-%
-% Several output routines are employed. Output routines (that is,
-% macros to be used as the sole content of the primitive |\output|
-% register) are named xxx@or. Typically a companion macro named
-% setup@xxx is called to initialise the state (typically setting
-% vsize) and to assign |\output|.
-%
-%
-% [The flow chart has be cut into pieces and individual pieces are
-% shown below.]
-%
-% ^^A \input{xo-flow-chart.sty} ^^A .sty to ease updating
-%
-%
-%
-% Ignore white space in this package.
-% \begin{macrocode}
-\IgnoreWhiteSpace
-% \end{macrocode}
-%
-%
-%
-%
-% \subsection{General helper Routines}
-%
-% \begin{macro}{\@gobblethree}
-% Get rid of three tokens or brace groups.
-% \begin{macrocode}
-\long\def\@gobblethree#1#2#3{}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\xin@}
-% Like |\in@| but with both args (which have to be single tokens!)
-% expanded. Should be replaced by a proper interface.
-% \begin{macrocode}
-\def\xin@#1#2{%
-% expanded once:
- \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@@}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\gincrement@num}
-% Globally increment a ``number macro'' by one.
-% \begin{macrocode}
-\def\gincrement@num#1 {
-% \end{macrocode}
-% We don't want to modify |\count@| here as it might hold some
-% important data so we do everything in a group.
-% \begin{macrocode}
- \begingroup
- \count@#1
- \advance\count@\@ne
- \xdef#1{\the\count@}
- \endgroup
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\gdecrement@num}
-% Globally decrement a ``number macro'' by one.
-% \begin{macrocode}
-\def\gdecrement@num#1 {
- \begingroup
- \count@#1
- \advance\count@\m@ne
- \xdef#1{\the\count@}
- \endgroup
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\split@skip}
-% \begin{macro}{\check@for@fil}
-% \begin{macro}{\get@plus@part}
-% \begin{macro}{\get@minus@part}
-% |\split@skip| takes four aguments: a template key name (for error
-% recovery), a skip specification (e.g., either the value of a skip
-% register via |\the|\meta{register}, or a macro holding the
-% information, or the specification directly), and two dimen
-% registers. The skip specification is taken apart and the first
-% dimen register receives ``plus'' part and the second the
-% ``minus'' part. If the specification contains any |fil| parts an
-% error is generated since these values can't be assigned to a
-% dimen register.
-% \begin{macrocode}
-\begingroup
-% \end{macrocode}
-% We employ the |\lowercase| trick to get certain letters with
-% |\catcode| 12 since we have to scan for them (they are what
-% |\the| outputs. So if we say |MINUS| below we get |minus| but all
-% |\catcode|d 12.
-% \begin{macrocode}
-\catcode`\M=12
-\catcode`\I=12
-\catcode`\N=12
-\catcode`\U=12
-\catcode`\S=12
-% \end{macrocode}
-% We need |p| with |\catcode| 12 to scan for |pt| but we also need
-% |P| with |\catcode| 11 to be able to say |\PackageError|. So we
-% claim lowecase of |Z| is |p| and then say |ZT| and |ZLUS| below.
-% \begin{macrocode}
-\catcode`\Z=12
-\lccode`\Z=`\p
-\catcode`\T=12
-% \end{macrocode}
-% And we need to scan for |FIL|:
-% \begin{macrocode}
-\catcode`\L=12
-\catcode`\F=12
-% \end{macrocode}
-% And the error message contains uppercase |V| and |O| and we want
-% to retain those.
-% \begin{macrocode}
-\lccode`\V=`\V
-\lccode`\O=`\O
-% \end{macrocode}
-% With the above prelims we now apply |\lowercase| to all the
-% definitions below, which will put the correctly |\catcode|d
-% strings in the parsing part of the macros.
-% \begin{macrocode}
-\lowercase{
-\gdef\split@skip #1#2#3#4{
-% \end{macrocode}
-% |#2| is the skip specification. To be sure that the strings
-% ``plus'', ``minus'', ``pt'' are always having |\catcode| 12 we
-% assign it to a register first. Otherwise a user supplied string
-% like |1in plus .5in| wouldn't be parsable since we are only
-% looking for |pt| and also because in this case the |\catcode|s of
-% |plus| would be 11.
-% \begin{macrocode}
- \@tempskipa#2\relax
-% \end{macrocode}
-% Then we pass this on to |\check@for@fil| which will make sure
-% that there isn't any |fil| present and if not does the rest of
-% the processing.
-% \begin{macrocode}
- \expandafter\check@for@fil \the\@tempskipa FIL\relax\check@for@fil
- {\the\@tempskipa}{#3}{#4}{#1}
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\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
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\gdef\get@plus@part #1ZLUS#2ZT#3\get@plus@part#4{
- #4=#2pt\relax
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\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
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-%
-%
-% \subsection{Special Output Routine Penalties}
-%
-%
-% \begin{macro}{\output@collect@penalty}
-% Special penalty marking the point at which the collection OR ended.
-% \begin{macrocode}
-\mathchardef\output@collect@penalty=20202
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\output@balance@penalty}
-% Special penalty marking the point at which the collection OR
-% should end collection because we want to balance the material.
-% \begin{macrocode}
-\mathchardef\output@balance@penalty=10010
-% \end{macrocode}
-% \end{macro}
-%
-%
-% Other special penalties are inbetween -10000 and -10010. Those will
-% not stop the collection OR but are instead recorded along the way.
-%
-% \begin{macro}{\output@columnbreak@penalty}
-% Special penalty marking the point a forced column break was
-% requested by the user.
-% \begin{macrocode}
-\mathchardef\output@columnbreak@penalty=10005
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\output@flush@float@penalty}
-% Special penalty to trigger float flushing for one or more types.
-% \begin{macrocode}
-\mathchardef\output@flush@float@penalty=10006
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\output@here@float@penalty}
-% Special penalty for floats that should stay with their callout.
-% \begin{macrocode}
-\mathchardef\output@here@float@penalty=10007
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\output@grid@align@penalty}
-% Special penalty for places that should fall on the page grid.
-% \begin{macrocode}
-\mathchardef\output@grid@align@penalty=10008
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-% \subsubsection{Utilities for Special Output Routine Penalties}
-%
-%
-% \begin{macro}{\add@badly@guarded@penalty}
-% Put a special penalty into the output and guard it with a
-% box. The reason this macro is called |\add@badly@guarded@penalty|
-% is that such a box of size zero is still messing up spacing
-% caluclations. Why? Because when the penalty is reached on the MVL
-% the preceeding line has already be fully added (i.e., including
-% its depth). This means that \TeX{} might not reach it at all in
-% time! For example, if the preceeding line would be the last line
-% of the page the depth would not be taken into account yet, but by
-% the time we reach the special penalty it has been added to
-% |\pagetotal| and that may result in not fitting anymore onto the
-% page.
-%
-% A solution would be to use a box that has the same depth as its
-% preceeding box and a negative height so that it effectively
-% doesn't modify the galley length. Easy, right? The only problem
-% is that in case of |\vadjust| (and that is unfortunately the more
-% important case) we just don't know what the preceeding depth is,
-% since |\prevdepth| will always give us a friendly |-1000pt| in
-% that case (start of a vertical sub-list\ldots).
-%
-% So not so easy after all. The way out of this dilemma turned out
-% to be complicated and involves a lot of strange corrective
-% actions in the collection process, see there for a replacement of
-% that box and what else can go wrong if one delves into messing
-% around with that part of \TeX.
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\add@guarded@penalty}
-% Put a special penalty into the output. To ensure that it doesn't
-% get mistakenly removed during breaking preceed it with a ``guard
-% box'' which is later removed again. --- Actually no longer used
-% but replacement isn't yet finalised.\footnote{CLEANUP!}
-% \begin{macrocode}
-\def\add@guarded@penalty#1
- {\guard@box{BUG:~\string#1}\penalty-#1\relax}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\guard@box}
-% Could be moved into the previous macro.
-%
-% The way it is written (using |\prevdepth|) this can only be used
-% in vertical mode! We have to carry over the |\prevdepth| and
-% append the box without adding any additional interline
-% space. Without it one gets nasty extra glue blobs of height
-% |\baselineskip| somewhere in the output.
-% \begin{macrocode}
-\def\guard@box#1{
- \dimen@\prevdepth
- \nointerlineskip
- \vbox to0pt{\vss \rlap{#1}\kern\z@}
- \prevdepth\dimen@
-}
-% \end{macrocode}
-% Better implementation? The above is wrong!\footnote{FIX!}
-% \begin{macrocode}
-\def\guard@box#1{
- \dimen@\prevdepth
- \nointerlineskip
- \begingroup
- \setbox\z@\vbox to\z@{\vss \rlap{#1}}
- \dp\z@\dimen@
- \box\z@
- \endgroup
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\remove@guard@box@from@cclv}
-% Remove a guard box again. This always happens in the OR and so we
-% hard code the box number for speed.
-%
-% Chris thinks this needs a maxdepth setting.
-% \begin{macrocode}
-\def\remove@guard@box@from@cclv{
- \global\setbox\@cclv \vbox{\boxmaxdepth\@maxdepth \unvbox\@cclv
- \global\setbox\removed@guard@box\lastbox}
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\readd@guarded@penalty}
-% Readding a guared penalty including the box that was removed
-% earlier. Probably not needed in the end either since the way it
-% is used at the moment we have a |\topskip| problem this
-% way.\footnote{FIX!!!!}
-% \begin{macrocode}
-\def\readd@guarded@penalty#1 {
- \box\removed@guard@box
-%FMi what about topskip?
- \penalty-#1\relax}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\removed@guard@box}
-% \begin{macrocode}
-\newbox\removed@guard@box
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-% \subsection{Columns and their Data Structures}
-%
-% \begin{macro}{\col@count}
-% We are collecting stuff for a given number of columns. This
-% number of column is available in a count register.
-% \begin{macrocode}
-\let\col@count \col@number % reuse a register from LaTeX
- % which is named differently there
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\curr@col@count}
-% Register denoting the column number of the current column while
-% we cut the galley etc. Should always be modified globally since
-% it is used within output routines.
-% \begin{macrocode}
-\newcount\curr@col@count
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \DescribeMacro\col@box@FOO
-% Per column number FOO we have one box register allocated in which
-% the column text from the galley is stored during trials and page
-% makeup.
-%
-% \DescribeMacro\col@ht@FOO
-% Per column number FOO we have dimen register allocated which
-% holds the vertical target size for the column during the trials.
-%
-% \DescribeMacro\col@t@floats@FOO@number
-% Per column number FOO we have a macro number in which we count
-% the number of top floats we have seen so far in this column. This
-% is used to implement |\pagesetup@float@area@sep| handling.
-%
-% \DescribeMacro\col@b@floats@FOO@number
-% Per column number FOO we have a macro number in which we count
-% the number of bottom floats we have seen so far in this column. This
-% is used to implement |\pagesetup@float@area@sep| handling.
-%
-%
-% \DescribeMacro\col@t@delta@FOO
-% Per column number foo we have a macro in which we record the
-% difference between the real size of all top floats (including
-% there separation spaces) and the nominal size which is used to
-% determine the vertical size of the remaining text column. The two
-% may differ if we do grid typesetting.
-%
-% \DescribeMacro\col@b@delta@FOO
-% Same kind of delta is recorded per column for the bottom floats.
-%
-% \DescribeMacro\fl@FOO@BAR
-% For each float type BAR (e.g., |figure|, |table|, etc.) and each
-% column number FOO we have a macro which holds the highest float
-% sequence number for floats of type BAR allocated to column FOO or
-% zero if no float has been allocated so far.
-%
-% \DescribeMacro{\fl@0@BAR}
-% For each float type BAR (e.g., |figure|, |table|, etc.)
-% |\fl@0@BAR| holds the highest sequence number in columns of the
-% previous page.
-%
-% \DescribeMacro\tfl@FOO@BAR
-% |\tfl@FOO@BAR| is like |\fl@FOO@BAR| but only stores information
-% about floats allocated to top areas.
-%
-%
-
-% \begin{macro}{\col@box@1}
-% \begin{macro}{\col@box@2}
-% \begin{macro}{\col@box@3}
-% \begin{macro}{\col@box@4}
-% \begin{macro}{\col@box@5}
-% \begin{macro}{\col@box@6}
-% Need a box per column (currently fixed at six) to hold material
-% from the galley for this column.
-% \begin{macrocode}
-\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
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\col@ht@ 1}
-% \begin{macro}{\col@ht@ 2}
-% \begin{macro}{\col@ht@ 3}
-% \begin{macro}{\col@ht@ 4}
-% \begin{macro}{\col@ht@ 5}
-% \begin{macro}{\col@ht@ 6}
-% Need a dimen\footnote{Could be a macro if we find ourselves to
-% use up too many dimens.} per column to hold its current vertical
-% target size.
-% \begin{macrocode}
-\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
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-%
-%
-% \subsubsection{Utilities for Columns and their Data Structures}
-%
-% \begin{macro}{\forall@columns}
-% If we want to do something to data structures for all column we
-% can use the macro |\forall@columns|. Within its argument the
-% current column is available in the register
-% |\curr@col@count|. The macro takes some pains to restore the
-% original value of |\curr@col@count| afterwards.
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\initialise@column@data}
-% \begin{macrocode}
-\def\initialise@column@data{
-%<*trace>
- \@tracepush{initialise@column@data}
-%</trace>
-% \end{macrocode}
-%
-% \begin{macrocode}
- \global\let\best@trial\@empty
-
- \forall@columns
- {
-
- \global\csname col@ht@ \the\curr@col@count\endcsname\textheight
-
-% \end{macrocode}
-%
-% \begin{macrocode}
- \expandafter
- \g@addto@macro\expandafter\best@trial\expandafter
- {
- \expandafter
- \global
- \csname col@ht@ \the\curr@col@count\endcsname
- \textheight
- }
-% \end{macrocode}
-% We haven't seen any top or bottom floats yet.
-% \begin{macrocode}
- \global\@namedef{col@t@floats@ \the\curr@col@count
- @number}{0}
- \global\@namedef{col@b@floats@ \the\curr@col@count
- @number}{0}
-% \end{macrocode}
-% For the same reason the delta values for top and bottom areas are
-% zeroed.\footnote{Using \texttt{\string\let} and
-% \texttt{\string\z@} in places like this would be more faster and
-% shorter, but it wouldn't work nicely in tracing as it would make
-% unexpandable macros. Perhaps the tracing versions should be made
-% specially.}
-% \begin{macrocode}
- \global\@namedef{col@t@delta@ \the\curr@col@count}{0pt}
- \global\@namedef{col@b@delta@ \the\curr@col@count}{0pt}
- }
-
-%<*trace>
- \tr@ce{\meaning\best@trial}
- \@tracepop{initialise@column@data}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-% \subsubsection{User Commands for Columns}
-%
-%
-% \begin{macro}{\columnbreak}
-% And here is the user command formaking a column
-% break:\footnote{All this is stolen from \texttt{multicol.sty} and
-% there is still code that doesn't belong here.} |\columnbreak| is
-% modelled after |\pagebreak| except that we generate a penalty
-% |-\output@columnbreak@penalty|.
-% \begin{macrocode}
-\def\columnbreak{
-% \end{macrocode}
-% We have to ensure that it is only used within a multicolumn
-% environment since if that penalty would be seen by the unmodified
-% \LaTeX{} output routine strange things would happen.
-% \begin{macrocode}
- \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}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-%
-%
-%
-%
-% \subsection{Float Areas and their Data Structures}
-%
-% Naming conventions for float areas is as follows:
-% \begin{quote}
-% \meta{identifier}\meta{start-column}\meta{span-count}.
-% \end{quote}
-% The \meta{identifier} is a single letter denoting the type of area,
-% e.g., |t| for top, |b| for bottom. The \meta{span-count} is a single
-% digit denoting the number of columns to span. The
-% \meta{start-column} is a single digit\footnote{with a bit of care in
-% the code this could be extended to allow more than one digit.}
-% denoting the start column of the area. Thus |t32| is a top area
-% starting at column three and spanning two columns ie three and four.
-% A restriction due to the naming scheme is that currently no more than
-% 9 columns are possible.
-%
-% Only a subset of the float areas is allowed to be popolated on a
-% page. In essense the current algorithm does not support placements
-% that result in splitting the text of a column due to a float (other
-% than column `here' floats).\footnote{Perhaps this restriction is
-% lifted one day.} This means that if $pcs$ ($p=\textrm{pos}$,
-% $c=\textrm{column}$, $s=\textrm{span}$) is a float area that is
-% being populated then it must prevent populating all float areas that
-% satisfy either
-% \[
-% pij \textrm{ with } i < c \leq i+j < c+s
-% \]
-% or
-% \[
-% pij \textrm{ with } i \leq c+s < i+j \leq \verb=\col@count=
-% \]
-% The first formula describes the areas which partly overlap from the
-% left, the second formula describes those that partly overlap from
-% the right. Areas which are sub- or super-areas, e.g., \texttt{t13}
-% and \texttt{t22} do not affect each other. The above restriction is
-% necessary to prevent situations like
-%\begin{verbatim}
-%aaaaaaaaaaa 444
-%aaaaaaaaaaa 444
-%aaaaaaaaaaa 444
-%111 222 bbbbbbb
-%111 222 bbbbbbb
-%111 222 bbbbbbb
-%111 222 333 444
-%111 222 333 444
-%\end{verbatim}
-%
-%
-% For each area |FOO| (e.g., |t13|) we keep a number of global
-% variables to store relevant data. These are the following
-% variables\footnote{Not a consistent lot}:
-%
-% \DescribeMacro\area@FOO
-% Floats allocated to the area |FOO| by the page building process
-% are stored as an |\@elt| list in the macro |\area@FOO|.
-%
-% \DescribeMacro\pagesetup@FOO@float@num
-% The maximum number of floats allowed in area |FOO| is stored in
-% the macro |\pagesetup@FOO@float@num|.
-%
-% \DescribeMacro\FOO@@float@count
-%
-% The number of floats currently allocated to area |FOO| is stored
-% in the count register |\FOO@@float@count|.\footnote{This is a
-% waste of registers!}
-%
-% \DescribeMacro\pagesetup@FOO@class@close
-% The areas that should be closed for floats of the same sequence class the
-% moment a float is placed into area |FOO|. This is a comma
-% separated list.
-%
-% \DescribeMacro\pagesetup@FOO@all@close
-% The areas that should be closed for all float sequence classes the
-% moment a float is placed into area |FOO|. This is a comma
-% separated list.
-%
-%
-%
-% \begin{macro}{\known@areas}
-% |\known@areas| are the areas known to the system.\footnote{or
-% something else, the semantics are still changing} Initialisation
-% is done when declaring individual areas.
-% \begin{macrocode}
-\def\known@areas{}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\used@areas}
-% |\used@areas| are the areas used by the current page setup.
-% Initialisation is done in the page setup template so the
-% definition below is arbitrary.
-% \begin{macrocode}
-\def\used@areas{ t11 b11 }
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\@activelist}
-% \begin{macrocode}
-\let\@activelist\@empty
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@mvllist}
-% \begin{macrocode}
-\let\@mvllist\@empty
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\area@ddd}
-% The list of deferred floats (which we consider being an area in
-% some respects).
-% \begin{macrocode}
-\let\area@ddd\@empty
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\pagesetup@ddd@class@close}
-% \begin{macro}{\pagesetup@ddd@all@close}
-% \begin{macrocode}
-\def\pagesetup@ddd@class@close{\pagesetup@area@list}
-\let\pagesetup@ddd@all@close\@empty
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\this@open@areas}
-% \begin{macro}{\saved@this@open@areas}
-% In |\this@open@areas| we store the float areas which we will try
-% to place a float onto the current page. These areas are tried one
-% after another until the float is successfully placed or we run
-% out of areas. The list does not have any separator (as we assume
-% that all areas are denoted by a letter followed by two digits).
-%
-% |\saved@this@open@areas| is the seved version needed for
-% backtracking if we encounter a flush point that can't be resolved.
-% \begin{macrocode}
-\let\this@open@areas\@empty
-\let\saved@this@open@areas\@empty
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\this@closed@areas}
-% In |\this@closed@areas| we store the float areas which have been
-% closed for the current float while trying to place it. In this
-% list each area name is followed by a comma (to avoid spurious
-% matches). It is initialised with |closed@\this@class @areas| when
-% we fetch a new float to try. Once the float is placed we write
-% the then current value back.
-% \begin{macrocode}
-\let\this@closed@areas\@empty
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\this@page@closed}
-% In |\this@page@closed| we store the float areas which have been
-% closed for all float types. In this list each area name is
-% followed by a comma (to avoid spurious matches).
-% \begin{macrocode}
-\let\this@page@closed\@empty
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\t11@float@count}
-% \begin{macro}{\t21@float@count}
-% \begin{macro}{\b11@float@count}
-% \begin{macro}{\b21@float@count}
-% The float counts are allocated dynamically when an area is
-% declared if they are not defined, but we have a few registers
-% left over from \LaTeX{}'s old OR so we might as well use them.
-% \begin{macrocode}
-%\expandafter\newcount\csname t11@float@count\endcsname
-\expandafter\let\csname t11@float@count\endcsname \@topnum
-%\expandafter\newcount\csname b11@float@count\endcsname
-\expandafter\let\csname b11@float@count\endcsname \@botnum
-%\expandafter\newcount\csname t12@float@count\endcsname
-\expandafter\let\csname t12@float@count\endcsname \@dbltopnum
-%\expandafter\newcount\csname b12@float@count\endcsname
-\expandafter\let\csname b12@float@count\endcsname \@dblbotnum
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\ddd@float@count}
-% And we need to declare the one for the defer area is that isn't
-% going through the normal initialisation process.
-% \begin{macrocode}
-\newcount\ddd@float@count
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\pagesetup@float@area@sep}
-% |\pagesetup@float@area@sep| is the separation to use between two
-% adjacent float areas.
-% \begin{macrocode}
-\newskip\pagesetup@float@area@sep
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\pagesetup@float@text@sep}
-% |\pagesetup@float@text@sep| is the separation to use between
-% column text and adjacent float areas.
-% \begin{macrocode}
-%\newskip\pagesetup@float@text@sep
-\let\pagesetup@float@text@sep\textfloatsep % reuse register
-\let\textfloatsep\@undefined
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\pagesetup@float@float@sep}
-% |\pagesetup@float@float@sep| is the separation to use between
-% two floats in the same float area.
-% \begin{macrocode}
-%\newskip\pagesetup@float@float@sep
-\let\pagesetup@float@float@sep\floatsep % reuse register
-\let\floatsep\@undefined
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\pagesetup@float@text@shrink}
-% |\pagesetup@float@text@shrink| is the allowed shrinkability of
-% |\pagesetup@float@text@sep|. This is used if we are doing grid
-% typesetting and have to adjust the vertical size of the column.
-% \begin{macrocode}
-\newdimen\pagesetup@float@text@shrink
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\pagesetup@float@inline@sep}
-% |\pagesetup@float@inline@sep| is the separation to use between
-% two floats in the same float area.
-% \begin{macrocode}
-%\newskip\pagesetup@inline@float@sep
-\let\pagesetup@float@inline@sep\intextsep % reuse register
-\let\intextsep\@undefined
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\pagesetup@float@inline@shrink}
-% |\pagesetup@float@inline@shrink| is the allowed shrinkability of
-% |\pagesetup@float@inline@sep|. This is used if we are doing grid
-% typesetting and have to adjust the vertical size of object to be
-% added, e.g., an inline float with its caption.
-% \begin{macrocode}
-\newdimen\pagesetup@float@inline@shrink
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-% \subsubsection{Utilities for Float Areas and their Data Structures}
-%
-%
-% \begin{macro}{\initialise@areas}
-% Initialise all float areas used within the current page setup.
-% \begin{macrocode}
-\def\initialise@areas{
- \expandafter\initialise@areas@loop
- \used@areas
- \relax\relax\relax
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\initialise@areas@loop}
-% The |\initialise@areas@loop| picks up the next three tokens and
-% interprets them as the component of an area name.
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\first@of@type}
-% The macro |\first@of@type| takes a \meta{type} name as its first
-% argument and an \meta{area} area name as its second argument and
-% will return in the macro |\returned@sequence@number| the sequence
-% number of the first float of type \meta{type} currently in
-% \meta{area}. If there is no float of type \meta{type} in this
-% area it will return |-1| (impossible sequence number).
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\first@of@type@aux}
-% This macro picks up the type definition in the data structure of
-% a float and compares it with the name started in |\@tempb|. If
-% they agree |\returned@sequence@number| will get updated to
-% contain the sequence number of the float.
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\last@of@type}
-% The macro |\last@of@type| takes a \meta{type} name as its firat
-% argument and an \meta{area} area name as its second argument and
-% will return in the macro |\returned@sequence@number| the sequence
-% number of the last float of type \meta{type} currently in
-% \meta{area}. If there is no float of type \meta{type} in this
-% area it will return |-1| (impossible sequence number).
-% \begin{macrocode}
-\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
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\last@of@type@aux}
-% \begin{macrocode}
-\def\last@of@type@aux#1#2#3#4#5#6#7{
- \def\@tempa{#6}
- \ifx\@tempa\@tempb
- \gdef\returned@sequence@number{#7}
- \fi}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\setup@this@area}
-%
-% Whenever the algorithm works with some area as the current
-% candidate for putting a float into it uses the following commands
-% to reference this area:
-%
-% \DescribeMacro\this@area
-% The macro |\this@area| holds the name of the candidate area, e.g.,
-% it would expand to something like |t13|.
-%
-% \DescribeMacro\this@area@type
-% The macro |\this@area@type| holds the ``type'' of the area, e.g., |t|
-% in the above example.
-%
-% \DescribeMacro\this@area@col@number
-% The macro |\this@area@col@number| holds the starting column of the
-% area, e.g., |1| in the above example.
-%
-%
-% \DescribeMacro\this@area@span@number
-% The macro |\this@area@span@number| holds the number of columns
-% spanned by the area, e.g., |3| in the above example.
-%
-% All the above macros are globally assigned when calling
-% |\setup@this@area|. The argument is fully expanded (!) since one
-% typical usage to pick up the first area from an area like
-% |\this@open@areas| which can then be done within the argument.
-%
-% \begin{macrocode}
-\def\setup@this@area #1 {
- \xdef\this@area{#1}
-% \end{macrocode}
-% This really relies on |\this@area| containing exactly three
-% tokens (no error recovery if not).
-% \begin{macrocode}
- \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
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\update@this@area@columns}
-%
-% If we have to do updates for all columns that are spanned by the
-% current target area we can call |\update@this@area@columns|. It
-% loops through the columns with |\count@| referring to the current
-% column. Data structure updates have to be global as everything
-% happens within a group.
-% \begin{macrocode}
-\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
-%<*trace>
- \tr@ce{looking~ at~ column:~ \the\count@}
-%</trace>
- #1
- \repeat
- \endgroup
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-% \newpage
-% \subsection{Collection Output Routine}
-%
-% \begin{description}
-% \item[Entry:] |\setup@collection@or|
-% \item[Exit:] |\setup@float@placement|
-% \item[Prereq:] |\initialise@next@page| should have been called before.
-% \item[Description:] Grab enough text (and float call-outs) to obtain
-% a galley big enough to form the next text page. The page goal is
-% set to a value high enough to ensure that in normal cases text
-% for all columns of the page is collected, i.e, we have a safety
-% margin of 5 extra lines per column.\footnote{This should be made
-% customisable for unusual jobs!}
-%
-% If the output routine is triggered with a special penalty (in the
-% range of $-10000>p>-10010=|\output@balance@penalty|$) the penalty
-% is moved into the collection box |\partial@galley@box| without
-% further processing; otherwise the collection is ended and all
-% collected material is moved to |\@holdpg| for use in page
-% production.
-%
-% \item[Flow:]
-%\begin{footnotesize}
-%\begin{verbatim}
-% \setup@collection@or
-% |
-% V
-% New OR: \collection@or
-% |
-% |<-----------------------------------------
-% | |
-% (natural end of collection reached?) |
-% | | |
-% yes no |
-% | | |
-% | (record special penalty and carry on)----
-% |
-% V
-% \setup@float@placement
-%\end{verbatim}
-%\end{footnotesize}
-% \end{description}
-%
-% Chris noted that |\@holdpg| never gets emptied. This could be
-% done when the Collection OR is started for a new page (in this
-% next macro).\footnote{FIX}
-%
-% \begin{macro}{\setup@collection@or}
-% \begin{macrocode}
-\def\setup@collection@or{
-%<*trace>
- \@tracepush{setup@collection@or}
-%</trace>
- \global\holdinginserts\@ne
-% \end{macrocode}
-% We set the |\vsize| for collection to the height of a single
-% column (plus a safety margin of currently five lines to allow for
-% vanishing space at margins) multiplied by the number of columns.
-% \begin{macrocode}
- \global\vsize\textheight
- \global\advance\vsize 5\baselineskip
- \global\multiply\vsize \col@count
-%<*trace>
- \tr@ce{collection~vsize:~\the\vsize }
-%</trace>
-% \end{macrocode}
-% Initialising the flush point handling:
-% \begin{macrocode}
- \@flushseenfalse
- \@flushfailfalse
-% \end{macrocode}
-% We may have to restart the collection (whenever we find a here or
-% a flush point) and we don't want to get extra space added via
-% |\topskip|. So we can either make |\topskip| zero during
-% collection (current strategy) or back it out whenever we restart.
-%
-% We can't set topskip to zero now since a) we want a proper
-% |\topskip| for the first column and b) due to a bloody fix for the
-% old \LaTeX{} OR, a value of |0pt| is set to |1sp| in
-% |\begin{document}| and this results in adding |1sp| at every
-% special point\ldots no, we definitely do not want this! It took
-% me ages to find out why the grid design macros didn't work.
-% \begin{macrocode}
- \xdef\saved@topskip{\the\topskip}
-% \end{macrocode}
-%
-% \begin{macrocode}
- \global\output{\collection@or}
-%<*trace>
- \@tracepop{setup@collection@or}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\if@collecting@new@material}
-% There are actually two collecting modes: one when the recent
-% contributions are empty and we are really collecting material
-% that we haven't seen before and one where we collect material
-% that has been collected on a previous collection pass and has been
-% placed again on to the main vertical list. The reason why we need
-% to differentiate between the two is that in the second case we
-% have to handle the special penalties differently since by now
-% they are already surrounded by the proper guard boxes before and
-% after and we better do not disturb this fragile setup.
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\collection@or}
-% The output routine during the collection phase assembles the
-% material until enough has been gathered to be sure to fill a
-% page.
-% \begin{macrocode}
-\def\collection@or{
-%<*trace>
- \@tracepush{collection@or}
- \tr@ce{output~pen:~ \the\outputpenalty}
-%{\x\showoutput\showbox255}
-%</trace>
-% \end{macrocode}
-% We first look if the call to the OR is due to a special penalty.
-% \begin{macrocode}
- \@testfalse
- \ifnum\outputpenalty < -\@M
- \ifnum\outputpenalty > -\output@balance@penalty
- \@testtrue
- \fi
- \fi
- \if@test
-%<*trace>
- \tr@ce{Forced~ break~(\the\outputpenalty)~ seen\on@line}
-%</trace>
-% \end{macrocode}
-% Whenever a special penalty, i.e., one between $-10000 > p >
-% -10010$ is encountered we need some magic:
-% \begin{itemize}
-% \item We want to keep the the penalty in the collected material but
-% nevertheless carry on with the collection. Simply moving the
-% collected material to a separate box is not enough since then
-% we will restart the collection with an empty page and thus
-% receive a |\topskip| glue as well as probably losing material
-% if there is anything discardable after the special penalty.
-% \item But putting a zero box back and doing something to fix the
-% problem with the |\topskip| glue isn't good either in case we
-% later actually want to break after the line with special
-% penalty, since then we would start a page with our inserted
-% box, and in this case we would like to get a proper |\topskip|
-% and we would like to get rid of discardable stuff.
-% \item And there is another problem, we need a guard box in front of
-% that special penalty, but this guard box should not be simply a
-% |\null| box (as it is right now added by
-% |\add@badly@guarded@penalty|) since that will result in wrong
-% page calculations because it will make \TeX{} add the depth of
-% the precious line to the page total which it shouldn't.
-% \end{itemize}
-% So what to do? First of all we remove the guard box in front of
-% the special penalty (which is now at the end of box 255) since we
-% want to replace that with something better, then we
-% store away the depth of box 255 since we need that in a minute.
-% \begin{macrocode}
- \remove@guard@box@from@cclv
-% \end{macrocode}
-% We really have to say |\dp\@cclv| not |\pagedepth|. The latter is
-% always zero in the OR which looks suspiciously like a bug or at
-% least an inconsistency when Don implemented the change from \TeX2
-% to \TeX3 (in \TeX2 |\page...| registers were useless in the OR,
-% now only |\pagedepth| seems to be left).
-% \begin{macrocode}
- \dimen@\dp\@cclv
-% \end{macrocode}
-% Then we subtract the size of the collected material from
-% |\vsize| since we will store it away in a separate box for a
-% while. Note that we have to use |\ht\@cclv| here not |\pagetotal|
-% since the latter might be to large because of that |\null|
-% box. The height of 255 on the other hand is, after the removal of
-% that box the natural height of the material.
-% \begin{macrocode}
- \global\advance\vsize-\ht\@cclv
-% \end{macrocode}
-% Now we append the material to |\partial@galley@box|, this is
-% straight forward.
-% \begin{macrocode}
- \global\setbox\partial@galley@box
- \vbox{\ifvoid\partial@galley@box
- \else
- \unvbox\partial@galley@box
- \fi
- \unvbox\@cclv
-% \end{macrocode}
-% But how to add the penalty and how to guard it? We need a box or
-% something to ensure the penalty doesn't get lost at a column
-% break but we also want to avoid that \TeX{} adds the depth of the
-% preceding line to |\pagetotal|. Fortunately we know this depth by
-% now (we have just stored it in |\dimen@|), something we didn't
-% know at the time the we added the penalty with
-% |\add@badly@guarded@penalty|. So we could back up and then add a
-% box with zero height and that depth. This way a break directly
-% after this line would have the same |\pagetotal| as a break at
-% the special penalty. In fact, instead of backing up using a
-% |\kern| or a |\vskip| we can simply make the height of the box
-% negative. The advantage is that this way we don't generate a
-% break point between the box and a preceding box and thus don't
-% have to use special precautions to prevent \TeX{} from breaking in
-% front of the guard box.\footnote{This statement is only true for
-% special penalties added using \texttt{\string\vadjust}, i.e., in
-% hmode. If the penalty was added between paragraphs then there
-% might be vertical space in front of the box. This might need
-% special handling too. CHECK!}
-% \begin{macrocode}
- \setbox\z@\vbox to-\dimen@{}
- \dp\z@\dimen@
- \box\z@
- \penalty\outputpenalty
- }
-%{\showoutput\batchmode\showbox\partial@galley@box\errorstopmode}
-% \end{macrocode}
-% So now we have put everthing we need into the
-% |\partial@galley@box|, but how do we restart our collection
-% process without running into the problems outlined above?
-%
-% Well, right now on the recent contributions there will be a
-% penalty node (from our special penalty) which gets set to 10000
-% by \TeX{} followed perhaps by another penalty from the line
-% breaking followed probably by interline glue calculated to make
-% the next line of text fit vertically with the preceding one ---
-% and we don't want to loose that that glue if we are ending up in
-% the middle of a column. But we want to make it vanish if we
-% happen to finally break at the special penalty place.
-%
-% So the trick is that we a) disable |\topskip| by setting it to
-% |-\maxdimen| (not zero this might be too large still) and b) we
-% add another of those funny boxes followed by a penalty of zero to
-% allow for a break after it.
-%
-% If later on all this is put together again into a single box (in
-% |\@holdpg|) we will have the following sequence there:
-% \begin{itemize}
-% \item text line (box) preceding the special penalty with depth $d$
-% or some other vertical material in which case $d=0\texttt{pt}$
-% \item special box with height $-d$ and depth $d$
-% \item special penalty, e.g. $-10008$
-% \item |\topskip| glue of 0pt
-% \item special box with height $-d$ and depth $d$
-% \item |\penalty| 0
-% \item |\penalty| 10000
-% \item perhaps a |\penalty| and/or interline glue
-% \item perhaps the next text line (box)
-% \end{itemize}
-% Now if during later processing we hit the special penalty
-% |\pagetotal| has the same value as if we would have broken the
-% galley directly after the text line, in other words we do not see
-% the penalty too late (assume this happens to be the last line of
-% the column then if |\pagetotal| would also have the extra depth
-% added to it it might have been overfull and the penalty not being
-% considered at all for this column).
-%
-% After the OR's have dealt with the special penalty, e.g., by
-% flushing some floats, etc. the penalty will be replaced by 10000
-% and thus the next time the galley is processed there is no
-% breakpoint between the two special boxes any more. As a result
-% the next potential breakpoint is the penalty 0 which again
-% results in exactly the same |\pagetotal| as before, i.e., if the
-% text line was the last line to fit in the column then this
-% breakpoint will still fit there. Thus if we break the column
-% there then the interline glue etc will vanish and \TeX{} will
-% insert |\topskip| glue (which has be set back to a normal value
-% by then). If on the other hand, this break point is not chosen
-% the interline glue will stay and thus the two text lines, before
-% and after the special penalty will sit one |\baselineskip| apart
-% just as they should.
-%
-% Woah. What did Don said on page 125 of \textit{The \TeX{}book}?
-% (Deep breath.) You got that?\footnote{There are probably still
-% cases that aren't covered I fear and the need for an explicit
-% penalty 0 at the end is kind of toublesome, so we have to see if
-% this needs further refinements.}
-%
-% And here is already the first case where the above method is not
-% appropriate: if we stumble across a |\output@columnbreak@penalty|
-% we need to discard any following glue, so we don't want a box
-% intervene here.\footnote{Once this is interfaced with the galley
-% code problems like this should vanish since then we can ensure
-% that all such penalties are added to the galley on at save
-% places. REDO THEN!}
-% \begin{macrocode}
- \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
-% \end{macrocode}
-%
-% \begin{macrocode}
- \ifnum\outputpenalty=-\output@flush@float@penalty
-%<*trace>
- \tr@ce{Forced~ break~ =~ flush~ float~ point}
-%</trace>
- \@flushseentrue
- \fi
-% \end{macrocode}
-% Otherwise either the we reached the natural end of the
-% collection, or the point where we have been before (in case we
-% are recollecting previously seen material) or we reached an
-% |\output@balance@penalty|.
-% \begin{macrocode}
- \else
- \ifnum\outputpenalty = -\output@collect@penalty
-% \end{macrocode}
-% If we got an |-\output@collect@penalty| then we are at the point
-% to which the previous collection pass got. So, away with the
-% guard box, then everything back onto the MVL and as a penalty we
-% try to put what we have found in the previous collection pass.
-% \begin{macrocode}
- \remove@guard@box@from@cclv
- \unvbox\@cclv
-%<*trace>
- \tr@ce{reinsert~penalty:~ \saved@outputpenalty\space
- (unless~ 10000~ or~ <~ -9999)}
-%</trace>
- \ifnum\saved@outputpenalty > -\@M
- \penalty
- \ifnum\saved@outputpenalty=\@M
- \z@
- \else
- \saved@outputpenalty\relax
- \fi
-% \end{macrocode}
-% We have a special situation to account for here: if we have a
-% |\pagebreak| that ended the collection last time then it might
-% still be the case that we haven't got to this point due to
-% floats. So we would need to put that penalty back. But only then,
-% and therese the catch! The alternative is to not stop a
-% collection as such a point so that this problem doesn't arise in
-% the first place. Right now we lose the
-% penalty.\footnote{Unresolved situation. FIX!}
-% \begin{macrocode}
- \else
- \fi
-% \end{macrocode}
-% Finally we change the |@collecting@new@material| switch since we
-% are from now on looking at really new material.
-% \begin{macrocode}
- \@collecting@new@materialtrue
- \else
-% \end{macrocode}
-% Next case is not functional right now\ldots
-% \begin{macrocode}
- \ifnum\outputpenalty = -\output@balance@penalty
- \@balancetrue
-%<*trace>
- \tr@ce{BALANCE:~ break~ seen\on@line}
-%</trace>
- \xdef\saved@outputpenalty{0}
-% \end{macrocode}
-% This is now the point where the collection ended naturally: we
-% save the penalty that triggered it and combine the
-% |\partial@galley@box| if it contains material with the stuff now
-% in 255 and put everything into |\@holdpg|.
-% \begin{macrocode}
- \else
- \xdef\saved@outputpenalty{\the\outputpenalty}
- \fi
- \ifvoid\partial@galley@box
- \global \setbox\@holdpg\box\@cclv
- \else
-%<*trace>
- \tr@ce{Re-adding~ forced~ break(s)~ for~ splitting}
-%</trace>
- \global\setbox\@holdpg\vbox{
- \unvbox\partial@galley@box
- \unvbox\@cclv}
- \fi
-
-%\showbox\@holdpg
-
- \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
-%<*trace>
- \@tracepop{collection@or}
-%</trace>
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\partial@galley@box}
-% Need a box to store the partially collected galley.
-% \begin{macrocode}
-\newbox\partial@galley@box
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-% \begin{macro}{\initialise@float@class}
-%
-% \begin{macrocode}
-\def\initialise@float@class#1{
-%<*trace>
- \@tracepush{initialise@float@class}
-%</trace>
- \count@0\LastMark{#1}
-%
-% next line no longer used
-% \global\expandafter\mathchardef\csname count@#1\endcsname\count@
-%
-%<*trace>
- \tr@ce{count~ (#1) = \the\count@}
-%</trace>
-% \end{macrocode}
-%
-% At some point the set of open areas at page start (for a
-% given type of floats) should be specifiable through some
-% templates. Using |\used@areas| is not really the right thing
-% to do.\footnote{Code should vanish one day}.
-% \begin{macrocode}
- \global\expandafter\let\csname open@#1@areas\endcsname\used@areas
- \global\expandafter\let\csname closed@#1@areas\endcsname\@empty
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*trace>
- \tr@ce{open~ (#1) = \csname open@#1@areas\endcsname}
- \tr@ce{closed~ (#1) = \csname closed@#1@areas\endcsname}
-%</trace>
-% \end{macrocode}
-%
-% |\fl@1@figure| are macros that expands to the highest numbered
-% figure callout in this column (or zero if there is none).
-% |\fl@0@figure| is the highest value from previous pages (or zero
-% if there was never any float of this type).
-% \begin{macrocode}
- \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
-% \end{macrocode}
-% |\tfl@1@figure| is like |\fl@1@figure| but only stores
-% information about floats allocated to top areas.
-% \begin{macrocode}
- \expandafter\xdef
- \csname tfl@ \the\curr@col@count @#1\endcsname{0}
- }
-%<*trace>
- \@tracepop{initialise@float@class}
-%</trace>
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \newpage
-%
-% \subsection{Placing Floats}
-%
-%
-% \begin{description}
-% \item[Entry:] |\setup@float@placement|
-% \item[Exit:] |\setup@grab@column@or| or |\setup@best@column@or|
-% \item[Prereq:]
-% \item[Description:]
-% \item[Flow:]
-%\begin{footnotesize}
-%\begin{verbatim}
-% \setup@float@placement
-% |
-% V
-%(2)--> \float@placement@loop
-% |
-% <run with floats?>
-% | |
-% yes no----------> \setup@grab@column@or
-% |
-% V
-% \trial@inner@loop
-% |
-% V
-% <current float successfully placed in previous trial?>
-% | |
-% no yes
-% | |
-% (means we now try V
-% again using different \try@next@float <-------------------
-% placement rules below ) | |
-% | | |
-% | <\@activelist empty?> |
-% | | | |
-% | no yes |
-% | | | |
-% | | V |
-% | (get it) \@activelist@empty@action |
-% | | (= \setup@best@column@or) |
-% -------------v---------------- |
-% | |
-% -----> \try@this@area (= \std@try@this@area, or |
-% | | \relaxed@try@this@area) |
-% | | |
-% | <still open areas for current float type?> |
-% | | | |
-% | yes no---------------(defer float)--------------
-% | | |
-% | (do some tests and perhaps |
-% | close area this way) |
-% | | |
-% | <float allowed on this page/column (according to tests)?> |
-% | | | |
-% | yes no---------------(defer float)--------------
-% | |
-% | <current area got closed by any test?>
-% | | |
-% | yes no
-% | | |
-% | (select next area) |
-% | | |
-% -------- V
-% \pretests@success@action (\setup@grab@column@or)
-%\end{verbatim}
-%\end{footnotesize}
-% \end{description}
-%
-%
-%
-%
-%
-% \begin{macro}{\if@fail}
-% \begin{macrocode}
-\newif\if@fail
-\def\@failfalse{\global\let\if@fail\iffalse}
-\def\@failtrue{\global\let\if@fail\iftrue}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\setup@float@placement}
-%
-% \begin{macrocode}
-\def\setup@float@placement {
-% initialise before trial loop (needs work)
-%<*trace>
- \@tracepush{setup@float@placement}
-%</trace>
-% \end{macrocode}
-% A bit statistics: how many floats do we have on the
-% |\@activelist|?
-% \begin{macrocode}
-%<*progress>
- \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@
-%</progress>
-% \end{macrocode}
-% We need the list of here floats during all trials. They are
-% therefore saved in |\saved@herelist| at this point which is then
-% used to initialise |\@herelist| at the beginning of each trial.
-% \begin{macrocode}
- \global\let\saved@herelist\@herelist
-% \end{macrocode}
-%
-% \begin{macrocode}
- \tighten@float@placement@conditions
-% \end{macrocode}
-% First time we run the |\float@placement@loop| we run it without
-% actually trying any floats (i.e., we are just cutting the
-% galley).\footnote{Could be improved: if there are no floats then
-% we run it once too often this way (per page) so\ldots}
-% \begin{macrocode}
- \run@with@floatsfalse
- \float@placement@loop
-%<*trace>
- \@tracepop{setup@float@placement}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\float@placement@loop}
-% Place the galley box back on the MVL. Needs to be done via the
-% special output routine call |\mark@restore@state| to ensure that
-% \TeX's primitive marks reflect the `logical' previous page rather
-% than the previous actual output routine call.
-% \begin{macrocode}
-\def\float@placement@loop{
-%<*trace>
- \@tracepush{float@placement@loop}
-%</trace>
-% \end{macrocode}
-%
-% \begin{macrocode}
- \deadcycles\z@
- \global\let\@activelist@empty@action\setup@best@column@or
- \global\let\pretests@success@action\setup@grab@column@or
-% \end{macrocode}
-%
-% If we are doing trials we have to place a special penalty at the
-% end of the MVL but if we are cutting up the galley for
-% typesetting we don't want this penalty. Since at this point it is
-% not clear in which case we are we defer this action until
-% later.\footnote{This part of the documentation is no longer true,
-% we now add it below. CORRECT DOCU}
-%
-% |\mark@restore@state| state is a special output routine those
-% only purpose is to reinitialise the state of the mark
-% mechanism. Its argument is executed at the of that OR.
-% \begin{macrocode}
- \mark@restore@state{
-% \end{macrocode}
-% Initialising the grabbing trials means putting the saved material
-% back onto the MVL and reinitialising the here float list.
-% \begin{macrocode}
- \unvcopy\@holdpg
- \ifnum\saved@outputpenalty > -1073741824\relax
- \add@badly@guarded@penalty\output@collect@penalty
- \fi
- \global\let\@herelist\saved@herelist
-% \end{macrocode}
-%
-% The we can start the actual loop: if we run with floats we go to
-% |\trial@inner@loop| otherwise we immediately setup the grap
-% column OR.
-% \begin{macrocode}
- \ifrun@with@floats
- \trial@inner@loop
- \else
- \setup@grab@column@or
- \fi
- }
-%<*trace>
- \@tracepop{float@placement@loop}
-%</trace>
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\trial@inner@loop}
-% Alternative entry into the float placement trial loop. This can
-% be used by setting |\@activelist@empty@action| and
-% |\pretests@success@action| to different values, e.g., for trying
-% float pages without the overhead of the grabcolumn output
-% routine, etc.
-% \begin{macrocode}
-\def\trial@inner@loop{
-%<*trace>
- \@tracepush{trial@inner@loop}
-%</trace>
-% \end{macrocode}
-% If |\if@fail| is true we have already tried the current float
-% before. This means we either do a retry with relaxed conditions
-% (in which case the current area to try was suitably modified
-% beforhand) or else we have just started with a new float and
-% should try the first area of |\this@open@areas|.
-% \begin{macrocode}
- \if@fail
- \@failfalse
- \@flushfailfalse
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*progress>
- \global\advance\trial@count\@ne
-%</progress>
-% \end{macrocode}
-%
-% \begin{macrocode}
- \do@next\try@this@area
- \else
- \do@next\try@next@float
- \fi
-%<*trace>
- \@tracepop{trial@inner@loop}
-%</trace>
- \do@continue
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\trial@count}
-% To gather statistics we count the number of trials per page.
-% \begin{macrocode}
-%<*progress>
-\newcount\trial@count
-%</progress>
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\try@this@area}
-% |\try@this@area| is |\let| to the right definition before it is
-% called so on top-level it is defined to be an error.
-% \begin{macrocode}
-\let\try@this@area\ERROR
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\try@next@area}
-% |\try@next@area| first updates |\this@open@areas| by removing the
-% first area in this list and then calls |\try@this@area|. Thus it
-% should never be called if |\this@open@areas| is already empty.
-% \begin{macrocode}
-\def\try@next@area{
- \xdef\this@open@areas{\expandafter\@gobblethree\this@open@areas}
-%<*progress>
- \global\advance\trial@count\@ne
-%</progress>
- \try@this@area
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\try@next@float}
-% If there is still a float on the active list take it and try to
-% place it in the next open float area (which will be the same as
-% the current area after a successful trial). If there are no
-% floats left execute |\best@trial| to return to that state then
-% switch to the bestcolumn output routine to begin typesetting
-% columns.
-% \begin{macrocode}
-\def\try@next@float{
-%<*trace>
- \@tracepush{try@next@float}
-%</trace>
- \@next\@currbox\@activelist{
-%<*trace>
- \tr@ce{currbox:~ \@currbox}
-%</trace>
-%<*progress>
- \progress{Float:~ \@currbox}
-%</progress>
- \expandafter\update@this@float@structure\the\toks\@currbox
-%<*trace>
- \tr@ce{saved@this@open@areas~(init):~
- \saved@this@open@areas\space :=~\this@open@areas}
-%</trace>
- \global\let\saved@this@open@areas\this@open@areas
-%<*progress>
- \global\advance\trial@count\@ne
-%</progress>
- \try@this@area
- }
-% \end{macrocode}
-% no floats left\ldots
-% \begin{macrocode}
- {
-%<*progress>
- \progress@nl{STATS:~ trials~ =~ \the\trial@count}
- \global\trial@count\z@
-%</progress>
- \@activelist@empty@action
- }
-%<*trace>
- \@tracepop{try@next@float}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-% \begin{macro}{\update@this@float@structure}
-% Each float box has an associated token register storing several
-% information fields.
-% \begin{enumerate}
-% \item[1] float caption (set by caption command)
-% \item[2] Currently unused (could have callout page number, set by
-% |\best@column@or|).
-% \item[3] saved label string
-% \item[4] `user counter' number (per-type count) set by float environment.
-% \item[5] Allowed float areas (from default or optional arg.)
-% \item[6] float type (currently this is the long name, eg figure) should
-% probably be the single token name, to allow quicker testing.
-% \item[7] float sequence number.
-% \end{enumerate}
-%
-% This macro assumes that |\@currbox| is the box number for this structure
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-% From the type we infer the class:
-% \begin{macrocode}
- \global\expandafter\let\expandafter
- \this@class\csname sequence@class@#6\endcsname
- \gdef\this@sequence@number{#7}
-% \end{macrocode}
-% If we want to consider all areas for each float (and storing
-% closed areas via |\closed@|\meta{type}|@areas| we have to
-% initialise |\this@open@areas| to |\used@areas| (which is
-% derived from the |area-list| key.
-% \begin{macrocode}
- \global\let\this@open@areas\used@areas
-% \end{macrocode}
-%
-% \begin{macrocode}
- \global\expandafter\let\expandafter\this@closed@areas
- \csname closed@\this@class @areas\endcsname % FMi tmp
- \global\let\this@float@box\@currbox
-%<*trace>
-\tr@ce{This~float~structure:}
-\toks@{#1}\tr@ce{~{\the\toks@}}
-\tr@ce{~{#2}}
-\tr@ce{~{#3}}
-\tr@ce{~{#4}}
-\tr@ce{~{#5}}
-\tr@ce{~{#6}}
-\tr@ce{~{#7}}
-\tr@ce{~this@open@areas~ <-~ \this@open@areas}
-\tr@ce{~this@closed@areas~ <-~ \this@closed@areas}
-%</trace>
-%<*progress>
-\progress{~{#7}}
-\progress{~{#6}~(\this@class)}
-\progress{~{#4}}
-%\progress{~{#2}}
-%\progress{~{#3}}
-%\progress{~{#5}}
-\toks@{#1}\progress@nl{~{\the\toks@}}
-%</progress>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\extract@this@float@actual@structure}
-% As used by Chris in xo-final. Should probably be replaced by the
-% one above or combined with the one above!\footnote{FIX!!}
-% \begin{macrocode}
-\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}
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\update@here@float@structure}
-%
-% Similar to |\update@this@float@structure| but filling different
-% macros.\footnote{We only need some of those macros, so this
-% should be cleaned up at some stage.}
-%
-% This macro assumes that |\@currbox| is the box number for this
-% structure.
-%
-% \begin{macrocode}
-\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@fps{#5}
- \gdef\here@caption{#1}
- \global\let\here@float@box\@currbox
-%<*trace>
-\tr@ce{Here~object~structure:}
-\toks@{#1}\tr@ce~{~{\the\toks@}}
-\tr@ce{~{#2}}
-\tr@ce{~{#3}}
-\tr@ce{~{#4}}
-\tr@ce{~{#5}}
-\tr@ce{~{#6}}
-\tr@ce{~{#7}}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-% \begin{macro}{\page@float@count}
-% \begin{macrocode}
-%\newcount\page@float@count
-\let\page@float@count\@colnum
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\this@captioned@float}
-% \begin{macrocode}
-\newbox\this@captioned@float
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \newpage
-%
-% \subsection{Grab Column Output Routine}
-%
-% \begin{description}
-% \item[Entry:] |\setup@grab@column@or|
-% \item[Exit:] |\setup@cleanup@or|
-% \item[Prereq:]
-% \item[Description:]
-% \item[Flow:]
-%\begin{footnotesize}
-%\begin{verbatim}
-% \setup@grab@column@or
-% |
-% New OR: \grab@column@or
-% |
-% V
-% \grab@column@loop <-------
-% |
-% (when entering OR...)
-% |
-% <end of collection reached?>
-% | |
-% yes no
-% | |
-% | <col break requested?>
-% | | |
-% | yes no
-% | | |
-% | | <flush point encountered?>
-% | | | |
-% | | yes no
-% | | | |
-% | | <flush point <here point encountered?>
-% | | too early?> | |
-% | | | | yes no
-% | | yes no | |
-% | | | | ? ?
-% | | | (ignore break)
-% | | | |
-% | | | |
-% (end column now) <------- |
-% | |
-% V |
-% <all cols produced?> |
-% | | V
-% yes no--------------------> (reenter \grab@column@loop)
-% |
-% (store results of trial)
-% |
-% V
-% \setup@cleanup@or
-%\end{verbatim}
-%\end{footnotesize}
-% \end{description}
-%
-%
-%
-% \begin{macro}{\setup@grab@column@or}
-%
-% \begin{macrocode}
-\def\setup@grab@column@or{
-%<*trace>
- \@tracepush{setup@grab@column@or}
-%</trace>
-% \end{macrocode}
-%
-% We just returned to the MVL the current galley. We now add a
-% special penalty to mark the point that we need to reach in order
-% to remove everything after the trial run.
-% This penalty has to be guarded against premature removal, e.g.,
-% if the algorithm would break exactly before it it would then be
-% discarded which we can't allow.\footnote{Penalty now added
-% earlier (normally). CORRECT DOCU}
-% \begin{macrocode}
- \ifnum\saved@outputpenalty = -1073741824\relax
- \add@badly@guarded@penalty\output@collect@penalty
- \fi
-% \end{macrocode}
-%
-% \begin{macrocode}
- \@failfalse
- \global\curr@col@count\z@
-% \end{macrocode}
-% In case there is a flush penalty in the collection we have to
-% find out if we see it again during the trial. So we record the
-% number of flush points we see during the trial. Same happens for
-% here points.
-% \begin{macrocode}
- \gdef\trial@flush@seen@num{0}
- \gdef\trial@here@seen@num{0}
-% \end{macrocode}
-%
-% Moved from |\try@this@area| as it should be executed
-% only if we really do a trial and thus back it out if
-% unsuccessful---this was a bug as it changed
-% |\fl@|\meta{col}|@|\meta{type} in cases we never came to this
-% point here but recursed)
-% \begin{macrocode}
- \ifrun@with@floats
-% \end{macrocode}
-% Depending on the policy a spanning float can be considered belong
-% to different columns. This influences the behaviour of the
-% call-out contraint tests and is determined by the code stored in
-% |\calculate@target@fl@column|.
-% \begin{macrocode}
- \calculate@target@fl@column
-% \end{macrocode}
-% |\calculate@target@fl@column| returns its calculated column
-% number in |\count@|.
-% \begin{macrocode}
- \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
-%<*trace>
- \tr@ce{~fl@\the\count@ @\this@class\space <-~
- \csname fl@\the\count@ @\this@class\endcsname}
-%</trace>
-% \end{macrocode}
-% If we are adding to a top area we also have to update the
-% corresponding |tfl@| commands:
-% \begin{macrocode}
- \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
-%<*trace>
- \tr@ce{~tfl@\the\count@ @\this@class\space <-~
- \csname tfl@\the\count@ @\this@class\endcsname}
-%</trace>
- \fi
- \fi
-% \end{macrocode}
-%
-% If we have seen any flush points during collection we need to
-% save their current |min@col| positions in case we have to throw
-% away the current trial.
-% \begin{macrocode}
- \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
-%<*trace>
- \tr@ce{saved@flush@min@col@\the\count@ \space <-~
- \csname flush@min@col@\the\count@\endcsname}
-%</trace>
- }
- \fi
-% \end{macrocode}
-%
-% \begin{macrocode}
- \initialise@footins@action
-% \end{macrocode}
-%
-% \begin{macrocode}
- \global\output{\grab@column@or}
- \grab@column@loop
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*trace>
- \@tracepop{setup@grab@column@or}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\calculate@target@fl@column}
-% \begin{macro}{\calculate@target@fl@column@flexible}
-% \begin{macro}{\calculate@target@fl@column@strict}
-% The purpose of |\calculate@target@fl@column| is to calculate
-% the column number for which the |\fl@|\meta{col}|@number| has to
-% be updated in case we place the current float into the area with
-% start column |\this@area@col@number| and span-number
-% |\this@area@span@number|. It returns the calculated number in
-% |\count@|.
-%
-% For non-spanning floats it is simply returning
-% |\this@area@col@number|. If we return this value also in case of
-% spanning floats then this means that we claim that the float has
-% be placed the first of its spanned columns. Alternatively we
-% could return the last of the spanned columns which would if the
-% |column| policy is in force, allow to place a float into |t12|
-% even if its call-out is in the second column.
-%
-% The real value for |\calculate@target@fl@column| will be assigned
-% in the page setup template.
-% \begin{macrocode}
-\let\calculate@target@fl@column \ERROR
-% \end{macrocode}
-%
-% And here are the two possibilities.
-% \begin{macrocode}
-\def\calculate@target@fl@column@flexible {
- \count@\this@area@col@number\relax
- \advance\count@\this@area@span@number\relax
- \advance\count@\m@ne
-}
-% \end{macrocode}
-%
-% \begin{macrocode}
-\def\calculate@target@fl@column@strict {
- \count@\this@area@col@number\relax
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\ifrun@with@floats}
-% \begin{macro}{\run@with@floatstrue}
-% \begin{macro}{\run@with@floatsfalse}
-%
-% \begin{macrocode}
-\newif\ifrun@with@floats
-\def\run@with@floatsfalse{\global\let\ifrun@with@floats\iffalse}
-\def\run@with@floatstrue{\global\let\ifrun@with@floats\iftrue}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\grab@column@loop}
-% The |\grab@column@or| output routine is responsible for
-% constructing one column of a layout trial. The loop command
-% increments the column count and sets vsize to the target height
-% for the current column (which has already been set based on the
-% size and position of the floats in this trial layout.
-% \begin{macrocode}
-\def\grab@column@loop{
-%<*trace>
- \@tracepush{grab@column@loop}
-%</trace>
- \global\advance\curr@col@count\@ne
- \global\vsize\csname col@ht@ \the\curr@col@count\endcsname
-%<*trace>
- \@tracepop{grab@column@loop}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-% \begin{macro}{\some@column@or}
-% |\grab@column@or| and |\best@column@or| are sharing most of their
-% code which is therefore placed into a separate macro. At the
-% moment it takes 4 arguments: the name (``grab'' or ``best''),
-% what to do when we actually finish the column
-% (``|\grab@column@or@finish|'' or ``|\best@column@or@finish|''),
-% what to do for a flush point, and what to do when we encounter a
-% here float.\footnote{This code needs a bit of redesign to deal
-% properly with the case that we have stumbled upon one of the
-% special penalties. In this case we need to ensure that we also
-% remove the special box after the penalty in case we are at a
-% column break. This is not done right now so that in this case we
-% will not dicard material at the top of the column properly. FIX!!!!}
-% \begin{macrocode}
-\def\some@column@or #1#2#3#4{
-%<*trace>
- \@tracepush{#1@column@or}
- \tr@ce{output~pen:~ \the\outputpenalty}
- \tr@ce{#1~ col:~ \the\curr@col@count\space of~ \the\col@count}
-%</trace>
- \handle@case@of@premature@ending
- \handle@case@of@forced@pagebreak
-% \end{macrocode}
-% If the |\outputpenalty| is |-\output@flush@float@penalty| we
-% have reached a float flush point in the galley.
-% \begin{macrocode}
- \ifnum\outputpenalty=-\output@flush@float@penalty
- \gincrement@num\trial@flush@seen@num
-%<*trace>
- \tr@ce{flush~ point~(\trial@flush@seen@num,~
- affects:~ \csname flush@classes@list@\trial@flush@seen@num\endcsname,~
- mincol:~ \csname flush@min@col@\trial@flush@seen@num\endcsname,~
- lastfloat:~ \csname flush@last@float@\trial@flush@seen@num\endcsname
- )~ reached}
-%</trace>
-% \end{macrocode}
-% We then remove the guard box from the output (which is at the end
-% of box |\@cclv|.
-% \begin{macrocode}
- \remove@guard@box@from@cclv
-% \end{macrocode}
-% If the flush penalty moved to an earlier column than in the last
-% trial we end the current column (by calling
-% |\#1@column@or@finish|) and reinsert the penalty so that it will
-% be seen again if we do the next column.
-% \begin{macrocode}
- \ifnum\csname flush@min@col@\trial@flush@seen@num\endcsname
- > \curr@col@count
-%<*trace>
- \tr@ce{flush@min@col@\trial@flush@seen@num\space >~
- curr@col@count~
- (\csname flush@min@col@\trial@flush@seen@num\endcsname
- \space >~ \the\curr@col@count)~ ->~ ending~ column}
-%</trace>
- \gdecrement@num\trial@flush@seen@num
- \readd@guarded@penalty\output@flush@float@penalty
- #2
- \else
-% \end{macrocode}
-% Otherwise the flush point is in an acceptable position which
-% means we ignore it and carry on collecting material for the
-% current column. This is done be putting everything back onto the
-% MVL except the guard box and the penalty.\footnote{We lose a
-% potential break point here (acceptable?) See comments in
-% best@column@or!!}
-% \begin{macrocode}
-%<*trace>
- \tr@ce{flush@min@col@\trial@flush@seen@num\space
- <=~ curr@col@count~
- (\csname flush@min@col@\trial@flush@seen@num\endcsname
- \space <=~ \the\curr@col@count)}
-%</trace>
-% \end{macrocode}
-% What exactly happens here (beside the above) depends on the
-% calling macro.
-% \begin{macrocode}
- #3
- \fi
- \else
-% \end{macrocode}
-% If it was not a flush point we might have a here point to take
-% care of. This is more or less like the code above.
-% \begin{macrocode}
- \ifnum\outputpenalty=-\output@here@float@penalty
- \gincrement@num\trial@here@seen@num
-%<*trace>
- \tr@ce{here~ penalty~(\trial@here@seen@num)~ reached}
-%</trace>
- \remove@guard@box@from@cclv
- \ifnum\csname here@min@col@\trial@here@seen@num\endcsname
- > \curr@col@count
-%<*trace>
- \tr@ce{here@min@col@\trial@here@seen@num\space >~curr@col@count~
- (\csname here@min@col@\trial@here@seen@num\endcsname
- \space >~ \the\curr@col@count)~ ->~ ending~ column}
-%</trace>
- \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
-%<*trace>
- \tr@ce{here@required@space@\trial@here@seen@num\space >~
- \pagegoal-\pagetotal \space
- (\csname here@required@space@\trial@here@seen@num\endcsname
- \space >~ \the\pagegoal\space
- -~ \the\pagetotal\space =~
- \the\@tempdima)~
- ->~ ending~ column}
-%</trace>
- \split@off@last@line
- \gdecrement@num\trial@here@seen@num
- \readd@guarded@penalty\output@here@float@penalty
- #2
- \else
-%<*trace>
- \tr@ce{here@required@space@\trial@here@seen@num\space <=~
- \pagegoal-\pagetotal \space
- (\csname here@required@space@\trial@here@seen@num\endcsname
- \space <=~ \the\pagegoal\space
- -~ \the\pagetotal\space =~
- \the\@tempdima)~
- ->~ accepting~ here~ point}
-%</trace>
- \@reinserts
- \unvbox\@cclv
- \@next\@currbox\@herelist{
-%<*trace>
- \tr@ce{@currbox:~ \@currbox}
-%</trace>
- \expandafter\update@here@float@structure\the\toks\@currbox
-% \end{macrocode}
-% Different things need to be done depending on the type of the
-% here point:
-% \begin{macrocode}
- \def\@tempa{mpar}
- \ifx\@tempa\here@type
- \typeset@a@marginpar
- \else
- \def\@tempa{rspace}
- \ifx\@tempa\here@type
- % do nothing
- \else
- #4
- \fi
- \fi
- }
-% \end{macrocode}
-% If there is no here object left the algorithm has screwed up
-% (i.e., a ``this can't happen'' situation).
-% \begin{macrocode}
- \ERROR
- \fi
- \fi
- \else
-% \end{macrocode}
-% If it is neither a flush nor a here point it might be a grid point:
-% \begin{macrocode}
- \ifnum\outputpenalty=-\output@grid@align@penalty
- \align@collected@galley@and@restart
-% \end{macrocode}
-% So we now know that it wasn't one of our special points so this
-% must have been a normal end of the galley:
-% \begin{macrocode}
- \else
- #2
- \fi
- \fi
- \fi
-%<*trace>
- \@tracepop{#1@column@or}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\grab@column@or}
-% Here is the output routine used during trials, an instantiation
-% of |\some@column@or|.
-% \begin{macrocode}
-\def\grab@column@or{\some@column@or{grab}
- \grab@column@or@finish
- \grab@column@or@flushcheck
- \check@and@typeset@a@here@float
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\grab@column@or@flushcheck}
-%
-% The |\grab@column@or@flushcheck| code checks for restrictions
-% regarding the placement of the current float. It is called when
-% we just have encountered a flush float penalty while grabbing the
-% text for a column and now have to see which floats (if any) need
-% to be positioned before that flush point.
-% \begin{macrocode}
-\def\grab@column@or@flushcheck{
-%<*trace>
- \@tracepush{grab@column@or@flushcheck}
-%</trace>
-% \end{macrocode}
-% If we are making a dry-run without floats then there is no need to
-% do much, so we skip all testing that involves flush points and
-% only do the cleanup actions at the end.
-% \begin{macrocode}
- \ifrun@with@floats
- \expandafter\xin@\expandafter\this@class
- \csname flush@classes@list@\trial@flush@seen@num\endcsname
- \ifin@
-%<*trace>
- \tr@ce{flush:~ class~ \this@class\space in~
- {\csname flush@classes@list@\trial@flush@seen@num\endcsname}}
-%</trace>
-% \end{macrocode}
-% We store in |\count@| the float sequence number of the last float
-% that would be affected by the current flush penalty. This value
-% is then used in the tests below.
-% \begin{macrocode}
- \count@\csname flush@last@float@\trial@flush@seen@num\endcsname\relax
-% \end{macrocode}
-%
-% If the current float number is higher than float number stored in
-% |\flush@last@float@|\meta{num} with the flush penalty, we are
-% dealing with a float whose call-out is after the flush penalty
-% and thus we have no restriction.
-% \begin{macrocode}
- \ifnum\this@sequence@number>\count@
-%<*trace>
- \tr@ce{???:\this@sequence@number>\the\count@}
- \tr@ce{this~float~ past~flush~point}
-%</trace>
- \else
-% \end{macrocode}
-% Otherwise check if this float is placed in an acceptable position
-% with respect to the current flush point. For this we run
-% different code depending on the ``fuzziness'' of the flush point
-% under check:
-% \begin{macrocode}
- \csname flush@fuzziness@\trial@flush@seen@num \endcsname
- \fi
-%<*trace>
- \else
- \tr@ce{flush:~ class~ \this@class\space not~ in~
- {\csname flush@classes@list@\trial@flush@seen@num\endcsname}}
-%</trace>
- \fi
- \fi
-% \end{macrocode}
-% If we failed above we additionally record that the failure is
-% due to violating restrictions for a flush point.
-% \begin{macrocode}
- \if@fail
- \@flushfailtrue
-% \end{macrocode}
-%
-% \begin{macrocode}
- \global\setbox\@cclv\box\voidb@x
- \global\setbox\footins\box\voidb@x
-% \end{macrocode}
-% We have to immediately abort the current trial otherwise a
-% flush point following in the galley might be encountered and
-% processed before we reach |\evaluate@results@of@trial|. That
-% would result in updating the wrong data structure there (due to
-% the fact that there it assumes that |\trial@flush@seen@num|
-% refers to the flush point that is the reason for
-% failure).\footnote{Implementation could be improved!}
-% \begin{macrocode}
- \global\curr@col@count\col@count
- \grab@column@or@finish
- \else
-% \end{macrocode}
-% If we haven't failed we might have to update the
-% |\flush@min@col|\meta{num} for the current flush point in case it
-% moved to a new column.
-% \begin{macrocode}
- \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}
-%<*trace>
- \tr@ce{set~ flush@min@col@\trial@flush@seen@num:~
- \csname flush@min@col@\trial@flush@seen@num\endcsname}
-%</trace>
- \fi
-% \end{macrocode}
-% We have to return the collected footnotes first or else \TeX{}
-% might decide that it is better to break before
-% them.\footnote{Quite likely that this needs some refinement as it
-% might mess up vertical spacing in other respects. Look out for
-% other places where \texttt{\string\@reinserts} is used, if this
-% needs fixing.}
-% \begin{macrocode}
- \@reinserts
- \unvbox\@cclv
-% \end{macrocode}
-% What penalty to return???\footnote{FIX!!!}
-% \begin{macrocode}
-% \penalty\z@ % none i think now (in the current version) but this
- % will change again
- \fi
-%<*trace>
- \@tracepop{grab@column@or@flushcheck}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-% \begin{macro}{\flushcheck@page}
-% \begin{macrocode}
-\def\flushcheck@page {
-%<*trace>
- \tr@ce{OK:~flush~check~ (same~page)}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\flushcheck@spread}
-%
-% This is actually a dummy definition. There is more to do if we
-% want to provide support for spreads!\footnote{Finish implementation}
-% \begin{macrocode}
-\def\flushcheck@spread {
-%<*trace>
- \tr@ce{OK:~flush~check~ (using~page~not~ spread)}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\flushcheck@strict}
-% \begin{macrocode}
-\def\flushcheck@strict {
-%<*trace>
- \@tracepush{flushcheck@strict}
-%</trace>
-% \end{macrocode}
-% If strict flushing is required we look where the current float is
-% being placed. If it
-% is placed in a column which is earlier than the current column
-% then it is definitely before the flush point and thus we are okay.
-% \begin{macrocode}
- \ifnum\this@area@col@number<\curr@col@count
-%<*trace>
- \tr@ce{OK:~flush~check~
- (\this@area@col@number<\the\curr@col@count,~\this@area)}
-%</trace>
- \else
-% \end{macrocode}
-% Otherwise we test if the float is placed into the current
-% column. If this is the case it might be okay, but only if it is
-% not placed into the bottom area.
-% \begin{macrocode}
- \ifnum\this@area@col@number=\curr@col@count
-% \end{macrocode}
-% To test for the bottom area(s) means looking at the first token
-% in the area identifier. If it is |b| we are past the flush
-% point.\footnote{It might be an interesting extension to allow
-% relaxing the flush situation to allow the floats to appear
-% anywhere on the current column (on which the flush point ends up),
-% or even allowing that it only has to appear on the current page
-% or page spread.}
-% \begin{macrocode}
- \if b \this@area@type
- \@failtrue
-%<*progress>
- \progress@failed{area~ below~ flush~ point~
- (\this@area@col@number=\the\curr@col@count,~\this@area)}
-%</progress>
-%<*trace>
- \tr@ce{Fail:~flush~check~
- (\this@area@col@number=\the\curr@col@count,~\this@area)}
-% \end{macrocode}
-% Otherwise the float was placed into an area that is still before
-% the flush point.
-% \begin{macrocode}
- \else
- \tr@ce{OK:~flush~check~
- (\this@area@col@number=\the\curr@col@count,~\this@area)}
-%</trace>
- \fi
-% \end{macrocode}
-% If the float was neither placed before nor into the current
-% column we have to conclude that it was placed into a later column
-% which means it was placed after the flush point --- thus we fail.
-% \begin{macrocode}
- \else
- \@failtrue
-%<*progress>
- \progress@failed{area~ after~ flush~ point~
- (\this@area@col@number>\the\curr@col@count,~\this@area)}
-%</progress>
-%<*trace>
- \tr@ce{Fail:~flush~check~
- (\this@area@col@number>\the\curr@col@count,~\this@area)}
-%</trace>
- \fi
- \fi
-%<*trace>
- \@tracepop{flushcheck@strict}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\flushcheck@column}
-% \begin{macrocode}
-\def\flushcheck@column {
- \ifnum\this@area@col@number>\curr@col@count
- \@failtrue
-%<*progress>
- \progress@failed{area~ after~ flush~ point~ column~
- (\this@area@col@number>\the\curr@col@count,~\this@area)}
-%</progress>
-%<*trace>
- \tr@ce{Fail:~flush~check~
- (\this@area@col@number>\the\curr@col@count,~\this@area)}
- \else
- \tr@ce{OK:~flush~check~
- (\this@area@col@number<=\the\curr@col@count,~\this@area)}
-%</trace>
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\grab@column@or@finish}
-% \begin{macrocode}
-\def\grab@column@or@finish{
-%<*trace>
- \@tracepush{grab@column@or@finish}
-%</trace>
-% \end{macrocode}
-%
-% \begin{macrocode}
- \mark@update@structure
-% \end{macrocode}
-%
-% \begin{macrocode}
- \deal@with@footins@action
-% \end{macrocode}
-%
-% First check if there are some special constraints that should be
-% met (this is, for example, used to check if there are both bottom
-% floats and footnotes). If the constraints are not met don't
-% bother to check the callout/float constraints.
-% \begin{macrocode}
- \if@fail\else
- \ifrun@with@floats
- \check@some@constraints
- \fi
- \fi
- \if@fail\else
-% \end{macrocode}
-% For each float sequence class, call |\check@callout@constraints|
-% this will be set via a call to a pagesetup template to do an
-% appropriate check on the float placement relative to float
-% call-out.
-% \begin{macrocode}
- \ifrun@with@floats
- \let\@elt\check@callout@constraints
- \float@classes@list
- \fi
- \fi
-% \end{macrocode}
-%
-% Throw the text away (it will be reset later if this trial is
-% in fact chosen).
-% \begin{macrocode}
- \global\setbox\@cclv\box\voidb@x
- \global\setbox\footins\box\voidb@x
-% \end{macrocode}
-% After the last column we evaluate the results of the trial (and
-% if the result looks ok remember it as a candidate for the final
-% solution). We then switch to the `clean up' OR which will
-% collect up the main vertical list as far as the special penalty
-% marking the end of the collection pass, to clear the MVL for the
-% next trial. If this isn't the last column, set up the next
-% column.
-% \begin{macrocode}
- \ifnum\curr@col@count=\col@count
- \evaluate@results@of@trial
- \setup@cleanup@or
- \else
- \grab@column@loop
- \fi
-%<*trace>
- \@tracepop{grab@column@or@finish}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\handle@case@of@premature@ending}
-% Next |\ifnum| is a fix that needs rethinking: what is the best
-% approach if we hit the penalty which denotes the end of the
-% collected galley too early, e.g., in the middle of a trial using
-% |\grab@column@or| or when producing the final columns with
-% |\best@column@or|? Current solution gets the stuff out, but is it
-% probably not the best solution.
-% correct?
-% \begin{macrocode}
-\def\handle@case@of@premature@ending{
- \ifnum\outputpenalty=-\output@collect@penalty
- \remove@guard@box@from@cclv
- \readd@guarded@penalty\output@collect@penalty
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\check@some@constraints}
-% By default there are no additional constraints to check for.
-% \begin{macrocode}
-\let\check@some@constraints\relax
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\evaluate@results@of@trial}
-%
-% The purpose of |\evaluate@results@of@trial| is to determine if
-% the current trial is a potential candiate for the final solution
-% and if so store it away. We can determine if the trial failed by
-% looking at the switch |@fail|.
-% \begin{macrocode}
-\def\evaluate@results@of@trial{
-%<*trace>
- \@tracepush{evaluate@results@of@trial}
-%</trace>
-% \end{macrocode}
-%
-% \begin{macrocode}
- \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@
-%<*trace>
- \tr@ce{Failed:~ area~ +~ here~ floats~ exceed~ max~ floats}
-%</trace>
-%<*progress>
- \progress@failed{area~ +~ here~ floats~ exceed~ max~ floats}
-%</progress>
- \@failtrue
- \fi
- \fi
- \fi
-% \end{macrocode}
-%
-% \begin{macrocode}
- \if@fail
-%<*trace>
- \tr@ce{fail:~true}
-%</trace>
-% \end{macrocode}
-% If the trial has failed we have to distinguish two cases:
-% \begin{itemize}
-% \item
-% There has been a request for flushing out floats up to a
-% certain float somewhere
-% and the current float belongs to the list of floats to flush.
-% \item
-% There has been no such request.
-% \end{itemize}
-%
-% If there have been flush points we need to restore their
-% |min@col| values since we might have updated them.
-% \begin{macrocode}
- \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
-%<*trace>
- \tr@ce{flush@min@col@\the\count@ \space <-~
- \csname flush@min@col@\the\count@\endcsname \space
- (restore) }
-%</trace>
- }
- \fi
-
- \if@flushfail
-%<*trace>
- \tr@ce{flushfail:~true}
-%</trace>
-% \end{macrocode}
-% If we have failed and |\try@this@area| is already the ``relaxed''
-% version we have to artificially move the offending flush point to
-% the next column and hope that this way we get ourselves some new
-% options (worst case is that eventually the flush point is removed
-% from the page in which case we can as a last resort defer the
-% float).
-% \begin{macrocode}
- \ifx\try@this@area\relaxed@try@this@area
-
- \expandafter\gincrement@num
- \csname flush@min@col@\trial@flush@seen@num\endcsname
-%<*trace>
- \tr@ce{flush@min@col@\trial@flush@seen@num~ <-~
- \csname flush@min@col@\trial@flush@seen@num\endcsname}
-%</trace>
-%<*progress>
- \progress@failed{flush~ point~ \trial@flush@seen@num\space
- moved~ to~ column~
- \csname flush@min@col@\trial@flush@seen@num\endcsname}
-%</progress>
- \else
-
- \ifx\saved@this@open@areas\@empty
-%<*debug>
- \tr@ce{saved@this@open@areas:~empty ????????}
-%</debug>
- \ERROR
- \else
- \global\let\this@open@areas\saved@this@open@areas
-%<*trace>
- \tr@ce{~this@open@areas~ <-~ \this@open@areas \space (reopen)}
-%</trace>
- \fi
- \relax@float@placement@conditions
- \fi
- \else
-%<*trace>
- \tr@ce{flushfail:~false}
-%</trace>
- \xdef\this@open@areas{\expandafter\@gobblethree\this@open@areas}
- \fi
-
-%<*trace>
- \tr@ce{open:~\this@open@areas}
-
- \tr@ce{restore:~last~allocated:~\saved@fl@}
-%</trace>
-% \end{macrocode}
-% To restore the previous state we have to recalculate the target
-% |fl@| column.
-% \begin{macrocode}
- \calculate@target@fl@column
- \global\expandafter\let
- \csname fl@\the\count@ @\this@class\endcsname
- \saved@fl@
-%<*trace>
- \tr@ce{~fl@\the\count@ @\this@class\space <-~
- \saved@fl@ \space (restored)}
-%</trace>
-% \end{macrocode}
-% And if we tried a top area we also have to restored the
-% corresponding |tfl@| macro.
-% \begin{macrocode}
- \if t\this@area@type
- \global\expandafter\let
- \csname tfl@\the\count@ @\this@class\endcsname
- \saved@tfl@
-%<*trace>
- \tr@ce{~tfl@\the\count@ @\this@class\space <-~
- \saved@tfl@ \space (restored)}
-%</trace>
- \fi
-% \end{macrocode}
-% And we better don't forget to restore the heights.\footnote{This
-% is most likely buggy: I seem to restore all column values but i think
-% i don't save all of them! FIX!!!!}
-% \begin{macrocode}
- \update@this@area@columns
- {
-%<*trace>
- \tr@ce{restore:~saved@col@ht@ \the\count@:~
- \csname saved@col@ht@ \the\count@\endcsname}
-%</trace>
- \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
-%<*trace>
- \tr@ce{GRID (delta):~ column~\the\count@\this@area@type:~
- \csname saved@col@ \this@area@type @delta@ \the\count@
- \endcsname\space (restore) }
-%</trace>
- }
- \else
-%<*trace>
- \tr@ce{fail:~false}
-%</trace>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*progress>
- \let\progress@inform@later\@empty
-%</progress>
-% \end{macrocode}
-% If this trial is valid and we haven't seen all flush penalties
-% again we must have pushed them to the next page. We record
-% this fact by setting |flush@min@col@...| to |\maxdimen|.
-% \begin{macrocode}
- \if@flushseen
- \count@\flush@seq@num\relax
- \loop
- \ifnum \trial@flush@seen@num < \count@
- \global\@namedef{flush@min@col@\the\count@}{\maxdimen}
-%<*trace>
- \tr@ce{flush@min@col@\the\count@\space <-~ maxdimen}
-%</trace>
- \advance\count@\m@ne
- \repeat
-% \end{macrocode}
-% If there has been a flush point (ie if |\trial@flush@seen@num| und
-% thus |\count@| is greater than 0) we test whether or not the
-% float recently placed was the last one affected by the last flush
-% point on the current page and if so tighten the float placement
-% setting again.\footnote{correct logic?}
-% \begin{macrocode}
-%<*progress>
- \let\progress@inform@later\@empty
-%</progress>
- \ifrun@with@floats
- \ifnum \count@ > \z@
- \ifnum \csname flush@last@float@\trial@flush@seen@num\endcsname =
- \this@sequence@number \relax
-%<*trace>
- \tr@ce{flush:~ last~float~affected~ by~ flush~ point~
- \trial@flush@seen@num\space placed~ ->~
- use~ partly~ normal~ placement~ conditions~ again}
-%</trace>
-%<*progress>
- \def\progress@inform@later{
- \progress@nl{->~ past~ flush~ point:~ -->~
- tighten~ conditions~ again}
- \progress@nl{}
- }
-%</progress>
- \partly@tighten@float@placement@conditions
- \fi
- \fi
- \fi
-% \end{macrocode}
-% Having placed a float we need to update |\flush@classes@list@max| to
-% reflect which float types are affected by the flush points
-% currently on the page as this might be needed when trying to
-% place or rather defer the next float.
-%
-% So we loop and concatenate all |\flush@classes@list@|\meta{num} that
-% belong to flush points on the current page. This might result in
-% the list containing types several times but for the test we need
-% to do this doesn't make any difference (and it is far faster than
-% unifying the list).
-% \begin{macrocode}
- \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
- }
-%<*trace>
- \tr@ce{flush@classes@list@max~ <-~ \flush@classes@list@max}
-%</trace>
- \repeat
- \fi
-% \end{macrocode}
-%
-% With this algorithm a trial which passed so far is always
-% considered to be better than previous trials (meaning more floats
-% on the page are better). So we always update the best trial data
-% (unless this was the run without adding floats in which case we
-% only change the |run@with@floats| switch.
-% \begin{macrocode}
- \ifrun@with@floats
- \update@best@trial
-%<*progress>
- \progress@inform@later
-%</progress>
- \else
- \run@with@floatstrue
- \fi
- \fi
-%<*trace>
- \@tracepop{evaluate@results@of@trial}
-%</trace>
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \subsection{Best Trial Data}
-%
-%
-% \begin{macro}{\best@trial}
-% \begin{macrocode}
-\let\best@trial\@empty
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\update@best@trial}
-% Not all of this belongs into this macro!\footnote{redistribute}
-% \begin{macrocode}
-\def\update@best@trial{
-%<*trace>
- \@tracepush{update@best@trial}
-%</trace>
-%<*progress>
- \progress@nl{->~ accepted}
-%</progress>
- \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
- }
- }
-% \end{macrocode}
-%
-% Frank says this needs to be documented (the rest of the code is self evident)
-% |\this@float@box| is |\let| to |\@currbox| which is defed to a chardefed
-% token from newinsert. so this is OK. honest.
-% \begin{macrocode}
- \expandafter\@cons\csname area@\this@area\expandafter\endcsname
- \this@float@box
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*trace>
- \tr@ce{this@page@closed~ \this@page@closed\space +~
- "\csname pagesetup@\this@area @all@close\endcsname"}
- \tr@ce{this@closed@areas~ \this@closed@areas\space +~
- "\csname pagesetup@\this@area @class@close\endcsname"}
-%</trace>
- \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}
-% \end{macrocode}
-%
-% \begin{macrocode}
- \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
-% \end{macrocode}
-% moving the captioned float to the main float box is put into a
-% separate macro so that we can suppress this in cases where we
-% potentially want to revert to a previous stage.\footnote{FIX}
-% \begin{macrocode}
-%<*obsolete>
- \add@caption@to@float@box
-%</obsolete>
-% \end{macrocode}
-%
-% \begin{macrocode}
- \global\advance\page@float@count\@ne
- \global\advance\csname \this@area @float@count\endcsname\@ne
-% \end{macrocode}
-%
-% Since the trial was successful, we have to update the the macros
-% that hold the number of top or bottom floats we have seen so far
-% in each column.\footnote{Code for this is similar to the one in
-% construct@and@test@col@ht and elsewhere; perhaps there should be
-% a subroutine for it!}
-% \begin{macrocode}
- \update@this@area@columns
- {
- \expandafter
- \gincrement@num
- \csname col@ \this@area@type
- @floats@ \the\count@ @number\endcsname
-%<*trace>
- \tr@ce{col@ \this@area@type
- @floats@ \the\count@ @number <-~
- \csname col@ \this@area@type
- @floats@ \the\count@ @number\endcsname}
-%</trace>
- }
-% \end{macrocode}
-%
-% \begin{macrocode}
-%<*trace>
- \tr@ce{\meaning\best@trial}
- \tr@ce{area:~\this@area\space\csname area@\this@area\endcsname}
- \@tracepop{update@best@trial}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-
-% \begin{macro}{\add@caption@to@float@box}
-% This is a hook really to be able to prevent moving the caption
-% back into |\this@float@box| (by making this macro |\relax| and
-% this is what happens later on in xo-final). Yes we know the
-% coding here needs changing!\footnote{David FIX!!!}
-% \begin{macrocode}
-%<*obsolete>
-\def\add@caption@to@float@box{
- \global\setbox\this@float@box\box\this@captioned@float
-}
-%</obsolete>
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \newpage
-%
-% \subsection{Best Column Output Routine}
-%
-% \begin{description}
-% \item[Entry:] |\setup@best@column@or|
-% \item[Exit:] |\setup@collection@or|
-% \item[Prereq:]
-% \item[Description:]
-% \item[Flow:]
-%\begin{footnotesize}
-%\begin{verbatim}
-% \setup@best@column@or
-% |
-% New OR: \best@column@or
-% |
-% V
-% \best@column@loop <-------
-% |
-% (when entering OR...)
-% |
-% <end of collection reached?>
-% | |
-% yes no
-% | |
-% | <col break requested?>
-% | | |
-% | yes no
-% | | |
-% | | <flush point encountered?>
-% | | | |
-% | | yes no
-% | | | |
-% | | <flush point <here point encountered?>
-% | | too early?> | |
-% | | | | yes no
-% | | yes no | |
-% | | | | ? ?
-% | | | (ignore break)
-% | | | |
-% | | | |
-% | | | |
-% | | | |
-% | | | |
-% | | | |
-% | | | |
-% | | | |
-% | | | |
-% (end column now) <------- |
-% | |
-% V |
-% <all cols produced?> |
-% | | V
-% yes no--------------------> (reenter \best@column@loop)
-% |
-% (produce final page)
-% |
-% V
-% \initialise@next@page
-% |
-% V
-% (try to make float pages)
-% |
-% V
-% \setup@collection@or
-%\end{verbatim}
-%\end{footnotesize}
-% \end{description}
-%
-%
-% After the best trial is chosen the `best@column@or' output routines
-% are executed. Structurally this is similar to the grab column output
-% routines used during the trials, but this time information
-% about the float placements is recorded in the float area lists
-% and also optionally in float placement control files.
-%
-% \begin{macro}{\setup@best@column@or}
-% This is the initialisation code for producing the final best set
-% of columns (via the @best@column@or output routine).
-% \begin{macrocode}
-\def\setup@best@column@or{
-%<*trace>
- \@tracepush{setup@best@column@or}
-% Elsewhere now:
-% \tr@ce{reinsert~penalty:~ \saved@outputpenalty\space (unless~ 10000)}
-%</trace>
-% \penalty
-% \ifnum\saved@outputpenalty=\@M
-% \z@
-% \else
-% \saved@outputpenalty\relax
-% \fi
- \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
-% \end{macrocode}
-%
-% \begin{macrocode}
- \initialise@footins@action
-% \end{macrocode}
-%
-% \begin{macrocode}
- \global\output{\best@column@or}
- \best@column@loop
-%<*trace>
- \@tracepop{setup@best@column@or}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\best@column@loop}
-% \begin{macrocode}
-\def\best@column@loop{
-%<*trace>
- \@tracepush{best@column@loop}
-%</trace>
- \global\advance\curr@col@count\@ne
- \global\vsize\csname col@ht@ \the\curr@col@count\endcsname
-%<*trace>
- \tr@ce{vsize~ <-~ \the\vsize }
- \@tracepop{best@column@loop}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\best@column@or}
-% Here is the output routine used when preparing the final columns,
-% an instantiation of |\some@column@or|. In contrast to the version
-% used for |\grab@column@or| it doesn't do the tests.
-% \begin{macrocode}
-\def\best@column@or{\some@column@or{best}
- \best@column@or@finish
- {
- \@reinserts
- \unvbox\@cclv
-% \end{macrocode}
-% Next line not okay! we need to add a penalty here but which one?
-% Or we need a different mechanism using either |\holdinginserts|
-% or a partial box line in collection OR.\footnote{FIX!!! there is
-% also another place like this!}
-% \begin{macrocode}
-% \penalty\z@ %FMi?
- }
- {
- \perhaps@write@to@fpl@file{
- \@spaces Area:~hhh^^J
- \expandafter\perhaps@write@placements@to@fpl@file@aux\the\toks\@currbox}
- \typeset@a@here@float
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-% \begin{macro}{\best@column@or@finish}
-%
-% \begin{macrocode}
-\def\best@column@or@finish{
-%<*trace>
- \@tracepush{best@column@or@finish}
-%</trace>
- \mark@update@structure
-% \end{macrocode}
-%
-% \begin{macrocode}
- \deal@with@footins@action
-% \end{macrocode}
-%
-% save all marks here\footnote{not done yet!}
-%
-% add floats and footnotes etc to collected column
-%
-% \begin{macrocode}
- \produce@final@column
-% \end{macrocode}
-%
-% \begin{macrocode}
- \ifnum\curr@col@count=\col@count
- \produce@final@page
- \initialise@next@page
- \try@float@pages
- \place@deferred@floats
- \setup@collection@or
-%{\showoutput\showlists}
- \else
- \best@column@loop
- \fi
-%<*trace>
- \@tracepop{best@column@or@finish}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\initialise@next@page}
-% Initialises the column heights to text height. Clear the float
-% area lists, zero holdinginserts to allow footnote texts to arrive
-% in the insertion box.
-% \begin{macrocode}
-\def\initialise@next@page{
-%<*trace>
- \@tracepush{initialise@next@page}
-%</trace>
-%
-% \end{macrocode}
-%
-% \begin{macrocode}
- \initialise@column@data
-% \end{macrocode}
-%
-% \begin{macrocode}
- \initialise@areas
-% \end{macrocode}
-%
-% \begin{macrocode}
- \global\page@float@count\z@
-% \end{macrocode}
-%
-% \begin{macrocode}
- \initialise@flush@data
-% \end{macrocode}
-%
-% \begin{macrocode}
- \initialise@here@data
-% \end{macrocode}
-%
-% \begin{macrocode}
- \initialise@footins@action
-% \end{macrocode}
-%
-% Nothing is closed when we are at the start of a page.
-% \begin{macrocode}
- \global\let\this@page@closed\@empty
-% \end{macrocode}
-%
-% \begin{macrocode}
- \let\@elt\initialise@float@class
- \float@classes@list
- \let\@elt\relax
-%
-%\showfloatlists
-%\show\area@ddd\show\@activelist
-% for safety
- \global\let\this@float@box\@undefined
-%<*trace>
- \@tracepop{initialise@next@page}
-%</trace>
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\handle@case@of@forced@pagebreak}
-% This is related to |\handle@case@of@premature@ending| but we have
-% to return the penalty only if we haven't reached the last column.
-% If we don't do this we would start collecting material in the
-% middle of final page generation!
-% \begin{macrocode}
-\def \handle@case@of@forced@pagebreak{
- \ifnum\curr@col@count<\col@count
- \ifnum\outputpenalty=-\@M
- \@emptycol
- \fi
- \fi
-
- \ifnum\outputpenalty=-\output@balance@penalty
-%<*trace>
- \tr@ce{BALANCE:~ end~ point~ seen~ again}
-%</trace>
- \remove@guard@box@from@cclv
- \ifnum\curr@col@count<\col@count
- \@emptycol
- \fi
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \newpage
-%
-% \subsection{Cleanup Output Routine}
-%
-% \begin{description}
-% \item[Entry:] |\setup@cleanup@or|
-% \item[Exit:] |\float@placement@loop|
-% \item[Prereq:]
-% \item[Description:]
-% Responsible for discarding unused text still on Main Vertical
-% List After the end of a trial. It eats everything until it sees
-% the special penalty marking the end of the last collection output
-% routine. This output routine may need to be called several times
-% in succession due to forced penalties in the galley.
-% \item[Flow:]
-%\begin{footnotesize}
-%\begin{verbatim}
-% \setup@cleanup@or
-% |
-% V
-% New OR: \cleanup@or
-% |
-% V
-% <special outputpenalty reached?> --> \float@placement@loop
-%\end{verbatim}
-%\end{footnotesize}
-% \end{description}
-%
-%
-% \begin{macro}{\setup@cleanup@or}
-% \begin{macrocode}
-\def\setup@cleanup@or{
- \global\vsize\maxdimen
- \global\output{\cleanup@or}
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\cleanup@or}
-% In the actual output routine we grab text and throw it away until
-% we see the special output penalty. Then we prepare for the trials
-% to place the floats properly.
-% \begin{macrocode}
-\def\cleanup@or{
-%<*trace>
- \@tracepush{cleanup@or}
- \tr@ce{output~pen:~ \the\outputpenalty}
-%</trace>
-% \end{macrocode}
-% Throw everything away \ldots
-% \begin{macrocode}
- \global\setbox\@cclv\box\voidb@x
- \global\setbox\footins\box\voidb@x
-% \end{macrocode}
-% \ldots\ until we see the special output penalty again.
-% \begin{macrocode}
- \ifnum\outputpenalty=-\output@collect@penalty
- \float@placement@loop
- \fi
-%<*trace>
- \@tracepop{cleanup@or}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \newpage
-%
-% \subsection{Making float pages}
-%
-%
-% \begin{description}
-% \item[Entry:] |\try@float@pages|
-% \item[Exit:] --- (this happens within the OR)\\
-% On exit |\area@ddd| will be empty and the floats not being put
-% onto float pages are moved to |\@activelist| (those that have
-% their call outs on previous pages) and |\@mvllist| (those that
-% have their call outs still on the MVL).
-% \item[Prereq:] |\area@ddd| contains the float to work on; all other
-% areas are empty.
-% \item[Description:]
-% \item[Flow:]
-%\begin{footnotesize}
-%\begin{verbatim}
-% \try@float@pages
-% |
-% V
-% <\area@ddd has floats?>
-% | |
-% ----no yes
-% | |
-% | V
-% | (split \area@ddd into \@activelist and \@mvllist;
-% | setup trial conditions)
-% | |
-% | V
-% | \try@float@page <-------------
-% | | |
-% | <float page produced?> |
-% | | | |
-% | no yes |
-% | | | |
-% | | (output page) |
-% | | | |
-% | | (move new \area@ddd |
-% | | to \@activelist) |
-% | | | |
-% | | ------------------
-% | |
-% | |
-% | (restore float conditions before last trial)
-% | |
-% | (restore trial condition to normal)
-% | |
-% ------------->|
-% |
-% V
-%\end{verbatim}
-%\end{footnotesize}
-% \end{description}
-%
-%
-%
-% \begin{macro}{\try@float@pages}
-%
-% \begin{macrocode}
-\def\try@float@pages {
-%<*trace>
- \@tracepush{try@float@pages}
-%</trace>
- \ifx\area@ddd\@empty
-%<*trace>
- \tr@ce{no~ deferred~ floats}
-%</trace>
- \else
- \global\let\@activelist@empty@action\relax
- \global\let\pretests@success@action\floatpage@pretests@success@action
-% \end{macrocode}
-% this is only a tmp: we just use |\relaxed@try@this@area| but of
-% course there should be different rules for float pages (and
-% different float areas and \ldots)
-% \begin{macrocode}
- \global\let\try@this@area\relaxed@try@this@area
-% \end{macrocode}
-%
-% First thing to do is to split the list of deferred floats into
-% those that have ther callouts already typeset (on previous pages)
-% and those that we have only seen because we looked a bit
-% ahead. For making float pages we can only use the former.
-% \begin{macrocode}
- \let\@elt\split@defer@list
- \area@ddd
- \let\@elt\relax
- \global\let\area@ddd\@empty
-% \end{macrocode}
-% Now we loop until we fail to make float pages. The actual work is
-% done in the macro |\try@float@page|.
-% \begin{macrocode}
- \@floatpagetrue
- \loop
- \if@floatpage
- \begingroup % no nesting of \loop without grouping ...
-% \end{macrocode}
-% Next line prevents adding the caption to the float box. Of course
-% the float page does come out even worse this way, but we don't
-% get multiple captions if float page generation
-% fails.\footnote{FIX by redesigning caption handling!}
-% \begin{macrocode}
-%<*obsolete>
- \let\add@caption@to@float@box\relax %tmp!!
-%</obsolete>
-% \end{macrocode}
-%
-% A bit statistics: how many floats do we have on the
-% |\@activelist|?
-% \begin{macrocode}
-%<*progress>
- \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@
-%</progress>
-% \end{macrocode}
-% \begin{macrocode}
- \try@float@page
- \endgroup
- \repeat
-% \end{macrocode}
-% Once we are finished we have to return to normal trial
-% conditions, so\ldots
-% \begin{macrocode}
- \global\let\try@this@area\std@try@this@area
- \fi
-%<*trace>
- \@tracepop{try@float@pages}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\try@float@page}
-% This macro tries to build a single float page from the floats in
-% |\@activelist|. If it fails it (tries to) restores the state of
-% the floats. If it succeeds it will output a float page and returns.
-% \begin{macrocode}
-\def\try@float@page {
-%<*trace>
- \@tracepush{try@float@page}
-%</trace>
-% \end{macrocode}
-% Save the current state in case of failure then run the float
-% placement loop (setup for this loop should have happened
-% earlier).
-% \begin{macrocode}
- \save@current@float@state
- \trial@inner@loop
-%
-%\typeout{float.list.after.trial}
-%\showfloatlists
-%
-% \end{macrocode}
-% Loop through all ``text columns'' and add up their heights. This
-% is again only done to have some sort of measure for float pages
-% and should be removed once some real code gets into this part.
-% \begin{macrocode}
- \dimen@\z@
- \forall@columns{
-%<*trace>
- \tr@ce{\ht\the\curr@col@count=\the \csname
- col@ht@ \the\curr@col@count \endcsname}
-%</trace>
- \advance\dimen@ \csname
- col@ht@ \the\curr@col@count \endcsname
- }
-% \end{macrocode}
-%
-% If the sum of all white space is more than 300pt :-)
-% \begin{macrocode}
- \ifdim \dimen@ > 300pt \relax
-% \end{macrocode}
-% we fail
-% \begin{macrocode}
- \@floatpagefalse
-%<*trace>
- \tr@ce{float~page~failed}
-%</trace>
-%<*progress>
- \progress@failed{no~ float~ page~ made}
- \progress@nl{}
-%</progress>
-% \end{macrocode}
-% Return to the previous state (and as can be seen by using
-% |\initialise@next@page|) this needs some work; the latter might
-% in fact do too much like calling
-% |\initialise@flush@num|!\footnote{FIX}
-% \begin{macrocode}
- \saved@float@state
-% \end{macrocode}
-% To avoid having |\initialise@flush@num| do anything harmful we
-% set |\trial@flush@seen@num| to zero at this point.\footnote{This
-% needs fixing properly!} And the same is necessary for
-% |\initialise@here@num|.
-% \begin{macrocode}
- \gdef\trial@flush@seen@num{0}
- \gdef\trial@here@seen@num{0}
- \initialise@next@page
- \else
-% \end{macrocode}
-% Otherwise we claim we have a good float page.
-% \begin{macrocode}
-%<*trace>
- \tr@ce{float~page~succeeded}
- \tr@ce{We~ better~ output~ something~ now~ ...}
-%</trace>
-%<*progress>
- \progress@nl{succeeded}
- \progress@nl{}
-%</progress>
-% \end{macrocode}
-% producing this page is rubbish as well but it can't be written
-% before we have parameters and rules for making float pages.
-% \begin{macrocode}
- \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
-% \end{macrocode}
-% But the final lines are for real: if we did succeed we need to
-% provide a new |\@activelist| for the next potential float page.
-% It should be the floats we deferred while trying to make the
-% current float page followed by the floats that are still on the
-% active list (i.e., those we haven't even tried for the current
-% page).
-% \begin{macrocode}
- \xdef\@activelist{\area@ddd\@activelist}
- \global\let\area@ddd\@empty
- \fi
-%
-%\typeout{float.list.after.shipout.float.page.or.fail}
-%\showfloatlists
-%
-%<*trace>
- \@tracepop{try@float@page}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\if@floatpage}
-% \begin{macro}{\@floatpagefalse}
-% \begin{macro}{\@floatpagetrue}
-% Switch which is set to true while we are in the process of making
-% float pages and haven't failed.
-% \begin{macrocode}
-\newif\if@floatpage
-\def\@floatpagefalse{\global\let\if@floatpage\iffalse}
-\def\@floatpagetrue{\global\let\if@floatpage\iftrue}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\save@current@float@state}
-%
-% Save the current state of affairs concerning
-% floats\footnote{Needs more work, there are now other data
-% structures that should be saved if this is every going to be of
-% much use. (its current usage actually could be achieved with
-% simpler means). FIX or fold!}. In case of failure return to
-% this state by executing |\saved@float@state|.
-% \begin{macrocode}
-\def\save@current@float@state {
-%<*trace>
- \@tracepush{save@current@float@state}
-%</trace>
- \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
-% \end{macrocode}
-% No final |\relax| needed since this is followed by area data. And
-% if there are no areas we wouldn't call this code, would we?
-% \begin{macrocode}
- }
- }
-% \end{macrocode}
-% Save current state of all used float areas by looping though them.
-% \begin{macrocode}
- \expandafter\save@area@info\used@areas ddd\relax\relax\relax
-%<*trace>
- \tr@ce{saved:~ \meaning\saved@float@state}
- \@tracepop{save@current@float@state}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\save@area@info}
-% Save information about area and recourse.
-% \begin{macrocode}
-\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
-% \end{macrocode}
-% No |\relax| needed since followed by a |\gdef|.
-% \begin{macrocode}
- \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}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\saved@float@state}
-% To return to the saved float state execute |\saved@float@state|.
-% \begin{macrocode}
-\let\saved@float@state\@empty
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\split@defer@list}
-%
-% Split |\area@ddd| list, moving those floats whose callouts have
-% been typeset to |\@activelist| for consideration for (one day)
-% float pages, and for allocating to text page float areas.
-%
-% Floats whose callouts are still on MVL are placed on |\@mvllist|.
-% \begin{macrocode}
-\def\split@defer@list #1 {
- \def\@currbox{#1}
- \expandafter\extract@this@float@actual@structure\the\toks #1
-%<*trace>
- \tr@ce { #1:~\LastMark{\this@class}~ ???~\this@sequence@number }
-%</trace>
- \ifnum 0\LastMark{\this@class} < \this@sequence@number
-%<*trace>
- \tr@ce {#1:~ not~ really~ defered }
-%</trace>
- \@cons \@mvllist #1
- \else
-%<*trace>
- \tr@ce {#1:~ callout~ has~ been~ typeset}
-%</trace>
- \@cons \@activelist #1
- \fi
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-% \subsection{Preassign deferred floats}
-%
-%
-%
-% \begin{macro}{\place@deferred@floats}
-%
-% The |\place@deferred@floats| is supposed to distribute from
-% previous pages (i.e., from the top of |\area@ddd| or more exactly
-% those currently on the |\@activelist| since the |\area@ddd| was
-% already split when trying to build float pages) into the areas
-% of the page to be build. After all we know that for those floats
-% the call outs are on previous pages so testing for them
-% is unnecessary and we could save time by bypassing this stuff.
-%
-% On the other hand if we have flush points in the upcoming text
-% all our placements might be wrong, so perhaps this doesn't really
-% save so much time after all and the extra complication might not
-% be worth the effort.
-%
-% Perhaps a compromise is to make a first column grab without any
-% floats to see if we end up with a flush point (not implemented).
-%
-% So if we don't do this then the only thing we need to do at this
-% point is to move the floats from the |\@mvllist| to the end of
-% the |\@activelist|.
-% \begin{macrocode}
-\def\place@deferred@floats {
-%<*trace>
- \@tracepush{place@deferred@floats}
-%</trace>
- \xdef\@activelist{\@activelist\@mvllist}
- \global\let\@mvllist\@empty
-%\showfloatlists
-%<*trace>
- \@tracepop{place@deferred@floats}
-%</trace>
-}
-% \end{macrocode}
-%
-%
-% Here is an alternate definition which does the preassigning but
-% it would need to be extended by checking for flush points or by a
-% flag that ensures that if we later encounter a flush point that
-% we know we could backtrack if necessary (e.g., the preassignment
-% might have already deferred some floats past the flush
-% point).\footnote{Extend, fix, or get rid of.}
-% \begin{macrocode}
-\iffalse % we don't do it right now
-\def\place@deferred@floats {
-%<*trace>
- \@tracepush{place@deferred@floats}
-%</trace>
-%\showfloatlists
-% \let\@elt\split@defer@list
-% \area@ddd
-% \let\@elt\relax
-% \global\let\area@ddd\@empty
- \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
-%\showfloatlists
-%<*trace>
- \@tracepop{place@deferred@floats}
-%</trace>
-}
-\fi
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\floatpage@pretests@success@action}
-% Version of |\pretests@success@action| for use in initial phase
-% when previously deferred floats are being allocated to float areas.
-% \begin{macrocode}
-\def\floatpage@pretests@success@action{
-%<*trace>
- \@tracepush{floatpage@pretests@success@action}
-%</trace>
- \update@best@trial
- \trial@inner@loop
-%<*trace>
- \@tracepop{floatpage@pretests@success@action}
-%</trace>
- }
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \newpage
-%
-% \subsection{Support for Balancing}
-%
-% Code in this section (and related code in other sections) is not
-% used at the moment and will most likely be replaced with something
-% completely different.
-%
-% \begin{macro}{\if@balance}
-% |@balance| is set to true if we encounter a balance penalty
-% during collection.
-% \begin{macrocode}
-\newif\if@balance
-\def\@balancefalse{\global\let\if@balance\iffalse}
-\def\@balancetrue{\global\let\if@balance\iftrue}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\balancecolumns}
-%
-% \begin{macrocode}
-\def\balancecolumns {
- \add@badly@guarded@penalty\output@balance@penalty
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-% \newpage
-%
-% \subsection{Support for Flush Points}
-%
-%
-% \begin{macro}{\if@flushseen}
-% \begin{macro}{\if@flushfail}
-%
-% |@flushseen| is set to true if we encounter a flush penalty
-% during collection.
-%
-% |@flushfail| is set to true if we fail a trial due to placing the
-% float after the flush penalty.
-% \begin{macrocode}
-\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}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\flushfloats}
-%
-% Possible variants:
-%
-% Flush only one (some) types.
-%
-% Fuzzyflush or, more precisely, flush-to-this-column
-% or -page or -spread.\footnote{Right now "spread" is not implemented.}
-%
-% Parts of the flushpenalty (all types) data structure:
-%
-% |\flush@min@col@|\meta{num}
-% |\saved@flush@min@col@|\meta{num}
-% |\flush@prev@float@num@|\meta{num}\footnote{what is this Chris?}
-%
-% |\flush@seq@num| is the number of these so that
-% \meta{num} has range [1, |\flush@seq@num|]
-%
-% In addition, whilst doing an fp trial we need |\trial@flush@seen@num|
-% to record that we have, in this trial so far, seen the
-% flush points [1, |\trial@flush@seen@num|].
-%
-%
-% \begin{macrocode}
-\DeclareDocumentCommand\flushfloats { o O{strict} }
- { \flush@floats {#1} {#2} }
-% \end{macrocode}
-%
-% \begin{macrocode}
-\def\flush@floats #1 #2 {
- \add@badly@guarded@penalty\output@flush@float@penalty
-% \end{macrocode}
-%
-% \begin{macrocode}
- \gincrement@num\flush@seq@num
-% \end{macrocode}
-%
-% \begin{macrocode}
- \global\@namedef{flush@min@col@\flush@seq@num}{1}
-% \end{macrocode}
-%
-% \begin{macrocode}
- \expandafter\xdef
- \csname flush@last@float@\flush@seq@num \endcsname
- {\the\float@sequence@count}
-% \end{macrocode}
-% If |#1| is |\NoValue| the current flush point affects all float
-% sequence classes, thus we store in
-% |\flush@classes@list@|\meta{num} a list of all float sequence
-% classes separated by semicolons. Otherwise we assume that we got
-% a single float type(!) as argument and flush the corresponding
-% class.
-% \begin{macrocode}
- \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
- }
-% \end{macrocode}
-% The argument |#2| holds the fuzziness of the flush point which
-% currently can be either |strict|, |column| or |page|.
-% We link |\flush@fuzziness@|\meta{num} to the code stored in
-% |\flushcheck@#2| after making sure that such code
-% exists.\footnote{Improve error handling (as elsewhere)}
-% \begin{macrocode}
- \@ifundefined {flushcheck@#2}
- \userinputERROR
- {\global\expandafter\let
- \csname flush@fuzziness@\flush@seq@num \expandafter \endcsname
- \csname flushcheck@#2\endcsname
-%<*trace>
- \tr@ce{flush@fuzziness@\flush@seq@num \space
- =:~ \expandafter\noexpand\csname flushcheck@#2\endcsname
- }
-%</trace>
- }
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\clearpage}
-% \LaTeX's |\clearpage| command now looks like this:
-% \begin{macrocode}
-\def\clearpage{ \flushfloats \newpage }
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\doubleclearpage}
-% \LaTeX's |\doubleclearpage| command also needs a new
-% definition:\footnote{But not this one :-) FIX!}
-% \begin{macrocode}
-\def\doubleclearpage{ \clearpage }
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\flush@seq@num}
-% The number |\flush@seq@num| records the number of flush
-% points we have have seen during collection.
-% \begin{macrocode}
-\def\flush@seq@num{0}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\trial@flush@seen@num}
-% The number |\trial@flush@seen@num| records the number of flush
-% points we have seen so far during a trial, i.e., it will be
-% initialised to zero at the beginning of the trial and advanced by
-% one for each flush point encountered.
-% \begin{macrocode}
-\def\trial@flush@seen@num{0}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\flush@last@float@xxx}
-% \begin{macro}{\flush@min@col@xxx}
-% \begin{macro}{\flush@classes@list@xxx}
-% \begin{macro}{\flush@fuzziness@xxx}
-%
-% For each flush point we have a data structure in which we store
-% relevant information. This data structure is provided by a set of
-% macros which can be accessed by using the number of the current
-% flush point and constructing |\csname|s from it, e.g., to get at
-% the ``flush min col'' for the flush point with number 3 would be
-% |\csname flush@min@col@3\endcsname|.
-
-% |\flush@min@col@|\meta{num} holds the column number in which we
-% last seen the flush penalty while trying to find a solution for
-% the current page. This is initialised to 1 in collection@or when
-% a flush penalty is encountered during collection (since 1 is the
-% earliest column in which the flush penalty finally may fall). By
-% adding additional floats to the page the penalty might move to a
-% later column but normally not back to an earlier
-% one\footnote{There is a possibility that this happens if there is
-% enough space vanishing at the new break.} If we end up with the
-% flush penalty moving backwards we force a break at this point
-% until we reach the column where it was before. The reason for
-% this action is that we might have allocated floats to later
-% columns that would otherwise end after after the flush penalty.
-%
-% If by adding floats to the trials the flush penalty is moved to
-% the next page we set |\flush@min@col@|\meta{num} to
-% |\maxdimen|. The actual test to see if a flush penalty still
-% belongs to the current page is to check against |\curr@col@count|
-% (so |\curr@col@count+1| would be sufficient, but using
-% |\maxdimen| avoids calculations.
-%
-% |\flush@classes@list@|\meta{num} holds a list of float types which
-% are affected by the current flush point.
-%
-% |\flush@fuzziness@|\meta{num} holds the fuzziness associated with
-% the flushpoint, valid values are |strict| and |page|.
-%
-% By defining (some of) them on top-level we avoid unnecessary
-% entries on the savestack since they would otherwise be
-% constructed (locally) first within the output routine (when doing
-% |\ifx| testing), resulting in |\relax| being stored on the
-% savestack.
-% \begin{macrocode}
-\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
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-%
-% \begin{macro}{\flush@classes@list@max}
-% |\flush@classes@list@max| holds the concatenation of all
-% |\flush@classes@list@|\meta{num} on the page currently
-% constructed. This information is needed in case we get to a new
-% float and the preliminary tests suggests that it needs to be
-% deferred. In that case we need to know which flush points have
-% been seen previously to decide whether or not we can defer the
-% new float.
-% \begin{macrocode}
-\let\flush@classes@list@max\@empty
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\initialise@flush@data}
-% \begin{macrocode}
-\def \initialise@flush@data{
-%<*trace>
- \@tracepush{initialise@flush@data}
-%</trace>
-% \end{macrocode}
-% Does this need any documentation?
-%
-% Well, we have to get rid of all information relating to flush
-% float penalties that have been typeset on the previous page and
-% move the remaining ones (if any) to the front.
-% \begin{macrocode}
- \count@\flush@seq@num\relax
- \advance\count@ -\trial@flush@seen@num
-%<*trace>
- \tr@ce{flush@seq@num~
- =~ \flush@seq@num\space <-~
- \the\count@ }
-%</trace>
-% \end{macrocode}
-% Something wrong here if we get negative values!
-% \begin{macrocode}
-%<*debug>
- \ifnum\count@<\z@ \ERROR \fi
-%</debug>
-% \end{macrocode}
-%
-% \begin{macrocode}
- \xdef\flush@seq@num{\the\count@}
-% \end{macrocode}
-%
-% \begin{macrocode}
- \@tempcnta\trial@flush@seen@num
- \@tempcntb\z@
- \loop
- \ifnum \@tempcntb < \count@
-
- \advance\@tempcnta\@ne
- \advance\@tempcntb\@ne
-%<*trace>
- \tr@ce{flush@fuzziness@\the\@tempcntb\space
- =~ \expandafter \noexpand
- \csname flush@fuzziness@\the\@tempcntb\endcsname\space
- <-~ \expandafter \noexpand
- \csname flush@fuzziness@\the\@tempcnta \endcsname
- }
- \tr@ce{flush@last@float@\the\@tempcntb\space
- =~ \csname flush@last@float@\the\@tempcntb\endcsname\space <-~
- \csname flush@last@float@\the\@tempcnta \endcsname
- }
- \tr@ce{flush@classes@list@\the\@tempcntb\space
- =~ \csname flush@classes@list@\the\@tempcntb\endcsname\space <-~
- \csname flush@classes@list@\the\@tempcnta \endcsname
- }
- \tr@ce{flush@min@col@\the\@tempcntb\space <-~ 1}
-%</trace>
- \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
-% \end{macrocode}
-%
-% \begin{macrocode}
- \global\let\flush@classes@list@max\@empty
-% \end{macrocode}
-% Need to reset |\trial@flush@seen@num| in case the current macro
-% is called again too early, e.g., if it is called to initialize a
-% float page and then again to initialize a text page.
-% \begin{macrocode}
- \gdef\trial@flush@seen@num{0}
-%<*trace>
- \@tracepop{initialise@flush@data}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-% \subsection{Support for Here Points}
-%
-% A ``Here Point'' is a place in the galley at which something is
-% supposed to happen. For example, a marginal note needs to be
-% attached to the column, or a float needs to be inserted into the
-% column (here float), or it needs to be made sure that from that
-% point on there is still a certain amount of space available in the
-% column.
-%
-% With each here point there is associated a float structure (i.e. a
-% box and its corresponding |\toks| register) although in most cases
-% only parts of that structure is used. In addition each here point
-% has an associated dimension which denotes the amount of available
-% space which is required after the here point in the column to allow
-% to place the here point into this column. If this requirement is not
-% met the here point is moved to the next column (or page) by ending
-% the current column prematurely at the last legal breakpoint before
-% the here point (not at the here point itself\footnote{It should be
-% considered to allow breaking directly at the here point in special
-% cases, i.e., specified at the here point declaration.}). This
-% behaviour will ensure that a line of text preceding the here point
-% will also be moved to the next column or page which is important in
-% case of marginals and similar situations. In case of here floats it
-% might not be a requirements so perhaps this should be made
-% customisable.
-%
-% At the moment the ``type'' in the float structure is used to define
-% the type of here point. E.g.,
-% \begin{description}
-% \item[mpar] denotes a marginal
-% \item[rspace] denotes a requested space
-% \item[figure,table,\ldots] all normal float types identify the here
-% point as belonging to a here float.
-% \end{description}
-% The down side of this approach is that ``mpar'' can't be used as a
-% float type any longer and the whole approach might be too difficult
-% to extend this way. This needs certainly needs a cleanup.
-%
-% It is quite likely that there will be additional values that need
-% storing on a per here point basis. For this reason the code below
-% provides the requiredspace as a data structure external to the float
-% structure. Otherwise it could probably be integrated therein.
-%
-% When a here point is encountered while making columns for a trial or
-% for the final page, its requirements are checked. If they are
-% fulfilled then a here-point-type specific function will update the
-% column material (e.g. by adding a here float or a marginal).
-%
-% Here points are in many aspects like flush points. So most of the
-% code below should not be very surprising.
-%
-% \begin{macro}{\here@seq@num}
-% The number |\here@seq@num| records the number of here
-% points we have have seen during collection.
-% \begin{macrocode}
-\def\here@seq@num{0}
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\trial@here@seen@num}
-% The number |\trial@here@seen@num| records the number of here
-% points we have seen so far during a trial, i.e., it will be
-% initialised to zero at the beginning of the trial and advanced by
-% one for each here point encountered.
-% \begin{macrocode}
-\def\trial@here@seen@num{0}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\@herelist}
-% |\@elt| list of floats that should appear at a here point.
-% \begin{macrocode}
-\let\@herelist\@empty
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\saved@herelist}
-% Saved version of the |\@herelist| while we run a through the
-% float placement trial since we need the full |\@herelist| again in
-% the next trial.
-% \begin{macrocode}
-\let\saved@herelist\@empty
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\here@point}
-% |\here@point| adds a here point to the MVL. It takes two
-% arguments: the box reference associated with the here point and
-% the vertical space that needs to be reserved for the material
-% added.
-% \begin{macrocode}
-\def\here@point #1#2{
-% \end{macrocode}
-%
-% \begin{macrocode}
- \@cons\@herelist#1
-% \end{macrocode}
-%
-% \begin{macrocode}
- \gincrement@num\here@seq@num
-% \end{macrocode}
-%
-% \begin{macrocode}
- \global\@namedef{here@min@col@\here@seq@num}{1}
-% \end{macrocode}
-%
-% \begin{macrocode}
- \setlength\dimen@{#2}
- \expandafter\xdef
- \csname here@required@space@\here@seq@num \endcsname
- {\the\dimen@}
-% \end{macrocode}
-%
-% \begin{macrocode}
- \add@badly@guarded@penalty\output@here@float@penalty
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \begin{macro}{\initialise@here@data}
-% \begin{macrocode}
-\def \initialise@here@data{
-%<*trace>
- \@tracepush{initialise@here@data}
-%</trace>
-% Does this need any documentation?
-%
-% Well, we have to get rid of all information relating to here
-% float penalties that have been typeset on the previous page and
-% move the remaining ones (if any) to the front.
-% \begin{macrocode}
- \count@\here@seq@num\relax
- \advance\count@ -\trial@here@seen@num
-%<*trace>
- \tr@ce{here@seq@num~
- =~ \here@seq@num\space <-~
- \the\count@ }
-%</trace>
-% \end{macrocode}
-% Something wrong hereif we get negative values!
-% \begin{macrocode}
-%<*debug>
- \ifnum\count@<\z@ \ERROR \fi
-%</debug>
-% \end{macrocode}
-%
-% \begin{macrocode}
- \xdef\here@seq@num{\the\count@}
-% \end{macrocode}
-%
-% \begin{macrocode}
- \@tempcnta\trial@here@seen@num
- \@tempcntb\z@
- \loop
- \ifnum \@tempcntb < \count@
-
- \advance\@tempcnta\@ne
- \advance\@tempcntb\@ne
-%<*trace>
- \tr@ce{here@required@space@\the\@tempcntb\space
- =~ \csname here@required@space@\the\@tempcntb\endcsname\space <-~
- \csname here@required@space@\the\@tempcnta \endcsname
- }
- \tr@ce{here@min@col@\the\@tempcntb\space <-~ 1}
-%</trace>
- \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
-%<*trace>
- \@tracepop{initialise@here@data}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\split@off@last@line}
-%
-% When a here point doesn't fit onto the current page or column for
-% some reason it will be moved into the next column. In some cases,
-% e.g., when the here point is associated with the line before it
-% (as, for example, in marginals) it is necessary to move the line
-% also to the later column.
-%
-% The purpose of |\split@off@last@line| (to be called inside the
-% OR) is to split box 255 at the latest possible breakpoint before
-% the end and return the material following this breakpoint to the
-% MVL.
-%
-% The idea is as follows: if we subtract 1sp from the height of
-% box 255 and also subtract all of its internal shrinkability and
-% then split it to this height it can't any longer reach the final
-% breakpoint (by 1sp). Thus it will settle with some earlier
-% breakpoint and chances are very very good that this will be the
-% prefinal one.
-% \begin{macrocode}
-\def \split@off@last@line{
-%<*trace>
- \@tracepush{split@off@last@line}
- \tr@ce{goal:~ \the\pagegoal;~ total:~ \the\pagetotal;~ shrink:~
- \the\pageshrink}
- \tr@ce{ht255:~ \the\ht255;~ dp255:~ \the\dp255}
-%</trace>
-% \end{macrocode}
-%
-%
-% \begin{macrocode}
- \dimen@\ht\@cclv
-% \end{macrocode}
-% Looking at |\ht255| should be the same as |\pagetotal-\pagedepth|
-% or not?\footnote{Doesn't seem to be the case, bug in the code,
-% the program, or in my thinking? (seems to be a bug in \TeX:
-% pagedepth is always zero in the OR!)}
-% \begin{macrocode}
- \advance\dimen@-\pageshrink
- \advance\dimen@-1sp
-%{\showoutput\showbox\@cclv}
-% \end{macrocode}
-% Before splitting we have to ensure that the maximum depth is not
-% larger than the maximum depth allowed on the MVL.
-% \begin{macrocode}
- \splitmaxdepth\@maxdepth
- \setbox\z@\vsplit\@cclv to\dimen@
-%{\showoutput\showbox\z@}
-%{\showoutput\showbox\@cclv}
-% \end{macrocode}
-%
-% Before we now |\unvbox| 255 back onto the MVL we have to make sure
-% that the sum of its vertical dimensions plus the requested space
-% for the current here point is smaller than a full column height.
-%
-% If we don't do that we might end up with a situation where we are
-% pushing the two from column to columns since they will never fit.
-% \begin{macrocode}
- \dimen@\csname
- here@required@space@\trial@here@seen@num
- \endcsname
- \advance\dimen@\ht\@cclv
- \advance\dimen@\dp\@cclv
-% \end{macrocode}
-% If the sum is too large we reduce the required space for the here
-% point and complain (not really done yet the latter).
-% \begin{macrocode}
- \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
-% \end{macrocode}
-% So now we can |\unvbox| and then move the top from the split back
-% into 255 (essentially to have it taken out of that register by
-% the code following, but such is life).
-% \begin{macrocode}
- \unvbox\@cclv
- \global\setbox\@cclv\box\z@
-%<*trace>
- \@tracepop{split@off@last@line}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-% \subsection{Support for Grid Points}
-%
-%
-%
-%
-% \begin{macro}{\align@collected@galley@and@restart}
-% |\align@collected@galley@and@restart| is called inside
-% |\some@column@or| when we have encountered a grid point. It is
-% supposed to align the current line with the text grid and then
-% restarts the galley processing.
-%
-% We do this by putting the material gathered so far into a box of
-% appropriate size, and then push this pack onto the recent
-% contributions for reconsideration.
-% \begin{macrocode}
-\def \align@collected@galley@and@restart {
-%<*trace>
- \@tracepush{align@collected@galley@and@restart}
- \tr@ce{GRID:~ page~ goal~\space\space\space =~ \the\pagegoal}
- \tr@ce{GRID:~ page~ total~\space\space =~ \the\pagetotal}
- \tr@ce{GRID:~ page~ depth~\space\space =~ \the\pagedepth}
- \tr@ce{GRID:~ page~ shrink~\space =~ \the\pageshrink}
- \tr@ce{GRID:~ page~ stretch~ =~ \the\pagestretch}
- \tr@ce{GRID:~ page~ fil~ stretch~ =~ \the\pagefilstretch}
- \tr@ce{GRID:~ page~ fill~ stretch~ =~ \the\pagefillstretch}
- \tr@ce{GRID:~ page~ filll~ stretch~ =~ \the\pagefillstretch}
- \tr@ce{GRID:~ ht~ 255~\space =~ \the\ht\@cclv}
- \tr@ce{GRID:~ dp~ 255~\space =~ \the\dp\@cclv}
-%</trace>
-% \end{macrocode}
-% As a first step we remove the guard box since it has now served
-% its purpose.
-% \begin{macrocode}
- \remove@guard@box@from@cclv
-% \end{macrocode}
-% Then we calculate the distance to nearby grid points.
-% \begin{macrocode}
- \snap@to@grid{\ht\@cclv}\pagesetup@grid@point@sep
-% \end{macrocode}
-% So the next step is to make a decision which grid point to
-% use. The strategy used below can probably be refined
-% further\ldots
-%
-% First we test if the next grid point down makes us fall off the
-% page\footnote{We should use \texttt{\string\pagegoal} for the
-% test I think, not the commented out construct below, since in
-% case of footnotes the available space for text might has be
-% reduced!}, if so\ldots
-% \begin{macrocode}
- \ifdim \returned@size > \pagegoal
- % \csname col@ht@ \the\curr@col@count\endcsname % not!
-% \end{macrocode}
-% \ldots we better try using the previous grid point.
-% \begin{macrocode}
- \ifdim \returned@lower@delta@size < \pageshrink
-% \end{macrocode}
-% If the |\pageshrink| allows us to reach the previous point then
-% use it.
-% \begin{macrocode}
-% can use it: do so
-%<*trace>
- \tr@ce{GRID:~ outside~ page,~ choosing~ lower~ grid~ point}
-%</trace>
- \global\let \returned@size \returned@lower@size
- \xdef \returned@delta@size {-\returned@lower@delta@size }
- \else
-% \end{macrocode}
-% Otherwise, ouch \ldots{} what now? Can this happen? Unfortunately
-% yes, it seems to happen, for example, when we are trying to place
-% floats.\footnote{Analyse this situation and decide on a course of
-% action if necessary.}
-% \begin{macrocode}
- \OuchERROR
- \fi
-% \end{macrocode}
-% Otherwise we are in the normal case, i.e., somewhere in the
-% middle of the page.
-% \begin{macrocode}
- \else
-% \end{macrocode}
-% So now we can in principle choose either grid point. The code
-% below makes the decision based on which grid point is closer but
-% chooses the previous point only if |\pageshink| allows
-% it.\footnote{One could also have a look at the available
-% stretchability and base the decision on the resulting badness,
-% this might in fact be the more appropriate way!}
-% \begin{macrocode}
- \ifdim \returned@lower@delta@size < \returned@delta@size \relax
- \ifdim \returned@lower@delta@size < \pageshrink
-%<*trace>
- \tr@ce{GRID:~ choosing~ lower~ grid~ point}
-%</trace>
- \global\let \returned@size \returned@lower@size
- \xdef \returned@delta@size {-\returned@lower@delta@size }
- \fi
- \fi
- \fi
-%<*trace>
- \tr@ce{GRID:~ adjustment:~ \the\ht\@cclv\space ->~ \returned@size}
-%</trace>
-% \end{macrocode}
-% Whatever the decision was, we finally bundle up all material in a
-% box with the vertical size being that of the chosen grid point
-% (no |\maxdepth| setting in this case) and return this box to the
-% MVL followed by any footnotes found in that process. These
-% footnotes are reinserted so that they will be reconsidered but
-% since we have no break point between the box and them they will
-% be considered as a unit.
-% \begin{macrocode}
- \vbox to\returned@size{\unvbox\@cclv}
- \@reinserts
-% \end{macrocode}
-% We know that the material returned to the MVL is followered
-% immediately by a box of size zero followed by a penalty thus
-% there will be a breakpoint in the right place (or so we hope) so
-% that the box plus the following footnotes will still fit into the
-% column when reprocessed.
-% \begin{macrocode}
-%<*trace>
- \@tracepop{align@collected@galley@and@restart}
-%</trace>
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\OuchERROR}
-% This part of the code (as far as I can see right now) will be
-% executed if there is some larger display object (ie off grid)
-% which will just fit onto the page unaligned but not if we align
-% to the next grid point. The reason for this is that somewhere on
-% the column there are also footnotes for example, which result in
-% the column not being an integral number of grid lines.
-% \begin{macrocode}
-\def\OuchERROR{
-%<*trace>
- \tr@ce{Failed:~grid~ overflowing~ column~ \the\curr@col@count}
-%</trace>
-%<*progress>
- \progress@failed{next~ possible~ grid~ point~ in~ column~
- \the\curr@col@count\space outside~ page}
-%</progress>
-% \end{macrocode}
-% I think essentially what is needed here is to split the column
-% just before the current line, ie, using something like
-% |\split@off@last@line| (except that this only works for here
-% points right now) and this move the grid align penalty to the
-% next column.\footnote{Not done! FIX}
-% \begin{macrocode}
-% \split@off@last@line
-% \(re)???add@guarded@penalty\output@grid@align@penalty
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\std@AlignToGrid}
-% This is the definition for |\AlignToGrid| if we are really doing
-% grid based layout.
-% \begin{macrocode}
-\def\std@AlignToGrid{
- \add@badly@guarded@penalty\output@grid@align@penalty
-}
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\IgnoreAlignToGrid}
-% \begin{macro}{\ObeyAlignToGrid}
-% |\IgnoreAlignToGrid| will turn off automatic grid alignment for a
-% while, while |\ObeyAlignToGrid| will turn it on again. This is
-% needed in commands that want to set something outside the grid
-% and then realign afterwards, e.g., a heading. If that heading
-% would follow, say, a list that issued a |\AlignToGrid| to be
-% executed on the next paragraph, that |\AlignToGrid| would
-% effectively appear on the heading title thus forcing that to be
-% on a grid line, which is typically not intended. So the heading
-% macro first says |\IgnoreAlignToGrid| then typesets the material
-% which should be not aligned, then says |\ObeyAlignToGrid| and
-% prepares to install its own |\AlignToGrid| (typically after the
-% first line of text via |\everypar|).
-% \begin{macrocode}
-\def\IgnoreAlignToGrid{
- \global\let\AlignToGrid\relax
-}
-\def\ObeyAlignToGrid{
- \global\let\AlignToGrid\std@AlignToGrid
-}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-%
-%
-% \begin{macro}{\AlignToGrid}
-% |\AlignToGrid| is the command that inserts a grid point which
-% triggers alignment to the text grid for the current line (if we
-% are doing grid based design). It should be set in the page setup
-% so the default is an error.
-% \begin{macrocode}
-\let\AlignToGrid\ERROR
-% \end{macrocode}
-% \end{macro}
-%
-%
-% \begin{macro}{\TextAlignToGrid}
-% In nearly all cases the alignment should be done for a text line,
-% so we provide this abbreviation which starts horizontal mode if
-% necessary.
-% \begin{macrocode}
-\def\TextAlignToGrid{ \leavevmode \AlignToGrid }
-% \end{macrocode}
-% \end{macro}
-%
-%
-%
-%
-%
-%
-% \subsection{Initialisations}
-%
-% The initialisation at begin document isn't properly done
-% yet. Some bits are done unnecessarily here (by calling
-% initialisation commands that do too much and some bits are
-% problably still in the wrong place. Furthermore the column data
-% initialisation needs to be resolved properly. Right now we
-% hardwire a maximum of 6 columns down there and initialise the
-% data structures for all the potential columns independently of
-% whether or not they are ever being used.\footnote{SORT OUT!}
-% \begin{macrocode}
-\AtBeginDocument{
- \begingroup
- \col@count6\relax
- \initialise@column@data
-% \end{macrocode}
-% More column data stuff which needs to be set only the very first
-% time!
-% \begin{macrocode}
- \forall@columns {
-% \end{macrocode}
-%
-% \begin{macrocode}
- \def\@elt#1{
- \global\@namedef{fl@\the\curr@col@count @#1}{0}
- \global\@namedef{tfl@\the\curr@col@count @#1}{0}
- }
- \float@classes@list
-% \end{macrocode}
-% Setting |\@elt| back to |\relax| is done below.
-% \begin{macrocode}
- }
-% \end{macrocode}
-%
-% The default for fps should be all areas known (not only those
-% currently used!)
-% \begin{macrocode}
- \def\@elt#1{
- \global\expandafter\let\csname fps@#1\endcsname\known@areas
- \global\@namedef{fl@0@#1}{0}
- }
- \float@classes@list
- \endgroup
-% \end{macrocode}
-%
-% \begin{macrocode}
-% \initialise@next@page
-% \end{macrocode}
-% Start the document by collecting text.
-% \begin{macrocode}
- \@collecting@new@materialtrue
- \setup@collection@or
-}
-% \end{macrocode}
-%
-%
-% \endinput
-\endinput
-%
-% $Log: xo-or.dtx,v $
-% Revision 1.53 2000/08/11 07:14:25 latex3
-% added header
-%
-% Revision 1.52 2000/08/11 06:49:21 latex3
-% untabify
-%
-% Revision 1.51 2000/08/11 06:46:48 latex3
-% change logic for handling special penalties once more (and still not
-% okay)
-%
-% Revision 1.50 2000/08/06 19:03:44 latex3
-% change initialisation at \begin{document}
-% fix \columnbreak
-%
-% Revision 1.49 2000/08/04 13:58:16 latex3
-% documented issue when grid point overflows column
-%
-% Revision 1.48 2000/08/04 10:22:31 latex3
-% added \split@skip (probably not final version)
-%
-% Revision 1.47 2000/07/26 20:37:03 latex3
-% working version of grid points (text grids)
-%
-% Revision 1.46 2000/07/21 13:52:13 latex3
-% more renaming for float sequence class concept
-%
-% Revision 1.45 2000/07/19 17:12:08 latex3
-% introduced float sequence class concept
-% added variables for float area separation
-%
-% Revision 1.44 2000/07/10 19:24:59 latex3
-% some start at supporting "balance points" (unfinished).
-% added \initialise@column@data.
-% getting rid of extra empty page at end due to old defnition of
-% \clearpage.
-%
-% Revision 1.43 2000/07/04 19:45:40 latex3
-% fix GRID stuff (restore all values as needed)
-%
-% Revision 1.42 2000/07/01 16:07:26 latex3
-% use \update@this@area@columns
-% integrate code to support grid design (first draft)
-%
-% Revision 1.41 2000/06/29 17:40:44 latex3
-% introduced \setup@this@area
-%
-% Revision 1.40 2000/06/26 15:16:15 latex3
-% prototype support for \pagesetup@float@area@sep
-%
-% Revision 1.39 2000/06/22 20:07:51 latex3
-% renamed some macros to get them more uniform
-%
-% Revision 1.38 2000/06/22 10:59:57 latex3
-% Included support for writing fpl files
-%
-% Revision 1.37 2000/06/21 09:55:41 latex3
-% fix typo
-%
-% Revision 1.36 2000/06/19 19:03:56 latex3
-% make \gincrement@num and \gdecrement@num behave (not update \count@)
-% cleanup flushing (if fail only move flush point one column)
-%
-% Revision 1.35 2000/06/18 14:59:50 latex3
-% docu updates (and a bug fix due to typo)
-%
-% Revision 1.34 2000/06/16 11:21:14 latex3
-% rename \construct@and@test@col@height to \construct@and@test@col@ht
-% rename \construct@and@test@col@heights to \construct@and@test@col@hts
-% rename \cl@height1 to \@col@ht@1 (etc)
-%
-% Revision 1.33 2000/06/16 11:05:25 latex3
-% implemented tfl@ support (top area float sequences)
-% support float-callout-span-constraint
-% more documentation
-%
-% Revision 1.32 2000/06/15 15:20:16 latex3
-% implemented new semantics for area names
-%
-% Revision 1.31 2000/06/15 09:32:18 latex3
-% added mising \end{macro}'s
-%
-% Revision 1.30 2000/06/13 20:44:25 latex3
-% guard the output@collect@penalty
-% implemented fuzzy flushing (except for spreads)
-%
-% Revision 1.29 2000/06/06 11:03:21 latex3
-% before attempting fuzzyflush
-%
-% Revision 1.28 2000/05/03 20:17:31 latex3
-% need more info about here floats
-%
-% Revision 1.27 2000/05/03 18:45:40 latex3
-% fix bugs: always have a trial run wihtout floats to initialise here
-% and flush points; reset \trial@flush@seen@num after using it to update
-% the data structures on a new pages; have adding to the defer area
-% close other areas :-)
-% more documentation
-%
-% Revision 1.26 2000/04/27 19:50:11 latex3
-% some stats gathered now
-% combine \grab@column@or and \best@column@or as far as possible
-% some bug fixes and additional documentation
-%
-% Revision 1.25 2000/04/21 19:08:43 latex3
-% code cleanup
-% additional documentation
-% fixes for here points
-% support for footnote setup
-%
-% Revision 1.24 2000/04/11 21:06:06 latex3
-% basically Chris's 1.24 plus my changes
-%
-% Revision 1.24 2000/04/10 16:41:14 car2
-% typos, comments and guardbox removal
-%
-% Revision 1.23 2000/04/09 20:02:00 latex3
-% fix topskip problem in collection
-% added first draft of marginpar support
-%
-% Revision 1.22 2000/04/08 09:47:06 latex3
-% first draft of here point implementation
-% code cleanup
-% further documentation
-%
-% Revision 1.21 2000/03/31 17:12:41 latex3
-% disable preplacing deferred floats (until caption handling is fixed)
-% fix float page handling
-% ensure that float pages don't add additional captions (don't mind that
-% the float page comes out even worse)
-%
-% Revision 1.20 2000/03/26 21:05:11 latex3
-% work on float pages
-% some renaming in particular \try@this@area
-% and \try@next@area
-% some more documentation
-%
-% Revision 1.19 2000/03/24 15:34:27 latex3
-% version that starts supporting spans (still a hack yet)
-%
-% Revision 1.18 2000/03/22 15:51:11 latex3
-% some normalisations of names
-% moved code around
-% lot of updates
-%
-% Revision 1.17 2000/03/17 20:26:40 latex3
-% more fixes to flushing (looks good now)
-%
-% Revision 1.16 2000/03/16 10:28:29 latex3
-% partial and full flush working for the first time
-%
-% Revision 1.15 2000/03/05 19:36:53 latex3
-% some renaming
-% support multiple columns (6 max right now)
-% fix flush float logic (hopefully)
-%
-% Revision 1.14 2000/02/28 23:41:14 david
-% deadcycles
-%
-% Revision 1.13 2000/02/27 15:39:53 david
-% *** empty log message ***
-%
-% Revision 1.12 2000/02/27 15:12:00 david
-% 2nd attempt at flush floats (working as far as implemented)
-%
-% Revision 1.11 2000/02/27 11:26:35 david
-% first attempt at flush floats
-%
-% Revision 1.10 2000/02/26 18:20:09 david
-% added pre-allocation of deferred floats to float areas
-%
-% Revision 1.9 2000/02/21 23:25:11 david
-% t11|t22 support in optional argument
-%
-% Revision 1.8 2000/02/19 23:14:58 david
-% chris' doc fix
-%
-% Revision 1.7 2000/02/16 13:40:40 latex3
-% added 3col support
-%
-% Revision 1.6 2000/02/16 10:07:13 latex3
-% added further documentation
-% fixed bug by removing code from \try@this@area to
-% \pretests@success@action
-% handle case of hitting special output penalty during trial or
-% page production
-% handle case of \newpage ie penalty -10000
-%
-% Revision 1.5 2000/02/15 01:08:25 david
-% dead code
-%
-% Revision 1.4 2000/02/13 22:40:13 latex3
-% moved some stuff around and added macro environments
-%