summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/flowfram
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2012-11-13 00:16:56 +0000
committerKarl Berry <karl@freefriends.org>2012-11-13 00:16:56 +0000
commitb847625057328d18cbaff06505599203c8382a17 (patch)
treeb040c624881b1af975180256f90173d440d284d7 /Master/texmf-dist/source/latex/flowfram
parentf5c4d1df6475f098e051b5c8a71ce506a2c0d802 (diff)
flowfram 1.14 (12nov12)
git-svn-id: svn://tug.org/texlive/trunk@28238 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/flowfram')
-rw-r--r--Master/texmf-dist/source/latex/flowfram/flowfram.dtx16361
-rw-r--r--Master/texmf-dist/source/latex/flowfram/flowfram.ins20
-rw-r--r--Master/texmf-dist/source/latex/flowfram/flowfram.perl1632
3 files changed, 12958 insertions, 5055 deletions
diff --git a/Master/texmf-dist/source/latex/flowfram/flowfram.dtx b/Master/texmf-dist/source/latex/flowfram/flowfram.dtx
index 8a2584d9301..61890ddf0e7 100644
--- a/Master/texmf-dist/source/latex/flowfram/flowfram.dtx
+++ b/Master/texmf-dist/source/latex/flowfram/flowfram.dtx
@@ -1,12 +1,19 @@
%\iffalse
% flowfram.dtx generated using makedtx version 0.94b (c) Nicola Talbot
% Command line args:
+% -macrocode "flowfram\.perl"
+% -macrocode ".*\.tex"
+% -setambles "flowfram\.perl=>\nopreamble\nopostamble"
+% -setambles ".*\.tex=>\nopreamble\nopostamble"
+% -comment "flowfram\.perl"
+% -comment ".*\.tex"
% -src "flowfram.sty\Z=>flowfram.sty"
+% -src "(sample.*\.tex)\Z=>\1"
+% -src "(flowfram\.perl)\Z=>\1"
% -doc "docstub.tex"
% -author "Nicola Talbot"
-% -dir "source"
% flowfram
-% Created on 2010/1/23 11:35
+% Created on 2012/11/10 22:19
%\fi
%\iffalse
%<*package>
@@ -29,13 +36,15 @@
%\fi
% \iffalse
% Doc-Source file to use with LaTeX2e
-% Copyright (C) 2010 Nicola Talbot, all rights reserved.
+% Copyright (C) 2012 Nicola Talbot, all rights reserved.
% \fi
% \iffalse
%<*driver>
-\documentclass{ltxdoc}
+\documentclass[widecs]{nlctdoc}
+\addtolength{\marginparwidth}{10pt}
+\addtolength{\oddsidemargin}{20pt}
-\CheckSum{9520}
+\CheckSum{12608}
\PageIndex
\usepackage{url}
@@ -47,12 +56,13 @@ pdftitle={Documented Source Code for flowfram.sty}]{hyperref}
\newglossary[slg]{secondary}{sgi}{sgo}{Glossary}
\renewcommand{\acronymtype}{secondary}
+\doxitem{Option}{option}{package options}
+\doxitem{Counter}{counter}{flowfram counters}
+
\MakeShortVerb"
\DeleteShortVerb|
-\newcommand{\sty}[1]{\textsf{#1}}
-\newcommand{\env}[1]{\textsf{#1}}
-
+\iffalse
\renewcommand{\usage}[1]{\textit{\hyperpage{#1}}}
\renewcommand{\main}[1]{\hyperpage{#1}}
\newcommand{\see}[2]{\emph{see} #1}
@@ -60,6 +70,7 @@ pdftitle={Documented Source Code for flowfram.sty}]{hyperref}
\def\index@prologue{\section*{Index}
\addcontentsline{toc}{section}{Index}}
\makeatother
+\fi
\newglossaryentry{typeblock}{name=typeblock,description={The
@@ -132,9 +143,9 @@ IDN}]{idl}{IDL}{identification label}
\end{document}
%</driver>
%\fi
-%\title{Documented Source Code for flowfram.sty v1.13}
+%\title{Documented Source Code for flowfram.sty v1.14}
%\author{Nicola L. C. Talbot}
-%\date{23rd January 2010}
+%\date{2012-11-10}
%\maketitle
%
%This is the documented source code for the flowfram package.
@@ -144,7 +155,8 @@ IDN}]{idl}{IDL}{identification label}
%
%\printglossary[type=secondary]
%
-%\StopEventually{\PrintIndex}
+%\StopEventually{\clearpage\phantomsection
+%\addcontentsline{toc}{section}{Index}\PrintIndex}
%
%
%\section{The Code}
@@ -157,14 +169,24 @@ IDN}]{idl}{IDL}{identification label}
% Declare package, and identify it as a \LaTeXe\ package.
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{flowfram}[2010/01/23 v1.13]
+\ProvidesPackage{flowfram}[2012/11/10 v1.14 (NLCT)]
% \end{macrocode}
% Load packages needed by this package
% \begin{macrocode}
\RequirePackage{ifthen}
-\RequirePackage{keyval}
+% \end{macrocode}
+%\changes{1.14}{2012-11-10}{now loading xkeyval instead of keyval}
+% \begin{macrocode}
+\RequirePackage{xkeyval}
\RequirePackage{graphics}
\RequirePackage{afterpage}
+% \end{macrocode}
+%\changes{1.14}{2012-11-10}{now loading xfor and etoolbox}
+% \begin{macrocode}
+\RequirePackage{xfor}
+\RequirePackage{etoolbox}
+% \end{macrocode}
+% \begin{macrocode}
\@ifundefined{@ldc@l@r}{\RequirePackage{color}}{}
% \end{macrocode}
% The colour of the \gls{bbox} borders when the draft
@@ -201,9 +223,9 @@ IDN}]{idl}{IDL}{identification label}
% Set all draft settings.
% \begin{macrocode}
\newcommand*{\@ffdraft}{%
-\showtypeblocktrue
-\showmarginstrue
-\showframebboxtrue
+ \showtypeblocktrue
+ \showmarginstrue
+ \showframebboxtrue
}
% \end{macrocode}
%\end{macro}
@@ -211,9 +233,9 @@ IDN}]{idl}{IDL}{identification label}
% Unset all draft settings.
% \begin{macrocode}
\newcommand*{\@ffnodraft}{%
-\showtypeblockfalse
-\showmarginsfalse
-\showframebboxfalse
+ \showtypeblockfalse
+ \showmarginsfalse
+ \showframebboxfalse
}
% \end{macrocode}
%\end{macro}
@@ -221,10 +243,13 @@ IDN}]{idl}{IDL}{identification label}
% Draw \gls{bbox}.
% \begin{macrocode}
\newcommand*{\@fr@meifdraft}[3][\setffdraftcolor]{%
-\def\ff@backcol{{none}}%
-\@ifundefined{color}{\frame{#2}}{#1\frame{#2}}%
-\ifthenelse{\equal{#3}{}}{}{%
-\makebox[0pt][l]{\hskip\fflabelsep\fflabelfont{[#3]}}}}%
+ \def\ff@backcol{{none}}%
+ \@ifundefined{color}{\frame{#2}}{#1\frame{#2}}%
+ \ifthenelse{\equal{#3}{}}{}%
+ {%
+ \makebox[0pt][l]{\hskip\fflabelsep\fflabelfont{[#3]}}%
+ }%
+}%
% \end{macrocode}
%\end{macro}
% Colour setting commands, do nothing by default:
@@ -241,82 +266,284 @@ IDN}]{idl}{IDL}{identification label}
\newcommand*{\@ffbackground}[1]{#1}
% \end{macrocode}
%\end{macro}
-% Now declare the options. If draft, switch to draft definitions.
+% Now declare the options.
+%\begin{option}{draft}
+% If draft, switch to draft definitions.
% \begin{macrocode}
-\DeclareOption{draft}{\@ffdraft}
+\DeclareOptionX{draft}{\@ffdraft}
% \end{macrocode}
+%\end{option}
+%\begin{option}{final}
% If not draft, reset commands so that no \glspl{bbox}
% are drawn.
% \begin{macrocode}
-\DeclareOption{final}{\@ffnodraft}
+\DeclareOptionX{final}{\@ffnodraft}
+% \end{macrocode}
+%\end{option}
+% Set the default to \pkgopt{final}:
+% \begin{macrocode}
+\@ffnodraft
% \end{macrocode}
-%\begin{macro}{\if@ttb@rotate}
+%
+%\begin{option}{verbose}
+%\changes{1.14}{2012-11-10}{new}
+% Verbose mode is primarily for debug messages.
+% \begin{macrocode}
+\define@choicekey{flowfram.sty}%
+ {verbose}[\val\nr]%
+ {true,false}[true]%
+ {%
+ \ifcase\nr\relax
+ \renewcommand*{\flf@doifverbose}[1]{##1}%
+ \renewcommand*{\flf@message}[1]{\PackageInfo{flowfram}{##1}}%
+ \or
+ \renewcommand*{\flf@doifverbose}[1]{}%
+ \renewcommand*{\flf@message}[1]{}%
+ \fi
+ }
+% \end{macrocode}
+%\end{option}
+%\begin{macro}{\flf@message}
+% Messaging system (to help debugging):
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\flf@message}[1]{%
+ \flf@doifverbose
+ {%
+ \PackageInfo{flowfram}{##1}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\flf@doifverbose}
+%\changes{1.14}{2012-11-10}{new}
+% Initialise:
+% \begin{macrocode}
+\newcommand*{\flf@doifverbose}[1]{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{option}{rotate}
% Allow provision to prevent rotation in the thumbtabs.
% If no rotation, thumbtab text will be stacked vertically.
% This will also affect whether or not to rotate \glspl{frame}.
+%\changes{1.14}{2012-11-10}{changed to boolean key}
% \begin{macrocode}
-\newif\if@ttb@rotate
+\define@boolkey{flowfram.sty}[@ttb@]{rotate}[true]{}
\@ttb@rotatetrue
-\DeclareOption{rotate}{\@ttb@rotatetrue}
-\DeclareOption{norotate}{\@ttb@rotatefalse}
% \end{macrocode}
-%\end{macro}
+%\end{option}
+%\begin{option}{norotate}
+% Provide \pkgopt{norotate} option for backward compatibility
+% \begin{macrocode}
+\DeclareOptionX{norotate}{\@ttb@rotatefalse}
+% \end{macrocode}
+%\end{option}
%\begin{macro}{\rotateframe}
% Define command that will only rotate box if rotate option
% set.
% \begin{macrocode}
-\newcommand{\rotateframe}[2]{\if@ttb@rotate
-\rotatebox{#1}{#2}%
-\else
-#2\relax
-\fi}
+\newcommand{\rotateframe}[2]{%
+ \if@ttb@rotate
+ \rotatebox{#1}{#2}%
+ \else
+ #2%
+ \fi
+}
% \end{macrocode}
%\end{macro}
% Should the thumbtabs include number, title, both or
% neither?
+%\begin{macro}{\if@ttb@num}
% \begin{macrocode}
\newif\if@ttb@num
-\newif\if@ttb@title
\@ttb@numfalse
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\if@ttb@title}
+% \begin{macrocode}
+\newif\if@ttb@title
\@ttb@titletrue
-\DeclareOption{ttbtitle}{\@ttb@titletrue}
-\DeclareOption{ttbnotitle}{\@ttb@titlefalse}
-\DeclareOption{ttbnum}{\@ttb@numtrue}
-\DeclareOption{ttbnonum}{\@ttb@numfalse}
% \end{macrocode}
-% If color option specified, set up the default colours
+%\begin{option}{thumbtabs}
+%\changes{1.14}{2012-11-10}{new}
+% The \pkgopt{thumbtabs} option replaces the \pkgopt{ttbtitle},
+% \pkgopt{ttbnotitle}, \pkgopt{ttbnum} and \pkgopt{ttbnonum}
+% options.
+% \begin{macrocode}
+\define@choicekey{flowfram.sty}%
+ {thumbtabs}[\val\nr]%
+ {title,number,both,none}[title]%
+ {%
+ \ifcase\nr\relax
+% \end{macrocode}
+% Thumbtabs to only include title
+% \begin{macrocode}
+ \@ttb@numfalse
+ \@ttb@titletrue
+ \or
+% \end{macrocode}
+% Thumbtabs to only include number
+% \begin{macrocode}
+ \@ttb@numtrue
+ \@ttb@titlefalse
+ \or
+% \end{macrocode}
+% Thumbtabs to include title and number
+% \begin{macrocode}
+ \@ttb@numtrue
+ \@ttb@titletrue
+ \or
+% \end{macrocode}
+% Thumbtabs don't have title or number
+% \begin{macrocode}
+ \@ttb@numfalse
+ \@ttb@titlefalse
+ \fi
+ }
+% \end{macrocode}
+%\end{option}
+% Provide old options for backward compatibility:
+%\begin{option}{ttbtitle}
+% \begin{macrocode}
+\DeclareOptionX{ttbtitle}{\@ttb@titletrue}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{ttbnotitle}
+% \begin{macrocode}
+\DeclareOptionX{ttbnotitle}{\@ttb@titlefalse}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{ttbnum}
+% \begin{macrocode}
+\DeclareOptionX{ttbnum}{\@ttb@numtrue}
+% \end{macrocode}
+%\end{option}
+%\begin{option}{ttbnonum}
+% \begin{macrocode}
+\DeclareOptionX{ttbnonum}{\@ttb@numfalse}
+% \end{macrocode}
+%\end{option}
+%
+%\begin{option}{pages}
+%\changes{1.14}{2012-11-10}{new}
+% Determine whether the pages key when defining frames refers to the
+% page number as given by \ics{c@page} or the absolute
+% page number as given by \ics{c@absolutepage}.
+% \begin{macrocode}
+\define@choicekey{flowfram.sty}{pages}[\val\nr]%
+ {relative,absolute}%
+ {%
+ \ifcase\nr\relax
+% \end{macrocode}
+% Relative (use \cs{c@page}):
+% \begin{macrocode}
+ \renewcommand*{\@ff@pages@countreg}{\c@page}%
+ \or
+% \end{macrocode}
+% Absolute (use \cs{c@absolutepage}):
+% \begin{macrocode}
+ \renewcommand*{\@ff@pages@countreg}{\c@absolutepage}%
+ \fi
+ }
+% \end{macrocode}
+%\end{option}
+%\begin{macro}{\@ff@pages@countreg}
+%\changes{1.14}{2012-11-10}{new}
+% The default is relative (for backwards compatibility).
+% \begin{macrocode}
+\newcommand*{\@ff@pages@countreg}{\c@page}
+% \end{macrocode}
+%\end{macro}
+%\begin{counter}{absolutepage}
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newcounter{absolutepage}
+% \end{macrocode}
+%\end{counter}
+%
+%\begin{option}{color}
+%\changes{1.14}{2012-11-10}{changed to boolean option}
+% If \pkgopt[true]{color} option specified, set up the default colours
% for the borders and text for all \gls{frame} types. Note that
% the colour name has to be grouped within the definition
-% of "\flowframecol" and "\flowframetextcol". This
+% of \ics{flowframecol} and \ics{flowframetextcol}. This
% was done so that you could do, for example,
% "\renewcommand{\flowframecol}{[rgb]{1,1,0}}" so that
% you can specify the colour model as well.
-% The commands "\@s@tffcol" and "\@s@tfftextcol"
+% The commands \ics{@s@tffcol} and \ics{@s@tfftextcol}
% switch to the border and text colour, respectively. They
-% both assume that "\ff@col" has been set to the
+% both assume that \ics{ff@col} has been set to the
% relevant colour before use.
% \begin{macrocode}
-\DeclareOption{color}{%
-\def\flowframecol{{black}}\def\flowframetextcol{{black}}
-\renewcommand*\@s@tffcol{\ifthenelse{\equal{\ff@col}{}}{}{%
-\expandafter\color\ff@col}}
-\renewcommand*\@s@tfftextcol{\ifthenelse{\equal{\ff@txtcol}{}}{}{%
-\expandafter\color\ff@txtcol}}
-\renewcommand*{\@ffbackground}[1]{%
-\ifthenelse{\equal{\ff@backcol}{{none}}}{%
-#1}{{\fboxsep=0pt\expandafter\colorbox\ff@backcol{#1}}}}
+\define@choicekey{flowfram.sty}{color}[\val\nr]{true,false}[true]{%
+ \ifcase\nr\relax
+% \end{macrocode}
+% Option set to true:
+% \begin{macrocode}
+ \@ff@enablecolor
+ \or
+% \end{macrocode}
+% Option set to false, ensure that the colour changing
+% commands do nothing:
+% \begin{macrocode}
+ \@ff@disablecolor
+ \fi
}
% \end{macrocode}
-% If nocolor is specified, ensure that the colour changing
-% commands do nothing.
+%\end{option}
+% Provide \pkgopt{nocolor} option for backward compatibility:
% \begin{macrocode}
-\DeclareOption{nocolor}{%
-\def\flowframetextcol{}%
-\def\flowframecol{}%
-\renewcommand{\@s@tffcol}{}\renewcommand{\@s@tfftextcol}{}
-\renewcommand{\@ffbackground}[1]{#1}
+\DeclareOptionX{nocolor}{%
+ \@ff@disablecolor
}
% \end{macrocode}
+%\begin{macro}{\@ff@enablecolor}
+%\changes{1.14}{2012-11-10}{new}
+% Enable colour commands.
+% \begin{macrocode}
+\newcommand*{\@ff@enablecolor}{%
+ \def\flowframecol{{black}}%
+ \def\flowframetextcol{{black}}%
+ \renewcommand*\@s@tffcol{%
+ \ifthenelse{\equal{\ff@col}{}}%
+ {}%
+ {%
+ \expandafter\color\ff@col}%
+ }%
+ \renewcommand*\@s@tfftextcol{%
+ \ifthenelse{\equal{\ff@txtcol}{}}%
+ {}%
+ {%
+ \expandafter\color\ff@txtcol
+ }%
+ }%
+ \renewcommand*{\@ffbackground}[1]{%
+ \ifthenelse{\equal{\ff@backcol}{{none}}}%
+ {%
+ ##1%
+ }%
+ {%
+ {\fboxsep=0pt\expandafter\colorbox\ff@backcol{##1}}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\@ff@disablecolor}
+%\changes{1.14}{2012-11-10}{new}
+% Disable colour commands.
+% \begin{macrocode}
+\newcommand*{\@ff@disablecolor}{%
+ \def\flowframetextcol{}%
+ \def\flowframecol{}%
+ \renewcommand{\@s@tffcol}{}\renewcommand{\@s@tfftextcol}{}%
+ \renewcommand{\@ffbackground}[1]{##1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
%\begin{macro}{\iflefttorightcolumns}
% Determine whether to define the Ncolumn style frames from left
% to right or from right to left.
@@ -327,82 +554,131 @@ IDN}]{idl}{IDL}{identification label}
% \end{macrocode}
%\end{macro}
% Define options that set the direction:
+%\begin{option}{LR}
% \begin{macrocode}
-\DeclareOption{LR}{\lefttorightcolumnstrue}
-\DeclareOption{RL}{\lefttorightcolumnsfalse}
+\DeclareOptionX{LR}{\lefttorightcolumnstrue}
% \end{macrocode}
-% Check to see if the document class has the draft option
-% set. The easiest way to do this is to check the length
-% of "\overfullrule" (the marker that indicates overfull
-% hboxes).
-% \begin{macrocode}
-\ifdim\overfullrule=0pt
-\ExecuteOptions{final}
-\else
-\ExecuteOptions{draft}
-\fi
+%\end{option}
+%\begin{option}{RL}
+% \begin{macrocode}
+\DeclareOptionX{RL}{\lefttorightcolumnsfalse}
% \end{macrocode}
-% If the "\normalcolor" command is something other than
-% "\relax", then implement
-% the color option as the default, otherwise implement the
-% nocolor option as the default.
+%\end{option}
+% If the \ics{normalcolor} command is something other than
+% \cs{relax}, then implement
+% the \pkgopt[true]{color} option as the default, otherwise implement the
+% \pkgopt[false]{color} option as the default.
% \begin{macrocode}
\ifx\normalcolor\relax
-\ExecuteOptions{nocolor}
+ \@ff@disablecolor
\else
-\ExecuteOptions{color}
+ \@ff@enablecolor
\fi
% \end{macrocode}
% Now the defaults have all been set, the package options
% specified by the user can be processed:
% \begin{macrocode}
-\ProcessOptions
+\ProcessOptionsX
% \end{macrocode}
-% If color option has been specified, but no color
+% If \pkgopt[true]{color} option has been specified, but no color
% package has been loaded yet, load color.sty
% \begin{macrocode}
\ifx\normalcolor\relax
-\ifthenelse{\equal{\flowframetextcol}{}}{}{%
-\RequirePackage{color}}
+ \ifthenelse{\equal{\flowframetextcol}{}}%
+ {}%
+ {%
+ \RequirePackage{color}%
+ }
\fi
% \end{macrocode}
+%
+% \begin{macrocode}
+\@ifundefined{chapter}{}%
+{%
+% \end{macrocode}
+%\begin{macro}{\chapterfirstpagestyle}
% User may want a non standard style for the first page of
% each chapter, so modify chapter commands to take this into
-% account.\DescribeMacro{\chapterfirstpagestyle}
+% account.
+% \begin{macrocode}
+ \newcommand*{\chapterfirstpagestyle}{plain}%
+% \end{macrocode}
+%\end{macro}
+%
+% \begin{macrocode}
+ \let\@ff@OLD@chapter\@chapter
+ \let\@ff@OLD@schapter\@schapter
+ \renewcommand{\@chapter}{%
+ \thispagestyle{\chapterfirstpagestyle}%
+ \@ff@OLD@chapter
+ }%
+ \renewcommand{\@schapter}{%
+ \thispagestyle{\chapterfirstpagestyle}%
+ \@ff@OLD@schapter
+ }%
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ffprechapterhook}
+%\changes{1.14}{2012-11-10}{new}
+% Hook at start of chapter (before page break issued)
+% \begin{macrocode}
+ \newcommand*{\ffprechapterhook}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\chapter}
+% Modify \cs{chapter} so the hook is called at the start:
+% \begin{macrocode}
+ \let\@ff@OLD@ch@pter\chapter
+ \renewcommand{\chapter}{%
+ \ffprechapterhook
+ \@ff@OLD@ch@pter
+ }
+% \end{macrocode}
+%\end{macro}
+%
+% End of test if \cs{chapter} defined:
% \begin{macrocode}
-\@ifundefined{chapter}{}{%
-\newcommand*{\chapterfirstpagestyle}{plain}
-\let\@ff@OLD@chapter\@chapter
-\let\@ff@OLD@schapter\@schapter
-\renewcommand{\@chapter}{%
-\thispagestyle{\chapterfirstpagestyle}\@ff@OLD@chapter}
-\renewcommand{\@schapter}{%
-\thispagestyle{\chapterfirstpagestyle}\@ff@OLD@schapter}
}
% \end{macrocode}
+%
+%\begin{counter}{maxflow}
% Now get on with the package. First we need to set up
% a register to store the number of \glspl{flow} that have been defined:
% \begin{macrocode}
\newcounter{maxflow}
\c@maxflow=0\relax
% \end{macrocode}
+%\end{counter}
+%
+%\begin{counter}{thisframe}
% Next define a counter to keep track of the \gls{idn} of the current
% \gls{flow}.
% \begin{macrocode}
\newcounter{thisframe}
\c@thisframe=0\relax
-\@ifpackageloaded{hyperref}{%
-\def\theHthisframe{\thepage.\arabic{thisframe}}}{}
+\@ifpackageloaded{hyperref}
+{%
+ \def\theHthisframe{\thepage.\arabic{thisframe}}%
+}%
+{}
% \end{macrocode}
+%\end{counter}
%\begin{macro}{\labelflowidn}
%\changes{1.11}{2008/06/27}{new}
% Define a command to label the current \gls{flow} so that its
% \gls{idn} can be referenced:
% \begin{macrocode}
\newcommand*{\labelflowidn}[1]{%
-{\def\@currentlabel{\thethisframe}\label{#1}}}
+ {%
+ \def\@currentlabel{\thethisframe}%
+ \label{#1}%
+ }%
+}
% \end{macrocode}
%\end{macro}
+%\begin{counter}{displayedframe}
% Define a counter to store the current frame index for the current
% page. This will be the same as the \gls{idn} if all \glspl{flow}
% are displayed on the current page, but may be different to the
@@ -411,28 +687,41 @@ IDN}]{idl}{IDL}{identification label}
% \begin{macrocode}
\newcounter{displayedframe}
\c@displayedframe=0
-\@ifpackageloaded{hyperref}{%
-\def\theHdisplayedframe{\thepage.\arabic{displayedframe}}}{}
+\@ifpackageloaded{hyperref}%
+{%
+ \def\theHdisplayedframe{\thepage.\arabic{displayedframe}}%
+}%
+{}
% \end{macrocode}
+%\end{counter}
+%
%\begin{macro}{\labelflow}
%\changes{1.11}{2008/06/27}{new}
% Define a command to label the current \gls{flow} so that its
% displayed index can be referenced:
% \begin{macrocode}
\newcommand*{\labelflow}[1]{%
-{\def\@currentlabel{\thedisplayedframe}\label{#1}}}
+ {%
+ \def\@currentlabel{\thedisplayedframe}%
+ \label{#1}%
+ }%
+}
% \end{macrocode}
%\end{macro}
+%\begin{counter}{maxstatic}
% Define a counter to store the total number of \glspl{static}:
% \begin{macrocode}
\newcounter{maxstatic}
\c@maxstatic=0\relax
% \end{macrocode}
+%\end{counter}
+%\begin{counter}{maxdynamic}
% Define a counter to store the total number of \glspl{dynamic}:
% \begin{macrocode}
\newcounter{maxdynamic}
\c@maxdynamic=0\relax
% \end{macrocode}
+%\end{counter}
% Define some temporary variables
% \begin{macrocode}
\newcount\@colN
@@ -475,8 +764,11 @@ IDN}]{idl}{IDL}{identification label}
%\DescribeMacro{\flowframeshowlayout}
% \begin{macrocode}
\newcommand*{\flowframeshowlayout}{%
-\finishthispage
-{\@ffdraft\mbox{}\finishthispage\clearpage}}
+ \finishthispage
+ {%
+ \@ffdraft\mbox{}\finishthispage\clearpage
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\framebreak}
@@ -487,41 +779,78 @@ IDN}]{idl}{IDL}{identification label}
% Provides an optional argument that is passed to
% "\pagebreak". Make sure it is grouped to localise
% the change in "\parfillskip" and "\parskip".
+%\changes{1.14}{2012-11-10}{made change to switch global}
% \begin{macrocode}
\newif\ifusedframebreak
\newcommand{\framebreak}[1][4]{%
-\usedframebreaktrue
-{\parfillskip=0pt\pagebreak[#1]\parskip=0pt\par\noindent}}
+ \global\usedframebreaktrue
+ {%
+ \parfillskip=0pt\pagebreak[#1]\parskip=0pt\par\noindent
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\finishthispage}
-% The commands "\newpage" and
-% "\pagebreak" can be used to move on to the next
+% The commands \ics{newpage} and
+% \ics{pagebreak} can be used to move on to the next
% \gls{flow}, but to finish the entire page, use
-% "\finishthispage".
+% "\finishthispage". This is (loosely) based on the code for
+% \ics{clearpage}. (\cs{@dbltopnum} not required as we can't have
+% column-spanning floats.)
+%\changes{1.14}{2012-11-10}{change \cs{c@page} to
+%\cs{@ff@pages@countreg}}
% \begin{macrocode}
\newcommand{\finishthispage}{%
-\@colN=\c@thisframe
-\newpage
-\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
-\@ff@chckifthispg{\c@page}{\@colN}%
-\if@notthiscol\else
-\mbox{}\newpage%
-\fi
-}}
+ \ifvmode
+ \@colN=\c@thisframe\relax
+ \count@=\c@absolutepage\relax
+ \ifdim \pagetotal<\topskip
+ \hbox{}%
+ \fi
+ \newpage \write \m@ne {}\vbox {}\penalty -\@Mi
+% \end{macrocode}
+% If that was the last \gls{flow} on the page, then we're done,
+% otherwise iterate through the remaining \glspl{flow}.
+% \begin{macrocode}
+ \ifnum\count@=\c@absolutepage\relax
+ \whiledo{\@colN<\c@maxflow \OR \@colN=\c@maxflow}%
+ {%
+ \@ff@chckifthispg{\@ff@pages@countreg}{\@colN}%
+ \if@notthiscol
+ \else
+ \c@thisframe=\@colN\relax
+ \hbox{}\newpage
+ \fi
+ \advance\@colN by 1\relax
+ }%
+ \fi
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\cleardoublepage}
% Modify the definition of "\cleardoublepage". This may
% or may not be defined so use "\def".
% \begin{macrocode}
-\def\cleardoublepage{\finishthispage
-\if@twoside
-\ifodd\c@page
-\else
-\hbox{}\finishthispage
-\fi
-\fi}
+\def\cleardoublepage{%
+ \clearpage
+ \if@twoside
+ \ifodd\c@page
+ \else
+ \hbox{}%
+ \clearpage
+ \fi
+ \fi
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\newpage}
+% Modify the definition of \cs{newpage} so that it sets the
+% "usedframebreak" flag.
+%\changes{1.14}{2012-11-10}{Modified definition of \cs{newpage}}
+% \begin{macrocode}
+\preto\newpage{\global\usedframebreaktrue}
% \end{macrocode}
%\end{macro}
% Disable "@twocolumn" flag, as it makes no sense.
@@ -538,9 +867,17 @@ IDN}]{idl}{IDL}{identification label}
% need the effect to be global.
% \begin{macrocode}
\newcommand{\globalreversemargin}{%
-\global\@mparbottom\z@\global\@reversemargintrue}
+ \global\@mparbottom\z@
+ \global\@reversemargintrue
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\globalnormalmargin}
+% \begin{macrocode}
\newcommand{\globalnormalmargin}{%
-\global\@mparbottom\z@\global\@reversemarginfalse}
+ \global\@mparbottom\z@\global
+ \@reversemarginfalse
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@getmarginpos}
@@ -553,21 +890,27 @@ IDN}]{idl}{IDL}{identification label}
% is finished, the setting is stored in "\ff@margin".
% \begin{macrocode}
\newcommand{\@getmarginpos}[1]{%
-\ifthenelse{\equal{#1}{inner}}{%
-\if@twoside
-\ifodd\c@page\def\ff@margin{left}\else\def\ff@margin{right}\fi
-\else
-\def\ff@margin{left}%
-\fi
-}{%
-\ifthenelse{\equal{#1}{outer}}{%
-\if@twoside
-\ifodd\c@page\def\ff@margin{right}\else\def\ff@margin{left}\fi
-\else
-\def\ff@margin{right}%
-\fi
-}{%
-\def\ff@margin{#1}}}%
+ \ifthenelse{\equal{#1}{inner}}%
+ {%
+ \if@twoside
+ \ifodd\c@page\def\ff@margin{left}\else\def\ff@margin{right}\fi
+ \else
+ \def\ff@margin{left}%
+ \fi
+ }%
+ {%
+ \ifthenelse{\equal{#1}{outer}}%
+ {%
+ \if@twoside
+ \ifodd\c@page\def\ff@margin{right}\else\def\ff@margin{left}\fi
+ \else
+ \def\ff@margin{right}%
+ \fi
+ }%
+ {%
+ \def\ff@margin{#1}%
+ }%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -575,10 +918,13 @@ IDN}]{idl}{IDL}{identification label}
% Set the margin for current \gls{flow}.
% \begin{macrocode}
\newcommand{\setmargin}{%
-\@getmarginpos{%
-\csname @ff@margin@\romannumeral\c@thisframe\endcsname}%
-\ifthenelse{\equal{\ff@margin}{left}}%
-{\globalreversemargin}{\globalnormalmargin}%
+ \@getmarginpos
+ {%
+ \csname @ff@margin@\romannumeral\c@thisframe\endcsname
+ }%
+ \ifthenelse{\equal{\ff@margin}{left}}%
+ {\globalreversemargin}%
+ {\globalnormalmargin}%
}
% \end{macrocode}
%\end{macro}
@@ -610,10 +956,10 @@ IDN}]{idl}{IDL}{identification label}
%\begin{macro}{\@n@wflowframe}
% \begin{macrocode}
\newcommand{\@n@wflowframe}{%
-\global\advance\c@maxflow by 1\relax
-\expandafter\global\expandafter
-\newif\csname ifcolumnframe\romannumeral\c@maxflow\endcsname
-\@ifstar\@snewflowframe\@newflowframe
+ \global\advance\c@maxflow by 1\relax
+ \expandafter\global\expandafter
+ \newif\csname ifcolumnframe\romannumeral\c@maxflow\endcsname
+ \@ifstar\@snewflowframe\@newflowframe
}
% \end{macrocode}
%\end{macro}
@@ -621,9 +967,10 @@ IDN}]{idl}{IDL}{identification label}
% Starred version sets boolean flag to indicate a border
% \begin{macrocode}
\newcommand{\@snewflowframe}{%
-\expandafter\global\expandafter
-\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iftrue
-\@@newflowframe}
+ \expandafter\global\expandafter
+ \let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iftrue
+ \@@newflowframe
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@newflowframe}
@@ -631,9 +978,10 @@ IDN}]{idl}{IDL}{identification label}
% no border.
% \begin{macrocode}
\newcommand{\@newflowframe}{%
-\expandafter\global\expandafter
-\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iffalse
-\@@newflowframe}
+ \expandafter\global\expandafter
+ \let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iffalse
+ \@@newflowframe
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@newflowframe}
@@ -642,69 +990,90 @@ IDN}]{idl}{IDL}{identification label}
% can override this.
% \begin{macrocode}
\newcommand{\@@newflowframe}[5][all]{%
-\expandafter\global\expandafter
-\newbox\csname column\romannumeral\c@maxflow\endcsname
-\expandafter\global\expandafter
-\newlength\csname colwidth\romannumeral\c@maxflow\endcsname
-\expandafter\global\expandafter
-\newlength\csname colheight\romannumeral\c@maxflow\endcsname
-\expandafter\global\expandafter
-\newlength\csname col@\romannumeral\c@maxflow @posx\endcsname
-\expandafter\global\expandafter
-\newlength\csname col@\romannumeral\c@maxflow @posy\endcsname
-\expandafter\global\expandafter
-\setlength\csname colwidth\romannumeral\c@maxflow\endcsname{#2}
-\expandafter\global\expandafter
-\setlength\csname colheight\romannumeral\c@maxflow\endcsname{#3}
-\expandafter\global\expandafter
-\setlength\csname col@\romannumeral\c@maxflow @posx\endcsname{#4}
-\expandafter\global\expandafter
-\setlength\csname col@\romannumeral\c@maxflow @posy\endcsname{#5}
-\expandafter\global\expandafter
-\newlength\csname col@\romannumeral\c@maxflow @evenx\endcsname
-\expandafter\global\expandafter
-\newlength\csname col@\romannumeral\c@maxflow @eveny\endcsname
-\expandafter\global\expandafter
-\setlength\csname col@\romannumeral\c@maxflow @evenx\endcsname{#4}
-\expandafter\global\expandafter
-\setlength\csname col@\romannumeral\c@maxflow @eveny\endcsname{#5}
-\expandafter
-\gdef\csname @ff@frametype@\romannumeral\c@maxflow\endcsname{fbox}%
-\expandafter
-\gdef\csname @ff@col@\romannumeral\c@maxflow\endcsname{\flowframecol}
-\expandafter
-\gdef\csname @ff@txtcol@\romannumeral\c@maxflow\endcsname{%
-\flowframetextcol}
-\expandafter
-\gdef\csname @ff@backcol@\romannumeral\c@maxflow\endcsname{{none}}
-\expandafter
-\gdef\csname @ff@pages@\romannumeral\c@maxflow\endcsname{#1}
-\expandafter
-\gdef\csname @ff@offset@\romannumeral\c@maxflow\endcsname{compute}
-\expandafter
-\gdef\csname @ff@angle@\romannumeral\c@maxflow\endcsname{0}%
-\expandafter
-\gdef\csname @ff@margin@\romannumeral\c@maxflow\endcsname{right}
-\ifnum\c@thisframe=0\relax
-\ifthenelse{\equal{#1}{all}\TE@or\equal{#1}{odd}}{%
-\c@thisframe=\c@maxflow
-\global\setlength{\hsize}{#2}%
-\global\usedframebreaktrue
-}{\ifthenelse{\equal{#1}{even}\TE@or\equal{#1}{none}}{}{%
-\def\ff@pages{#1}%
-\@for\@ff@pp:=\ff@pages\do{%
-\def\@ff@numstart{0}\def\@ff@numend{0}%
-\@ff@getrange{\@ff@pp}%
-\ifnum\@ff@numstart=0\def\@ff@numstart{1}\fi
-\ifnum\@ff@numstart=1\relax
-\c@thisframe=\c@maxflow
-\global\setlength{\hsize}{#2}%
-\global\usedframebreaktrue
-\fi
-}}}%
-\fi
-\@ifnextchar[{\@s@tflowframeid{\c@maxflow}}{%
-\@s@tflowframeid{\c@maxflow}[\number\c@maxflow]}}
+ \expandafter\global\expandafter
+ \newbox\csname column\romannumeral\c@maxflow\endcsname
+ \expandafter\global\expandafter
+ \newlength\csname colwidth\romannumeral\c@maxflow\endcsname
+ \expandafter\global\expandafter
+ \newlength\csname colheight\romannumeral\c@maxflow\endcsname
+ \expandafter\global\expandafter
+ \newlength\csname col@\romannumeral\c@maxflow @posx\endcsname
+ \expandafter\global\expandafter
+ \newlength\csname col@\romannumeral\c@maxflow @posy\endcsname
+ \expandafter\global\expandafter
+ \setlength\csname colwidth\romannumeral\c@maxflow\endcsname{#2}
+ \expandafter\global\expandafter
+ \setlength\csname colheight\romannumeral\c@maxflow\endcsname{#3}
+ \expandafter\global\expandafter
+ \setlength\csname col@\romannumeral\c@maxflow @posx\endcsname{#4}
+ \expandafter\global\expandafter
+ \setlength\csname col@\romannumeral\c@maxflow @posy\endcsname{#5}
+ \expandafter\global\expandafter
+ \newlength\csname col@\romannumeral\c@maxflow @evenx\endcsname
+ \expandafter\global\expandafter
+ \newlength\csname col@\romannumeral\c@maxflow @eveny\endcsname
+ \expandafter\global\expandafter
+ \setlength\csname col@\romannumeral\c@maxflow @evenx\endcsname{#4}
+ \expandafter\global\expandafter
+ \setlength\csname col@\romannumeral\c@maxflow @eveny\endcsname{#5}
+ \expandafter
+ \gdef\csname @ff@frametype@\romannumeral\c@maxflow\endcsname{fbox}%
+ \expandafter
+ \gdef\csname @ff@col@\romannumeral\c@maxflow\endcsname{\flowframecol}
+ \expandafter
+ \gdef\csname @ff@txtcol@\romannumeral\c@maxflow\endcsname{%
+ \flowframetextcol
+ }
+ \expandafter
+ \gdef\csname @ff@backcol@\romannumeral\c@maxflow\endcsname{{none}}
+ \expandafter
+ \gdef\csname @ff@pages@\romannumeral\c@maxflow\endcsname{#1}%
+% \end{macrocode}
+% Page exclusion list:
+%\changes{1.14}{2012-11-10}{added page exclusion list}
+% \begin{macrocode}
+ \expandafter
+ \gdef\csname @ff@xpages@\romannumeral\c@maxflow\endcsname{}%
+ \expandafter
+ \gdef\csname @ff@offset@\romannumeral\c@maxflow\endcsname{compute}
+ \expandafter
+ \gdef\csname @ff@angle@\romannumeral\c@maxflow\endcsname{0}%
+ \expandafter
+ \gdef\csname @ff@margin@\romannumeral\c@maxflow\endcsname{right}
+ \ifnum\c@thisframe=0\relax
+ \ifthenelse{\equal{#1}{all}\TE@or\equal{#1}{odd}}%
+ {%
+ \c@thisframe=\c@maxflow
+ \global\setlength{\hsize}{#2}%
+ \global\usedframebreaktrue
+ }%
+ {%
+ \ifthenelse{\equal{#1}{even}\TE@or\equal{#1}{none}}%
+ {}%
+ {%
+ \def\ff@pages{#1}%
+ \@for\@ff@pp:=\ff@pages\do
+ {%
+ \def\@ff@numstart{0}\def\@ff@numend{0}%
+ \@ff@getrange{\@ff@pp}%
+ \ifnum\@ff@numstart=0\relax
+ \def\@ff@numstart{1}%
+ \fi
+ \ifnum\@ff@numstart=1\relax
+ \c@thisframe=\c@maxflow
+ \global\setlength{\hsize}{#2}%
+ \global\usedframebreaktrue
+ \fi
+ }%
+ }%
+ }%
+ \fi
+ \@ifnextchar[%
+ {\@s@tflowframeid{\c@maxflow}}%
+ {%
+ \@s@tflowframeid{\c@maxflow}[\number\c@maxflow]%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@s@tflowframeid}
@@ -713,10 +1082,10 @@ IDN}]{idl}{IDL}{identification label}
% the \gls{flow} number.
% \begin{macrocode}
\def\@s@tflowframeid#1[#2]{%
-\edef\ff@label{#2}%
-\@ff@checkuniqueidl{#1}{\ff@label}%
-\expandafter
-\xdef\csname @col@id@\romannumeral#1\endcsname{\ff@label}%
+ \edef\ff@label{#2}%
+ \@ff@checkuniqueidl{#1}{\ff@label}%
+ \expandafter
+ \xdef\csname @col@id@\romannumeral#1\endcsname{\ff@label}%
}
% \end{macrocode}
%\end{macro}
@@ -724,18 +1093,33 @@ IDN}]{idl}{IDL}{identification label}
% Check \gls{idl} "#2" for \gls{flow} "#1" is unique
% \begin{macrocode}
\newcommand*{\@ff@checkuniqueidl}[2]{%
-{\@colN=0\relax
-\whiledo{\@colN<\c@maxflow}{%
-\advance\@colN by 1\relax
-\ifnum\@colN=#1\relax
-\else
-\ifthenelse{\equal{#2}{%
-\csname @col@id@\romannumeral\@colN\endcsname}}{%
-\PackageError{flowfram}{Flow frame IDL '#2' already defined}{%
-You can't assign this label, as it is already defined
-for flow frame \number\@colN}}{}%
-\fi
-}}}
+ {%
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxflow}%
+ {%
+ \advance\@colN by 1\relax
+ \ifnum\@colN=#1\relax
+ \else
+ \ifthenelse
+ {%
+ \equal{#2}%
+ {%
+ \csname @col@id@\romannumeral\@colN\endcsname
+ }%
+ }%
+ {%
+ \PackageError{flowfram}%
+ {Flow frame IDL '#2' already defined}%
+ {%
+ You can't assign this label, as it is already defined
+ for flow frame \number\@colN
+ }%
+ }%
+ {}%
+ \fi
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%
@@ -746,7 +1130,8 @@ for flow frame \number\@colN}}{}%
% \gls{idn}.
% \begin{macrocode}
\newcommand*{\getflowlabel}[1]{%
-\csname @col@id@\romannumeral#1\endcsname}
+ \csname @col@id@\romannumeral#1\endcsname
+}
% \end{macrocode}
%\end{macro}
%
@@ -758,7 +1143,9 @@ for flow frame \number\@colN}}{}%
% sequence.
% \begin{macrocode}
\newcommand*{\getflowid}[2]{%
-\@flowframeid{#2}\edef#1{\number\ff@id}}
+ \@flowframeid{#2}%
+ \edef#1{\number\ff@id}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -769,16 +1156,29 @@ for flow frame \number\@colN}}{}%
% rather than their \gls{idl}.
% The \gls{idn} stored in "\ff@id".
% \begin{macrocode}
-\newcommand*{\@flowframeid}[1]{\@colN=0\relax
-\ff@id=0\relax
-\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
-\ifthenelse{%
-\equal{#1}{\csname @col@id@\romannumeral\@colN\endcsname}}{%
-\ff@id=\@colN\relax
-% break out of loop
-\@colN=\c@maxflow}{}}%
-\ifnum\ff@id=0\relax
-\PackageError{flowfram}{Can't find flow frame id '#1'}{}\fi}
+\newcommand*{\@flowframeid}[1]{%
+ \@colN=0\relax
+ \ff@id=0\relax
+ \whiledo{\@colN<\c@maxflow}%
+ {%
+ \advance\@colN by 1\relax
+ \ifthenelse
+ {%
+ \equal{#1}{\csname @col@id@\romannumeral\@colN\endcsname}%
+ }%
+ {%
+ \ff@id=\@colN\relax
+% \end{macrocode}
+% Break out of loop
+% \begin{macrocode}
+ \@colN=\c@maxflow
+ }%
+ {}%
+ }%
+ \ifnum\ff@id=0\relax
+ \PackageError{flowfram}{Can't find flow frame id '#1'}{}%
+ \fi
+}
% \end{macrocode}
%\end{macro}
% Set up the keys for use with "\setflowframe",
@@ -786,63 +1186,117 @@ for flow frame \number\@colN}}{}%
%
% Frame width is stored in "\ff@width".
% \begin{macrocode}
-\define@key{flowframe}{width}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'width' key}{}}{}%
-\def\ff@width{#1}}
+\define@key{flowframe}{width}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'width' key}{}%
+ }%
+ {}%
+ \def\ff@width{#1}%
+}
% \end{macrocode}
% Frame height is stored in "\ff@height".
% \begin{macrocode}
-\define@key{flowframe}{height}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'height' key}{}}{}%
-\def\ff@height{#1}}
+\define@key{flowframe}{height}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'height' key}{}%
+ }%
+ {}%
+ \def\ff@height{#1}%
+}
% \end{macrocode}
% Frame $x$ co-ordinate (odd and even pages) is stored
% in "\ff@x".
% \begin{macrocode}
-\define@key{flowframe}{x}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'x' key}{}}{}%
-\def\ff@x{#1}}
+\define@key{flowframe}{x}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'x' key}{}%
+ }%
+ {}%
+ \def\ff@x{#1}%
+}
% \end{macrocode}
% Frame $y$ co-ordinate (odd and even pages) is stored
% in "\ff@y".
% \begin{macrocode}
-\define@key{flowframe}{y}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'y' key}{}}{}%
-\def\ff@y{#1}}
+\define@key{flowframe}{y}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'y' key}{}%
+ }%
+ {}%
+ \def\ff@y{#1}%
+}
% \end{macrocode}
% Frame $x$ co-ordinate (even pages only) is stored
% in "\ff@evenx".
% \begin{macrocode}
-\define@key{flowframe}{evenx}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'evenx' key}{}}{}%
-\def\ff@evenx{#1}}
+\define@key{flowframe}{evenx}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'evenx' key}{}%
+ }%
+ {}%
+ \def\ff@evenx{#1}%
+}
% \end{macrocode}
% Frame $y$ co-ordinate (even pages only) is stored in
% "\ff@eveny".
% \begin{macrocode}
-\define@key{flowframe}{eveny}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'eveny' key}{}}{}%
-\def\ff@eveny{#1}}
+\define@key{flowframe}{eveny}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'eveny' key}{}%
+ }%
+ {}%
+ \def\ff@eveny{#1}%
+}
% \end{macrocode}
% Frame $x$ co-ordinate (odd pages only if twoside implemented)
% is stored in "\ff@oddx".
% \begin{macrocode}
-\define@key{flowframe}{oddx}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'oddx' key}{}}{}%
-\def\ff@oddx{#1}}
+\define@key{flowframe}{oddx}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'oddx' key}{}%
+ }%
+ {}%
+ \def\ff@oddx{#1}%
+}
% \end{macrocode}
% Frame $y$ co-ordinate (odd pages only if twoside implemented)
% is stored in "\ff@oddy".
% \begin{macrocode}
-\define@key{flowframe}{oddy}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'oddy' key}{}}{}%
-\def\ff@oddy{#1}}
+\define@key{flowframe}{oddy}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'oddy' key}{}%
+ }%
+ {}%
+ \def\ff@oddy{#1}%
+}
% \end{macrocode}
% New \gls{idl} for \gls{frame} is stored in "\ff@label".
% \begin{macrocode}
-\define@key{flowframe}{label}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'label' key}{}}{}%
-\def\ff@label{#1}}
+\define@key{flowframe}{label}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'label' key}{}%
+ }%
+ {}%
+ \def\ff@label{#1}%
+}
% \end{macrocode}
% Frame border. If "none", define "\ff@frame" as "false",
% otherwise define "\ff@frame" as "true". If "plain", define
@@ -850,26 +1304,58 @@ for flow frame \number\@colN}}{}%
% the specified type, which should be the name of a
% \gls{fcmd} without the preceding backslash.
% \begin{macrocode}
-\define@key{flowframe}{border}[plain]{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'border' key - use
-'none' for no border}{}}{}%
-\ifthenelse{\equal{#1}{none}}{%
-\def\ff@frame{false}}{\def\ff@frame{true}%
-\ifthenelse{\equal{#1}{plain}}{\def\ff@frametype{fbox}}{%
-\def\ff@frametype{#1}}}}
+\define@key{flowframe}{border}[plain]%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}%
+ {%
+ Missing value for 'border' key - use
+ 'none' for no border%
+ }%
+ {}%
+ }%
+ {}%
+ \ifthenelse{\equal{#1}{none}}%
+ {%
+ \def\ff@frame{false}%
+ }%
+ {%
+ \def\ff@frame{true}%
+ \ifthenelse{\equal{#1}{plain}}%
+ {%
+ \def\ff@frametype{fbox}%
+ }%
+ {%
+ \def\ff@frametype{#1}%
+ }%
+ }%
+}
% \end{macrocode}
% Frame's border colour. (This may not work for non-standard
% \glspl{fcmd}.)
% \begin{macrocode}
-\define@key{flowframe}{bordercolor}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'bordercolor' key}{}}{}%
-\def\ff@col{#1}}
+\define@key{flowframe}{bordercolor}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'bordercolor' key}{}%
+ }%
+ {}%
+ \def\ff@col{#1}%
+}
% \end{macrocode}
% Frame's text colour.
% \begin{macrocode}
-\define@key{flowframe}{textcolor}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'textcolor' key}{}}{}%
-\def\ff@txtcol{#1}}
+\define@key{flowframe}{textcolor}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'textcolor' key}{}%
+ }%
+ {}%
+ \def\ff@txtcol{#1}%
+}
% \end{macrocode}
% The background colour of the \gls{frame}. Note this only covers
% the region of the \gls{bbox}, not any extra space between
@@ -877,25 +1363,55 @@ for flow frame \number\@colN}}{}%
% colour to go right up to the border, you will need to
% define your own customised border.
% \begin{macrocode}
-\define@key{flowframe}{backcolor}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'backcolor' key}{}}{}%
-\def\ff@backcol{#1}}
+\define@key{flowframe}{backcolor}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'backcolor' key}{}%
+ }%
+ {}%
+ \def\ff@backcol{#1}%
+}
% \end{macrocode}
% \Gls{pglist} for which the \gls{frame} should appear.
% \begin{macrocode}
-\define@key{flowframe}{pages}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'pages' key}{}}{}%
-\def\ff@pages{#1}}
+\define@key{flowframe}{pages}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'pages' key}{}%
+ }%
+ {}%
+ \def\ff@pages{#1}%
+}
+% \end{macrocode}
+% Exclusion list:
+% \begin{macrocode}
+\define@key{flowframe}{excludepages}%
+{%
+ \def\ff@xpages{#1}%
+}
% \end{macrocode}
% The border takes up extra space, which needs to be
% adjusted. This can be done for standard border types,
% but non-standard borders may require some help.
% \begin{macrocode}
-\define@key{flowframe}{offset}{\def\ff@offset{#1}%
-\ifthenelse{\equal{#1}{}}{\PackageError{flowframe}{%
-Invalid value for key 'offset'}{%
-'offset' can either be 'compute' (to compute it according
-to certain pre-defined rules) or a length}}{}}
+\define@key{flowframe}{offset}%
+{%
+ \def\ff@offset{#1}%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowframe}%
+ {%
+ Invalid value for key 'offset'%
+ }%
+ {%
+ 'offset' can either be 'compute' (to compute it according
+ to certain pre-defined rules) or a length%
+ }%
+ }%
+ {}%
+}
% \end{macrocode}
% Angle to rotate \gls{flow}:
% \begin{macrocode}
@@ -904,37 +1420,48 @@ to certain pre-defined rules) or a length}}{}}
% \end{macrocode}
% This key is only for \glspl{flow}:
% \begin{macrocode}
-\define@key{flowframe}{margin}{%
-\ifthenelse{\equal{#1}{left} \or \equal{#1}{right}
-\or \equal{#1}{inner} \or \equal{#1}{outer}}{%
-\def\ff@margin{#1}}{\PackageError{flowfram}{invalid value of
-'margin' key}{Key 'margin' can only take the values
-'left' or 'right'}}}
+\define@choicekey{flowframe}{margin}{left,right,inner,outer}%
+{%
+ \def\ff@margin{#1}%
+}
% \end{macrocode}
% This key is only for \glspl{static}:
% \begin{macrocode}
-\define@key{flowframe}{clear}[true]{%
-\ifthenelse{\equal{#1}{true}\or\equal{#1}{false}}{%
-\def\ff@clear{#1}}{\PackageError{flowfram}{Key 'clear' is
-boolean}{You can only specify the values 'true' or 'false'}}}
+\define@choicekey{flowframe}{clear}{true,false}[true]{%
+ \def\ff@clear{#1}%
+}
% \end{macrocode}
% This key is only for \glspl{dynamic}:
% \begin{macrocode}
-\define@key{flowframe}{style}{\ifthenelse{\equal{#1}{}}{%
-\PackageError{flowfram}{Missing value for 'style' key}{}}{}%
-\ifthenelse{\equal{#1}{none}}{\def\ff@style{relax}}{\def\ff@style{#1}}}
+\define@key{flowframe}{style}%
+{%
+ \ifthenelse{\equal{#1}{}}%
+ {%
+ \PackageError{flowfram}{Missing value for 'style' key}{}%
+ }%
+ {}%
+ \ifthenelse{\equal{#1}{none}}%
+ {%
+ \def\ff@style{relax}%
+ }%
+ {%
+ \def\ff@style{#1}%
+ }%
+}
% \end{macrocode}
% This key is only for \glspl{static} and \glspl{dynamic}.
% \begin{macrocode}
-\define@key{flowframe}{shape}{\def\ff@shape{#1}%
+\define@key{flowframe}{shape}%
+{%
+ \def\ff@shape{#1}%
}
% \end{macrocode}
% This key is only for \glspl{static} and \glspl{dynamic}.
% \begin{macrocode}
-\define@key{flowframe}{valign}{\ifthenelse{\equal{#1}{c} \or
-\equal{#1}{t} \or \equal{#1}{b}}{\def\ff@valign{#1}}{%
-\PackageError{flowfram}{Invalid value for 'valign' key}{You
-may only specify 'c', 't' or 'b'}}}
+\define@choicekey{flowframe}{valign}{c,t,b}%
+{%
+ \def\ff@valign{#1}%
+}
% \end{macrocode}
%\begin{macro}{\setallflowframes}
% Provide a command to change the settings for all flow
@@ -942,8 +1469,13 @@ may only specify 'c', 't' or 'b'}}}
% and sets each one in turn.
% \begin{macrocode}
\newcommand*{\setallflowframes}[1]{%
-\@colN=0\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
-\@@setflowframe{\@colN}{#1}}}
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxflow}%
+ {%
+ \advance\@colN by 1\relax
+ \@@setflowframe{\@colN}{#1}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\setflowframe}
@@ -959,9 +1491,11 @@ may only specify 'c', 't' or 'b'}}}
% and applies the setting for that numbered \gls{flow}.
% \begin{macrocode}
\newcommand{\@ssetflowframe}[2]{%
-\@for\@ff@id:=#1\do{%
-\@flowframeid{\@ff@id}%
-\@@setflowframe{\ff@id}{#2}}}
+ \@for\@ff@id:=#1\do{%
+ \@flowframeid{\@ff@id}%
+ \@@setflowframe{\ff@id}{#2}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@setflowframe}
@@ -972,28 +1506,48 @@ may only specify 'c', 't' or 'b'}}}
% that number ranges do not lie out of bounds.
% \begin{macrocode}
\newcommand*{\@setflowframe}[2]{%
-\ifthenelse{\equal{#1}{all}}{%
-\setallflowframes{#2}}{%
-\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
-\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
-\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{%
-\@@setflowframe{\@colN}{#2}%
-\advance\@colN by 2\relax}%
-}{%
-\@for\@ff@id:=#1\do{%
-\def\@ff@numstart{0}\def\@ff@numend{10000}%
-\@ff@getrange{\@ff@id}%
-\ifnum\@ff@numstart=0\relax
- \def\@ff@numstart{1}%
-\fi
-\ifnum\@ff@numend>\c@maxflow\relax
- \def\@ff@numend{\c@maxflow}%
-\fi
-\@colN=\@ff@numstart\relax
-\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
-\@@setflowframe{\@colN}{#2}%
-\advance\@colN by 1\relax
-}}}}}
+ \ifthenelse{\equal{#1}{all}}%
+ {%
+ \setallflowframes{#2}%
+ }%
+ {%
+ \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}%
+ {%
+ \ifthenelse{\equal{#1}{odd}}%
+ {%
+ \@colN=1\relax
+ }%
+ {%
+ \@colN=2\relax
+ }%
+ \whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}%
+ {%
+ \@@setflowframe{\@colN}{#2}%
+ \advance\@colN by 2\relax
+ }%
+ }%
+ {%
+ \@for\@ff@id:=#1\do
+ {%
+ \def\@ff@numstart{0}%
+ \def\@ff@numend{10000}%
+ \@ff@getrange{\@ff@id}%
+ \ifnum\@ff@numstart=0\relax
+ \def\@ff@numstart{1}%
+ \fi
+ \ifnum\@ff@numend>\c@maxflow\relax
+ \def\@ff@numend{\c@maxflow}%
+ \fi
+ \@colN=\@ff@numstart\relax
+ \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}%
+ {%
+ \@@setflowframe{\@colN}{#2}%
+ \advance\@colN by 1\relax
+ }%
+ }%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@setflowframe}
@@ -1003,100 +1557,211 @@ may only specify 'c', 't' or 'b'}}}
%\changes{1.11}{2008/06/27}{removed unwanted spaces}
% \begin{macrocode}
\newcommand*{\@@setflowframe}[2]{%
-\def\ff@frame{}\def\ff@width{}\def\ff@height{}\def\ff@margin{}%
-\def\ff@x{}\def\ff@y{}\def\ff@frametype{}\def\ff@col{}%
-\def\ff@valign{}\def\ff@style{}%
-\def\ff@txtcol{}\def\ff@clear{}\def\ff@offset{}\def\ff@pages{}%
-\def\ff@label{}\def\ff@backcol{}\def\ff@evenx{}\def\ff@eveny{}%
-\def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}\def\ff@shape{\empty}%
-\setkeys{flowframe}{#2}%
-\ifthenelse{\equal{\ff@frame}{}}{}{%
-\setboolean{columnframe\romannumeral#1}{\ff@frame}}%
-\ifthenelse{\equal{\ff@width}{}}{}{%
-\expandafter\setlength\csname colwidth\romannumeral#1\endcsname
-{\ff@width}}%
-\ifthenelse{\equal{\ff@height}{}}{}{%
-\expandafter\setlength\csname colheight\romannumeral#1\endcsname
-{\ff@height}}%
-\ifthenelse{\equal{\ff@x}{}}{}{%
-\expandafter\setlength\csname col@\romannumeral#1@posx\endcsname
-{\ff@x}%
-\expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname
-{\ff@x}}
-\ifthenelse{\equal{\ff@y}{}}{}{%
-\expandafter\setlength\csname col@\romannumeral#1@posy\endcsname
-{\ff@y}%
-\expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname
-{\ff@y}}%
-\ifthenelse{\equal{\ff@evenx}{}}{}{%
-\expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname
-{\ff@evenx}}%
-\ifthenelse{\equal{\ff@eveny}{}}{}{%
-\expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname
-{\ff@eveny}}%
-\ifthenelse{\equal{\ff@oddx}{}}{}{%
-\expandafter\setlength\csname col@\romannumeral#1@posx\endcsname
-{\ff@oddx}}%
-\ifthenelse{\equal{\ff@oddy}{}}{}{%
-\expandafter\setlength\csname col@\romannumeral#1@posy\endcsname
-{\ff@oddy}}%
-\ifthenelse{\equal{\ff@label}{}}{}{%
-\@s@tflowframeid{#1}[\ff@label]}%
-\ifthenelse{\equal{\ff@frametype}{}}{}{%
-\expandafter\edef\csname @ff@frametype@\romannumeral#1\endcsname
-{\ff@frametype}}%
-\ifthenelse{\equal{\ff@col}{}}{}{%
-\expandafter\@setframecol\ff@col\end{#1}{col}{ff}}%
-\ifthenelse{\equal{\ff@txtcol}{}}{}{%
-\expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{ff}}%
-\ifthenelse{\equal{\ff@backcol}{}}{}{%
-\expandafter\@setframecol\ff@backcol\end{#1}{backcol}{ff}}%
-\ifthenelse{\equal{\ff@margin}{}}{}{%
-\expandafter\xdef\csname @ff@margin@\romannumeral#1\endcsname
-{\ff@margin}}%
-\ifthenelse{\equal{\ff@pages}{}}{}{%
-\expandafter\xdef\csname @ff@pages@\romannumeral#1\endcsname
-{\ff@pages}}%
-\ifthenelse{\equal{\ff@offset}{}}{}{%
-\expandafter\xdef\csname @ff@offset@\romannumeral#1\endcsname
-{\ff@offset}}%
-\ifthenelse{\equal{\ff@angle}{}}{}{%
-\expandafter\xdef\csname @ff@angle@\romannumeral#1\endcsname
-{\ff@angle}}%
-\ifthenelse{\equal{\ff@clear}{}}{}{%
-\PackageError{flowfram}%
-{Key 'clear' not available for flow frames}{}}%
-\ifthenelse{\equal{\ff@style}{}}{}{%
-\PackageError{flowfram}%
-{Key 'style' not available for flow frames}{}}%
-\if\ff@shape\empty
-\else
-\PackageError{flowfram}%
-{Key 'shape' not available for flow frames}{}%
-\fi
-\ifthenelse{\equal{\ff@valign}{}}{}{%
-\PackageError{flowfram}%
-{Key 'valign' not available for flow frames}{}}%
+ \def\ff@frame{}\def\ff@width{}\def\ff@height{}\def\ff@margin{}%
+ \def\ff@x{}\def\ff@y{}\def\ff@frametype{}\def\ff@col{}%
+ \def\ff@valign{}\def\ff@style{}%
+ \def\ff@txtcol{}\def\ff@clear{}\def\ff@offset{}\def\ff@pages{}%
+ \def\ff@label{}\def\ff@backcol{}\def\ff@evenx{}\def\ff@eveny{}%
+ \def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}%
+ \let\ff@xpages\undefined
+ \let\ff@shape\undefined
+ \setkeys{flowframe}{#2}%
+ \ifdefempty{\ff@frame}{}%
+ {%
+ \setboolean{columnframe\romannumeral#1}{\ff@frame}%
+ }%
+ \ifdefempty{\ff@width}{}%
+ {%
+ \expandafter
+ \setlength\csname colwidth\romannumeral#1\endcsname
+ {\ff@width}%
+ }%
+ \ifdefempty{\ff@height}{}%
+ {%
+ \expandafter
+ \setlength\csname colheight\romannumeral#1\endcsname
+ {\ff@height}%
+ }%
+ \ifdefempty{\ff@x}{}%
+ {%
+ \expandafter
+ \setlength\csname col@\romannumeral#1@posx\endcsname
+ {\ff@x}%
+ \expandafter
+ \setlength\csname col@\romannumeral#1@evenx\endcsname
+ {\ff@x}%
+ }
+ \ifdefempty{\ff@y}{}%
+ {%
+ \expandafter
+ \setlength\csname col@\romannumeral#1@posy\endcsname
+ {\ff@y}%
+ \expandafter
+ \setlength\csname col@\romannumeral#1@eveny\endcsname
+ {\ff@y}%
+ }%
+ \ifdefempty{\ff@evenx}{}%
+ {%
+ \expandafter
+ \setlength\csname col@\romannumeral#1@evenx\endcsname
+ {\ff@evenx}%
+ }%
+ \ifdefempty{\ff@eveny}{}%
+ {%
+ \expandafter
+ \setlength\csname col@\romannumeral#1@eveny\endcsname
+ {\ff@eveny}%
+ }%
+ \ifdefempty{\ff@oddx}{}%
+ {%
+ \expandafter
+ \setlength\csname col@\romannumeral#1@posx\endcsname
+ {\ff@oddx}%
+ }%
+ \ifdefempty{\ff@oddy}{}%
+ {%
+ \expandafter
+ \setlength\csname col@\romannumeral#1@posy\endcsname
+ {\ff@oddy}%
+ }%
+ \ifdefempty{\ff@label}{}%
+ {%
+ \@s@tflowframeid{#1}[\ff@label]%
+ }%
+ \ifdefempty{\ff@frametype}{}%
+ {%
+ \expandafter
+ \edef\csname @ff@frametype@\romannumeral#1\endcsname{%
+ \ff@frametype}%
+ }%
+ \ifdefempty{\ff@col}{}%
+ {%
+ \expandafter\@setframecol\ff@col\end{#1}{col}{ff}%
+ }%
+ \ifdefempty{\ff@txtcol}{}%
+ {%
+ \expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{ff}%
+ }%
+ \ifdefempty{\ff@backcol}{}%
+ {%
+ \expandafter\@setframecol\ff@backcol\end{#1}{backcol}{ff}%
+ }%
+ \ifdefempty{\ff@margin}{}%
+ {%
+ \expandafter
+ \xdef\csname @ff@margin@\romannumeral#1\endcsname{%
+ \ff@margin}%
+ }%
+ \ifdefempty{\ff@pages}{}%
+ {%
+ \flowsetpagelist{#1}{\ff@pages}%
+ }%
+ \ifundef{\ff@xpages}{}%
+ {%
+ \flowsetexclusion{#1}{\ff@xpages}%
+ }%
+ \ifdefempty{\ff@offset}{}%
+ {%
+ \expandafter
+ \xdef\csname @ff@offset@\romannumeral#1\endcsname{%
+ \ff@offset}%
+ }%
+ \ifdefempty{\ff@angle}{}%
+ {%
+ \expandafter
+ \xdef\csname @ff@angle@\romannumeral#1\endcsname{%
+ \ff@angle}%
+ }%
+ \ifdefempty{\ff@clear}{}%
+ {%
+ \PackageError{flowfram}%
+ {Key 'clear' not available for flow frames}{}%
+ }%
+ \ifdefempty{\ff@style}{}%
+ {%
+ \PackageError{flowfram}%
+ {Key 'style' not available for flow frames}{}%
+ }%
+ \ifundef{\ff@shape}{}%
+ {%
+ \PackageError{flowfram}%
+ {Key 'shape' not available for flow frames}{}%
+ }%
+ \ifdefempty{\ff@valign}{}%
+ {%
+ \PackageError{flowfram}%
+ {Key 'valign' not available for flow frames}{}%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\flowsetpagelist}
+% Sets the page list for the \gls{flow} given by "#1" (the
+% \gls{idn}).
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\flowsetpagelist}[2]{%
+ \expandafter
+ \xdef\csname @ff@pages@\romannumeral#1\endcsname{#2}%
+ \flf@message{Setting page range for flow frame
+ \number#1\space\space to "#2"}%
}
% \end{macrocode}
%\end{macro}
+%\begin{macro}{\flowsetexclusion}
+% Sets the exclusion list for the \gls{flow} given by "#1" (the
+% \gls{idn}).
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\flowsetexclusion}[2]{%
+ \expandafter
+ \xdef\csname @ff@xpages@\romannumeral#1\endcsname{#2}%
+ \flf@message{Setting exclusion for flow frame
+ \number#1\space\space to "#2"}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\flowaddexclusion}
+% Adds to the exclusion list for the \gls{flow} given by "#1" (the
+% \gls{idn}).
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\flowaddexclusion}[2]{%
+ \ifcsempty{@ff@xpages@\romannumeral#1}
+ {%
+ \expandafter
+ \xdef\csname @ff@xpages@\romannumeral#1\endcsname{#2}%
+ }%
+ {%
+ \expandafter
+ \xdef\csname @ff@xpages@\romannumeral#1\endcsname{%
+ \csname @ff@xpages@\romannumeral#1\endcsname,#2}%
+ }%
+ \flf@message{Setting exclusion for flow frame
+ \number#1\space\space to
+ "\csname @ff@xpages@\romannumeral#1\endcsname"}%
+}
+% \end{macrocode}
+%\end{macro}
+%
%\begin{macro}{\ffswapoddeven}
% Swap odd and even offsets for a given \gls{flow}. Do the main stuff for
% a given \gls{flow} \gls{idn}.
% \begin{macrocode}
\newcommand*{\@@flowframeswapcoords}[1]{%
-\setlength{\@ff@tmp@x}%
-{\csname col@\romannumeral#1@evenx\endcsname}
-\expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname
-{\csname col@\romannumeral#1@posx\endcsname}%
-\expandafter\setlength\csname col@\romannumeral#1@posx\endcsname
-{\@ff@tmp@x}%
-\setlength{\@ff@tmp@y}%
-{\csname col@\romannumeral#1@eveny\endcsname}
-\expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname
-{\csname col@\romannumeral#1@posy\endcsname}%
-\expandafter\setlength\csname col@\romannumeral#1@posy\endcsname
-{\@ff@tmp@y}%
+ \setlength{\@ff@tmp@x}%
+ {\csname col@\romannumeral#1@evenx\endcsname}
+ \expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname
+ {\csname col@\romannumeral#1@posx\endcsname}%
+ \expandafter\setlength\csname col@\romannumeral#1@posx\endcsname
+ {\@ff@tmp@x}%
+ \setlength{\@ff@tmp@y}%
+ {\csname col@\romannumeral#1@eveny\endcsname}
+ \expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname
+ {\csname col@\romannumeral#1@posy\endcsname}%
+ \expandafter\setlength\csname col@\romannumeral#1@posy\endcsname
+ {\@ff@tmp@y}%
}
% \end{macrocode}
%\end{macro}
@@ -1104,47 +1769,67 @@ may only specify 'c', 't' or 'b'}}}
% Allow user to specify \gls{flow} either by \gls{idn} or \gls{idl}:
% \begin{macrocode}
\newcommand*{\ffswapoddeven}{%
-\@ifstar\@sflowframeswapcoords\@flowframeswapcoords}
+ \@ifstar\@sflowframeswapcoords\@flowframeswapcoords
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sflowframeswapcoords}
% Starred form
% \begin{macrocode}
\newcommand*{\@sflowframeswapcoords}[1]{%
-\@for\@ff@id:=#1\do{%
-\@flowframeid{\@ff@id}%
-\@@flowframeswapcoords{\ff@id}}}
+ \@for\@ff@id:=#1\do
+ {%
+ \@flowframeid{\@ff@id}%
+ \@@flowframeswapcoords{\ff@id}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@flowframeswapcoords}
% Unstarred form:
% \begin{macrocode}
\newcommand*{\@flowframeswapcoords}[1]{%
-\ifthenelse{\equal{#1}{all}}{%
-\ff@id=0\relax
-\whiledo{\ff@id<\c@maxflow}{\advance\ff@id by 1\relax
-\@@flowframeswapcoords{\ff@id}}%
-}{%
-\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
-\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
-\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{%
-\@@flowframeswapcoords{\@colN}%
-\advance\@colN by 2\relax}%
-}{%
-\@for\@ff@id:=#1\do{%
-\def\@ff@numstart{0}\def\@ff@numend{10000}%
-\@ff@getrange{\@ff@id}%
-\ifnum\@ff@numstart=0\relax
- \def\@ff@numstart{1}%
-\fi
-\ifnum\@ff@numend>\c@maxflow
- \def\@ff@numend{\c@maxflow}%
-\fi
-\@colN=\@ff@numstart
-\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
-\@@flowframeswapcoords{\@colN}%
-\advance\@colN by 1\relax
-}}}}}
+ \ifthenelse{\equal{#1}{all}}%
+ {%
+ \ff@id=0\relax
+ \whiledo{\ff@id<\c@maxflow}%
+ {%
+ \advance\ff@id by 1\relax
+ \@@flowframeswapcoords{\ff@id}%
+ }%
+ }%
+ {%
+ \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}%
+ {%
+ \ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
+ \whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}%
+ {%
+ \@@flowframeswapcoords{\@colN}%
+ \advance\@colN by 2\relax
+ }%
+ }%
+ {%
+ \@for\@ff@id:=#1\do
+ {%
+ \def\@ff@numstart{0}%
+ \def\@ff@numend{100000}%
+ \@ff@getrange{\@ff@id}%
+ \ifnum\@ff@numstart=0\relax
+ \def\@ff@numstart{1}%
+ \fi
+ \ifnum\@ff@numend>\c@maxflow
+ \def\@ff@numend{\c@maxflow}%
+ \fi
+ \@colN=\@ff@numstart
+ \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}%
+ {%
+ \@@flowframeswapcoords{\@colN}%
+ \advance\@colN by 1\relax
+ }%
+ }%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%
@@ -1154,37 +1839,43 @@ may only specify 'c', 't' or 'b'}}}
%\begin{macro}{\flowframex}
% \begin{macrocode}
\newcommand*{\flowframex}[1]{%
-\csname col@\romannumeral#1@posx\endcsname}
+ \csname col@\romannumeral#1@posx\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\flowframey}
% \begin{macrocode}
\newcommand*{\flowframey}[1]{%
-\csname col@\romannumeral#1@posy\endcsname}
+ \csname col@\romannumeral#1@posy\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\flowframeevenx}
% \begin{macrocode}
\newcommand*{\flowframeevenx}[1]{%
-\csname col@\romannumeral#1@evenx\endcsname}
+ \csname col@\romannumeral#1@evenx\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\flowframeeveny}
% \begin{macrocode}
\newcommand*{\flowframeeveny}[1]{%
-\csname col@\romannumeral#1@eveny\endcsname}
+ \csname col@\romannumeral#1@eveny\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\flowframewidth}
% \begin{macrocode}
\newcommand{\flowframewidth}[1]{%
-\csname colwidth\romannumeral#1\endcsname}
+ \csname colwidth\romannumeral#1\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\flowframeheight}
% \begin{macrocode}
\newcommand*{\flowframeheight}[1]{%
-\csname colheight\romannumeral#1\endcsname}
+ \csname colheight\romannumeral#1\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@setframecol}
@@ -1200,15 +1891,17 @@ may only specify 'c', 't' or 'b'}}}
% A colour model has been specified.
% \begin{macrocode}
\def\@@setframecol[#1]#2\end#3#4#5{%
-\expandafter\edef\csname @#5@#4@\romannumeral#3\endcsname{%
-[#1]{#2}}}
+ \expandafter\edef\csname @#5@#4@\romannumeral#3\endcsname{%
+ [#1]{#2}}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@setfr@mecol}
% A colour model has not been specified.
% \begin{macrocode}
\def\@@setfr@mecol#1\end#2#3#4{%
-\expandafter\edef\csname @#4@#3@\romannumeral#2\endcsname{{#1}}}
+ \expandafter\edef\csname @#4@#3@\romannumeral#2\endcsname{{#1}}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -1228,9 +1921,9 @@ may only specify 'c', 't' or 'b'}}}
%\begin{macro}{\@n@wstaticframe}
% \begin{macrocode}
\newcommand*{\@n@wstaticframe}{%
-\global\advance\c@maxstatic by 1\relax
-\newboolean{staticframe\romannumeral\c@maxstatic}%
-\@ifstar\@snewstaticframe\@newstaticframe
+ \global\advance\c@maxstatic by 1\relax
+ \newboolean{staticframe\romannumeral\c@maxstatic}%
+ \@ifstar\@snewstaticframe\@newstaticframe
}
% \end{macrocode}
%\end{macro}
@@ -1238,98 +1931,118 @@ may only specify 'c', 't' or 'b'}}}
% Starred version (has a border):
% \begin{macrocode}
\newcommand{\@snewstaticframe}{%
-\setboolean{staticframe\romannumeral\c@maxstatic}{true}%
-\@@newstaticframe}
+ \setboolean{staticframe\romannumeral\c@maxstatic}{true}%
+ \@@newstaticframe
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@newstaticframe}
% Unstarred version (no border):
% \begin{macrocode}
\newcommand{\@newstaticframe}{%
-\setboolean{staticframe\romannumeral\c@maxstatic}{false}%
-\@@newstaticframe}
+ \setboolean{staticframe\romannumeral\c@maxstatic}{false}%
+ \@@newstaticframe
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@newstaticframe}
% Now set up the \gls{static}:
% \begin{macrocode}
\newcommand*{\@@newstaticframe}[5][all]{%
-\expandafter
-\newbox\csname @staticframe@\romannumeral\c@maxstatic\endcsname
-\expandafter
-\newlength\csname @sf@\romannumeral\c@maxstatic @posx\endcsname
-\expandafter
-\newlength\csname @sf@\romannumeral\c@maxstatic @posy\endcsname
-\expandafter\setlength
-\csname @sf@\romannumeral\c@maxstatic @posx\endcsname{#4}%
-\expandafter\setlength
-\csname @sf@\romannumeral\c@maxstatic @posy\endcsname{#5}%
-\expandafter\newlength
-\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname
-\expandafter\newlength
-\csname @sf@\romannumeral\c@maxstatic @eveny\endcsname
-\expandafter\setlength
-\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{#4}%
-\expandafter\setlength
-\csname @sf@\romannumeral\c@maxstatic @eveny\endcsname{#5}%
-{\@ff@tmp@x=#2\relax
-\@ff@tmp@y=#3\relax
-\expandafter
-\xdef\csname @sf@dim@\romannumeral\c@maxstatic\endcsname{%
-[c][\the\@ff@tmp@y][c]{\the\@ff@tmp@x}}}%
-\expandafter
-\def\csname @sf@col@\romannumeral\c@maxstatic\endcsname{%
-\flowframecol}%
-\expandafter
-\def\csname @sf@txtcol@\romannumeral\c@maxstatic\endcsname{%
-\flowframetextcol}%
-\expandafter
-\def\csname @sf@backcol@\romannumeral\c@maxstatic\endcsname{%
-{none}}%
-\expandafter
-\xdef\csname @sf@pages@\romannumeral\c@maxstatic\endcsname{#1}%
-\expandafter
-\gdef\csname @sf@offset@\romannumeral\c@maxstatic\endcsname{%
-compute}%
-\expandafter
-\gdef\csname @sf@angle@\romannumeral\c@maxstatic\endcsname{0}%
-\expandafter
-\gdef\csname @sf@shape@\romannumeral\c@maxstatic\endcsname{\relax}%
-\expandafter
-\def\csname @sf@frametype@\romannumeral\c@maxstatic\endcsname{%
-fbox}%
-\newboolean{@sf@clear@\romannumeral\c@maxstatic}%
-\setboolean{@sf@clear@\romannumeral\c@maxstatic}{false}
-\@ifnextchar[{\@s@tstaticframeid{\c@maxstatic}}%
-{\@s@tstaticframeid{\c@maxstatic}[\number\c@maxstatic]}}
+ \expandafter
+ \newbox\csname @staticframe@\romannumeral\c@maxstatic\endcsname
+ \expandafter
+ \newlength\csname @sf@\romannumeral\c@maxstatic @posx\endcsname
+ \expandafter
+ \newlength\csname @sf@\romannumeral\c@maxstatic @posy\endcsname
+ \expandafter\setlength
+ \csname @sf@\romannumeral\c@maxstatic @posx\endcsname{#4}%
+ \expandafter\setlength
+ \csname @sf@\romannumeral\c@maxstatic @posy\endcsname{#5}%
+ \expandafter\newlength
+ \csname @sf@\romannumeral\c@maxstatic @evenx\endcsname
+ \expandafter\newlength
+ \csname @sf@\romannumeral\c@maxstatic @eveny\endcsname
+ \expandafter\setlength
+ \csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{#4}%
+ \expandafter\setlength
+ \csname @sf@\romannumeral\c@maxstatic @eveny\endcsname{#5}%
+ {\@ff@tmp@x=#2\relax
+ \@ff@tmp@y=#3\relax
+ \expandafter
+ \xdef\csname @sf@dim@\romannumeral\c@maxstatic\endcsname{%
+ [c][\the\@ff@tmp@y][c]{\the\@ff@tmp@x}}}%
+ \expandafter
+ \def\csname @sf@col@\romannumeral\c@maxstatic\endcsname{%
+ \flowframecol}%
+ \expandafter
+ \def\csname @sf@txtcol@\romannumeral\c@maxstatic\endcsname{%
+ \flowframetextcol}%
+ \expandafter
+ \def\csname @sf@backcol@\romannumeral\c@maxstatic\endcsname{%
+ {none}}%
+ \expandafter
+ \xdef\csname @sf@pages@\romannumeral\c@maxstatic\endcsname{#1}%
+% \end{macrocode}
+% Page exclusion list:
+%\changes{1.14}{2012-11-10}{added page exclusion list}
+% \begin{macrocode}
+ \expandafter
+ \gdef\csname @sf@xpages@\romannumeral\c@maxflow\endcsname{}%
+ \expandafter
+ \gdef\csname @sf@offset@\romannumeral\c@maxstatic\endcsname{%
+ compute}%
+ \expandafter
+ \gdef\csname @sf@angle@\romannumeral\c@maxstatic\endcsname{0}%
+ \expandafter
+ \gdef\csname @sf@shape@\romannumeral\c@maxstatic\endcsname{\relax}%
+ \expandafter
+ \def\csname @sf@frametype@\romannumeral\c@maxstatic\endcsname{%
+ fbox}%
+ \newboolean{@sf@clear@\romannumeral\c@maxstatic}%
+ \setboolean{@sf@clear@\romannumeral\c@maxstatic}{false}
+ \@ifnextchar[{\@s@tstaticframeid{\c@maxstatic}}%
+ {\@s@tstaticframeid{\c@maxstatic}[\number\c@maxstatic]}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@s@tstaticframeid}
% Set the label for the \gls{static}:
% \begin{macrocode}
\def\@s@tstaticframeid#1[#2]{%
-\edef\ff@label{#2}%
-\@sf@checkuniqueidl{#1}{\ff@label}%
-\expandafter
-\xdef\csname @sf@id@\romannumeral#1\endcsname{\ff@label}}
+ \edef\ff@label{#2}%
+ \@sf@checkuniqueidl{#1}{\ff@label}%
+ \expandafter
+ \xdef\csname @sf@id@\romannumeral#1\endcsname{\ff@label}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sf@checkuniqueidl}
% Check \gls{idl} "#2" for \gls{static} "#1" is unique
% \begin{macrocode}
\newcommand*{\@sf@checkuniqueidl}[2]{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxstatic}{%
-\advance\@colN by 1\relax
-\ifnum\@colN=#1\relax
-\else
-\ifthenelse{%
-\equal{#2}{\csname @sf@id@\romannumeral\@colN\endcsname}}{%
-\PackageError{flowfram}{Static frame IDL '#2' already defined}{%
-You can't assign this label, as it is already defined
-for static frame \number\@colN}}{}%
-\fi
-}}
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxstatic}%
+ {%
+ \advance\@colN by 1\relax
+ \ifnum\@colN=#1\relax
+ \else
+ \ifthenelse
+ {%
+ \equal{#2}{\csname @sf@id@\romannumeral\@colN\endcsname}%
+ }%
+ {%
+ \PackageError{flowfram}%
+ {Static frame IDL '#2' already defined}%
+ {%
+ You can't assign this label, as it is already defined
+ for static frame \number\@colN
+ }%
+ }%
+ {}%
+ \fi
+ }%
+}
% \end{macrocode}
%\end{macro}
%
@@ -1340,7 +2053,8 @@ for static frame \number\@colN}}{}%
% \gls{idn}.
% \begin{macrocode}
\newcommand*{\getstaticlabel}[1]{%
-\csname @sf@id@\romannumeral#1\endcsname}
+ \csname @sf@id@\romannumeral#1\endcsname
+}
% \end{macrocode}
%\end{macro}
%
@@ -1352,7 +2066,8 @@ for static frame \number\@colN}}{}%
% sequence.
% \begin{macrocode}
\newcommand*{\getstaticid}[2]{%
-\@staticframeid{#2}\edef#1{\number\ff@id}}
+ \@staticframeid{#2}\edef#1{\number\ff@id}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -1362,16 +2077,30 @@ for static frame \number\@colN}}{}%
% so if there are a lot of \glspl{static}, it may take a while.
% The \gls{idn} stored in "\ff@id".
% \begin{macrocode}
-\newcommand*{\@staticframeid}[1]{\@colN=0\relax
-\ff@id=0\relax
-\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax
-\ifthenelse{%
-\equal{#1}{\csname @sf@id@\romannumeral\@colN\endcsname}}{%
-\ff@id=\@colN\relax
-% break out of loop
-\@colN=\c@maxstatic}{}}%
-\ifnum\ff@id=0\PackageError{flowfram}{Can't find static frame
-id '#1'}{}\fi}
+\newcommand*{\@staticframeid}[1]{%
+ \@colN=0\relax
+ \ff@id=0\relax
+ \whiledo{\@colN<\c@maxstatic}%
+ {%
+ \advance\@colN by 1\relax
+ \ifthenelse
+ {%
+ \equal{#1}{\csname @sf@id@\romannumeral\@colN\endcsname}%
+ }%
+ {%
+ \ff@id=\@colN\relax
+% \end{macrocode}
+% Break out of loop
+% \begin{macrocode}
+ \@colN=\c@maxstatic
+ }%
+ {}%
+ }%
+ \ifnum\ff@id=0\relax
+ \PackageError{flowfram}%
+ {Can't find static frame id '#1'}{}%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%
@@ -1380,40 +2109,50 @@ id '#1'}{}\fi}
%\begin{macro}{\staticframex}
% \begin{macrocode}
\newcommand*{\staticframex}[1]{%
-\csname @sf@\romannumeral#1@posx\endcsname}
+ \csname @sf@\romannumeral#1@posx\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\staticframey}
% \begin{macrocode}
\newcommand*{\staticframey}[1]{%
-\csname @sf@\romannumeral#1@posy\endcsname}
+ \csname @sf@\romannumeral#1@posy\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\staticframeevenx}
% \begin{macrocode}
\newcommand*{\staticframeevenx}[1]{%
-\csname @sf@\romannumeral#1@evenx\endcsname}
+ \csname @sf@\romannumeral#1@evenx\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\staticframeeveny}
% \begin{macrocode}
\newcommand*{\staticframeeveny}[1]{%
-\csname @sf@\romannumeral#1@eveny\endcsname}
+ \csname @sf@\romannumeral#1@eveny\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\setallstaticframes}
% Modify the settings for all the \glspl{static}:
% \begin{macrocode}
\newcommand*{\setallstaticframes}[1]{%
-\@colN=0\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax
-\@@setstaticframe{\@colN}{#1}}}
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxstatic}%
+ {%
+ \advance\@colN by 1\relax
+ \@@setstaticframe{\@colN}{#1}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\setstaticframe}
% Modify the settings for the specified \glspl{static}:
% \begin{macrocode}
\newcommand*{\setstaticframe}{%
-\@ifstar\@ssetstaticframe\@setstaticframe}
+ \@ifstar\@ssetstaticframe\@setstaticframe
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ssetstaticframe}
@@ -1421,9 +2160,12 @@ id '#1'}{}\fi}
% list of labels.
% \begin{macrocode}
\newcommand*{\@ssetstaticframe}[2]{%
-\@for\@ff@id:=#1\do{%
-\@staticframeid{\@ff@id}%
-\@@setstaticframe{\ff@id}{#2}}}
+ \@for\@ff@id:=#1\do
+ {%
+ \@staticframeid{\@ff@id}%
+ \@@setstaticframe{\ff@id}{#2}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@setstaticframe}
@@ -1432,28 +2174,42 @@ id '#1'}{}\fi}
% Ensures that number ranges do not lie out of bounds.
% \begin{macrocode}
\newcommand*{\@setstaticframe}[2]{%
-\ifthenelse{\equal{#1}{all}}{%
-\setallstaticframes{#2}}{%
-\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
-\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
-\whiledo{\@colN<\c@maxstatic\TE@or\@colN=\c@maxstatic}{%
-\@@setstaticframe{\@colN}{#2}%
-\advance\@colN by 2\relax}%
-}{%
-\@for\@ff@id:=#1\do{%
-\def\@ff@numstart{0}\def\@ff@numend{10000}%
-\@ff@getrange{\@ff@id}%
-\ifnum\@ff@numstart=0\relax
- \def\@ff@numstart{1}%
-\fi
-\ifnum\@ff@numend>\c@maxstatic\relax
- \def\@ff@numend{\c@maxstatic}%
-\fi
-\@colN=\@ff@numstart\relax
-\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
-\@@setstaticframe{\@colN}{#2}%
-\advance\@colN by 1\relax
-}}}}}
+ \ifthenelse{\equal{#1}{all}}%
+ {%
+ \setallstaticframes{#2}%
+ }%
+ {%
+ \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}%
+ {%
+ \ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
+ \whiledo{\@colN<\c@maxstatic\TE@or\@colN=\c@maxstatic}%
+ {%
+ \@@setstaticframe{\@colN}{#2}%
+ \advance\@colN by 2\relax
+ }%
+ }%
+ {%
+ \@for\@ff@id:=#1\do
+ {%
+ \def\@ff@numstart{0}%
+ \def\@ff@numend{10000}%
+ \@ff@getrange{\@ff@id}%
+ \ifnum\@ff@numstart=0\relax
+ \def\@ff@numstart{1}%
+ \fi
+ \ifnum\@ff@numend>\c@maxstatic\relax
+ \def\@ff@numend{\c@maxstatic}%
+ \fi
+ \@colN=\@ff@numstart\relax
+ \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}%
+ {%
+ \@@setstaticframe{\@colN}{#2}%
+ \advance\@colN by 1\relax
+ }%
+ }%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@setstaticframe}
@@ -1461,85 +2217,127 @@ id '#1'}{}\fi}
% is given by the first argument.
% \begin{macrocode}
\newcommand*{\@@setstaticframe}[2]{%
-\expandafter\expandafter\expandafter
-\@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname
-\def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}\def\ff@angle{}%
-\edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}%
-\def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}%
-\def\ff@backcol{}\def\ff@shape{0}%
-\def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}%
-\def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}%
-\def\ff@oddx{}\def\ff@oddy{}%
-\setkeys{flowframe}{#2}%
-\ifthenelse{\equal{\ff@frame}{}}{}{%
-\setboolean{staticframe\romannumeral#1}{\ff@frame}}%
-\ifthenelse{\equal{\ff@x}{}}{}{%
-\expandafter\global
-\expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname
-{\ff@x}%
-\expandafter\global
-\expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname
-{\ff@x}}%
-\ifthenelse{\equal{\ff@y}{}}{}{%
-\expandafter\global
-\expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname
-{\ff@y}%
-\expandafter\global
-\expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname
-{\ff@y}}%
-\ifthenelse{\equal{\ff@evenx}{}}{}{%
-\expandafter\global
-\expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname
-{\ff@evenx}}%
-\ifthenelse{\equal{\ff@eveny}{}}{}{%
-\expandafter\global
-\expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname
-{\ff@eveny}}%
-\ifthenelse{\equal{\ff@oddx}{}}{}{%
-\expandafter\global
-\expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname
-{\ff@oddx}}%
-\ifthenelse{\equal{\ff@oddy}{}}{}{%
-\expandafter\global
-\expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname
-{\ff@oddy}}%
-\expandafter
-\xdef\csname @sf@dim@\romannumeral#1\endcsname{%
-[c][\ff@height][\ff@valign]{\ff@width}}%
-\ifthenelse{\equal{\ff@frametype}{}}{}{%
-\expandafter
-\xdef\csname @sf@frametype@\romannumeral#1\endcsname{%
-\ff@frametype}}%
-\ifthenelse{\equal{\ff@label}{}}{}{%
-\@s@tstaticframeid{#1}[\ff@label]}
-\ifthenelse{\equal{\ff@col}{}}{}{%
-\expandafter\@setframecol\ff@col\end{#1}{col}{sf}}%
-\ifthenelse{\equal{\ff@txtcol}{}}{}{%
-\expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{sf}}%
-\ifthenelse{\equal{\ff@backcol}{}}{}{%
-\expandafter\@setframecol\ff@backcol\end{#1}{backcol}{sf}}%
-\ifthenelse{\equal{\ff@offset}{}}{}{%
-\expandafter
-\xdef\csname @sf@offset@\romannumeral#1\endcsname{\ff@offset}}%
-\ifthenelse{\equal{\ff@angle}{}}{}{%
-\expandafter
-\xdef\csname @sf@angle@\romannumeral#1\endcsname{\ff@angle}}%
-\if0\ff@shape
-\else
-\expandafter\global\expandafter
-\let\csname @sf@shape@\romannumeral#1\endcsname\ff@shape
-\fi
-\ifthenelse{\equal{\ff@pages}{}}{}{%
-\expandafter
-\xdef\csname @sf@pages@\romannumeral#1\endcsname{\ff@pages}}%
-\ifthenelse{\equal{\ff@clear}{}}{}{%
-\setboolean{@sf@clear@\romannumeral#1}{\ff@clear}}%
-\ifthenelse{\equal{\ff@margin}{}}{}{%
-\PackageError{flowfram}{Key 'margin' not available for
-static frames}{Static frames don't have marginal notes}}%
-\ifthenelse{\equal{\ff@style}{}}{}{%
-\PackageError{flowfram}{Key 'style' not available for
-static frames}{}}%
+ \expandafter\expandafter\expandafter
+ \@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname
+ \def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}\def\ff@angle{}%
+ \edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}%
+ \def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}%
+ \def\ff@backcol{}%
+ \def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}%
+ \def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}%
+ \def\ff@oddx{}\def\ff@oddy{}%
+ \let\ff@shape\undefined
+ \let\ff@xpages\undefined
+ \setkeys{flowframe}{#2}%
+ \ifdefempty{\ff@frame}{}%
+ {%
+ \setboolean{staticframe\romannumeral#1}{\ff@frame}%
+ }%
+ \ifdefempty{\ff@x}{}%
+ {%
+ \expandafter\global\expandafter
+ \setlength\csname @sf@\romannumeral#1@posx\endcsname
+ {\ff@x}%
+ \expandafter\global\expandafter
+ \setlength\csname @sf@\romannumeral#1@evenx\endcsname
+ {\ff@x}%
+ }%
+ \ifdefempty{\ff@y}{}%
+ {%
+ \expandafter\global\expandafter
+ \setlength\csname @sf@\romannumeral#1@posy\endcsname
+ {\ff@y}%
+ \expandafter\global\expandafter
+ \setlength\csname @sf@\romannumeral#1@eveny\endcsname
+ {\ff@y}%
+ }%
+ \ifdefempty{\ff@evenx}{}%
+ {%
+ \expandafter\global\expandafter
+ \setlength\csname @sf@\romannumeral#1@evenx\endcsname
+ {\ff@evenx}%
+ }%
+ \ifdefempty{\ff@eveny}{}%
+ {%
+ \expandafter\global\expandafter
+ \setlength\csname @sf@\romannumeral#1@eveny\endcsname
+ {\ff@eveny}%
+ }%
+ \ifdefempty{\ff@oddx}{}%
+ {%
+ \expandafter\global\expandafter
+ \setlength\csname @sf@\romannumeral#1@posx\endcsname
+ {\ff@oddx}%
+ }%
+ \ifdefempty{\ff@oddy}{}%
+ {%
+ \expandafter\global\expandafter
+ \setlength\csname @sf@\romannumeral#1@posy\endcsname
+ {\ff@oddy}%
+ }%
+ \expandafter
+ \xdef\csname @sf@dim@\romannumeral#1\endcsname{%
+ [c][\ff@height][\ff@valign]{\ff@width}}%
+ \ifdefempty{\ff@frametype}{}%
+ {%
+ \expandafter
+ \xdef\csname @sf@frametype@\romannumeral#1\endcsname{%
+ \ff@frametype}%
+ }%
+ \ifdefempty{\ff@label}{}%
+ {%
+ \@s@tstaticframeid{#1}[\ff@label]%
+ }
+ \ifdefempty{\ff@col}{}%
+ {%
+ \expandafter\@setframecol\ff@col\end{#1}{col}{sf}%
+ }%
+ \ifdefempty{\ff@txtcol}{}%
+ {%
+ \expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{sf}%
+ }%
+ \ifdefempty{\ff@backcol}{}%
+ {%
+ \expandafter\@setframecol\ff@backcol\end{#1}{backcol}{sf}%
+ }%
+ \ifdefempty{\ff@offset}{}%
+ {%
+ \expandafter
+ \xdef\csname @sf@offset@\romannumeral#1\endcsname{\ff@offset}%
+ }%
+ \ifdefempty{\ff@angle}{}%
+ {%
+ \expandafter
+ \xdef\csname @sf@angle@\romannumeral#1\endcsname{\ff@angle}%
+ }%
+ \ifundef{\ff@shape}{}%
+ {%
+ \expandafter\global\expandafter
+ \let\csname @sf@shape@\romannumeral#1\endcsname\ff@shape
+ }%
+ \ifdefempty{\ff@pages}{}%
+ {%
+ \staticsetpagelist{#1}{\ff@pages}%
+ }%
+ \ifundef{\ff@xpages}{}%
+ {%
+ \staticsetexclusion{#1}{\ff@xpages}%
+ }%
+ \ifdefempty{\ff@clear}{}%
+ {%
+ \setboolean{@sf@clear@\romannumeral#1}{\ff@clear}%
+ }%
+ \ifdefempty{\ff@margin}{}%
+ {%
+ \PackageError{flowfram}%
+ {Key 'margin' not available for static frames}%
+ {Static frames don't have marginal notes}%
+ }%
+ \ifdefempty{\ff@style}{}%
+ {%
+ \PackageError{flowfram}%
+ {Key 'style' not available for static frames}{}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -1556,9 +2354,13 @@ static frames}{}}%
% break.
% \begin{macrocode}
\let\FLForgpar\par
-\newcommand{\ffpshpar}{\edef\flf@next{\hangafter=\the\hangafter
-\hangindent=\the\hangindent}\FLForgpar\flf@next
-\edef\flf@next{\prevgraf=\the\prevgraf}\@ff@parshape\indent\mbox{}\flf@next}
+\newcommand{\ffpshpar}{%
+ \edef\flf@next{\hangafter=\the\hangafter
+ \hangindent=\the\hangindent}%
+ \FLForgpar\flf@next
+ \edef\flf@next{\prevgraf=\the\prevgraf}%
+ \@ff@parshape\indent\mbox{}\flf@next
+}
% \end{macrocode}
%\end{macro}
%
@@ -1571,62 +2373,80 @@ static frames}{}}%
%\begin{macro}{\@ff@sectionhead}
% \begin{macrocode}
\newcommand*{\@ff@sectionhead}[1]{%
-\def\ff@sechead{#1}%
-\ffpshpar
-\@ifstar{\@s@ff@heading}{\@dblarg\@ff@heading}}
+ \def\ff@sechead{#1}%
+ \ffpshpar
+ \@ifstar{\@s@ff@heading}{\@dblarg\@ff@heading}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@s@ff@heading}
% \begin{macrocode}
\def\@s@ff@heading#1{%
-\@ifundefined{@ff@old\ff@sechead}{\PackageError{flowfram}{Unknown
-heading command '\ff@sechead'}{}}{%
-\begingroup
-\edef\flf@next{\hangafter=\the\hangafter
-\hangindent=\the\hangindent}\FLForgpar\flf@next
-\let\par=\FLForgpar
-\edef\flf@next{\prevgraf=\the\prevgraf}%
-\csname @ff@old\ff@sechead\endcsname*{\@ff@parshape\flf@next
-#1}%
-\xdef\flf@next{\@ff@parshape
-\prevgraf=\the\prevgraf}%
-\endgroup
-}%
-\mbox{}\flf@next\let\flf@next\undefined}
+ \@ifundefined{@ff@old\ff@sechead}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown heading command '\ff@sechead'}{}%
+ }%
+ {%
+ \begingroup
+ \edef\flf@next{\hangafter=\the\hangafter
+ \hangindent=\the\hangindent}%
+ \FLForgpar\flf@next
+ \let\par=\FLForgpar
+ \edef\flf@next{\prevgraf=\the\prevgraf}%
+ \csname @ff@old\ff@sechead\endcsname*{%
+ \@ff@parshape\flf@next #1}%
+ \xdef\flf@next{%
+ \@ff@parshape
+ \prevgraf=\the\prevgraf}%
+ \endgroup
+ }%
+ \mbox{}\flf@next
+ \let\flf@next\undefined
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@heading}
% \begin{macrocode}
\def\@ff@heading[#1]#2{%
-\@ifundefined{@ff@old\ff@sechead}{\PackageError{flowfram}{Unknown
-heading command '\ff@sechead'}{}}{%
-\begingroup
-\edef\flf@next{\hangafter=\the\hangafter
-\hangindent=\the\hangindent}\FLForgpar\flf@next
-\let\par=\FLForgpar
-\edef\flf@next{\prevgraf=\the\prevgraf}%
-\csname @ff@old\ff@sechead\endcsname[#1]{\@ff@parshape\flf@next
-#2}%
-\xdef\flf@next{\@ff@parshape
-\prevgraf=\the\prevgraf}%
-\endgroup}%
-\mbox{}\flf@next\let\flf@next\undefined}
+ \@ifundefined{@ff@old\ff@sechead}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown heading command '\ff@sechead'}{}%
+ }%
+ {%
+ \begingroup
+ \edef\flf@next{%
+ \hangafter=\the\hangafter
+ \hangindent=\the\hangindent}%
+ \FLForgpar\flf@next
+ \let\par=\FLForgpar
+ \edef\flf@next{\prevgraf=\the\prevgraf}%
+ \csname @ff@old\ff@sechead\endcsname[#1]{%
+ \@ff@parshape\flf@next #2}%
+ \xdef\flf@next{\@ff@parshape
+ \prevgraf=\the\prevgraf}%
+ \endgroup
+ }%
+ \mbox{}\flf@next
+ \let\flf@next\undefined
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@setsecthead}
% Define command to switch to adjusted section headings:
% \begin{macrocode}
\newcommand*{\@ff@setsecthead}{%
-\let\@ff@oldsection=\section
-\let\@ff@oldsubsection=\subsection
-\let\@ff@oldsubsubsection=\subsubsection
-\let\@ff@oldparagraph=\paragraph
-\let\@ff@oldsubparagraph=\subparagraph
-\def\section{\@ff@sectionhead{section}}%
-\def\subsection{\@ff@sectionhead{subsection}}%
-\def\subsubsection{\@ff@sectionhead{subsubsection}}%
-\def\paragraph{\@ff@sectionhead{paragraph}}%
-\def\subparagraph{\@ff@sectionhead{subparagraph}}%
+ \let\@ff@oldsection=\section
+ \let\@ff@oldsubsection=\subsection
+ \let\@ff@oldsubsubsection=\subsubsection
+ \let\@ff@oldparagraph=\paragraph
+ \let\@ff@oldsubparagraph=\subparagraph
+ \def\section{\@ff@sectionhead{section}}%
+ \def\subsection{\@ff@sectionhead{subsection}}%
+ \def\subsubsection{\@ff@sectionhead{subsubsection}}%
+ \def\paragraph{\@ff@sectionhead{paragraph}}%
+ \def\subparagraph{\@ff@sectionhead{subparagraph}}%
}
% \end{macrocode}
%\end{macro}
@@ -1634,36 +2454,51 @@ heading command '\ff@sechead'}{}}{%
% Determine what shape command is being used:
% \begin{macrocode}
\def\@ff@getshape#1#2\relax{%
-\ifx#1\parshape
-\def\ff@shape{1}%
-\else
-\ifx#1\shapepar
-\def\ff@shape{2}%
-\else
-\ifx#1\relax
-\def\ff@shape{0}%
-\else
-\PackageError{flowfram}{Unknown shape \string#1}{}%
-\def\ff@shape{2}%
-\fi
-\fi
-\fi}
+ \ifdefequal{#1}{\parshape}%
+ {%
+ \def\ff@shape{1}%
+ }%
+ {%
+ \ifdefequal{#1}{\shapepar}%
+ {%
+ \def\ff@shape{2}%
+ }%
+ {%
+ \ifx#1\relax
+ \def\ff@shape{0}%
+ \else
+ \PackageError{flowfram}{Unknown shape \string#1}{}%
+ \def\ff@shape{2}%
+ \fi
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@disablesec}
% Disable sectioning commands
% \begin{macrocode}
\newcommand*{\@ff@disablesec}{%
-\def\section{\PackageError{flowfram}{You can't have
-sectioning commands within a \string\shapepar}{}}%
-\def\subsection{\PackageError{flowfram}{You can't have
-sectioning commands within a \string\shapepar}{}}%
-\def\subsubsection{\PackageError{flowfram}{You can't have
-sectioning commands within a \string\shapepar}{}}%
-\def\paragraph{\PackageError{flowfram}{You can't have
-sectioning commands within a \string\shapepar}{}}%
-\def\subparagraph{\PackageError{flowfram}{You can't have
-sectioning commands within a \string\shapepar}{}}%
+ \def\section{%
+ \PackageError{flowfram}%
+ {You can't have sectioning commands within a \string\shapepar}{}%
+ }%
+ \def\subsection{%
+ \PackageError{flowfram}%
+ {You can't have sectioning commands within a \string\shapepar}{}%
+ }%
+ \def\subsubsection{%
+ \PackageError{flowfram}%
+ {You can't have sectioning commands within a \string\shapepar}{}%
+ }%
+ \def\paragraph{%
+ \PackageError{flowfram}%
+ {You can't have sectioning commands within a \string\shapepar}{}%
+ }%
+ \def\subparagraph{%
+ \PackageError{flowfram}%
+ {You can't have sectioning commands within a \string\shapepar}{}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -1674,77 +2509,98 @@ sectioning commands within a \string\shapepar}{}}%
% \begin{macrocode}
\newbox\staticframe
\newenvironment{staticcontents}[1]{%
-\let\continueonframe=\@staticcontinueonframe
-\@beginstaticcontents{#1}%
-}{%
-\@endstaticcontents
-\ignorespaces}
+ \let\continueonframe=\@staticcontinueonframe
+ \@beginstaticcontents{#1}%
+}%
+{%
+ \@endstaticcontents
+ \ignorespaces
+}
% \end{macrocode}
%\end{environment}
%\begin{environment}{staticcontents*}
% Set the contents of the \gls{static} given by its \gls{idl}.
% Syntax: "\begin{staticcontents*}"\marg{label}.
% \begin{macrocode}
-\newenvironment{staticcontents*}[1]{\@staticframeid{#1}%
-\let\continueonframe=\@staticscontinueonframe
-\@beginstaticcontents{\ff@id}%
-}{%
-\@endstaticcontents
-\ignorespaces}
+\newenvironment{staticcontents*}[1]{%
+ \@staticframeid{#1}%
+ \let\continueonframe=\@staticscontinueonframe
+ \@beginstaticcontents{\ff@id}%
+}%
+{%
+ \@endstaticcontents
+ \ignorespaces
+}
% \end{macrocode}
%\end{environment}
%
% Begin staticcontents stuff.
% \begin{macrocode}
\newcommand{\@beginstaticcontents}[1]{%
-\@ifundefined{@staticframe@\romannumeral#1}{%
-\PackageError{flowfram}{Static frame '#1' not defined}{}}{}%
-\expandafter\let\expandafter\@ff@parshape\csname @sf@shape@\romannumeral#1\endcsname
-\expandafter\@ff@getshape\@ff@parshape\relax
-\ifcase\ff@shape
-% no shape
-\edef\@sf@mpg{%
-\noexpand
-\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname
-\noexpand\begingroup
-\noexpand\let\noexpand\FLForgpar=\noexpand\par
-}%
-\or
-% \parshape
-\edef\@sf@mpg{%
-\noexpand
-\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname
-\@ff@parshape
-\noexpand\begingroup
-\noexpand\let\noexpand\FLForgpar=\noexpand\par
-\noexpand\let\noexpand\par=\noexpand\ffpshpar
-\noexpand\@ff@setsecthead
-}%
-\or
-% \shapepar
-\edef\@sf@mpg{%
-\noexpand
-\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname
-\noexpand\begingroup
-\noexpand\@ff@disablesec
-\noexpand\@ff@parshape
-}%
-\fi
-\edef\@sf@thisframe{\csname @staticframe@\romannumeral#1\endcsname}%
-\begin{lrbox}{\staticframe}%
-\edef\ff@txtcol{\csname @sf@txtcol@\romannumeral#1\endcsname}%
-\@s@tfftextcol\noindent
-\@sf@mpg
-\setlength\parindent\sdfparindent
+ \@ifundefined{@staticframe@\romannumeral#1}%
+ {%
+ \PackageError{flowfram}{Static frame '#1' not defined}{}%
+ }%
+ {}%
+ \expandafter\let\expandafter\@ff@parshape\csname @sf@shape@\romannumeral#1\endcsname
+ \expandafter\@ff@getshape\@ff@parshape\relax
+ \ifcase\ff@shape
+% \end{macrocode}
+% no shape:
+% \begin{macrocode}
+ \edef\@sf@mpg{%
+ \noexpand
+ \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname
+ \noexpand\begingroup
+ \noexpand\let\noexpand\FLForgpar=\noexpand\par
+ }%
+ \or
+% \end{macrocode}
+% \ics{parshape}:
+% \begin{macrocode}
+ \edef\@sf@mpg{%
+ \noexpand
+ \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname
+ \@ff@parshape
+ \noexpand\begingroup
+ \noexpand\let\noexpand\FLForgpar=\noexpand\par
+ \noexpand\let\noexpand\par=\noexpand\ffpshpar
+ \noexpand\@ff@setsecthead
+ }%
+ \or
+% \end{macrocode}
+% \ics{shapepar}:
+% \begin{macrocode}
+ \edef\@sf@mpg{%
+ \noexpand
+ \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname
+ \noexpand\begingroup
+ \noexpand\@ff@disablesec
+ \noexpand\@ff@parshape
+ }%
+ \fi
+ \edef\@sf@thisframe{\csname @staticframe@\romannumeral#1\endcsname}%
+ \begin{lrbox}{\staticframe}%
+ \edef\ff@txtcol{\csname @sf@txtcol@\romannumeral#1\endcsname}%
+ \@s@tfftextcol\noindent
+ \@sf@mpg
+ \setlength\parindent\sdfparindent
}
% \end{macrocode}
% End staticcontents stuff
% \begin{macrocode}
\newcommand*{\@endstaticcontents}{%
-\ifnum\ff@shape=2\par
-\else\FLForgpar\fi\endgroup\end{minipage}\end{lrbox}%
-\expandafter\global\expandafter\sbox\@sf@thisframe{%
-\usebox\staticframe}}
+ \ifnum\ff@shape=2\relax
+ \par
+ \else
+ \FLForgpar
+ \fi
+ \endgroup
+ \end{minipage}%
+ \end{lrbox}%
+ \expandafter\global\expandafter
+ \sbox\@sf@thisframe{\usebox\staticframe}%
+}
% \end{macrocode}
%
%\begin{macro}{\setstaticcontents}
@@ -1752,21 +2608,77 @@ sectioning commands within a \string\shapepar}{}}%
% Syntax: \cs{setstaticcontents}\marg{idn}\marg{text}.
% \begin{macrocode}
\newcommand{\setstaticcontents}{%
-\@ifstar\@sstaticconts\@staticconts}
+ \@ifstar\@sstaticconts\@staticconts
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sstaticconts}
% Starred version: \gls{static} identified by label.
% \begin{macrocode}
-\newcommand{\@sstaticconts}[2]{\begin{staticcontents*}{#1}%
-#2\end{staticcontents*}}
+\newcommand{\@sstaticconts}[2]{%
+ \begin{staticcontents*}{#1}%
+ #2%
+ \end{staticcontents*}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@staticconts}
% Unstarred version: \gls{static} identified by \gls{idn}.
% \begin{macrocode}
-\newcommand{\@staticconts}[2]{\begin{staticcontents}{#1}%
-#2\end{staticcontents}}
+\newcommand{\@staticconts}[2]{%
+ \begin{staticcontents}{#1}%
+ #2%
+ \end{staticcontents}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\staticsetpagelist}
+% Sets the page list for the \gls{static} given by "#1" (the
+% \gls{idn}).
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\staticsetpagelist}[2]{%
+ \expandafter
+ \xdef\csname @sf@pages@\romannumeral#1\endcsname{#2}%
+ \flf@message{Setting page range for static frame
+ \number#1\space\space to "#2"}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\staticsetexclusion}
+% Sets the exclusion list for the \gls{static} given by "#1" (the
+% \gls{idn}).
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\staticsetexclusion}[2]{%
+ \expandafter
+ \xdef\csname @sf@xpages@\romannumeral#1\endcsname{#2}%
+ \flf@message{Setting exclusion for static frame
+ \number#1\space\space to "#2"}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\staticaddexclusion}
+% Adds to the exclusion list for the \gls{static} given by "#1" (the
+% \gls{idn}).
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\staticaddexclusion}[2]{%
+ \ifcsempty{@sf@xpages@\romannumeral#1}
+ {%
+ \expandafter
+ \xdef\csname @sf@xpages@\romannumeral#1\endcsname{#2}%
+ }%
+ {%
+ \expandafter
+ \xdef\csname @sf@xpages@\romannumeral#1\endcsname{%
+ \csname @sf@xpages@\romannumeral#1\endcsname,#2}%
+ }%
+ \flf@message{Setting exclusion for static frame
+ \number#1\space\space to
+ "\csname @sf@xpages@\romannumeral#1\endcsname"}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -1775,18 +2687,18 @@ sectioning commands within a \string\shapepar}{}}%
% a given \gls{static} \gls{idn}.
% \begin{macrocode}
\newcommand*{\@@staticframeswapcoords}[1]{%
-\setlength{\@ff@tmp@x}%
-{\csname @sf@\romannumeral#1@evenx\endcsname}
-\expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname
-{\csname @sf@\romannumeral#1@posx\endcsname}%
-\expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname
-{\@ff@tmp@x}%
-\setlength{\@ff@tmp@y}%
-{\csname @sf@\romannumeral#1@eveny\endcsname}
-\expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname
-{\csname @sf@\romannumeral#1@posy\endcsname}%
-\expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname
-{\@ff@tmp@y}%
+ \setlength{\@ff@tmp@x}%
+ {\csname @sf@\romannumeral#1@evenx\endcsname}
+ \expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname
+ {\csname @sf@\romannumeral#1@posx\endcsname}%
+ \expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname
+ {\@ff@tmp@x}%
+ \setlength{\@ff@tmp@y}%
+ {\csname @sf@\romannumeral#1@eveny\endcsname}
+ \expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname
+ {\csname @sf@\romannumeral#1@posy\endcsname}%
+ \expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname
+ {\@ff@tmp@y}%
}
% \end{macrocode}
%\end{macro}
@@ -1794,47 +2706,66 @@ sectioning commands within a \string\shapepar}{}}%
% Allow user to specify \gls{flow} either by \gls{idn} or \gls{idl}:
% \begin{macrocode}
\newcommand*{\sfswapoddeven}{%
-\@ifstar\@sstaticframeswapcoords\@staticframeswapcoords}
+ \@ifstar\@sstaticframeswapcoords\@staticframeswapcoords
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sstaticframeswapcoords}
% Starred form
% \begin{macrocode}
\newcommand*{\@sstaticframeswapcoords}[1]{%
-\@for\@ff@id:=#1\do{%
-\@staticframeid{\@ff@id}%
-\@@staticframeswapcoords{\ff@id}}}
+ \@for\@ff@id:=#1\do
+ {%
+ \@staticframeid{\@ff@id}%
+ \@@staticframeswapcoords{\ff@id}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@staticframeswapcoords}
% Unstarred form:
% \begin{macrocode}
\newcommand*{\@staticframeswapcoords}[1]{%
-\ifthenelse{\equal{#1}{all}}{%
-\ff@id=0\relax
-\whiledo{\ff@id<\c@maxflow}{\advance\ff@id by 1\relax
-\@@staticframeswapcoords{\ff@id}}%
-}{%
-\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
-\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
-\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{%
-\@@staticframeswapcoords{\@colN}%
-\advance\@colN by 2\relax}%
-}{%
-\@for\@ff@id:=#1\do{%
-\def\@ff@numstart{0}\def\@ff@numend{10000}%
-\@ff@getrange{\@ff@id}%
-\ifnum\@ff@numstart=0\relax
- \def\@ff@numstart{1}%
-\fi
-\ifnum\@ff@numend>\c@maxflow
- \def\@ff@numend{\c@maxflow}%
-\fi
-\@colN=\@ff@numstart
-\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
-\@@staticframeswapcoords{\@colN}%
-\advance\@colN by 1\relax
-}}}}}
+ \ifthenelse{\equal{#1}{all}}%
+ {%
+ \ff@id=0\relax
+ \whiledo{\ff@id<\c@maxflow}%
+ {%
+ \advance\ff@id by 1\relax
+ \@@staticframeswapcoords{\ff@id}%
+ }%
+ }%
+ {%
+ \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}%
+ {%
+ \ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
+ \whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}%
+ {%
+ \@@staticframeswapcoords{\@colN}%
+ \advance\@colN by 2\relax
+ }%
+ }%
+ {%
+ \@for\@ff@id:=#1\do
+ {%
+ \def\@ff@numstart{0}\def\@ff@numend{100000}%
+ \@ff@getrange{\@ff@id}%
+ \ifnum\@ff@numstart=0\relax
+ \def\@ff@numstart{1}%
+ \fi
+ \ifnum\@ff@numend>\c@maxflow
+ \def\@ff@numend{\c@maxflow}%
+ \fi
+ \@colN=\@ff@numstart
+ \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}%
+ {%
+ \@@staticframeswapcoords{\@colN}%
+ \advance\@colN by 1\relax
+ }%
+ }%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%
@@ -1847,11 +2778,12 @@ sectioning commands within a \string\shapepar}{}}%
% \cs{newdynamicframe}\oarg{pages}\marg{width}\marg{height}\marg{x}\marg{y}\oarg{label}
% \begin{macrocode}
\newcommand*{\newdynamicframe}{%
-\@n@wdynamicframe}
+ \@n@wdynamicframe
+}
\newcommand*{\@n@wdynamicframe}{%
-\global\advance\c@maxdynamic by 1\relax
-\newboolean{dynamicframe\romannumeral\c@maxdynamic}
-\@ifstar\@snewdynamicframe\@newdynamicframe
+ \global\advance\c@maxdynamic by 1\relax
+ \newboolean{dynamicframe\romannumeral\c@maxdynamic}
+ \@ifstar\@snewdynamicframe\@newdynamicframe
}
% \end{macrocode}
%\end{macro}
@@ -1859,99 +2791,125 @@ sectioning commands within a \string\shapepar}{}}%
% Starred version: has a border.
% \begin{macrocode}
\newcommand*{\@snewdynamicframe}{%
-\setboolean{dynamicframe\romannumeral\c@maxdynamic}{true}%
-\@@newdynamicframe}
+ \setboolean{dynamicframe\romannumeral\c@maxdynamic}{true}%
+ \@@newdynamicframe
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@newdynamicframe}
% Unstarred version: no border.
% \begin{macrocode}
\newcommand*{\@newdynamicframe}{%
-\setboolean{dynamicframe\romannumeral\c@maxdynamic}{false}%
-\@@newdynamicframe}
+ \setboolean{dynamicframe\romannumeral\c@maxdynamic}{false}%
+ \@@newdynamicframe
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@newdynamicframe}
% Create new \gls{dynamic}:
% \begin{macrocode}
\newcommand*{\@@newdynamicframe}[5][all]{%
-\expandafter
-\gdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{}%
-\expandafter
-\newlength\csname @df@\romannumeral\c@maxdynamic @posx\endcsname
-\expandafter
-\newlength\csname @df@\romannumeral\c@maxdynamic @posy\endcsname
-\expandafter\setlength
-\csname @df@\romannumeral\c@maxdynamic @posx\endcsname{#4}%
-\expandafter\setlength
-\csname @df@\romannumeral\c@maxdynamic @posy\endcsname{#5}%
-\expandafter\newlength
-\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname
-\expandafter\newlength
-\csname @df@\romannumeral\c@maxdynamic @eveny\endcsname
-\expandafter\setlength
-\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname{#4}%
-\expandafter\setlength
-\csname @df@\romannumeral\c@maxdynamic @eveny\endcsname{#5}%
-{\@ff@tmp@x=#2\relax
-\@ff@tmp@y=#3\relax
-\expandafter
-\xdef\csname @df@dim@\romannumeral\c@maxdynamic\endcsname{%
-[c][\the\@ff@tmp@y][t]{\the\@ff@tmp@x}}}%
-\expandafter
-\gdef\csname @df@col@\romannumeral\c@maxdynamic\endcsname{%
-\flowframecol}%
-\expandafter
-\gdef\csname @df@txtcol@\romannumeral\c@maxdynamic\endcsname{%
-\flowframetextcol}%
-\expandafter
-\gdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname{%
-{none}}%
-\expandafter
-\gdef\csname @df@pages@\romannumeral\c@maxdynamic\endcsname{#1}%
-\expandafter
-\gdef\csname @df@frametype@\romannumeral\c@maxdynamic\endcsname{%
-fbox}%
-\expandafter
-\gdef\csname @df@style@\romannumeral\c@maxdynamic\endcsname{relax}%
-\expandafter
-\gdef\csname @df@offset@\romannumeral\c@maxdynamic\endcsname{compute}%
-\expandafter
-\gdef\csname @df@angle@\romannumeral\c@maxdynamic\endcsname{0}%
-\expandafter
-\gdef\csname @df@shape@\romannumeral\c@maxdynamic\endcsname{\relax}%
-\newboolean{@df@clear@\romannumeral\c@maxdynamic}%
-\setboolean{@df@clear@\romannumeral\c@maxdynamic}{false}%
-\@ifnextchar[{\@s@tdynamicframeid{\c@maxdynamic}}%
-{\@s@tdynamicframeid{\c@maxdynamic}[\number\c@maxdynamic]}}
+ \expandafter
+ \gdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{}%
+ \expandafter
+ \newlength\csname @df@\romannumeral\c@maxdynamic @posx\endcsname
+ \expandafter
+ \newlength\csname @df@\romannumeral\c@maxdynamic @posy\endcsname
+ \expandafter\setlength
+ \csname @df@\romannumeral\c@maxdynamic @posx\endcsname{#4}%
+ \expandafter\setlength
+ \csname @df@\romannumeral\c@maxdynamic @posy\endcsname{#5}%
+ \expandafter\newlength
+ \csname @df@\romannumeral\c@maxdynamic @evenx\endcsname
+ \expandafter\newlength
+ \csname @df@\romannumeral\c@maxdynamic @eveny\endcsname
+ \expandafter\setlength
+ \csname @df@\romannumeral\c@maxdynamic @evenx\endcsname{#4}%
+ \expandafter\setlength
+ \csname @df@\romannumeral\c@maxdynamic @eveny\endcsname{#5}%
+ {%
+ \@ff@tmp@x=#2\relax
+ \@ff@tmp@y=#3\relax
+ \expandafter
+ \xdef\csname @df@dim@\romannumeral\c@maxdynamic\endcsname{%
+ [c][\the\@ff@tmp@y][t]{\the\@ff@tmp@x}%
+ }%
+ }%
+ \expandafter
+ \gdef\csname @df@col@\romannumeral\c@maxdynamic\endcsname{%
+ \flowframecol
+ }%
+ \expandafter
+ \gdef\csname @df@txtcol@\romannumeral\c@maxdynamic\endcsname{%
+ \flowframetextcol
+ }%
+ \expandafter
+ \gdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname{%
+ {none}}%
+ \expandafter
+ \gdef\csname @df@pages@\romannumeral\c@maxdynamic\endcsname{#1}%
+% \end{macrocode}
+% Page exclusion list:
+%\changes{1.14}{2012-11-10}{added page exclusion list}
+% \begin{macrocode}
+ \expandafter
+ \gdef\csname @df@xpages@\romannumeral\c@maxflow\endcsname{}%
+ \expandafter
+ \gdef\csname @df@frametype@\romannumeral\c@maxdynamic\endcsname{%
+ fbox}%
+ \expandafter
+ \gdef\csname @df@style@\romannumeral\c@maxdynamic\endcsname{relax}%
+ \expandafter
+ \gdef\csname @df@offset@\romannumeral\c@maxdynamic\endcsname{compute}%
+ \expandafter
+ \gdef\csname @df@angle@\romannumeral\c@maxdynamic\endcsname{0}%
+ \expandafter
+ \gdef\csname @df@shape@\romannumeral\c@maxdynamic\endcsname{\relax}%
+ \newboolean{@df@clear@\romannumeral\c@maxdynamic}%
+ \setboolean{@df@clear@\romannumeral\c@maxdynamic}{false}%
+ \@ifnextchar[{\@s@tdynamicframeid{\c@maxdynamic}}%
+ {\@s@tdynamicframeid{\c@maxdynamic}[\number\c@maxdynamic]}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@s@tdynamicframeid}
% Set the label for the given \gls{dynamic}:
% \begin{macrocode}
\def\@s@tdynamicframeid#1[#2]{%
-\edef\ff@label{#2}%
-\@df@checkuniqueidl{#1}{\ff@label}%
-\expandafter
-\xdef\csname @df@id@\romannumeral#1\endcsname{\ff@label}}
+ \edef\ff@label{#2}%
+ \@df@checkuniqueidl{#1}{\ff@label}%
+ \expandafter
+ \xdef\csname @df@id@\romannumeral#1\endcsname{\ff@label}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@df@checkuniqueidl}
% Check \gls{idl} "#2" for \gls{static} "#1" is unique
% \begin{macrocode}
\newcommand*{\@df@checkuniqueidl}[2]{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxdynamic}{%
-\advance\@colN by 1\relax
-\ifnum\@colN=#1\relax
-\else
-\ifthenelse{\equal{#2}%
-{\csname @df@id@\romannumeral\@colN\endcsname}}{%
-\PackageError{flowfram}{Dynamic frame IDL '#2' already defined}{%
-You can't assign this label, as it is already defined
-for dynamic frame \number\@colN}}{}%
-\fi
-}}
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxdynamic}%
+ {%
+ \advance\@colN by 1\relax
+ \ifnum\@colN=#1\relax
+ \else
+ \ifthenelse
+ {%
+ \equal{#2}%
+ {\csname @df@id@\romannumeral\@colN\endcsname}%
+ }%
+ {%
+ \PackageError{flowfram}%
+ {Dynamic frame IDL '#2' already defined}%
+ {%
+ You can't assign this label, as it is already defined
+ for dynamic frame \number\@colN
+ }%
+ }%
+ {}%
+ \fi
+ }%
+}
% \end{macrocode}
%\end{macro}
%
@@ -1962,7 +2920,8 @@ for dynamic frame \number\@colN}}{}%
% \gls{idn}.
% \begin{macrocode}
\newcommand*{\getdynamiclabel}[1]{%
-\csname @df@id@\romannumeral#1\endcsname}
+ \csname @df@id@\romannumeral#1\endcsname
+}
% \end{macrocode}
%\end{macro}
%
@@ -1974,7 +2933,8 @@ for dynamic frame \number\@colN}}{}%
% sequence.
% \begin{macrocode}
\newcommand*{\getdynamicid}[2]{%
-\@dynamicframeid{#2}\edef#1{\number\ff@id}}
+ \@dynamicframeid{#2}\edef#1{\number\ff@id}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -1982,16 +2942,30 @@ for dynamic frame \number\@colN}}{}%
% Determine the \gls{idn} of the \gls{dynamic} from its label.
% The \gls{idn} is stored in "\ff@id".
% \begin{macrocode}
-\newcommand*{\@dynamicframeid}[1]{\@colN=0\relax
-\ff@id=0\relax
-\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax
-\ifthenelse{%
-\equal{#1}{\csname @df@id@\romannumeral\@colN\endcsname}}{%
-\ff@id=\@colN\relax
-% break out of loop
-\@colN=\c@maxdynamic}{}}%
-\ifnum\ff@id=0\PackageError{flowfram}{Can't find dynamic frame
-id '#1'}{}\fi}
+\newcommand*{\@dynamicframeid}[1]{%
+ \@colN=0\relax
+ \ff@id=0\relax
+ \whiledo{\@colN<\c@maxdynamic}%
+ {%
+ \advance\@colN by 1\relax
+ \ifthenelse
+ {%
+ \equal{#1}{\csname @df@id@\romannumeral\@colN\endcsname}%
+ }%
+ {%
+ \ff@id=\@colN\relax
+% \end{macrocode}
+% Break out of loop
+% \begin{macrocode}
+ \@colN=\c@maxdynamic
+ }%
+ {}%
+ }%
+ \ifnum\ff@id=0\relax
+ \PackageError{flowfram}%
+ {Can't find dynamic frame id '#1'}{}%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%
@@ -2002,9 +2976,14 @@ id '#1'}{}\fi}
% is given by \meta{idl}. The \gls{idn} is stored in "\ff@id".
% \begin{macrocode}
\newcommand*{\@getframeid}[2]{%
-\@ifdefined{@#1frameid}{\csname @#1frameid\endcsname{#2}}{%
-\PackageError{flowfram}{Unknown frame type `#1'}{Frame types can
-be one of: flow, static or dynamic}}}
+ \@ifdefined{@#1frameid}%
+ {\csname @#1frameid\endcsname{#2}}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {Frame types can be one of: flow, static or dynamic}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%
@@ -2013,40 +2992,50 @@ be one of: flow, static or dynamic}}}
%\begin{macro}{\dynamicframex}
% \begin{macrocode}
\newcommand*{\dynamicframex}[1]{%
-\csname @df@\romannumeral#1@posx\endcsname}
+ \csname @df@\romannumeral#1@posx\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\dynamicframey}
% \begin{macrocode}
\newcommand*{\dynamicframey}[1]{%
-\csname @df@\romannumeral#1@posy\endcsname}
+ \csname @df@\romannumeral#1@posy\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\dynamicframeevenx}
% \begin{macrocode}
\newcommand*{\dynamicframeevenx}[1]{%
-\csname @df@\romannumeral#1@evenx\endcsname}
+ \csname @df@\romannumeral#1@evenx\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\dynamicframeeveny}
% \begin{macrocode}
\newcommand*{\dynamicframeeveny}[1]{%
-\csname @df@\romannumeral#1@eveny\endcsname}
+ \csname @df@\romannumeral#1@eveny\endcsname
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\setalldynamicframes}
% Change the settings for all the \glspl{dynamic}:
% \begin{macrocode}
\newcommand*{\setalldynamicframes}[1]{%
-\@colN=0\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax
-\@@setdynamicframe{\@colN}{#1}}}
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxdynamic}%
+ {%
+ \advance\@colN by 1\relax
+ \@@setdynamicframe{\@colN}{#1}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\setdynamicframe}
% Change the settings for specified \glspl{dynamic}:
% \begin{macrocode}
\newcommand*{\setdynamicframe}{%
-\@ifstar\@ssetdynamicframe\@setdynamicframe}
+ \@ifstar\@ssetdynamicframe\@setdynamicframe
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ssetdynamicframe}
@@ -2054,9 +3043,11 @@ be one of: flow, static or dynamic}}}
% of labels.
% \begin{macrocode}
\newcommand*{\@ssetdynamicframe}[2]{%
-\@for\@ff@id:=#1\do{%
-\@dynamicframeid{\@ff@id}%
-\@@setdynamicframe{\ff@id}{#2}}}
+ \@for\@ff@id:=#1\do{%
+ \@dynamicframeid{\@ff@id}%
+ \@@setdynamicframe{\ff@id}{#2}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@setdynamicframe}
@@ -2065,28 +3056,43 @@ be one of: flow, static or dynamic}}}
% If necessary, modify number ranges to ensure they are valid.
% \begin{macrocode}
\newcommand*{\@setdynamicframe}[2]{%
-\ifthenelse{\equal{#1}{all}}{%
-\setalldynamicframes{#2}}{%
-\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
-\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
-\whiledo{\@colN<\c@maxdynamic\TE@or\@colN=\c@maxdynamic}{%
-\@@setdynamicframe{\@colN}{#2}%
-\advance\@colN by 2\relax}%
-}{%
-\@for\@ff@id:=#1\do{%
-\def\@ff@numstart{0}\def\@ff@numend{10000}%
-\@ff@getrange{\@ff@id}%
-\ifnum\@ff@numstart=0\relax
- \def\@ff@numstart{1}%
-\fi
-\ifnum\@ff@numend>\c@maxdynamic\relax
- \def\@ff@numend{\c@maxdynamic}%
-\fi
-\@colN=\@ff@numstart\relax
-\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
-\@@setdynamicframe{\@colN}{#2}%
-\advance\@colN by 1\relax
-}}}}}
+ \ifthenelse{\equal{#1}{all}}%
+ {%
+ \setalldynamicframes{#2}%
+ }%
+ {%
+ \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}%
+ {%
+ \ifthenelse{\equal{#1}{odd}}%
+ {\@colN=1}%
+ {\@colN=2}%
+ \whiledo{\@colN<\c@maxdynamic\TE@or\@colN=\c@maxdynamic}%
+ {%
+ \@@setdynamicframe{\@colN}{#2}%
+ \advance\@colN by 2\relax
+ }%
+ }%
+ {%
+ \@for\@ff@id:=#1\do{%
+ \def\@ff@numstart{0}%
+ \def\@ff@numend{10000}%
+ \@ff@getrange{\@ff@id}%
+ \ifnum\@ff@numstart=0\relax
+ \def\@ff@numstart{1}%
+ \fi
+ \ifnum\@ff@numend>\c@maxdynamic\relax
+ \def\@ff@numend{\c@maxdynamic}%
+ \fi
+ \@colN=\@ff@numstart\relax
+ \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}%
+ {%
+ \@@setdynamicframe{\@colN}{#2}%
+ \advance\@colN by 1\relax
+ }%
+ }%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@setdynamicframe}
@@ -2095,101 +3101,222 @@ be one of: flow, static or dynamic}}}
%\changes{1.11}{2008/06/27}{fixed bug in clear key}
% \begin{macrocode}
\newcommand*{\@@setdynamicframe}[2]{%
-\expandafter\expandafter\expandafter
-\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname
-\def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}%
-\edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}%
-\def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}\def\ff@backcol{}%
-\def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}%
-\def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}%
-\def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}\def\ff@shape{0}%
-\setkeys{flowframe}{#2}%
-\ifthenelse{\equal{\ff@frame}{}}{}{%
-\setboolean{dynamicframe\romannumeral#1}{\ff@frame}}%
-\ifthenelse{\equal{\ff@x}{}}{}{%
-\expandafter\global\expandafter\setlength
-\csname @df@\romannumeral#1@posx\endcsname{\ff@x}%
-\expandafter\global\expandafter\setlength
-\csname @df@\romannumeral#1@evenx\endcsname{\ff@x}}%
-\ifthenelse{\equal{\ff@y}{}}{}{%
-\expandafter\global\expandafter\setlength
-\csname @df@\romannumeral#1@posy\endcsname{\ff@y}%
-\expandafter\global\expandafter\setlength
-\csname @df@\romannumeral#1@eveny\endcsname{\ff@y}}%
-\ifthenelse{\equal{\ff@evenx}{}}{}{%
-\expandafter\global\expandafter\setlength
-\csname @df@\romannumeral#1@evenx\endcsname{\ff@evenx}}%
-\ifthenelse{\equal{\ff@eveny}{}}{}{%
-\expandafter\global\expandafter\setlength
-\csname @df@\romannumeral#1@eveny\endcsname{\ff@eveny}}%
-\ifthenelse{\equal{\ff@oddx}{}}{}{%
-\expandafter\global\expandafter\setlength
-\csname @df@\romannumeral#1@posx\endcsname{\ff@oddx}}%
-\ifthenelse{\equal{\ff@oddy}{}}{}{%
-\expandafter\global\expandafter\setlength
-\csname @df@\romannumeral#1@posy\endcsname{\ff@oddy}}%
-\expandafter\xdef\csname @df@dim@\romannumeral#1\endcsname{%
-[c][\ff@height][\ff@valign]{\ff@width}}%
-\ifthenelse{\equal{\ff@label}{}}{}{%
-\@s@tdynamicframeid{#1}[\ff@label]}%
-\ifthenelse{\equal{\ff@frametype}{}}{}{%
-\expandafter
-\xdef\csname @df@frametype@\romannumeral#1\endcsname{%
-\ff@frametype}}%
-\ifthenelse{\equal{\ff@col}{}}{}{%
-\expandafter\@setframecol\ff@col\end{#1}{col}{df}}%
-\ifthenelse{\equal{\ff@txtcol}{}}{}{%
-\expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{df}}%
-\ifthenelse{\equal{\ff@backcol}{}}{}{%
-\expandafter\@setframecol\ff@backcol\end{#1}{backcol}{df}}%
-\ifthenelse{\equal{\ff@offset}{}}{}{%
-\expandafter
-\xdef\csname @df@offset@\romannumeral#1\endcsname{\ff@offset}}%
-\ifthenelse{\equal{\ff@angle}{}}{}{%
-\expandafter
-\xdef\csname @df@angle@\romannumeral#1\endcsname{\ff@angle}}%
-\if0\ff@shape
-\else
-\expandafter\global\expandafter
-\let\csname @df@shape@\romannumeral#1\endcsname\ff@shape
-\fi
-\ifthenelse{\equal{\ff@pages}{}}{}{%
-\expandafter\xdef\csname @df@pages@\romannumeral#1\endcsname{%
-\ff@pages}}%
-\ifthenelse{\equal{\ff@style}{}}{}{%
-\@ifundefined{\ff@style}{\PackageError{flowfram}%
-{Unknown style '\ff@style'}{The command \expandafter
-\string\csname\ff@style\endcsname\space has not been defined}}{%
-\expandafter
-\xdef\csname @df@style@\romannumeral#1\endcsname{\ff@style}}}%
-\ifthenelse{\equal{\ff@clear}{}}{}{%
-\setboolean{@df@clear@\romannumeral#1}{\ff@clear}%
-}%
-\ifthenelse{\equal{\ff@margin}{}}{}{%
-\PackageError{flowfram}{Key 'margin' not available for dynamic
-frames}{dynamic frames don't have marginal notes}}%
+ \expandafter\expandafter\expandafter
+ \@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname
+ \def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}%
+ \edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}%
+ \def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}\def\ff@backcol{}%
+ \def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}%
+ \def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}%
+ \def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}%
+ \let\ff@shape\undefined
+ \let\ff@xpages\undefined
+ \setkeys{flowframe}{#2}%
+ \ifdefempty{\ff@frame}%
+ {}%
+ {%
+ \setboolean{dynamicframe\romannumeral#1}{\ff@frame}%
+ }%
+ \ifdefempty{\ff@x}%
+ {}%
+ {%
+ \expandafter\global\expandafter\setlength
+ \csname @df@\romannumeral#1@posx\endcsname{\ff@x}%
+ \expandafter\global\expandafter\setlength
+ \csname @df@\romannumeral#1@evenx\endcsname{\ff@x}%
+ }%
+ \ifdefempty{\ff@y}%
+ {}%
+ {%
+ \expandafter\global\expandafter\setlength
+ \csname @df@\romannumeral#1@posy\endcsname{\ff@y}%
+ \expandafter\global\expandafter\setlength
+ \csname @df@\romannumeral#1@eveny\endcsname{\ff@y}%
+ }%
+ \ifdefempty{\ff@evenx}%
+ {}%
+ {%
+ \expandafter\global\expandafter\setlength
+ \csname @df@\romannumeral#1@evenx\endcsname{\ff@evenx}%
+ }%
+ \ifdefempty{\ff@eveny}%
+ {}%
+ {%
+ \expandafter\global\expandafter\setlength
+ \csname @df@\romannumeral#1@eveny\endcsname{\ff@eveny}%
+ }%
+ \ifdefempty{\ff@oddx}%
+ {}%
+ {%
+ \expandafter\global\expandafter\setlength
+ \csname @df@\romannumeral#1@posx\endcsname{\ff@oddx}%
+ }%
+ \ifdefempty{\ff@oddy}%
+ {}%
+ {%
+ \expandafter\global\expandafter\setlength
+ \csname @df@\romannumeral#1@posy\endcsname{\ff@oddy}%
+ }%
+ \expandafter\xdef\csname @df@dim@\romannumeral#1\endcsname{%
+ [c][\ff@height][\ff@valign]{\ff@width}%
+ }%
+ \ifdefempty{\ff@label}%
+ {}%
+ {%
+ \@s@tdynamicframeid{#1}[\ff@label]%
+ }%
+ \ifdefempty{\ff@frametype}%
+ {}%
+ {%
+ \expandafter
+ \xdef\csname @df@frametype@\romannumeral#1\endcsname{%
+ \ff@frametype
+ }%
+ }%
+ \ifdefempty{\ff@col}%
+ {}%
+ {%
+ \expandafter\@setframecol\ff@col\end{#1}{col}{df}%
+ }%
+ \ifdefempty{\ff@txtcol}%
+ {}%
+ {%
+ \expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{df}%
+ }%
+ \ifdefempty{\ff@backcol}%
+ {}%
+ {%
+ \expandafter\@setframecol\ff@backcol\end{#1}{backcol}{df}%
+ }%
+ \ifdefempty{\ff@offset}%
+ {}%
+ {%
+ \expandafter
+ \xdef\csname @df@offset@\romannumeral#1\endcsname{\ff@offset}%
+ }%
+ \ifdefempty{\ff@angle}%
+ {}%
+ {%
+ \expandafter
+ \xdef\csname @df@angle@\romannumeral#1\endcsname{\ff@angle}%
+ }%
+ \ifundef{\ff@shape}{}%
+ {%
+ \expandafter\global\expandafter
+ \let\csname @df@shape@\romannumeral#1\endcsname\ff@shape
+ }%
+ \ifdefempty{\ff@pages}%
+ {}%
+ {%
+ \dynamicsetpagelist{#1}{\ff@pages}%
+ }%
+ \ifundef{\ff@xpages}{}%
+ {%
+ \dynamicsetexclusion{#1}{\ff@xpages}%
+ }%
+ \ifdefempty{\ff@style}%
+ {}%
+ {%
+ \ifcsundef{\ff@style}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown style '\ff@style'}%
+ {%
+ The command \expandafter\@gobble\string\\\ff@style
+ \space has not been defined%
+ }%
+ }%
+ {%
+ \expandafter
+ \xdef\csname @df@style@\romannumeral#1\endcsname{\ff@style}%
+ }%
+ }%
+ \ifdefempty{\ff@clear}%
+ {}%
+ {%
+ \setboolean{@df@clear@\romannumeral#1}{\ff@clear}%
+ }%
+ \ifdefempty{\ff@margin}%
+ {}%
+ {%
+ \PackageError{flowfram}%
+ {%
+ Key 'margin' not available for dynamic frames%
+ }%
+ {dynamic frames don't have marginal notes}%
+ }%
}
% \end{macrocode}
%\end{macro}
+%
+%\begin{macro}{\dynamicsetpagelist}
+% Sets the page list for the \gls{dynamic} given by "#1" (the
+% \gls{idn}).
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\dynamicsetpagelist}[2]{%
+ \expandafter
+ \xdef\csname @df@pages@\romannumeral#1\endcsname{#2}%
+ \flf@message{Setting page range for dynamic frame
+ \number#1\space\space to "#2"}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dynamicsetexclusion}
+% Sets the exclusion list for the \gls{dynamic} given by "#1" (the
+% \gls{idn}).
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\dynamicsetexclusion}[2]{%
+ \expandafter
+ \xdef\csname @df@xpages@\romannumeral#1\endcsname{#2}%
+ \flf@message{Setting exclusion for dynamic frame
+ \number#1\space\space to "#2"}%
+}
+% \end{macrocode}
+%\end{macro}
+%\begin{macro}{\dynamicaddexclusion}
+% Adds to the exclusion list for the \gls{dynamic} given by "#1" (the
+% \gls{idn}).
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newcommand*{\dynamicaddexclusion}[2]{%
+ \ifcsempty{@df@xpages@\romannumeral#1}
+ {%
+ \expandafter
+ \xdef\csname @df@xpages@\romannumeral#1\endcsname{#2}%
+ }%
+ {%
+ \expandafter
+ \xdef\csname @df@xpages@\romannumeral#1\endcsname{%
+ \csname @df@xpages@\romannumeral#1\endcsname,#2}%
+ }%
+ \flf@message{Setting exclusion for dynamic frame
+ \number#1\space\space to
+ "\csname @df@xpages@\romannumeral#1\endcsname"}%
+}
+% \end{macrocode}
+%\end{macro}
+%
%\begin{macro}{\@@dynamicframeswapcoords}
-% Swap odd and even offsets for a given \gls{static}. Do the main stuff for
-% a given \gls{static} \gls{idn}.
+% Swap odd and even offsets for a given \gls{dynamic}. Do the main stuff for
+% a given \gls{dynamic} \gls{idn}.
% \begin{macrocode}
\newcommand*{\@@dynamicframeswapcoords}[1]{%
-\setlength{\@ff@tmp@x}%
-{\csname @df@\romannumeral#1@evenx\endcsname}%
-\expandafter\setlength
-\csname @df@\romannumeral#1@evenx\endcsname
-{\csname @df@\romannumeral#1@posx\endcsname}%
-\expandafter\setlength
-\csname @df@\romannumeral#1@posx\endcsname{\@ff@tmp@x}%
-\setlength{\@ff@tmp@y}%
-{\csname @df@\romannumeral#1@eveny\endcsname}%
-\expandafter\setlength
-\csname @df@\romannumeral#1@eveny\endcsname
-{\csname @df@\romannumeral#1@posy\endcsname}%
-\expandafter\setlength\csname @df@\romannumeral#1@posy\endcsname
-{\@ff@tmp@y}%
+ \setlength{\@ff@tmp@x}%
+ {\csname @df@\romannumeral#1@evenx\endcsname}%
+ \expandafter\setlength
+ \csname @df@\romannumeral#1@evenx\endcsname
+ {\csname @df@\romannumeral#1@posx\endcsname}%
+ \expandafter\setlength
+ \csname @df@\romannumeral#1@posx\endcsname{\@ff@tmp@x}%
+ \setlength{\@ff@tmp@y}%
+ {\csname @df@\romannumeral#1@eveny\endcsname}%
+ \expandafter\setlength
+ \csname @df@\romannumeral#1@eveny\endcsname
+ {\csname @df@\romannumeral#1@posy\endcsname}%
+ \expandafter\setlength\csname @df@\romannumeral#1@posy\endcsname
+ {\@ff@tmp@y}%
}
% \end{macrocode}
%\end{macro}
@@ -2204,40 +3331,58 @@ frames}{dynamic frames don't have marginal notes}}%
% Starred form
% \begin{macrocode}
\newcommand*{\@sdynamicframeswapcoords}[1]{%
-\@for\@ff@id:=#1\do{%
-\@dynamicframeid{\@ff@id}%
-\@@dynamicframeswapcoords{\ff@id}}}
+ \@for\@ff@id:=#1\do{%
+ \@dynamicframeid{\@ff@id}%
+ \@@dynamicframeswapcoords{\ff@id}}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@dynamicframeswapcoords}
% Unstarred form:
% \begin{macrocode}
\newcommand*{\@dynamicframeswapcoords}[1]{%
-\ifthenelse{\equal{#1}{all}}{%
-\ff@id=0\relax
-\whiledo{\ff@id<\c@maxflow}{\advance\ff@id by 1\relax
-\@@dynamicframeswapcoords{\ff@id}}%
-}{%
-\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{%
-\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}%
-\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{%
-\@@dynamicframeswapcoords{\@colN}%
-\advance\@colN by 2\relax}%
-}{%
-\@for\@ff@id:=#1\do{%
-\def\@ff@numstart{0}\def\@ff@numend{10000}%
-\@ff@getrange{\@ff@id}%
-\ifnum\@ff@numstart=0\relax
- \def\@ff@numstart{1}%
-\fi
-\ifnum\@ff@numend>\c@maxflow
- \def\@ff@numend{\c@maxflow}%
-\fi
-\@colN=\@ff@numstart
-\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
-\@@dynamicframeswapcoords{\@colN}%
-\advance\@colN by 1\relax
-}}}}}
+ \ifthenelse{\equal{#1}{all}}%
+ {%
+ \ff@id=0\relax
+ \whiledo{\ff@id<\c@maxflow}%
+ {%
+ \advance\ff@id by 1\relax
+ \@@dynamicframeswapcoords{\ff@id}%
+ }%
+ }%
+ {%
+ \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}%
+ {%
+ \ifthenelse{\equal{#1}{odd}}%
+ {\@colN=1}%
+ {\@colN=2}%
+ \whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}%
+ {%
+ \@@dynamicframeswapcoords{\@colN}%
+ \advance\@colN by 2\relax
+ }%
+ }%
+ {%
+ \@for\@ff@id:=#1\do{%
+ \def\@ff@numstart{0}%
+ \def\@ff@numend{10000}%
+ \@ff@getrange{\@ff@id}%
+ \ifnum\@ff@numstart=0\relax
+ \def\@ff@numstart{1}%
+ \fi
+ \ifnum\@ff@numend>\c@maxflow
+ \def\@ff@numend{\c@maxflow}%
+ \fi
+ \@colN=\@ff@numstart
+ \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}%
+ {%
+ \@@dynamicframeswapcoords{\@colN}%
+ \advance\@colN by 1\relax
+ }%
+ }%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
% Set the contents of a \gls{dynamic}.
@@ -2250,9 +3395,9 @@ frames}{dynamic frames don't have marginal notes}}%
% (where \meta{rn} is the \meta{idn} as a roman numeral.)
% \begin{macrocode}
\newenvironment{dynamiccontents}[1]{%
-\def\@flf@{dynamiccontents}%
-\xdynamiccontents{#1}}{%
-\endxdynamiccontents
+ \def\@flf@{dynamiccontents}%
+ \xdynamiccontents{#1}}{%
+ \endxdynamiccontents
}
% \end{macrocode}
%\end{environment}
@@ -2263,34 +3408,35 @@ frames}{dynamic frames don't have marginal notes}}%
% Start of the environment (unstarred):
% \begin{macrocode}
\def\xdynamiccontents#1{%
-\def\@flf@idn{#1}%
-\@dynamictok{}\@flf@get@body
+ \def\@flf@idn{#1}%
+ \@dynamictok{}\@flf@get@body
}
% \end{macrocode}
% Get the body of the environment:
% \begin{macrocode}
\long\def\@flf@get@body#1\end{%
-\@flf@checkcontinued#1\continueonframe\@nil
-\ifdfcontinued
- \expandafter\flf@ta\expandafter{\@flf@tmpa}%
- \edef\@flf@tmp{\the\@dynamictok\the\flf@ta}%
- \@dynamictok\expandafter{\@flf@tmp}%
-\else
- \@dynamictok\expandafter{\the\@dynamictok#1}%
-\fi
-\@flf@find@end}
+ \@flf@checkcontinued#1\continueonframe\@nil
+ \ifdfcontinued
+ \expandafter\flf@ta\expandafter{\@flf@tmpa}%
+ \edef\@flf@tmp{\the\@dynamictok\the\flf@ta}%
+ \@dynamictok\expandafter{\@flf@tmp}%
+ \else
+ \@dynamictok\expandafter{\the\@dynamictok#1}%
+ \fi
+ \@flf@find@end
+}
% \end{macrocode}
% Check if \cs{continueonframe} has been used.
% \begin{macrocode}
\newif\ifdfcontinued
\long\def\@flf@checkcontinued#1\continueonframe#2\@nil{%
-\long\def\@flf@tmpa{#1}\long\def\@flf@tmpb{#2}%
-\ifx\@flf@tmpb\@lempty
- \dfcontinuedfalse
-\else
- \dfcontinuedtrue
- \flf@getcontargs#2\@ff@text\@ff@nextid\@ff@rest
-\fi
+ \long\def\@flf@tmpa{#1}\long\def\@flf@tmpb{#2}%
+ \ifx\@flf@tmpb\@lempty
+ \dfcontinuedfalse
+ \else
+ \dfcontinuedtrue
+ \flf@getcontargs#2\@ff@text\@ff@nextid\@ff@rest
+ \fi
}
% \end{macrocode}
% Long equivalent of \cs{@empty}:
@@ -2304,65 +3450,70 @@ frames}{dynamic frames don't have marginal notes}}%
% store in the sixth argument (which should be a control sequence).
% \begin{macrocode}
\def\flf@getcontargs{%
-\@ifnextchar[{\@flf@getcontargs}{\@flf@getcontargs[]}}
+ \@ifnextchar[{\@flf@getcontargs}{\@flf@getcontargs[]}%
+}
% \end{macrocode}
% \begin{macrocode}
\long\def\@flf@getcontargs[#1]#2#3\continueonframe#4#5#6{%
-\def#4{#1}\def#5{#2}\def#6{#3}%
+ \def#4{#1}\def#5{#2}\def#6{#3}%
}
% \end{macrocode}
% Find the end of the environment:
% \begin{macrocode}
\def\@flf@find@end#1{%
-\def\@tempa{#1}%
-\global\let\flf@next=\relax
-\ifdfcontinued
- \@dynamictok\expandafter
- {\the\@dynamictok\ffcontinuedtextlayout}%
- \protected@edef\@tmpa{\the\@dynamictok{\@ff@text}}%
- \@dynamictok\expandafter{\@tmpa}%
- \toks@\expandafter{\@ff@rest}%
- \edef\flf@next{\noexpand\@flf@get@body\noexpand\end{#1}%
- \noexpand\begin{#1}{\@ff@nextid}\noexpand\par
- \noexpand\noindent\noexpand\ignorespaces
- \the\toks@\noexpand\end{#1}}%
-\else
- \ifx\@tempa\@flf@
- \let\flf@next=\@flf@endxdynamiccontents
- \else
+ \def\@tempa{#1}%
+ \global\let\flf@next=\relax
+ \ifdfcontinued
\@dynamictok\expandafter
- {\the\@dynamictok\end{#1}}%
- \let\flf@next=\@flf@get@body
+ {\the\@dynamictok\ffcontinuedtextlayout}%
+ \protected@edef\@tmpa{\the\@dynamictok{\@ff@text}}%
+ \@dynamictok\expandafter{\@tmpa}%
+ \toks@\expandafter{\@ff@rest}%
+ \edef\flf@next{\noexpand\@flf@get@body\noexpand\end{#1}%
+ \noexpand\begin{#1}{\@ff@nextid}\noexpand\par
+ \noexpand\noindent\noexpand\ignorespaces
+ \the\toks@\noexpand\end{#1}}%
+ \else
+ \ifx\@tempa\@flf@
+ \let\flf@next=\@flf@endxdynamiccontents
+ \else
+ \@dynamictok\expandafter
+ {\the\@dynamictok\end{#1}}%
+ \let\flf@next=\@flf@get@body
+ \fi
\fi
-\fi
-\flf@next
+ \flf@next
}
% \end{macrocode}
% End of the environment:
% \begin{macrocode}
\let\endxdynamiccontents\relax
\def\@flf@endxdynamiccontents{%
-\ifnum\@flf@idn>\c@maxdynamic
- \PackageError{flowfram}{Dynamic frame \number\@flf@idn\ does not exist}{%
- You have specified dynamic frame number \number\@flf@idn, but there are
- only \number\c@maxdynamic\space dynamic frames currently defined}%
-\else
- \expandafter
- \xdef\csname @dynamicframe@\romannumeral\@flf@idn\endcsname{%
- \the\@dynamictok}%
- \expandafter
-\fi
-\expandafter\end\expandafter{\@flf@}%
+ \ifnum\@flf@idn>\c@maxdynamic
+ \PackageError{flowfram}%
+ {Dynamic frame \number\@flf@idn\ does not exist}%
+ {%
+ You have specified dynamic frame number \number\@flf@idn,
+ but there are only \number\c@maxdynamic\space dynamic
+ frames currently defined%
+ }%
+ \else
+ \expandafter
+ \xdef\csname @dynamicframe@\romannumeral\@flf@idn\endcsname{%
+ \the\@dynamictok}%
+ \expandafter
+ \fi
+ \expandafter\end\expandafter{\@flf@}%
}
% \end{macrocode}
%\begin{environment}{dynamiccontents*}
% Starred version
% \begin{macrocode}
\newenvironment{dynamiccontents*}[1]{%
-\def\@flf@{dynamiccontents*}%
-\@dynamicframeid{#1}%
-\xdynamiccontents{\ff@id}}{%
-\enddynamiccontents
+ \def\@flf@{dynamiccontents*}%
+ \@dynamicframeid{#1}%
+ \xdynamiccontents{\ff@id}}{%
+ \enddynamiccontents
}
% \end{macrocode}
%\end{environment}
@@ -2370,28 +3521,34 @@ frames}{dynamic frames don't have marginal notes}}%
%\begin{macro}{\setdynamiccontents}
% \begin{macrocode}
\newcommand{\setdynamiccontents}{%
-\@ifstar\@ssetdynamiccontents\@setdynamiccontents}
+ \@ifstar\@ssetdynamiccontents\@setdynamiccontents
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ssetdynamiccontents}
% Starred version: identify \gls{dynamic} by its \gls{idl}:
% \begin{macrocode}
\newcommand{\@ssetdynamiccontents}[2]{%
-\@dynamicframeid{#1}\@setdynamiccontents{\ff@id}{#2}}
+ \@dynamicframeid{#1}\@setdynamiccontents{\ff@id}{#2}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@setdynamiccontents}
% Unstarred version: identify \gls{dynamic} by its \gls{idn}:
% \begin{macrocode}
\newcommand{\@setdynamiccontents}[2]{%
-\ifnum#1>\c@maxdynamic
-\PackageError{flowfram}{Dynamic frame \number#1\ does not exist}{%
-You have specified dynamic frame number \number#1, but there are
-only \number\c@maxdynamic\space dynamic frames currently defined}%
-\else
-\expandafter
-\gdef\csname @dynamicframe@\romannumeral#1\endcsname{#2}%
-\fi}
+ \ifnum#1>\c@maxdynamic
+ \PackageError{flowfram}%
+ {Dynamic frame \number#1\ does not exist}%
+ {%
+ You have specified dynamic frame number \number#1, but there are
+ only \number\c@maxdynamic\space dynamic frames currently defined%
+ }%
+ \else
+ \expandafter
+ \gdef\csname @dynamicframe@\romannumeral#1\endcsname{#2}%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\appenddynamiccontents}
@@ -2399,7 +3556,8 @@ only \number\c@maxdynamic\space dynamic frames currently defined}%
% see if starred or unstarred version is being used.
% \begin{macrocode}
\newcommand{\appenddynamiccontents}{%
-\@ifstar\@sappenddynamic\@appenddynamic}
+ \@ifstar\@sappenddynamic\@appenddynamic
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sappenddynamic}
@@ -2407,31 +3565,38 @@ only \number\c@maxdynamic\space dynamic frames currently defined}%
% the unstarred version.
% \begin{macrocode}
\newcommand{\@sappenddynamic}[2]{%
-\@dynamicframeid{#1}\@appenddynamic{\ff@id}{#2}}
+ \@dynamicframeid{#1}\@appenddynamic{\ff@id}{#2}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@appenddynamic}
% Unstarred version.
% \begin{macrocode}
\newcommand{\@appenddynamic}[2]{%
-\ifnum#1>\c@maxdynamic
- \PackageError{flowfram}{Dynamic frame \number#1 does not exist}{%
- You have specified dynamic frame number \number#1,
- but there are only
- \number\c@maxdynamic\space dynamic frames currently defined}%
-\else
- \expandafter\@ff@addtolist
- \csname @dynamicframe@\romannumeral#1\endcsname\entry{#2}%
-\fi}
+ \ifnum#1>\c@maxdynamic
+ \PackageError{flowfram}%
+ {Dynamic frame \number#1 does not exist}%
+ {%
+ You have specified dynamic frame number \number#1,
+ but there are only
+ \number\c@maxdynamic\space dynamic frames currently defined%
+ }%
+ \else
+ \expandafter\@ff@addtolist
+ \csname @dynamicframe@\romannumeral#1\endcsname\entry{#2}%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@addtolist}
% Append "#2" onto the end of "#1".
% \begin{macrocode}
\newtoks\flf@ta \newtoks\flf@tb
-\long\def\@ff@addtolist#1\entry#2{\flf@ta={{#2}}%
-\flf@tb=\expandafter{#1}%
-\xdef#1{\the\flf@tb\the\flf@ta}}
+\long\def\@ff@addtolist#1\entry#2{%
+ \flf@ta={{#2}}%
+ \flf@tb=\expandafter{#1}%
+ \xdef#1{\the\flf@tb\the\flf@ta}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -2444,11 +3609,17 @@ only \number\c@maxdynamic\space dynamic frames currently defined}%
% the environment is used, \marg{id} refers to the \gls{idl}, otherwise
% it refers to the \gls{idn} of the new frame.
% \begin{macrocode}
-\newcommand{\continueonframe}{\PackageError{flowfram}{Can't continue
-to new frame: not in static or dynamic frame}{%
-\string\continueonframe\space may only
-be used inside `staticcontents' or `dynamiccontents' environments
-(of their starred versions)}}
+\newcommand{\continueonframe}{%
+ \PackageError{flowfram}%
+ {%
+ Can't continue to new frame: not in static or dynamic frame%
+ }%
+ {%
+ \string\continueonframe\space may only
+ be used inside `staticcontents' or `dynamiccontents'
+ environments (or their starred versions)%
+ }%
+}
% \end{macrocode}
%\end{macro}
% \cs{@scontinueonframe} and \cs{@continueonframe} are set
@@ -2458,23 +3629,27 @@ be used inside `staticcontents' or `dynamiccontents' environments
% Static starred version uses \gls{idl}
% \begin{macrocode}
\newcommand*{\@staticscontinueonframe}[2][]{%
-\ffcontinuedtextlayout{#1}%
-\end{staticcontents*}%
-\begin{staticcontents*}{#2}\par\noindent\ignorespaces}
+ \ffcontinuedtextlayout{#1}%
+ \end{staticcontents*}%
+ \begin{staticcontents*}{#2}\par\noindent\ignorespaces
+}
% \end{macrocode}
% Static unstarred version uses \gls{idn}
% \begin{macrocode}
\newcommand*{\@staticcontinueonframe}[2][]{%
-\ffcontinuedtextlayout{#1}%
-\end{staticcontents}%
-\begin{staticcontents}{#2}\par\noindent\ignorespaces}
+ \ffcontinuedtextlayout{#1}%
+ \end{staticcontents}%
+ \begin{staticcontents}{#2}\par\noindent\ignorespaces
+}
% \end{macrocode}
%
%\begin{macro}{\ffcontinuedtextlayout}
%Displays the continued text used by \cs{continueonframe}.
% \begin{macrocode}
\newcommand{\ffcontinuedtextlayout}[1]{%
-\parfillskip=0pt\par\hfill\ffcontinuedtextfont{#1}}
+ \parfillskip=0pt\par\hfill
+ \ffcontinuedtextfont{#1}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\ffcontinuedtextfont}
@@ -2495,18 +3670,20 @@ be used inside `staticcontents' or `dynamiccontents' environments
% First the odd pages.
% \begin{macrocode}
\newcommand*{\computeleftedgeodd}[1]{%
-\setlength{#1}{-1in}%
-\addtolength{#1}{-\hoffset}%
-\addtolength{#1}{-\oddsidemargin}}
+ \setlength{#1}{-1in}%
+ \addtolength{#1}{-\hoffset}%
+ \addtolength{#1}{-\oddsidemargin}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\computeleftedgeeven}
% Now for the even pages
% \begin{macrocode}
\newcommand*{\computeleftedgeeven}[1]{%
-\setlength{#1}{-1in}%
-\addtolength{#1}{-\hoffset}%
-\addtolength{#1}{-\evensidemargin}}
+ \setlength{#1}{-1in}%
+ \addtolength{#1}{-\hoffset}%
+ \addtolength{#1}{-\evensidemargin}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\computetopedge}
@@ -2514,12 +3691,13 @@ be used inside `staticcontents' or `dynamiccontents' environments
% the \gls{typeblock}.
% \begin{macrocode}
\newcommand*{\computetopedge}[1]{%
-\setlength{#1}{\textheight}%
-\addtolength{#1}{\headheight}%
-\addtolength{#1}{\headsep}%
-\addtolength{#1}{1in}%
-\addtolength{#1}{\voffset}%
-\addtolength{#1}{\topmargin}}
+ \setlength{#1}{\textheight}%
+ \addtolength{#1}{\headheight}%
+ \addtolength{#1}{\headsep}%
+ \addtolength{#1}{1in}%
+ \addtolength{#1}{\voffset}%
+ \addtolength{#1}{\topmargin}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\computebottomedge}
@@ -2527,8 +3705,9 @@ be used inside `staticcontents' or `dynamiccontents' environments
% of the \gls{typeblock}.
% \begin{macrocode}
\newcommand*{\computebottomedge}[1]{%
-\computetopedge{#1}%
-\addtolength{#1}{-\paperheight}}
+ \computetopedge{#1}%
+ \addtolength{#1}{-\paperheight}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\computerightedgeodd}
@@ -2537,16 +3716,18 @@ be used inside `staticcontents' or `dynamiccontents' environments
% and even pages. First the odd pages.
% \begin{macrocode}
\newcommand*{\computerightedgeodd}[1]{%
-\computeleftedgeodd{#1}%
-\addtolength{#1}{\paperwidth}}
+ \computeleftedgeodd{#1}%
+ \addtolength{#1}{\paperwidth}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\computerightedgeeven}
% Now for the even pages.
% \begin{macrocode}
\newcommand*{\computerightedgeeven}[1]{%
-\computeleftedgeeven{#1}%
-\addtolength{#1}{\paperwidth}}
+ \computeleftedgeeven{#1}%
+ \addtolength{#1}{\paperwidth}%
+}
% \end{macrocode}
%\end{macro}
% Compute the minimum area surrounding the listed \glspl{flow}.
@@ -2565,84 +3746,91 @@ be used inside `staticcontents' or `dynamiccontents' environments
% version identifies frame by \gls{idn}.
% \begin{macrocode}
\newcommand*{\computeflowframearea}{%
-\@ifstar\@scomputeffarea\@computeffarea}
+ \@ifstar\@scomputeffarea\@computeffarea
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@scomputeffarea}
% Starred version.
% \begin{macrocode}
\newcommand*{\@scomputeffarea}[1]{%
-\setlength{\ffareax}{\paperwidth}%
-\setlength{\ffareay}{\paperheight}%
-\setlength{\@ff@tmp@x}{0pt}%
-\setlength{\@ff@tmp@y}{0pt}%
-\@for\@ff@id:=#1\do{\@flowframeid{\@ff@id}%
-%\ff@id is the IDN
-\ifnum\ffareax>\flowframex{\ff@id}%
-\setlength{\ffareax}{\flowframex{\ff@id}}%
-\fi
-\ifnum\ffareay>\flowframey{\ff@id}%
-\setlength{\ffareay}{\flowframey{\ff@id}}%
-\fi
-\setlength{\@ff@offset}{\flowframex{\ff@id}}%
-\addtolength{@ff@offset}{\flowframewidth{\ff@id}}%
-\ifnum\@ff@tmp@x<\@ff@offset
-\setlength{\@ff@tmp@x}{\@ff@offset}%
-\fi
-\setlength{\@ff@offset}{\flowframey{\ff@id}}%
-\addtolength{@ff@offset}{\flowframeheight{\ff@id}}%
-\ifnum\@ff@tmp@y<\@ff@offset
-\setlength{\@ff@tmp@y}{\@ff@offset}%
-\fi
-}%
-\setlength{\ffareawidth}{\@ff@tmp@x}%
-\addtolength{\ffareawidth}{-\ffareax}%
-\setlength{\ffareaheight}{\@ff@tmp@y}%
-\addtolength{\ffareaheight}{-\ffareay}}
+ \setlength{\ffareax}{\paperwidth}%
+ \setlength{\ffareay}{\paperheight}%
+ \setlength{\@ff@tmp@x}{0pt}%
+ \setlength{\@ff@tmp@y}{0pt}%
+ \@for\@ff@id:=#1\do{%
+ \@flowframeid{\@ff@id}%
+% \end{macrocode}
+%\cs{ff@id} is the IDN
+% \begin{macrocode}
+ \ifnum\ffareax>\flowframex{\ff@id}%
+ \setlength{\ffareax}{\flowframex{\ff@id}}%
+ \fi
+ \ifnum\ffareay>\flowframey{\ff@id}%
+ \setlength{\ffareay}{\flowframey{\ff@id}}%
+ \fi
+ \setlength{\@ff@offset}{\flowframex{\ff@id}}%
+ \addtolength{@ff@offset}{\flowframewidth{\ff@id}}%
+ \ifnum\@ff@tmp@x<\@ff@offset
+ \setlength{\@ff@tmp@x}{\@ff@offset}%
+ \fi
+ \setlength{\@ff@offset}{\flowframey{\ff@id}}%
+ \addtolength{@ff@offset}{\flowframeheight{\ff@id}}%
+ \ifnum\@ff@tmp@y<\@ff@offset
+ \setlength{\@ff@tmp@y}{\@ff@offset}%
+ \fi
+ }%
+ \setlength{\ffareawidth}{\@ff@tmp@x}%
+ \addtolength{\ffareawidth}{-\ffareax}%
+ \setlength{\ffareaheight}{\@ff@tmp@y}%
+ \addtolength{\ffareaheight}{-\ffareay}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@computeffarea}
% Unstarred version.
% \begin{macrocode}
\newcommand*{\@computeffarea}[1]{%
-\setlength{\ffareax}{\paperwidth}%
-\setlength{\ffareay}{\paperheight}%
-\setlength{\@ff@tmp@x}{0pt}%
-\setlength{\@ff@tmp@y}{0pt}%
-\@for\@ff@id:=#1\do{%
-\ff@id=\@ff@id\relax
-\setlength{\@ff@offset}{\flowframex{\ff@id}}%
-\ifdim\ffareax>\@ff@offset
-\setlength{\ffareax}{\@ff@offset}%
-\fi
-\setlength{\@ff@offset}{\flowframey{\ff@id}}%
-\ifdim\ffareay>\@ff@offset
-\setlength{\ffareay}{\@ff@offset}%
-\fi
-\setlength{\@ff@offset}{\flowframex{\ff@id}}%
-\addtolength{\@ff@offset}{\flowframewidth{\ff@id}}%
-\ifdim\@ff@tmp@x<\@ff@offset
-\setlength{\@ff@tmp@x}{\@ff@offset}%
-\fi
-\setlength{\@ff@offset}{\flowframey{\ff@id}}%
-\addtolength{\@ff@offset}{\flowframeheight{\ff@id}}%
-\ifdim\@ff@tmp@y<\@ff@offset
-\setlength{\@ff@tmp@y}{\@ff@offset}%
-\fi
-}%
-\setlength{\ffareawidth}{\@ff@tmp@x}%
-\addtolength{\ffareawidth}{-\ffareax}%
-\setlength{\ffareaheight}{\@ff@tmp@y}%
-\addtolength{\ffareaheight}{-\ffareay}}
+ \setlength{\ffareax}{\paperwidth}%
+ \setlength{\ffareay}{\paperheight}%
+ \setlength{\@ff@tmp@x}{0pt}%
+ \setlength{\@ff@tmp@y}{0pt}%
+ \@for\@ff@id:=#1\do{%
+ \ff@id=\@ff@id\relax
+ \setlength{\@ff@offset}{\flowframex{\ff@id}}%
+ \ifdim\ffareax>\@ff@offset
+ \setlength{\ffareax}{\@ff@offset}%
+ \fi
+ \setlength{\@ff@offset}{\flowframey{\ff@id}}%
+ \ifdim\ffareay>\@ff@offset
+ \setlength{\ffareay}{\@ff@offset}%
+ \fi
+ \setlength{\@ff@offset}{\flowframex{\ff@id}}%
+ \addtolength{\@ff@offset}{\flowframewidth{\ff@id}}%
+ \ifdim\@ff@tmp@x<\@ff@offset
+ \setlength{\@ff@tmp@x}{\@ff@offset}%
+ \fi
+ \setlength{\@ff@offset}{\flowframey{\ff@id}}%
+ \addtolength{\@ff@offset}{\flowframeheight{\ff@id}}%
+ \ifdim\@ff@tmp@y<\@ff@offset
+ \setlength{\@ff@tmp@y}{\@ff@offset}%
+ \fi
+ }%
+ \setlength{\ffareawidth}{\@ff@tmp@x}%
+ \addtolength{\ffareawidth}{-\ffareax}%
+ \setlength{\ffareaheight}{\@ff@tmp@y}%
+ \addtolength{\ffareaheight}{-\ffareay}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@swaplen}
% Swap the values of two lengths
% \begin{macrocode}
\newcommand*{\@ff@swaplen}[2]{%
-\setlength{\@ff@tmp@x}{#1}%
-\setlength{#1}{#2}%
-\setlength{#2}{\@ff@tmp@x}}
+ \setlength{\@ff@tmp@x}{#1}%
+ \setlength{#1}{#2}%
+ \setlength{#2}{\@ff@tmp@x}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -2654,59 +3842,83 @@ be used inside `staticcontents' or `dynamiccontents' environments
% "\ffareax", "\ffareay", "\ffareawidth" and "\ffareaheight".
% \begin{macrocode}
\newcommand*{\@ff@getdim}[2]{%
-\ifnum#2<1\relax
- \PackageError{flowfram}{Frame IDNs start from 1}{%
- You have specified a frame IDN of '\number#2'}%
-\fi
-\ifcase#1\relax
- \PackageError{flowfram}{Unknown frame ID type '#1'}{%
- Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)}%
-\or
- \ifnum#2>\c@maxflow\relax
- \PackageError{flowfram}{Invalid flow frame IDN '\number#2'}{%
- Flow frame IDNs go from 1 to \number\c@maxflow}%
- \else
- \setlength{\ffareax}{\flowframex{#2}}%
- \setlength{\ffareay}{\flowframey{#2}}%
- \setlength{\ffareaevenx}{\flowframeevenx{#2}}%
- \setlength{\ffareaeveny}{\flowframeeveny{#2}}%
- \setlength{\ffareawidth}{\flowframewidth{#2}}%
- \setlength{\ffareaheight}{\flowframeheight{#2}}%
- \fi
-\or
- \ifnum#2>\c@maxstatic\relax
- \PackageError{flowfram}{Invalid static frame IDN '\number#2'}{%
- Static frame IDNs go from 1 to \number\c@maxstatic}%
- \else
- \setlength{\ffareax}{\staticframex{#2}}%
- \setlength{\ffareay}{\staticframey{#2}}%
- \setlength{\ffareaevenx}{\staticframeevenx{#2}}%
- \setlength{\ffareaeveny}{\staticframeeveny{#2}}%
- \expandafter\expandafter\expandafter
- \@ff@getstaticpos
- \csname @sf@dim@\romannumeral#2\endcsname
- \setlength{\ffareawidth}{\@ff@tmp@x}%
- \setlength{\ffareaheight}{\@ff@tmp@y}%
- \fi
-\or
- \ifnum#2>\c@maxdynamic\relax
- \PackageError{flowfram}{Invalid dynamic frame IDN '\number#2'}{%
- Dynamic frame IDNs go from 1 to \number\c@maxdynamic}%
+ \ifnum#2<1\relax
+ \PackageError{flowfram}%
+ {Frame IDNs start from 1}%
+ {%
+ You have specified a frame IDN of '\number#2'%
+ }%
+ \fi
+ \ifcase#1\relax
+ \PackageError{flowfram}%
+ {Unknown frame ID type '#1'}%
+ {%
+ Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)%
+ }%
+ \or
+% \end{macrocode}
+% Flow frame
+% \begin{macrocode}
+ \ifnum#2>\c@maxflow\relax
+ \PackageError{flowfram}{Invalid flow frame IDN '\number#2'}{%
+ Flow frame IDNs go from 1 to \number\c@maxflow}%
+ \else
+ \setlength{\ffareax}{\flowframex{#2}}%
+ \setlength{\ffareay}{\flowframey{#2}}%
+ \setlength{\ffareaevenx}{\flowframeevenx{#2}}%
+ \setlength{\ffareaeveny}{\flowframeeveny{#2}}%
+ \setlength{\ffareawidth}{\flowframewidth{#2}}%
+ \setlength{\ffareaheight}{\flowframeheight{#2}}%
+ \fi
+ \or
+% \end{macrocode}
+% Static frame
+% \begin{macrocode}
+ \ifnum#2>\c@maxstatic\relax
+ \PackageError{flowfram}%
+ {Invalid static frame IDN '\number#2'}%
+ {%
+ Static frame IDNs go from 1 to \number\c@maxstatic
+ }%
+ \else
+ \setlength{\ffareax}{\staticframex{#2}}%
+ \setlength{\ffareay}{\staticframey{#2}}%
+ \setlength{\ffareaevenx}{\staticframeevenx{#2}}%
+ \setlength{\ffareaeveny}{\staticframeeveny{#2}}%
+ \expandafter\expandafter\expandafter
+ \@ff@getstaticpos
+ \csname @sf@dim@\romannumeral#2\endcsname
+ \setlength{\ffareawidth}{\@ff@tmp@x}%
+ \setlength{\ffareaheight}{\@ff@tmp@y}%
+ \fi
+ \or
+% \end{macrocode}
+% Dynamic frame
+% \begin{macrocode}
+ \ifnum#2>\c@maxdynamic\relax
+ \PackageError{flowfram}%
+ {Invalid dynamic frame IDN '\number#2'}%
+ {%
+ Dynamic frame IDNs go from 1 to \number\c@maxdynamic
+ }%
+ \else
+ \setlength{\ffareax}{\dynamicframex{#2}}%
+ \setlength{\ffareay}{\dynamicframey{#2}}%
+ \setlength{\ffareaevenx}{\dynamicframeevenx{#2}}%
+ \setlength{\ffareaeveny}{\dynamicframeeveny{#2}}%
+ \expandafter\expandafter\expandafter
+ \@ff@getstaticpos
+ \csname @df@dim@\romannumeral#2\endcsname
+ \setlength{\ffareawidth}{\@ff@tmp@x}%
+ \setlength{\ffareaheight}{\@ff@tmp@y}%
+ \fi
\else
- \setlength{\ffareax}{\dynamicframex{#2}}%
- \setlength{\ffareay}{\dynamicframey{#2}}%
- \setlength{\ffareaevenx}{\dynamicframeevenx{#2}}%
- \setlength{\ffareaeveny}{\dynamicframeeveny{#2}}%
- \expandafter\expandafter\expandafter
- \@ff@getstaticpos
- \csname @df@dim@\romannumeral#2\endcsname
- \setlength{\ffareawidth}{\@ff@tmp@x}%
- \setlength{\ffareaheight}{\@ff@tmp@y}%
- \fi
-\else
- \PackageError{flowfram}{Unknown frame ID type '#1'}{%
- Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)}%
-\fi
+ \PackageError{flowfram}%
+ {Unknown frame ID type '#1'}%
+ {%
+ Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)%
+ }%
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -2720,53 +3932,80 @@ be used inside `staticcontents' or `dynamiccontents' environments
% "\ffareax", "\ffareay", "\ffareawidth" and "\ffareaheight".
% \begin{macrocode}
\newcommand*{\@ff@getevendim}[2]{%
-\ifnum#2<1\relax
- \PackageError{flowfram}{Frame IDNs start from 1}{%
- You have specified a frame IDN of '\number#2'}%
-\fi
-\ifcase#1\relax
- \PackageError{flowfram}{Unknown frame ID type '#1'}{%
- Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)}
-\or
- \ifnum#2>\c@maxflow
- \PackageError{flowfram}{Invalid flow frame IDN '\number#2'}{%
- Flow frame IDNs go from 1 to \number\c@maxflow}%
- \else
- \setlength{\ffareax}{\flowframeevenx{#2}}%
- \setlength{\ffareay}{\flowframeeveny{#2}}%
- \setlength{\ffareawidth}{\flowframewidth{#2}}%
- \setlength{\ffareaheight}{\flowframeheight{#2}}%
- \fi
-\or
- \ifnum#2>\c@maxstatic\relax
- \PackageError{flowfram}{Invalid static frame IDN '\number#2'}{%
- Static frame IDNs go from 1 to \number\c@maxstatic}%
- \else
- \setlength{\ffareax}{\staticframeevenx{#2}}%
- \setlength{\ffareay}{\staticframeeveny{#2}}%
- \expandafter\expandafter\expandafter
- \@ff@getstaticpos
- \csname @sf@dim@\romannumeral#2\endcsname
- \setlength{\ffareawidth}{\@ff@tmp@x}%
- \setlength{\ffareaheight}{\@ff@tmp@y}%
- \fi
-\or
- \ifnum#2>\c@maxdynamic\relax
- \PackageError{flowfram}{Invalid dynamic frame IDN '\number#2'}{%
- Dynamic frame IDNs go from 1 to \number\c@maxdynamic}%
+ \ifnum#2<1\relax
+ \PackageError{flowfram}%
+ {Frame IDNs start from 1}%
+ {%
+ You have specified a frame IDN of '\number#2'%
+ }%
+ \fi
+ \ifcase#1\relax
+ \PackageError{flowfram}%
+ {Unknown frame ID type '#1'}%
+ {%
+ Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)%
+ }
+ \or
+% \end{macrocode}
+% Flow frame
+% \begin{macrocode}
+ \ifnum#2>\c@maxflow
+ \PackageError{flowfram}%
+ {Invalid flow frame IDN '\number#2'}%
+ {%
+ Flow frame IDNs go from 1 to \number\c@maxflow
+ }%
+ \else
+ \setlength{\ffareax}{\flowframeevenx{#2}}%
+ \setlength{\ffareay}{\flowframeeveny{#2}}%
+ \setlength{\ffareawidth}{\flowframewidth{#2}}%
+ \setlength{\ffareaheight}{\flowframeheight{#2}}%
+ \fi
+ \or
+% \end{macrocode}
+% Static frame
+% \begin{macrocode}
+ \ifnum#2>\c@maxstatic\relax
+ \PackageError{flowfram}%
+ {Invalid static frame IDN '\number#2'}%
+ {%
+ Static frame IDNs go from 1 to \number\c@maxstatic
+ }%
+ \else
+ \setlength{\ffareax}{\staticframeevenx{#2}}%
+ \setlength{\ffareay}{\staticframeeveny{#2}}%
+ \expandafter\expandafter\expandafter
+ \@ff@getstaticpos
+ \csname @sf@dim@\romannumeral#2\endcsname
+ \setlength{\ffareawidth}{\@ff@tmp@x}%
+ \setlength{\ffareaheight}{\@ff@tmp@y}%
+ \fi
+ \or
+% \end{macrocode}
+% Dynamic frame
+% \begin{macrocode}
+ \ifnum#2>\c@maxdynamic\relax
+ \PackageError{flowfram}%
+ {Invalid dynamic frame IDN '\number#2'}%
+ {%
+ Dynamic frame IDNs go from 1 to \number\c@maxdynamic
+ }%
+ \else
+ \setlength{\ffareax}{\dynamicframeevenx{#2}}%
+ \setlength{\ffareay}{\dynamicframeeveny{#2}}%
+ \expandafter\expandafter\expandafter
+ \@ff@getstaticpos
+ \csname @df@dim@\romannumeral#2\endcsname
+ \setlength{\ffareawidth}{\@ff@tmp@x}%
+ \setlength{\ffareaheight}{\@ff@tmp@y}%
+ \fi
\else
- \setlength{\ffareax}{\dynamicframeevenx{#2}}%
- \setlength{\ffareay}{\dynamicframeeveny{#2}}%
- \expandafter\expandafter\expandafter
- \@ff@getstaticpos
- \csname @df@dim@\romannumeral#2\endcsname
- \setlength{\ffareawidth}{\@ff@tmp@x}%
- \setlength{\ffareaheight}{\@ff@tmp@y}%
+ \PackageError{flowfram}%
+ {Unknown frame ID type '#1'}%
+ {%
+ Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)%
+ }%
\fi
-\else
- \PackageError{flowfram}{Unknown frame ID type '#1'}{%
- Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)}
-\fi
}
% \end{macrocode}
%\end{macro}
@@ -2776,14 +4015,16 @@ be used inside `staticcontents' or `dynamiccontents' environments
% frames:
% \begin{macrocode}
\newcommand*{\getstaticbounds}{%
-\@ifstar\@sgetstaticbounds\@getstaticbounds}
+ \@ifstar\@sgetstaticbounds\@getstaticbounds
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sgetstaticbounds}
% Starred version (specify by \gls{idl}):
% \begin{macrocode}
\newcommand*{\@sgetstaticbounds}[1]{%
-\@staticframeid{#1}\@getstaticbounds{\ff@id}}
+ \@staticframeid{#1}\@getstaticbounds{\ff@id}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@getstaticbounds}
@@ -2800,14 +4041,16 @@ be used inside `staticcontents' or `dynamiccontents' environments
% Even pages
% \begin{macrocode}
\newcommand*{\getstaticevenbounds}{%
-\@ifstar\@sgetstaticevenbounds\@getstaticevenbounds}
+ \@ifstar\@sgetstaticevenbounds\@getstaticevenbounds
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sgetstaticevenbounds}
% Starred version (specify by \gls{idl}):
% \begin{macrocode}
\newcommand*{\@sgetstaticevenbounds}[1]{%
-\@staticframeid{#1}\@getstaticevenbounds{\ff@id}}
+ \@staticframeid{#1}\@getstaticevenbounds{\ff@id}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@getstaticevenbounds}
@@ -2822,14 +4065,16 @@ be used inside `staticcontents' or `dynamiccontents' environments
% Next flow frames:
% \begin{macrocode}
\newcommand*{\getflowbounds}{%
-\@ifstar\@sgetflowbounds\@getflowbounds}
+ \@ifstar\@sgetflowbounds\@getflowbounds
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sgetflowbounds}
% Starred version (specify by \gls{idl}):
% \begin{macrocode}
\newcommand*{\@sgetflowbounds}[1]{%
-\@flowframeid{#1}\@getflowbounds{\ff@id}}
+ \@flowframeid{#1}\@getflowbounds{\ff@id}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@getflowbounds}
@@ -2845,7 +4090,8 @@ be used inside `staticcontents' or `dynamiccontents' environments
% Even pages:
% \begin{macrocode}
\newcommand*{\getflowevenbounds}{%
-\@ifstar\@sgetflowevenbounds\@getflowevenbounds}
+ \@ifstar\@sgetflowevenbounds\@getflowevenbounds
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sgetflowevenbounds}
@@ -2853,7 +4099,8 @@ be used inside `staticcontents' or `dynamiccontents' environments
% Starred version (specify by \gls{idl}):
% \begin{macrocode}
\newcommand*{\@sgetflowevenbounds}[1]{%
-\@flowframeid{#1}\@getflowevenbounds{\ff@id}}
+ \@flowframeid{#1}\@getflowevenbounds{\ff@id}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@getflowevenbounds}
@@ -2868,14 +4115,16 @@ be used inside `staticcontents' or `dynamiccontents' environments
% Next dynamic frames:
% \begin{macrocode}
\newcommand*{\getdynamicbounds}{%
-\@ifstar\@sgetdynamicbounds\@getdynamicbounds}
+ \@ifstar\@sgetdynamicbounds\@getdynamicbounds
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sgetdynamicbounds}
% Starred version (specify by \gls{idl}):
% \begin{macrocode}
\newcommand*{\@sgetdynamicbounds}[1]{%
-\@dynamicframeid{#1}\@getdynamicbounds{\ff@id}}
+ \@dynamicframeid{#1}\@getdynamicbounds{\ff@id}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@getdynamicbounds}
@@ -2889,14 +4138,16 @@ be used inside `staticcontents' or `dynamiccontents' environments
% Even pages:
% \begin{macrocode}
\newcommand*{\getdynamicevenbounds}{%
-\@ifstar\@sgetdynamicevenbounds\@getdynamicevenbounds}
+ \@ifstar\@sgetdynamicevenbounds\@getdynamicevenbounds
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sgetdynamicevenbounds}
% Starred version (specify by \gls{idl}):
% \begin{macrocode}
\newcommand*{\@sgetdynamicevenbounds}[1]{%
-\@dynamicframeid{#1}\@getdynamicevenbounds{\ff@id}}
+ \@dynamicframeid{#1}\@getdynamicevenbounds{\ff@id}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@getdynamicevenbounds}
@@ -2943,25 +4194,28 @@ be used inside `staticcontents' or `dynamiccontents' environments
% spans the page break.
% \begin{macrocode}
\newcommand*{\checkifframeabove}{%
-\@ifstar\@scheckifframeabove\@checkifframeabove}
+ \@ifstar\@scheckifframeabove\@checkifframeabove
+}
% \end{macrocode}
% Starred version:
% \begin{macrocode}
\newcommand*{\@scheckifframeabove}[4]{%
-\ifodd\c@page
- \@soddcheckifframeabove{#1}{#2}{#3}{#4}%
-\else
- \@sevencheckifframeabove{#1}{#2}{#3}{#4}%
-\fi}
+ \ifodd\c@page
+ \@soddcheckifframeabove{#1}{#2}{#3}{#4}%
+ \else
+ \@sevencheckifframeabove{#1}{#2}{#3}{#4}%
+ \fi
+}
% \end{macrocode}
% Unstarred version:
% \begin{macrocode}
\newcommand*{\@checkifframeabove}[4]{%
-\ifodd\c@page
- \@oddcheckifframeabove{#1}{#2}{#3}{#4}%
-\else
- \@evencheckifframeabove{#1}{#2}{#3}{#4}%
-\fi}
+ \ifodd\c@page
+ \@oddcheckifframeabove{#1}{#2}{#3}{#4}%
+ \else
+ \@evencheckifframeabove{#1}{#2}{#3}{#4}%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%
@@ -2976,46 +4230,73 @@ be used inside `staticcontents' or `dynamiccontents' environments
% second frame if they overlap.
% \begin{macrocode}
\newcommand*{\oddcheckifframeabove}{%
-\@ifstar\@soddcheckifframeabove\@oddcheckifframeabove}
+ \@ifstar\@soddcheckifframeabove\@oddcheckifframeabove
+}
% \end{macrocode}
% The starred version
% \begin{macrocode}
\newcommand*{\@soddcheckifframeabove}[4]{%
-\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#1bounds\endcsname{#2}%
-\edef\@ff@check{\the\ffareay}%
-\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#3bounds\endcsname{#4}%
-\advance\ffareay by \ffareaheight\relax
-\expandafter\ifdim\@ff@check>\ffareay
- \FLFabovetrue
-\else
- \FLFabovefalse
-\fi
+ \@ifundefined{@sget#1bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or flow%
+ }%
+ }%
+ {}%
+ \csname @sget#1bounds\endcsname{#2}%
+ \edef\@ff@check{\the\ffareay}%
+ \@ifundefined{@sget#3bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or flow%
+ }%
+ }%
+ {}%
+ \csname @sget#3bounds\endcsname{#4}%
+ \advance\ffareay by \ffareaheight\relax
+ \expandafter\ifdim\@ff@check>\ffareay
+ \FLFabovetrue
+ \else
+ \FLFabovefalse
+ \fi
}
% \end{macrocode}
% The unstarred version
% \begin{macrocode}
\newcommand*{\@oddcheckifframeabove}[4]{%
-\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#1bounds\endcsname{#2}%
-\edef\@ff@check{\the\ffareay}%
-\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#3bounds\endcsname{#4}%
-\advance\ffareay by \ffareaheight\relax
-\expandafter\ifdim\@ff@check>\ffareay
- \FLFabovetrue
-\else
- \FLFabovefalse
-\fi
+ \@ifundefined{@get#1bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#1bounds\endcsname{#2}%
+ \edef\@ff@check{\the\ffareay}%
+ \@ifundefined{@get#3bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#3bounds\endcsname{#4}%
+ \advance\ffareay by \ffareaheight\relax
+ \expandafter\ifdim\@ff@check>\ffareay
+ \FLFabovetrue
+ \else
+ \FLFabovefalse
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -3035,25 +4316,28 @@ flow}}{}%
% spans the page break.
% \begin{macrocode}
\newcommand*{\checkifframebelow}{%
-\@ifstar\@scheckifframebelow\@checkifframebelow}
+ \@ifstar\@scheckifframebelow\@checkifframebelow
+}
% \end{macrocode}
% Starred version:
% \begin{macrocode}
\newcommand*{\@scheckifframebelow}[4]{%
-\ifodd\c@page
- \@soddcheckifframebelow{#1}{#2}{#3}{#4}%
-\else
- \@sevencheckifframebelow{#1}{#2}{#3}{#4}%
-\fi}
+ \ifodd\c@page
+ \@soddcheckifframebelow{#1}{#2}{#3}{#4}%
+ \else
+ \@sevencheckifframebelow{#1}{#2}{#3}{#4}%
+ \fi
+}
% \end{macrocode}
% Unstarred version:
% \begin{macrocode}
\newcommand*{\@checkifframebelow}[4]{%
-\ifodd\c@page
- \@oddcheckifframebelow{#1}{#2}{#3}{#4}%
-\else
- \@evencheckifframebelow{#1}{#2}{#3}{#4}%
-\fi}
+ \ifodd\c@page
+ \@oddcheckifframebelow{#1}{#2}{#3}{#4}%
+ \else
+ \@evencheckifframebelow{#1}{#2}{#3}{#4}%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%
@@ -3069,46 +4353,75 @@ flow}}{}%
% second frame if they overlap.
% \begin{macrocode}
\newcommand*{\oddcheckifframebelow}{%
-\@ifstar\@soddcheckifframebelow\@oddcheckifframebelow}
+ \@ifstar\@soddcheckifframebelow\@oddcheckifframebelow
+}
% \end{macrocode}
% The starred version
% \begin{macrocode}
\newcommand*{\@soddcheckifframebelow}[4]{%
-\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#1bounds\endcsname{#2}%
-\advance\ffareay by \ffareaheight\relax
-\edef\@ff@check{\the\ffareay}%
-\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#3bounds\endcsname{#4}%
-\expandafter\ifdim\@ff@check<\ffareay
- \FLFbelowtrue
-\else
- \FLFbelowfalse
-\fi
+ \@ifundefined{@sget#1bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#1bounds\endcsname{#2}%
+ \advance\ffareay by \ffareaheight\relax
+ \edef\@ff@check{\the\ffareay}%
+ \@ifundefined{@sget#3bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#3bounds\endcsname{#4}%
+ \expandafter\ifdim\@ff@check<\ffareay
+ \FLFbelowtrue
+ \else
+ \FLFbelowfalse
+ \fi
}
% \end{macrocode}
% The unstarred version
% \begin{macrocode}
\newcommand*{\@oddcheckifframebelow}[4]{%
-\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#1bounds\endcsname{#2}%
-\advance\ffareay by \ffareaheight\relax
-\edef\@ff@check{\the\ffareay}%
-\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#3bounds\endcsname{#4}%
-\expandafter\ifdim\@ff@check<\ffareay
- \FLFbelowtrue
-\else
- \FLFbelowfalse
-\fi
+ \@ifundefined{@get#1bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#1bounds\endcsname{#2}%
+ \advance\ffareay by \ffareaheight\relax
+ \edef\@ff@check{\the\ffareay}%
+ \@ifundefined{@get#3bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#3bounds\endcsname{#4}%
+ \expandafter\ifdim\@ff@check<\ffareay
+ \FLFbelowtrue
+ \else
+ \FLFbelowfalse
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -3128,25 +4441,28 @@ flow}}{}%
% spans the page break.
% \begin{macrocode}
\newcommand*{\checkifframeleft}{%
-\@ifstar\@scheckifframeleft\@checkifframeleft}
+ \@ifstar\@scheckifframeleft\@checkifframeleft
+}
% \end{macrocode}
% Starred version:
% \begin{macrocode}
\newcommand*{\@scheckifframeleft}[4]{%
-\ifodd\c@page
- \@soddcheckifframeleft{#1}{#2}{#3}{#4}%
-\else
- \@sevencheckifframeleft{#1}{#2}{#3}{#4}%
-\fi}
+ \ifodd\c@page
+ \@soddcheckifframeleft{#1}{#2}{#3}{#4}%
+ \else
+ \@sevencheckifframeleft{#1}{#2}{#3}{#4}%
+ \fi
+}
% \end{macrocode}
% Unstarred version:
% \begin{macrocode}
\newcommand*{\@checkifframeleft}[4]{%
-\ifodd\c@page
- \@oddcheckifframeleft{#1}{#2}{#3}{#4}%
-\else
- \@evencheckifframeleft{#1}{#2}{#3}{#4}%
-\fi}
+ \ifodd\c@page
+ \@oddcheckifframeleft{#1}{#2}{#3}{#4}%
+ \else
+ \@evencheckifframeleft{#1}{#2}{#3}{#4}%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%
@@ -3162,46 +4478,75 @@ flow}}{}%
% left of the second frame if they overlap.
% \begin{macrocode}
\newcommand*{\oddcheckifframeleft}{%
-\@ifstar\@soddcheckifframeleft\@oddcheckifframeleft}
+ \@ifstar\@soddcheckifframeleft\@oddcheckifframeleft
+}
% \end{macrocode}
% The starred version
% \begin{macrocode}
\newcommand*{\@soddcheckifframeleft}[4]{%
-\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#1bounds\endcsname{#2}%
-\advance\ffareax by \ffareawidth\relax
-\edef\@ff@check{\the\ffareax}%
-\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#3bounds\endcsname{#4}%
-\expandafter\ifdim\@ff@check<\ffareax
- \FLFlefttrue
-\else
- \FLFleftfalse
-\fi
+ \@ifundefined{@sget#1bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#1bounds\endcsname{#2}%
+ \advance\ffareax by \ffareawidth\relax
+ \edef\@ff@check{\the\ffareax}%
+ \@ifundefined{@sget#3bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#3bounds\endcsname{#4}%
+ \expandafter\ifdim\@ff@check<\ffareax
+ \FLFlefttrue
+ \else
+ \FLFleftfalse
+ \fi
}
% \end{macrocode}
% The unstarred version
% \begin{macrocode}
\newcommand*{\@oddcheckifframeleft}[4]{%
-\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#1bounds\endcsname{#2}%
-\advance\ffareax by \ffareawidth\relax
-\edef\@ff@check{\the\ffareax}%
-\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#3bounds\endcsname{#4}%
-\expandafter\ifdim\@ff@check<\ffareax
- \FLFlefttrue
-\else
- \FLFleftfalse
-\fi
+ \@ifundefined{@get#1bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#1bounds\endcsname{#2}%
+ \advance\ffareax by \ffareawidth\relax
+ \edef\@ff@check{\the\ffareax}%
+ \@ifundefined{@get#3bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#3bounds\endcsname{#4}%
+ \expandafter\ifdim\@ff@check<\ffareax
+ \FLFlefttrue
+ \else
+ \FLFleftfalse
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -3221,25 +4566,28 @@ flow}}{}%
% spans the page break.
% \begin{macrocode}
\newcommand*{\checkifframeright}{%
-\@ifstar\@scheckifframeright\@checkifframeright}
+ \@ifstar\@scheckifframeright\@checkifframeright
+}
% \end{macrocode}
% Starred version:
% \begin{macrocode}
\newcommand*{\@scheckifframeright}[4]{%
-\ifodd\c@page
- \@soddcheckifframeright{#1}{#2}{#3}{#4}%
-\else
- \@sevencheckifframeright{#1}{#2}{#3}{#4}%
-\fi}
+ \ifodd\c@page
+ \@soddcheckifframeright{#1}{#2}{#3}{#4}%
+ \else
+ \@sevencheckifframeright{#1}{#2}{#3}{#4}%
+ \fi
+}
% \end{macrocode}
% Unstarred version:
% \begin{macrocode}
\newcommand*{\@checkifframeright}[4]{%
-\ifodd\c@page
- \@oddcheckifframeright{#1}{#2}{#3}{#4}%
-\else
- \@evencheckifframeright{#1}{#2}{#3}{#4}%
-\fi}
+ \ifodd\c@page
+ \@oddcheckifframeright{#1}{#2}{#3}{#4}%
+ \else
+ \@evencheckifframeright{#1}{#2}{#3}{#4}%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%
@@ -3255,46 +4603,75 @@ flow}}{}%
% right of the second frame if they overlap.
% \begin{macrocode}
\newcommand*{\oddcheckifframeright}{%
-\@ifstar\@soddcheckifframeright\@oddcheckifframeright}
+ \@ifstar\@soddcheckifframeright\@oddcheckifframeright
+}
% \end{macrocode}
% The starred version
% \begin{macrocode}
\newcommand*{\@soddcheckifframeright}[4]{%
-\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#1bounds\endcsname{#2}%
-\edef\@ff@check{\the\ffareax}%
-\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#3bounds\endcsname{#4}%
-\advance\ffareax by \ffareawidth\relax
-\expandafter\ifdim\@ff@check>\ffareax
- \FLFrighttrue
-\else
- \FLFrightfalse
-\fi
+ \@ifundefined{@sget#1bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#1bounds\endcsname{#2}%
+ \edef\@ff@check{\the\ffareax}%
+ \@ifundefined{@sget#3bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#3bounds\endcsname{#4}%
+ \advance\ffareax by \ffareawidth\relax
+ \expandafter\ifdim\@ff@check>\ffareax
+ \FLFrighttrue
+ \else
+ \FLFrightfalse
+ \fi
}
% \end{macrocode}
% The unstarred version
% \begin{macrocode}
\newcommand*{\@oddcheckifframeright}[4]{%
-\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#1bounds\endcsname{#2}%
-\edef\@ff@check{\the\ffareax}%
-\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#3bounds\endcsname{#4}%
-\advance\ffareax by \ffareawidth\relax
-\expandafter\ifdim\@ff@check>\ffareax
- \FLFrighttrue
-\else
- \FLFrightfalse
-\fi
+ \@ifundefined{@get#1bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#1bounds\endcsname{#2}%
+ \edef\@ff@check{\the\ffareax}%
+ \@ifundefined{@get#3bounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#3bounds\endcsname{#4}%
+ \advance\ffareax by \ffareawidth\relax
+ \expandafter\ifdim\@ff@check>\ffareax
+ \FLFrighttrue
+ \else
+ \FLFrightfalse
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -3311,46 +4688,75 @@ flow}}{}%
% second frame if they overlap.
% \begin{macrocode}
\newcommand*{\evencheckifframeabove}{%
-\@ifstar\@sevencheckifframeabove\@evencheckifframeabove}
+ \@ifstar\@sevencheckifframeabove\@evencheckifframeabove
+}
% \end{macrocode}
% The starred version
% \begin{macrocode}
\newcommand*{\@sevencheckifframeabove}[4]{%
-\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#1evenbounds\endcsname{#2}%
-\edef\@ff@check{\the\ffareay}%
-\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#3evenbounds\endcsname{#4}%
-\advance\ffareay by \ffareaheight\relax
-\expandafter\ifdim\@ff@check>\ffareay
- \FLFabovetrue
-\else
- \FLFabovefalse
-\fi
+ \@ifundefined{@sget#1evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#1evenbounds\endcsname{#2}%
+ \edef\@ff@check{\the\ffareay}%
+ \@ifundefined{@sget#3evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#3evenbounds\endcsname{#4}%
+ \advance\ffareay by \ffareaheight\relax
+ \expandafter\ifdim\@ff@check>\ffareay
+ \FLFabovetrue
+ \else
+ \FLFabovefalse
+ \fi
}
% \end{macrocode}
% The unstarred version
% \begin{macrocode}
\newcommand*{\@evencheckifframeabove}[4]{%
-\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#1evenbounds\endcsname{#2}%
-\edef\@ff@check{\the\ffareay}%
-\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#3evenbounds\endcsname{#4}%
-\advance\ffareay by \ffareaheight\relax
-\expandafter\ifdim\@ff@check>\ffareay
- \FLFabovetrue
-\else
- \FLFabovefalse
-\fi
+ \@ifundefined{@get#1evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#1evenbounds\endcsname{#2}%
+ \edef\@ff@check{\the\ffareay}%
+ \@ifundefined{@get#3evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#3evenbounds\endcsname{#4}%
+ \advance\ffareay by \ffareaheight\relax
+ \expandafter\ifdim\@ff@check>\ffareay
+ \FLFabovetrue
+ \else
+ \FLFabovefalse
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -3366,46 +4772,74 @@ flow}}{}%
% second frame if they overlap.
% \begin{macrocode}
\newcommand*{\evencheckifframebelow}{%
-\@ifstar\@sevencheckifframebelow\@evencheckifframebelow}
+ \@ifstar\@sevencheckifframebelow\@evencheckifframebelow
+}
% \end{macrocode}
% The starred version
% \begin{macrocode}
\newcommand*{\@sevencheckifframebelow}[4]{%
-\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#1evenbounds\endcsname{#2}%
-\advance\ffareay by \ffareaheight\relax
-\edef\@ff@check{\the\ffareay}%
-\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#3evenbounds\endcsname{#4}%
-\expandafter\ifdim\@ff@check<\ffareay
- \FLFbelowtrue
-\else
- \FLFbelowfalse
-\fi
+ \@ifundefined{@sget#1evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#1evenbounds\endcsname{#2}%
+ \advance\ffareay by \ffareaheight\relax
+ \edef\@ff@check{\the\ffareay}%
+ \@ifundefined{@sget#3evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#3evenbounds\endcsname{#4}%
+ \expandafter\ifdim\@ff@check<\ffareay
+ \FLFbelowtrue
+ \else
+ \FLFbelowfalse
+ \fi
}
% \end{macrocode}
% The unstarred version
% \begin{macrocode}
\newcommand*{\@evencheckifframebelow}[4]{%
-\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#1evenbounds\endcsname{#2}%
-\advance\ffareay by \ffareaheight\relax
-\edef\@ff@check{\the\ffareay}%
-\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#3evenbounds\endcsname{#4}%
-\expandafter\ifdim\@ff@check<\ffareay
- \FLFbelowtrue
-\else
- \FLFbelowfalse
-\fi
+ \@ifundefined{@get#1evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }{}%
+ \csname @get#1evenbounds\endcsname{#2}%
+ \advance\ffareay by \ffareaheight\relax
+ \edef\@ff@check{\the\ffareay}%
+ \@ifundefined{@get#3evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#3evenbounds\endcsname{#4}%
+ \expandafter\ifdim\@ff@check<\ffareay
+ \FLFbelowtrue
+ \else
+ \FLFbelowfalse
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -3421,46 +4855,75 @@ flow}}{}%
% left of the second frame if they overlap.
% \begin{macrocode}
\newcommand*{\evencheckifframeleft}{%
-\@ifstar\@sevencheckifframeleft\@evencheckifframeleft}
+ \@ifstar\@sevencheckifframeleft\@evencheckifframeleft
+}
% \end{macrocode}
% The starred version
% \begin{macrocode}
\newcommand*{\@sevencheckifframeleft}[4]{%
-\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#1evenbounds\endcsname{#2}%
-\advance\ffareax by \ffareawidth\relax
-\edef\@ff@check{\the\ffareax}%
-\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#3evenbounds\endcsname{#4}%
-\expandafter\ifdim\@ff@check<\ffareax
- \FLFlefttrue
-\else
- \FLFleftfalse
-\fi
+ \@ifundefined{@sget#1evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#1evenbounds\endcsname{#2}%
+ \advance\ffareax by \ffareawidth\relax
+ \edef\@ff@check{\the\ffareax}%
+ \@ifundefined{@sget#3evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#3evenbounds\endcsname{#4}%
+ \expandafter\ifdim\@ff@check<\ffareax
+ \FLFlefttrue
+ \else
+ \FLFleftfalse
+ \fi
}
% \end{macrocode}
% The unstarred version
% \begin{macrocode}
\newcommand*{\@evencheckifframeleft}[4]{%
-\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#1evenbounds\endcsname{#2}%
-\advance\ffareax by \ffareawidth\relax
-\edef\@ff@check{\the\ffareax}%
-\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#3evenbounds\endcsname{#4}%
-\expandafter\ifdim\@ff@check<\ffareax
- \FLFlefttrue
-\else
- \FLFleftfalse
-\fi
+ \@ifundefined{@get#1evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#1evenbounds\endcsname{#2}%
+ \advance\ffareax by \ffareawidth\relax
+ \edef\@ff@check{\the\ffareax}%
+ \@ifundefined{@get#3evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#3evenbounds\endcsname{#4}%
+ \expandafter\ifdim\@ff@check<\ffareax
+ \FLFlefttrue
+ \else
+ \FLFleftfalse
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -3476,46 +4939,75 @@ flow}}{}%
% right of the second frame if they overlap.
% \begin{macrocode}
\newcommand*{\evencheckifframeright}{%
-\@ifstar\@sevencheckifframeright\@evencheckifframeright}
+ \@ifstar\@sevencheckifframeright\@evencheckifframeright
+}
% \end{macrocode}
% The starred version
% \begin{macrocode}
\newcommand*{\@sevencheckifframeright}[4]{%
-\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#1evenbounds\endcsname{#2}%
-\edef\@ff@check{\the\ffareax}%
-\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @sget#3evenbounds\endcsname{#4}%
-\advance\ffareax by \ffareawidth\relax
-\expandafter\ifdim\@ff@check>\ffareax
- \FLFrighttrue
-\else
- \FLFrightfalse
-\fi
+ \@ifundefined{@sget#1evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#1evenbounds\endcsname{#2}%
+ \edef\@ff@check{\the\ffareax}%
+ \@ifundefined{@sget#3evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @sget#3evenbounds\endcsname{#4}%
+ \advance\ffareax by \ffareawidth\relax
+ \expandafter\ifdim\@ff@check>\ffareax
+ \FLFrighttrue
+ \else
+ \FLFrightfalse
+ \fi
}
% \end{macrocode}
% The unstarred version
% \begin{macrocode}
\newcommand*{\@evencheckifframeright}[4]{%
-\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#1'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#1evenbounds\endcsname{#2}%
-\edef\@ff@check{\the\ffareax}%
-\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame
-type `#3'}{Frame types may only be one of: static, dynamic or
-flow}}{}%
-\csname @get#3evenbounds\endcsname{#4}%
-\advance\ffareax by \ffareawidth\relax
-\expandafter\ifdim\@ff@check>\ffareax
- \FLFrighttrue
-\else
- \FLFrightfalse
-\fi
+ \@ifundefined{@get#1evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#1'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#1evenbounds\endcsname{#2}%
+ \edef\@ff@check{\the\ffareax}%
+ \@ifundefined{@get#3evenbounds}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type `#3'}%
+ {%
+ Frame types may only be one of: static, dynamic or
+ flow%
+ }%
+ }%
+ {}%
+ \csname @get#3evenbounds\endcsname{#4}%
+ \advance\ffareax by \ffareawidth\relax
+ \expandafter\ifdim\@ff@check>\ffareax
+ \FLFrighttrue
+ \else
+ \FLFrightfalse
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -3586,90 +5078,91 @@ flow}}{}%
% version and to the \gls{idl} for the starred version.
% \begin{macrocode}
\DeclareRobustCommand*{\relativeframelocation}{%
-\@ifstar\@srelativeframelocation\@relativeframelocation}
+ \@ifstar\@srelativeframelocation\@relativeframelocation
+}
% \end{macrocode}
% Starred version:
% \begin{macrocode}
\newcommand*{\@srelativeframelocation}[4]{%
-\@scheckifframeabove{#1}{#2}{#3}{#4}%
-\@scheckifframebelow{#1}{#2}{#3}{#4}%
-\@scheckifframeleft{#1}{#2}{#3}{#4}%
-\@scheckifframeright{#1}{#2}{#3}{#4}%
-\ifFLFabove
- \ifFLFleft
- \FFaboveleft
- \else
- \ifFLFright
- \FFaboveright
- \else
- \FFabove
- \fi
- \fi
-\else
- \ifFLFbelow
+ \@scheckifframeabove{#1}{#2}{#3}{#4}%
+ \@scheckifframebelow{#1}{#2}{#3}{#4}%
+ \@scheckifframeleft{#1}{#2}{#3}{#4}%
+ \@scheckifframeright{#1}{#2}{#3}{#4}%
+ \ifFLFabove
\ifFLFleft
- \FFbelowleft
+ \FFaboveleft
\else
\ifFLFright
- \FFbelowright
+ \FFaboveright
\else
- \FFbelow
+ \FFabove
\fi
\fi
\else
- \ifFLFleft
- \FFleft
+ \ifFLFbelow
+ \ifFLFleft
+ \FFbelowleft
+ \else
+ \ifFLFright
+ \FFbelowright
+ \else
+ \FFbelow
+ \fi
+ \fi
\else
- \ifFLFright
- \FFright
+ \ifFLFleft
+ \FFleft
\else
- \FFoverlap
- \fi
- \fi
+ \ifFLFright
+ \FFright
+ \else
+ \FFoverlap
+ \fi
+ \fi
+ \fi
\fi
-\fi
}
% \end{macrocode}
% Unstarred version:
% \begin{macrocode}
\newcommand*{\@relativeframelocation}[4]{%
-\@checkifframeabove{#1}{#2}{#3}{#4}%
-\@checkifframebelow{#1}{#2}{#3}{#4}%
-\@checkifframeleft{#1}{#2}{#3}{#4}%
-\@checkifframeright{#1}{#2}{#3}{#4}%
-\ifFLFabove
- \ifFLFleft
- \FFaboveleft
- \else
- \ifFLFright
- \FFaboveright
- \else
- \FFabove
- \fi
- \fi
-\else
- \ifFLFbelow
+ \@checkifframeabove{#1}{#2}{#3}{#4}%
+ \@checkifframebelow{#1}{#2}{#3}{#4}%
+ \@checkifframeleft{#1}{#2}{#3}{#4}%
+ \@checkifframeright{#1}{#2}{#3}{#4}%
+ \ifFLFabove
\ifFLFleft
- \FFbelowleft
+ \FFaboveleft
\else
\ifFLFright
- \FFbelowright
+ \FFaboveright
\else
- \FFbelow
+ \FFabove
\fi
\fi
\else
- \ifFLFleft
- \FFleft
+ \ifFLFbelow
+ \ifFLFleft
+ \FFbelowleft
+ \else
+ \ifFLFright
+ \FFbelowright
+ \else
+ \FFbelow
+ \fi
+ \fi
\else
- \ifFLFright
- \FFright
+ \ifFLFleft
+ \FFleft
\else
- \FFoverlap
- \fi
- \fi
+ \ifFLFright
+ \FFright
+ \else
+ \FFoverlap
+ \fi
+ \fi
+ \fi
\fi
-\fi
}
% \end{macrocode}
%\end{macro}
@@ -3677,58 +5170,70 @@ flow}}{}%
% Short cut commands for \glspl{frame} of the same type.
%\begin{macro}{\reldynamicloc}
%\changes{1.11}{2008/06/27}{new}
+%\changes{1.14}{2012-11-10}{removed unwanted spaces}
%\cs{reldynamicloc}\marg{id1}\marg{id2}
% \begin{macrocode}
\DeclareRobustCommand*{\reldynamicloc}{%
-\@ifstar\@sreldynamicloc\@reldynamicloc}
+ \@ifstar\@sreldynamicloc\@reldynamicloc
+}
% \end{macrocode}
% Starred version:
% \begin{macrocode}
-\newcommand*{\@sreldynamicloc}[2]{
-\@srelativeframelocation{dynamic}{#1}{dynamic}{#2}}
+\newcommand*{\@sreldynamicloc}[2]{%
+ \@srelativeframelocation{dynamic}{#1}{dynamic}{#2}%
+}
% \end{macrocode}
% Unstarred version:
% \begin{macrocode}
-\newcommand*{\@reldynamicloc}[2]{
-\@relativeframelocation{dynamic}{#1}{dynamic}{#2}}
+\newcommand*{\@reldynamicloc}[2]{%
+ \@relativeframelocation{dynamic}{#1}{dynamic}{#2}%
+}
% \end{macrocode}
%\end{macro}
%
%\begin{macro}{\relstaticloc}
%\changes{1.11}{2008/06/27}{new}
+%\changes{1.14}{2012-11-10}{removed unwanted spaces}
%\cs{relstaticloc}\marg{id1}\marg{id2}
% \begin{macrocode}
\DeclareRobustCommand*{\relstaticloc}{%
-\@ifstar\@srelstaticloc\@relstaticloc}
+ \@ifstar\@srelstaticloc\@relstaticloc
+}
% \end{macrocode}
% Starred version:
% \begin{macrocode}
-\newcommand*{\@srelstaticloc}[2]{
-\@srelativeframelocation{static}{#1}{static}{#2}}
+\newcommand*{\@srelstaticloc}[2]{%
+ \@srelativeframelocation{static}{#1}{static}{#2}%
+}
% \end{macrocode}
% Unstarred version:
% \begin{macrocode}
-\newcommand*{\@relstaticloc}[2]{
-\@relativeframelocation{static}{#1}{static}{#2}}
+\newcommand*{\@relstaticloc}[2]{%
+ \@relativeframelocation{static}{#1}{static}{#2}%
+}
% \end{macrocode}
%\end{macro}
%
%\begin{macro}{\relflowloc}
%\changes{1.11}{2008/06/27}{new}
+%\changes{1.14}{2012-11-10}{removed unwanted spaces}
%\cs{relflowloc}\marg{id1}\marg{id2}
% \begin{macrocode}
\DeclareRobustCommand*{\relflowloc}{%
-\@ifstar\@srelflowloc\@relflowloc}
+ \@ifstar\@srelflowloc\@relflowloc
+}
% \end{macrocode}
% Starred version:
% \begin{macrocode}
-\newcommand*{\@srelflowloc}[2]{
-\@srelativeframelocation{flow}{#1}{flow}{#2}}
+\newcommand*{\@srelflowloc}[2]{%
+ \@srelativeframelocation{flow}{#1}{flow}{#2}%
+}
% \end{macrocode}
% Unstarred version:
% \begin{macrocode}
-\newcommand*{\@relflowloc}[2]{
-\@relativeframelocation{flow}{#1}{flow}{#2}}
+\newcommand*{\@relflowloc}[2]{%
+ \@relativeframelocation{flow}{#1}{flow}{#2}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -3739,10 +5244,14 @@ flow}}{}%
% Having another \gls{flow} as the initial frame is not
% a good idea, and may have unexpected results.
% \begin{macrocode}
-\newcommand*{\setinitialframe}[1]{\c@thisframe=#1%
-\global\usedframebreaktrue
-\global\setlength{\hsize}{%
-\csname colwidth\romannumeral\c@thisframe\endcsname}}
+\newcommand*{\setinitialframe}[1]{%
+ \c@thisframe=#1%
+ \global\usedframebreaktrue
+ \global\setlength{\hsize}
+ {%
+ \csname colwidth\romannumeral\c@thisframe\endcsname
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\setframes}
@@ -3751,79 +5260,86 @@ flow}}{}%
\newif\if@setfr@mes
\@setfr@mesfalse
\newcommand*{\setframes}{%
-\ifnum\c@thisframe=0\relax
-\PackageWarning{flowfram}{Can't find a flow frame on page 1.
-\MessageBreak
-Attempting to find the first page with a flow frame}%
-\@nxtcol=1\relax
-\c@curpg=1\relax
-\@g@tnextcol{\@nxtcol}%
-% \end{macrocode}
-% shipout pages without flow frames
-% \begin{macrocode}
-\advance\c@curpg by -1\relax
- \whiledo{\c@curpg>0}{\advance\c@curpg by -1\relax
- \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}%
-\@outputpage}%
-\c@thisframe=\@nxtcol
-\fi
-\@setcol{\c@thisframe}\relax
-\@setfr@mestrue
-\edef\ff@txtcol{%
-\csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}%
-\@s@tfftextcol
+ \ifnum\c@thisframe=0\relax
+ \PackageWarning{flowfram}%
+ {Can't find a flow frame on page 1.
+ \MessageBreak
+ Attempting to find the first page with a flow frame%
+ }%
+ \@nxtcol=1\relax
+ \c@curpg=1\relax
+ \@g@tnextcol{\@nxtcol}%
+% \end{macrocode}
+% Shipout pages without flow frames.
+% \begin{macrocode}
+ \advance\c@curpg by -1\relax
+ \whiledo{\c@curpg>0}%
+ {%
+ \advance\c@curpg by -1\relax
+ \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}%
+ \@outputpage
+ }%
+ \c@thisframe=\@nxtcol
+ \fi
+ \@setcol{\c@thisframe}\relax
+ \@setfr@mestrue
+ \edef\ff@txtcol{%
+ \csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}%
+ \@s@tfftextcol
}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\emulatetwocolumn}
% Emulate original "\twocolumn" declaration.
-% This is provided for backward compatibilty, and
+% This is provided for backward compatibility, and
% may be removed in later versions.
% \begin{macrocode}
\newcommand{\emulatetwocolumn}[1][]{%
-\finishthispage
-\setallflowframes{pages=none}%
-\settoheight{\@ff@staticH}{#1}%
-\settodepth{\@ff@tmp@y}{#1}%
-\addtolength{\@ff@staticH}{\@ff@tmp@y}%
-\ifdim\@ff@staticH>0pt\relax
-\twocolumnStop[\c@page]{\@ff@staticH}%
-\c@thisframe=\c@maxflow
-\advance\c@thisframe by -1\relax
-\@twocolumn[>\c@page]%
-\setstaticcontents{\c@maxstatic}{#1}%
-\else
-\@twocolumn
-\c@thisframe=\c@maxflow
-\advance\c@thisframe by -1\relax
-\fi
-\@setcol{\c@thisframe}\relax
+ \finishthispage
+ \setallflowframes{pages=none}%
+ \settoheight{\@ff@staticH}{#1}%
+ \settodepth{\@ff@tmp@y}{#1}%
+ \addtolength{\@ff@staticH}{\@ff@tmp@y}%
+ \ifdim\@ff@staticH>0pt\relax
+ \twocolumnStop[\@ff@pages@countreg]{\@ff@staticH}%
+ \c@thisframe=\c@maxflow
+ \advance\c@thisframe by -1\relax
+ \@twocolumn[>\@ff@pages@countreg]%
+ \setstaticcontents{\c@maxstatic}{#1}%
+ \else
+ \@twocolumn
+ \c@thisframe=\c@maxflow
+ \advance\c@thisframe by -1\relax
+ \fi
+ \@setcol{\c@thisframe}%
+ \relax
}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\emulateonecolumn}
% Emulate original "\onecolumn" declaration.
-% This is provided for backward compatibilty, and
+% This is provided for backward compatibility, and
% may be removed in later versions.
% \begin{macrocode}
\newcommand{\emulateonecolumn}[1][]{%
-\finishthispage
-\setallflowframes{pages=none}%
-\settoheight{\@ff@staticH}{#1}%
-\settodepth{\@ff@tmp@y}{#1}%
-\addtolength{\@ff@staticH}{\@ff@tmp@y}%
-\ifdim\@ff@staticH>0pt\relax
-\onecolumnStop[\c@page]{\@ff@staticH}%
-\c@thisframe=\c@maxflow
-\advance\c@thisframe by -1\relax
-\@onecolumn[>\c@page]%
-\setstaticcontents{\c@maxstatic}{#1}%
-\else
-\@twocolumn
-\c@thisframe=\c@maxflow
-\advance\c@thisframe by -1\relax
-\fi
-\@setcol{\c@thisframe}\relax
+ \finishthispage
+ \setallflowframes{pages=none}%
+ \settoheight{\@ff@staticH}{#1}%
+ \settodepth{\@ff@tmp@y}{#1}%
+ \addtolength{\@ff@staticH}{\@ff@tmp@y}%
+ \ifdim\@ff@staticH>0pt\relax
+ \onecolumnStop[\@ff@pages@countreg]{\@ff@staticH}%
+ \c@thisframe=\c@maxflow
+ \advance\c@thisframe by -1\relax
+ \@onecolumn[>\@ff@pages@countreg]%
+ \setstaticcontents{\c@maxstatic}{#1}%
+ \else
+ \@twocolumn
+ \c@thisframe=\c@maxflow
+ \advance\c@thisframe by -1\relax
+ \fi
+ \@setcol{\c@thisframe}%
+ \relax
}
% \end{macrocode}
%\end{macro}
@@ -3831,85 +5347,120 @@ Attempting to find the first page with a flow frame}%
% the size of the \gls{typeblock}, and initialise the frames.
% \begin{macrocode}
\AtBeginDocument{%
-\ifnum\c@maxflow=0\relax
-\PackageWarning{flowfram}{No flow frames, adding one}%
-\@onecolumn
-\fi
-\setframes
-\renewcommand{\onecolumn}[1][]{\PackageWarning{flowfram}{%
-Ignoring \string\onecolumn\space found in document environment.
-Frames must be defined in the preamble}#1}%
-\renewcommand{\twocolumn}[1][]{\PackageWarning{flowfram}{%
-Ignoring \string\twocolumn\space found in document environment.
-Frames must be defined in the preamble}#1}%
+ \c@absolutepage=1\relax
+ \ifnum\c@maxflow=0\relax
+ \PackageWarning{flowfram}{No flow frames, adding one}%
+ \@onecolumn
+ \fi
+ \setframes
+ \renewcommand{\onecolumn}[1][]{%
+ \PackageWarning{flowfram}%
+ {%
+ Ignoring \string\onecolumn\space found in document environment.
+ Frames must be defined in the preamble%
+ }%
+ #1%
+ }%
+ \renewcommand{\twocolumn}[1][]{%
+ \PackageWarning{flowfram}%
+ {%
+ Ignoring \string\twocolumn\space found in document environment.
+ Frames must be defined in the preamble}%
+ #1%
+ }%
}
% \end{macrocode}
-% If the document finishes before the last frame on the last
-% page, need to finish off to ensure the final page is
-% shipped out, otherwise the text on the last page will be lost.
-% \begin{macrocode}
-%\AtEndDocument{\finishthispage}
-% \end{macrocode}
+%
%\subsection{Output Routine}
+%
+%\begin{macro}{\fftolerance}
+% The \styfmt{flowfram} package does a check to see if text has
+% flowed between frames of different widths, which will cause a
+% discrepancy in the line widths of the paragraph spanning the break.
+% Before version~1.14, the output routine just checked if the widths
+% were different, but this means that warning messages will be
+% generated even if there's only a tiny difference that can be
+% caused by rounding errors (for example, if the frames were created
+% using jpgfdraw). So add a tolerance and only complain if the
+% difference exceeds this value.
+%\changes{1.14}{2012-11-10}{new}
+% \begin{macrocode}
+\newlength\fftolerance
+\setlength\fftolerance{2pt}
+% \end{macrocode}
+%\end{macro}
+%
%\begin{macro}{\@setcol}
% Set up the output box so it has the correct dimensions for
% specified \gls{flow}. This is used by the output routine.
%\changes{1.11}{2008/06/27}{added displayedframe increment}
+%\changes{1.14}{2012-11-10}{changed check to use tolerance rather
+%than testing if hsize and columnwidth are equal}
% \begin{macrocode}
\newcommand{\@setcol}[1]{%
-\ifnum\c@maxflow<#1\relax
- \PackageError{flowfram}{Can't set frame '\number#1', doesn't
- exist}{}%
-\else
- \expandafter\global\expandafter\columnwidth
- \csname colwidth\romannumeral#1\endcsname
- \ifdim\hsize=\columnwidth
+ \ifnum\c@maxflow<#1\relax
+ \PackageError{flowfram}%
+ {Can't set frame '\number#1', doesn't exist}{}%
\else
- \ifusedframebreak
- \else
- \PackageWarning{flowfram}{Moving to flow frame of unequal
- width,\MessageBreak use of \string\framebreak\space advised,
- or text might not appear correctly}%
+ \flf@message{Switching to flow frame \number#1\space on page
+ \number\@ff@pages@countreg}%
+ \expandafter\global\expandafter\columnwidth
+ \csname colwidth\romannumeral#1\endcsname
+ \dimen@\columnwidth
+ \advance\dimen@ by -\hsize\relax
+ \ifdim\dimen@<0pt\relax
+ \dimen@=-\dimen@
\fi
+ \ifdim\dimen@>\fftolerance
+ \ifusedframebreak
+ \else
+ \PackageWarning{flowfram}%
+ {Moving to flow frame of unequal
+ width,\MessageBreak use of \string\framebreak\space advised,
+ or text might not appear correctly (difference =
+ \the\dimen@, tolerance = \the\fftolerance)}%
+ \fi
+ \fi
+ \global\usedframebreakfalse
+ \global\hsize\columnwidth
+ \expandafter\global
+ \expandafter\vsize\csname colheight\romannumeral#1\endcsname
+ \global\@colht\vsize
+ \global\@colroom\@colht
+ \global\linewidth\columnwidth
+ \setmargin
\fi
- \global\usedframebreakfalse
- \global\hsize\columnwidth
- \expandafter\global
- \expandafter\vsize\csname colheight\romannumeral#1\endcsname
- \global\@colht\vsize
- \global\@colroom\@colht
- \global\linewidth\columnwidth
- \setmargin
-\fi
-\stepcounter{displayedframe}%
+ \stepcounter{displayedframe}%
}
% \end{macrocode}
%\end{macro}
% Modify the output routine so that it uses "\vsize"
% instead of "\textheight".
% \begin{macrocode}
-\output={\let\par\@@par
-\ifnum\outputpenalty <-\@M
- \@specialoutput
-\else
- \@makecol
- \@opcol \@startcolumn
- \@whilesw \if@fcolmade \fi {\@opcol \@startcolumn }%
-\fi
-\ifnum\outputpenalty>-\@Miv
- \ifdim\@colroom<1.5\baselineskip
- \ifdim\@colroom<\vsize
- \@latex@warning@no@line{Text page \thepage \space
- contains only floats}\@emptycol
+\output={%
+ \let\par\@@par
+ \ifnum\outputpenalty <-\@M
+ \@specialoutput
+ \else
+ \@makecol
+ \@opcol \@startcolumn
+ \@whilesw \if@fcolmade \fi {\@opcol \@startcolumn }%
+ \fi
+ \ifnum\outputpenalty>-\@Miv
+ \ifdim\@colroom<1.5\baselineskip
+ \ifdim\@colroom<\vsize
+ \@latex@warning@no@line{Text page \thepage \space
+ contains only floats}%
+ \@emptycol
+ \else
+ \global\vsize\@colroom
+ \fi
\else
\global\vsize\@colroom
\fi
\else
- \global\vsize\@colroom
+ \global\vsize\maxdimen
\fi
-\else
- \global\vsize\maxdimen
-\fi
}
% \end{macrocode}
%\begin{macro}{\@doclearpage}
@@ -3917,41 +5468,48 @@ Frames must be defined in the preamble}#1}%
% with "\vsize", and only use the twocolumn stuff.
% \begin{macrocode}
\def\@doclearpage{%
-\ifvoid\footins
- \setbox\@tempboxa\vsplit\@cclv to\z@
- \unvbox\@tempboxa
- \setbox\@tempboxa\box\@cclv
- \xdef\@deferlist{\@toplist\@botlist\@deferlist}%
-\global\let\@toplist\@empty
-\global\let\@botlist\@empty
-\global\@colroom\@colht
- \ifx\@currlist\@empty
- \else
- \@latexerr{Float(s) lost}\@ehb
- \global\let\@currlist\@empty
- \fi
- \@makefcolumn
- \@deferlist
- \@whilesw \if@fcolmade \fi {\@opcol
- \@makefcolumn
- \@deferlist}%
-\if@firstcolumn
+ \ifvoid\footins
+ \setbox\@tempboxa\vsplit\@cclv to\z@
+ \unvbox\@tempboxa
+ \setbox\@tempboxa\box\@cclv
+ \xdef\@deferlist{\@toplist\@botlist\@deferlist}%
+ \global\let\@toplist\@empty
+ \global\let\@botlist\@empty
+ \global\@colroom\@colht
+ \ifx\@currlist\@empty
+ \else
+ \@latexerr{Float(s) lost}\@ehb
+ \global\let\@currlist\@empty
+ \fi
+ \@makefcolumn\@deferlist
+ \@whilesw \if@fcolmade \fi
+ {%
+ \@opcol
+ \@makefcolumn\@deferlist
+ }%
+ \if@firstcolumn
\xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}%
-\global\let\@dbltoplist\@empty
-\global\@colht\vsize
-\begingroup
- \@dblfloatplacement
- \@makefcolumn
- \@dbldeferlist
- \@whilesw \if@fcolmade \fi {\@outputpage
-\@makefcolumn\@dbldeferlist}%
-\endgroup
-\else
- \vbox{}\clearpage
-\fi
-\else
- \setbox\@cclv\vbox{\box\@cclv\vfil}%
-\@makecol\@opcol\clearpage\fi}
+ \global\let\@dbltoplist\@empty
+ \global\@colht\vsize
+ \begingroup
+ \@dblfloatplacement
+ \@makefcolumn\@dbldeferlist
+ \@whilesw \if@fcolmade \fi
+ {%
+ \@outputpage
+ \@makefcolumn\@dbldeferlist
+ }%
+ \endgroup
+ \else
+ \vbox{}%
+ \clearpage
+ \fi
+ \else
+ \setbox\@cclv\vbox{\box\@cclv\vfil}%
+ \@makecol\@opcol
+ \clearpage
+ \fi
+}
% \end{macrocode}
%\end{macro}
% Modify "\@outputpage" slightly. Add provision for
@@ -3961,21 +5519,27 @@ Frames must be defined in the preamble}#1}%
% First define macro to do the header. This will be
% modified if it is turned into a \gls{dynamic}.
% \begin{macrocode}
-\newcommand{\@dothehead}{\vbox to \headheight{%
-\color@hbox\normalcolor\hbox to \textwidth{%
-\@thehead}\color@endbox}}
+\newcommand{\@dothehead}{%
+ \vbox to \headheight
+ {%
+ \color@hbox\normalcolor\hbox to \textwidth{\@thehead}%
+ \color@endbox
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@dothefoot}
% Same again for the footer.
% \begin{macrocode}
\newcommand{\@dothefoot}{%
-\color@hbox\normalcolor\hbox to \textwidth{%
-\@thefoot}\color@endbox}
+ \color@hbox\normalcolor\hbox to \textwidth{\@thefoot}%
+ \color@endbox
+}
\newcommand{\@dodynamicthehead}{}
\newcommand{\@dodynamicthefoot}{}
% \end{macrocode}
%\end{macro}
+%
%\begin{macro}{\@outputpage}
% Now for the modified version of "\@outputpage". The
% page style stuff has been moved to "\@outputdblcol"
@@ -3983,33 +5547,43 @@ Frames must be defined in the preamble}#1}%
% before the \glspl{dynamic} are put on the page.
% \begin{macrocode}
\def\@outputpage{%
-\begingroup
- \let\protect\noexpand
- \@resetactivechars
- \global\let\@@if@newlist\if@newlist
- \global\@newlistfalse\@parboxrestore
- \shipout\vbox{\set@typeset@protect
- \aftergroup
- \endgroup
- \aftergroup
- \set@typeset@protect
- \reset@font\normalsize\normalsfcodes
- \let\label\@gobble
- \let\index\@gobble
- \let\glossary\@gobble
- \baselineskip\z@skip
- \lineskip\z@skip
- \lineskiplimit\z@
- \vskip\topmargin\moveright\@themargin
- \vbox{%
- \vskip\headheight
- \vskip\headsep
- \box\@outputbox
- }}%
- \global\let\if@newlist\@@if@newlist
- \stepcounter{page}%
- \setcounter{displayedframe}{0}%
- \let\firstmark\botmark}
+ \begingroup
+ \let\protect\noexpand
+ \@resetactivechars
+ \global\let\@@if@newlist\if@newlist
+ \global\@newlistfalse\@parboxrestore
+ \shipout\vbox
+ {%
+ \set@typeset@protect
+ \aftergroup
+ \endgroup
+ \aftergroup
+ \set@typeset@protect
+ \reset@font\normalsize\normalsfcodes
+ \let\label\@gobble
+ \let\index\@gobble
+ \let\glossary\@gobble
+ \baselineskip\z@skip
+ \lineskip\z@skip
+ \lineskiplimit\z@
+ \vskip\topmargin\moveright\@themargin
+ \vbox
+ {%
+ \vskip\headheight
+ \vskip\headsep
+ \box\@outputbox
+ }%
+ }%
+ \global\let\if@newlist\@@if@newlist
+ \stepcounter{page}%
+% \end{macrocode}
+% Also increment absolutepage counter.
+%\changes{1.14}{2012-11-10}{added absolutepage increment}
+% \begin{macrocode}
+ \stepcounter{absolutepage}%
+ \setcounter{displayedframe}{0}%
+ \let\firstmark\botmark
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\makedfheaderfooter}
@@ -4020,25 +5594,29 @@ Frames must be defined in the preamble}#1}%
% footer is given the \gls{idl} "footer".
% \begin{macrocode}
\newcommand*{\makedfheaderfooter}{%
+% \end{macrocode}
% create dynamic frames at the standard location
-\setlength{\@ff@tmp@y}{\textheight}%
-\addtolength{\@ff@tmp@y}{\headsep}%
-\newdynamicframe{\textwidth}{\headheight}{0pt}{\@ff@tmp@y}[header]%
-\newdynamicframe{\textwidth}{\headheight}{0pt}{-\footskip}[footer]%
-\renewcommand{\@dothehead}{}%
-\renewcommand{\@dothefoot}{}%
-\renewcommand{\@dodynamicthehead}{%
-\@dynamicframeid{header}%
-\expandafter
-\def\csname @dynamicframe@\romannumeral\ff@id\endcsname{%
-\vfill\@thehead\vfill}%
-}%
-\renewcommand{\@dodynamicthefoot}{%
-\@dynamicframeid{footer}%
-\expandafter
-\def\csname @dynamicframe@\romannumeral\ff@id\endcsname{%
-\vfill\@thefoot\vfill}%
-}%
+% \begin{macrocode}
+ \setlength{\@ff@tmp@y}{\textheight}%
+ \addtolength{\@ff@tmp@y}{\headsep}%
+ \newdynamicframe{\textwidth}{\headheight}{0pt}{\@ff@tmp@y}[header]%
+ \newdynamicframe{\textwidth}{\headheight}{0pt}{-\footskip}[footer]%
+ \renewcommand{\@dothehead}{}%
+ \renewcommand{\@dothefoot}{}%
+ \renewcommand{\@dodynamicthehead}{%
+ \@dynamicframeid{header}%
+ \expandafter
+ \def\csname @dynamicframe@\romannumeral\ff@id\endcsname{%
+ \vfill\@thehead\vfill
+ }%
+ }%
+ \renewcommand{\@dodynamicthefoot}{%
+ \@dynamicframeid{footer}%
+ \expandafter
+ \def\csname @dynamicframe@\romannumeral\ff@id\endcsname{%
+ \vfill\@thefoot\vfill
+ }%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -4052,11 +5630,17 @@ Frames must be defined in the preamble}#1}%
% as the text colour for the \gls{flow} to which they belong.
% \begin{macrocode}
\newcommand{\footnotecolor}{%
-\@ifundefined{@ff@txtcol@\romannumeral\c@thisframe}{%
-\normalcolor}{%
-\edef\ff@txtcol{%
-\csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}%
-\@s@tfftextcol}}
+ \@ifundefined{@ff@txtcol@\romannumeral\c@thisframe}%
+ {%
+ \normalcolor
+ }%
+ {%
+ \edef\ff@txtcol{%
+ \csname @ff@txtcol@\romannumeral\c@thisframe\endcsname
+ }%
+ \@s@tfftextcol
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@makecol}
@@ -4064,41 +5648,46 @@ Frames must be defined in the preamble}#1}%
% footnote rule are in the colour for that frame.
% \begin{macrocode}
\renewcommand{\@makecol}{%
-\ifvoid\footins
- \setbox\@outputbox\box\@cclv
-\else
- \setbox\@outputbox\vbox{%
-\boxmaxdepth\@maxdepth\@tempdima\dp\@cclv
- \unvbox\@cclv
- \vskip\skip\footins
- \color@begingroup
- \footnotecolor
- \footnoterule
- \unvbox\footins
- \color@endgroup
-}\fi
-\xdef\@freelist{\@freelist \@midlist }%
-\global\let\@midlist\@empty
-\@combinefloats
-\ifvbox\@kludgeins
- \@makespecialcolbox
-\else
- \setbox\@outputbox\vbox to\@colht{%
-\@texttop\dimen@\dp\@outputbox
- \unvbox \@outputbox
- \vskip -\dimen@\@textbottom
-}\fi
-\global\maxdepth\@maxdepth}
+ \ifvoid\footins
+ \setbox\@outputbox\box\@cclv
+ \else
+ \setbox\@outputbox\vbox
+ {%
+ \boxmaxdepth\@maxdepth\@tempdima\dp\@cclv
+ \unvbox\@cclv
+ \vskip\skip\footins
+ \color@begingroup
+ \footnotecolor
+ \footnoterule
+ \unvbox\footins
+ \color@endgroup
+ }%
+ \fi
+ \xdef\@freelist{\@freelist\@midlist}%
+ \global\let\@midlist\@empty
+ \@combinefloats
+ \ifvbox\@kludgeins
+ \@makespecialcolbox
+ \else
+ \setbox\@outputbox\vbox to\@colht{%
+ \@texttop\dimen@\dp\@outputbox
+ \unvbox \@outputbox
+ \vskip -\dimen@\@textbottom
+ }%
+ \fi
+ \global\maxdepth\@maxdepth
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@opcol}
% Modify "\@opcol", as "\if@twocolumn" is now
% irrelevant.
% \begin{macrocode}
-\def\@opcol{\@outputdblcol
-\global\@mparbottom\z@
-\global\@textfloatsheight\z@
-\@floatplacement
+\def\@opcol{%
+ \@outputdblcol
+ \global\@mparbottom\z@
+ \global\@textfloatsheight\z@
+ \@floatplacement
}
% \end{macrocode}
%\end{macro}
@@ -4110,34 +5699,103 @@ Frames must be defined in the preamble}#1}%
% \begin{macrocode}
\newif\if@ff@moreframes
\newcommand*{\@ff@checkifmoreframes}{%
-\@ff@moreframesfalse
-\@colN=\c@thisframe
-\whiledo{\@colN<\c@maxflow}{%
-\advance\@colN by 1\relax
-\edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}%
-\@ff@checkpages{\ff@pages}%
-}%
-\if@ff@moreframes
-\else
-\@ff@tmpN=\c@page
-\advance\@ff@tmpN by 1\relax
-\@colN=0\relax
-\whiledo{\@colN<\c@thisframe}{%
-\advance\@colN by 1\relax
-\edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}%
-\@ff@checkpages[\@ff@tmpN]{\ff@pages}%
-}%
-\fi
+ \@ff@moreframesfalse
+ \@colN=\c@thisframe
+ \whiledo{\@colN<\c@maxflow}%
+ {%
+ \advance\@colN by 1\relax
+% \end{macrocode}
+% Skip if this page is in this frame's exclusion list.
+%\changes{1.14}{2012-11-10}{added check for exclusion list}
+% \begin{macrocode}
+ \edef\ff@xpages{\csname @ff@xpages@\romannumeral\@colN\endcsname}%
+ \@for\@ff@pp:=\ff@xpages\do
+ {%
+ \ifnum0\@ff@pp=\@ff@pages@countreg\relax
+ \@endfortrue
+ \fi
+ }%
+ \if@endfor
+% \end{macrocode}
+% If for loop was terminated prematurely, then this page is in this
+% frame's exclusion list.
+% \begin{macrocode}
+ \else
+ \edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}%
+ \@ff@checkpages{\ff@pages}%
+% \end{macrocode}
+% If found a frame, break out of loop.
+% \begin{macrocode}
+ \if@ff@moreframes
+ \@colN=\c@maxflow\relax
+ \fi
+ \fi
+ }%
+ \if@ff@moreframes
+ \else
+% \end{macrocode}
+%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with
+%\cs{@ff@pages@countreg}}
+% \begin{macrocode}
+ \@ff@tmpN=\@ff@pages@countreg
+% \end{macrocode}
+% Look ahead up to a maximum of 4 pages.
+% \begin{macrocode}
+ \count@=0\relax
+ \loop
+ \advance\@ff@tmpN by 1\relax
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxflow}%
+ {%
+ \advance\@colN by 1\relax
+% \end{macrocode}
+% Skip if page is in this frame's exclusion list.
+% \begin{macrocode}
+ \edef\ff@xpages{\csname @ff@xpages@\romannumeral\@colN\endcsname}%
+ \@for\@ff@pp:=\ff@xpages\do
+ {%
+ \ifnum0\@ff@pp=\@ff@tmpN\relax
+ \@endfortrue
+ \fi
+ }%
+ \if@endfor
+% \end{macrocode}
+% If for loop was terminated prematurely, then page is in this
+% frame's exclusion list.
+% \begin{macrocode}
+ \else
+ \edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}%
+ \@ff@checkpages[\@ff@tmpN]{\ff@pages}%
+% \end{macrocode}
+% If found a frame, break out of loop.
+% \begin{macrocode}
+ \if@ff@moreframes
+ \@colN=\c@maxflow\relax
+ \fi
+ \fi
+ }%
+ \if@ff@moreframes
+ \count@=4\relax
+ \else
+ \advance\count@ by 1\relax
+ \fi
+ \ifnum\count@<4
+ \repeat
+ \fi
}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@checkpages}
% Check to see if the current page lies in the \gls{pglist}
% given by "#1".
+%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with
+%\cs{@ff@pages@countreg}}
% \begin{macrocode}
-\newcommand*{\@ff@checkpages}[2][\c@page]{%
-\@for\@ff@pp:=#2\do{%
-\@ff@checkthispage{#1}{\@ff@pp}}}
+\newcommand*{\@ff@checkpages}[2][\@ff@pages@countreg]{%
+ \@for\@ff@pp:=#2\do{%
+ \@ff@checkthispage{#1}{\@ff@pp}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@checkthispage}
@@ -4149,10 +5807,18 @@ Frames must be defined in the preamble}#1}%
% ignore it.
% \begin{macrocode}
\newcommand*{\@ff@checkthispage}[2]{%
-\ifthenelse{\equal{#2}{all}\or\equal{#2}{even}\or\equal{#2}{odd}}{%
-\@ff@moreframestrue}{%
-\ifthenelse{\equal{#2}{none}}{}{%
-\@ff@checknumrange{#1}{#2}}}}
+ \ifthenelse{\equal{#2}{all}\or\equal{#2}{even}\or\equal{#2}{odd}}%
+ {%
+ \@ff@moreframestrue
+ }%
+ {%
+ \ifthenelse{\equal{#2}{none}}%
+ {}%
+ {%
+ \@ff@checknumrange{#1}{#2}%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@checknumrange}
@@ -4164,15 +5830,16 @@ Frames must be defined in the preamble}#1}%
% there are still more \glspl{flow} available.
% \begin{macrocode}
\newcommand*{\@ff@checknumrange}[2]{%
-\def\@ff@numstart{0}\def\@ff@numend{10000}%
-\@ff@getrange{#2}%
-\ifnum\@ff@numend>#1\relax
-\@ff@moreframestrue
-\else
-\ifnum\@ff@numend=#1\relax
-\@ff@moreframestrue
-\fi
-\fi
+ \def\@ff@numstart{0}%
+ \def\@ff@numend{100000}%
+ \@ff@getrange{#2}%
+ \ifnum\@ff@numend>#1\relax
+ \@ff@moreframestrue
+ \else
+ \ifnum\@ff@numend=#1\relax
+ \@ff@moreframestrue
+ \fi
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -4194,7 +5861,8 @@ Frames must be defined in the preamble}#1}%
% ">25", it will do, e.g.\ "\@ff@@getrange>25-\relax".
% \begin{macrocode}
\newcommand*{\@ff@getrange}[1]{%
-\expandafter\@ff@@getrange#1-\relax\end}
+ \expandafter\@ff@@getrange#1-\relax\end
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@@getrange}
@@ -4203,15 +5871,15 @@ Frames must be defined in the preamble}#1}%
% is either a single value, or a close ended range.
% \begin{macrocode}
\def\@ff@@getrange#1#2\end{%
-\ifx#1<\relax
- \@ff@getrangeless#1#2\end
-\else
- \ifx#1>\relax
- \@ff@getrangegreater#1#2\end
+ \ifx#1<\relax
+ \@ff@getrangeless#1#2\end
\else
- \@@ff@getrange#1#2\end
+ \ifx#1>\relax
+ \@ff@getrangegreater#1#2\end
+ \else
+ \@@ff@getrange#1#2\end
+ \fi
\fi
-\fi
}
% \end{macrocode}
%\end{macro}
@@ -4220,21 +5888,23 @@ Frames must be defined in the preamble}#1}%
% upper bound. A minimum value of "0" is assumed.
% \begin{macrocode}
\def\@ff@getrangeless<#1-\relax\end{%
-\c@ffrangenum=#1\relax
-\advance\c@ffrangenum by -1\relax
-\def\@ff@numstart{0}%
-\edef\@ff@numend{\number\c@ffrangenum}}
+ \c@ffrangenum=#1\relax
+ \advance\c@ffrangenum by -1\relax
+ \def\@ff@numstart{0}%
+ \edef\@ff@numend{\number\c@ffrangenum}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@getrangegreater}
% Get the values for an open ended range with a lower
-% bound. A maximum value of "10000" is assumed.
+% bound. A maximum value of "100000" is assumed.
% \begin{macrocode}
\def\@ff@getrangegreater>#1-\relax\end{%
-\c@ffrangenum=#1\relax
-\advance\c@ffrangenum by 1\relax
-\edef\@ff@numstart{\number\c@ffrangenum}%
-\def\@ff@numend{10000}}
+ \c@ffrangenum=#1\relax
+ \advance\c@ffrangenum by 1\relax
+ \edef\@ff@numstart{\number\c@ffrangenum}%
+ \def\@ff@numend{100000}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@ff@getrange}
@@ -4243,12 +5913,13 @@ Frames must be defined in the preamble}#1}%
% value, otherwise it is a range.
% \begin{macrocode}
\def\@@ff@getrange#1-#2\end{%
-\ifx\relax#2\relax
-\def\@ff@numstart{#1}\def\@ff@numend{#1}%
-\else
-\def\@ff@numstart{#1}%
-\@@@ff@getrange#2\end
-\fi
+ \ifx\relax#2\relax
+ \def\@ff@numstart{#1}%
+ \def\@ff@numend{#1}%
+ \else
+ \def\@ff@numstart{#1}%
+ \@@@ff@getrange#2\end
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -4256,9 +5927,2377 @@ Frames must be defined in the preamble}#1}%
% Extract the end value from the closed range.
% \begin{macrocode}
\def\@@@ff@getrange#1-\relax\end{%
-\def\@ff@numend{#1}}
+ \def\@ff@numend{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@ff@output@adjustframes}
+%\changes{1.14}{2012-11-10}{new}
+% Provide a hook to adjust frame settings in the output routine.
+% \begin{macrocode}
+\newcommand*{\@ff@output@adjustframes}{}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\flowswitchonnext}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed flow frames from the next page onwards
+% \begin{macrocode}
+\newcommand*{\flowswitchonnext}{%
+ \@ifstar\@sflowswitchonnext\@flowswitchonnext
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sflowswitchonnext}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sflowswitchonnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+ \@flowframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}%
+ }%
+ \else
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\ff@id}%
+ {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@flowswitchonnext}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@flowswitchonnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}%
+ }%
+ \else
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\@ff@id}%
+ {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\flowswitchonnextodd}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed flow frames from the next odd page onwards
+% \begin{macrocode}
+\newcommand*{\flowswitchonnextodd}{%
+ \@ifstar\@sflowswitchonnextodd\@flowswitchonnextodd
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sflowswitchonnextodd}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sflowswitchonnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\count@\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \@flowframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}%
+ \def\@ff@prepages{}%
+ \if@notthiscol
+ \else
+ \def\@ff@prepages{\number\@ff@pages@countreg,}%
+ \fi
+% \end{macrocode}
+% Is this frame already switched on for the next page?
+% \begin{macrocode}
+ \@ff@chckifthispg{\count@}{\ff@id}%
+ \ifnum\count@=\@ff@pages@countreg\relax
+ \else
+ \if@notthiscol
+ \else
+ \edef\@ff@prepages{\@ff@prepages\number\count@,}%
+ \fi
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\ff@id}%
+ {\@ff@prepages>\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@flowswitchonnextodd}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@flowswitchonnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\count@\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}%
+ \def\@ff@prepages{}%
+ \if@notthiscol
+ \else
+ \def\@ff@prepages{\number\@ff@pages@countreg,}%
+ \fi
+% \end{macrocode}
+% Is this frame already switched on for the next page?
+% \begin{macrocode}
+ \@ff@chckifthispg{\count@}{\@ff@id}%
+ \ifnum\count@=\@ff@pages@countreg\relax
+ \else
+ \if@notthiscol
+ \else
+ \edef\@ff@prepages{\@ff@prepages\number\count@,}%
+ \fi
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\@ff@id}%
+ {\@ff@prepages>\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\flowswitchoffnext}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed flow frames from the next page onwards
+% \begin{macrocode}
+\newcommand*{\flowswitchoffnext}{%
+ \@ifstar\@sflowswitchoffnext\@flowswitchoffnext
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sflowswitchoffnext}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sflowswitchoffnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+ \@flowframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}%
+ \if@notthiscol
+ \def\@ff@pages{none}%
+ \else
+ \def\@ff@pages{\number\@ff@pages@countreg}%
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@flowswitchoffnext}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@flowswitchoffnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}%
+ \if@notthiscol
+ \def\@ff@pages{none}%
+ \else
+ \def\@ff@pages{\number\@ff@pages@countreg}%
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\flowswitchoffnextodd}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed flow frames from the next odd page onwards
+% \begin{macrocode}
+\newcommand*{\flowswitchoffnextodd}{%
+ \@ifstar\@sflowswitchoffnextodd\@flowswitchoffnextodd
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sflowswitchoffnextodd}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sflowswitchoffnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \@flowframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is off on this page, so set to
+% none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@ff@chckifthispg{\count@}{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page as well, so set to none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% Not off on the next page, so set to next page only.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\count@}%
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% It's not off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is not off on this page, so set to
+% this page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@ff@chckifthispg{\count@}{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page but not off on this page. So set to just this
+% page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% Not off on the next page as well, so set to this page and next page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\ff@id}{\@ff@nextpages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@flowswitchoffnextodd}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@flowswitchoffnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is off on this page, so set to
+% none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@ff@chckifthispg{\count@}{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page as well, so set to none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% Not off on the next page, so set to next page only.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\count@}%
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% It's not off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is not off on this page, so set to
+% this page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@ff@chckifthispg{\count@}{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page but not off on this page. So set to just this
+% page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% Not off on the next page as well, so set to this page and next page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@nextpages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\flowswitchonnextonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed flow frames for just the next page
+% \begin{macrocode}
+\newcommand*{\flowswitchonnextonly}{%
+ \@ifstar\@sflowswitchonnextonly\@flowswitchonnextonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sflowswitchonnextonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sflowswitchonnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+ \@flowframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+% \end{macrocode}
+% Not, it isn't, so just set to the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\ff@id}{\number\count@}%
+ }%
+ \else
+% \end{macrocode}
+% Yes, it is, so set to this page and the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\ff@id}%
+ {\number\@ff@pages@countreg,\number\count@}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@flowswitchonnextonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@flowswitchonnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+% \end{macrocode}
+% Not, it isn't, so just set to the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\@ff@id}{\number\count@}%
+ }%
+ \else
+% \end{macrocode}
+% Yes, it is, so set to this page and the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\@ff@id}%
+ {\number\@ff@pages@countreg,\number\count@}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\flowswitchonnextoddonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed flow frames for just the next odd page
+% \begin{macrocode}
+\newcommand*{\flowswitchonnextoddonly}{%
+ \@ifstar\@sflowswitchonnextoddonly\@flowswitchonnextoddonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sflowswitchonnextoddonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sflowswitchonnextoddonly}[1]{%
+ \@for\@ff@id:=#1\do{%
+ \@flowframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% No, it isn't. If this is an odd page, is it on or off on the next
+% page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. So this frame isn't on this page, but is it on or
+% off on the next page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@ff@chckifthispg{\count@}{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's not switched on either on this (odd) page or the next (even) page. So
+% the page list should be just the next odd page after this one.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \else
+% \end{macrocode}
+% It's not switched on for this (odd) page but it is for the next (even) page. So
+% the page list should be the next even and odd pages after this
+% page.
+% \begin{macrocode}
+ \edef\@ff@pages{\number\count@}%
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\@ff@pages,\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% No, it's even. So it's not on this (even) page, but needs to be on
+% for the following (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is on this page. If this is an odd page, is it on or off on
+% the next page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. Is the frame on or off for the next (even) page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@ff@chckifthispg{\count@}{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Frame is off. So the frame is switched on for this (odd) page but
+% is off for the next (even) page. So the page list needs to be this
+% (odd) page and the following odd page, skipping the even page in
+% between.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \else
+% \end{macrocode}
+% Frame is on. So the frame is switched on for this (odd) page and
+% the next (even) page. So the page list needs to be this
+% (odd) page, the next even page and the following odd page.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is switched on for this page and this page is even. So the
+% page list needs to be this (even) page and the next (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@flowswitchonnextoddonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@flowswitchonnextoddonly}[1]{%
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% No, it isn't. If this is an odd page, is it on or off on the next
+% page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. So this frame isn't on this page, but is it on or
+% off on the next page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@ff@chckifthispg{\count@}{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's not switched on either on this (odd) page or the next (even) page. So
+% the page list should be just the next odd page after this one.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \else
+% \end{macrocode}
+% It's not switched on for this (odd) page but it is for the next (even) page. So
+% the page list should be the next even and odd pages after this
+% page.
+% \begin{macrocode}
+ \edef\@ff@pages{\number\count@}%
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\@ff@pages,\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% No, it's even. So it's not on this (even) page, but needs to be on
+% for the following (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is on this page. If this is an odd page, is it on or off on
+% the next page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. Is the frame on or off for the next (even) page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@ff@chckifthispg{\count@}{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Frame is off. So the frame is switched on for this (odd) page but
+% is off for the next (even) page. So the page list needs to be this
+% (odd) page and the following odd page, skipping the even page in
+% between.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \else
+% \end{macrocode}
+% Frame is on. So the frame is switched on for this (odd) page and
+% the next (even) page. So the page list needs to be this
+% (odd) page, the next even page and the following odd page.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is switched on for this page and this page is even. So the
+% page list needs to be this (even) page and the next (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\flowswitchoffnextonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed flow frames for just the next page
+% \begin{macrocode}
+\newcommand*{\flowswitchoffnextonly}{%
+ \@ifstar\@sflowswitchoffnextonly\@flowswitchoffnextonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sflowswitchoffnextonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sflowswitchoffnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+ \@flowframeid{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowaddexclusion{\number\ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@flowswitchoffnextonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@flowswitchoffnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowaddexclusion{\number\@ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\flowswitchoffnextoddonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed flow frames for just the next odd page
+% \begin{macrocode}
+\newcommand*{\flowswitchoffnextoddonly}{%
+ \@ifstar\@sflowswitchoffnextoddonly\@flowswitchoffnextoddonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sflowswitchoffnextoddonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sflowswitchoffnextoddonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \ifodd\count@\relax
+ \else
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \@flowframeid{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowaddexclusion{\number\ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@flowswitchoffnextoddonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@flowswitchoffnextoddonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \ifodd\count@\relax
+ \else
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\flowaddexclusion{\number\@ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dynamicswitchonnext}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed dynamic frames from the next page onwards
+% \begin{macrocode}
+\newcommand*{\dynamicswitchonnext}{%
+ \@ifstar\@sdynamicswitchonnext\@dynamicswitchonnext
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sdynamicswitchonnext}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sdynamicswitchonnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+ \@dynamicframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}%
+ }%
+ \else
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\ff@id}%
+ {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@dynamicswitchonnext}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@dynamicswitchonnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}%
+ }%
+ \else
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\@ff@id}%
+ {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dynamicswitchonnextodd}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed dynamic frames from the next odd page onwards
+% \begin{macrocode}
+\newcommand*{\dynamicswitchonnextodd}{%
+ \@ifstar\@sdynamicswitchonnextodd\@dynamicswitchonnextodd
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sdynamicswitchonnextodd}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sdynamicswitchonnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\count@\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \@dynamicframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \def\@ff@prepages{}%
+ \if@notthiscol
+ \else
+ \def\@ff@prepages{\number\@ff@pages@countreg,}%
+ \fi
+% \end{macrocode}
+% Is this frame already switched on for the next page?
+% \begin{macrocode}
+ \@df@chckifthispg[\count@]{\ff@id}%
+ \ifnum\count@=\@ff@pages@countreg\relax
+ \else
+ \if@notthiscol
+ \else
+ \edef\@ff@prepages{\@ff@prepages\number\count@,}%
+ \fi
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\ff@id}%
+ {\@ff@prepages>\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@dynamicswitchonnextodd}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@dynamicswitchonnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\count@\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \def\@ff@prepages{}%
+ \if@notthiscol
+ \else
+ \def\@ff@prepages{\number\@ff@pages@countreg,}%
+ \fi
+% \end{macrocode}
+% Is this frame already switched on for the next page?
+% \begin{macrocode}
+ \@df@chckifthispg[\count@]{\@ff@id}%
+ \ifnum\count@=\@ff@pages@countreg\relax
+ \else
+ \if@notthiscol
+ \else
+ \edef\@ff@prepages{\@ff@prepages\number\count@,}%
+ \fi
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\@ff@id}%
+ {\@ff@prepages>\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dynamicswitchoffnext}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed dynamic frames from the next page onwards
+% \begin{macrocode}
+\newcommand*{\dynamicswitchoffnext}{%
+ \@ifstar\@sdynamicswitchoffnext\@dynamicswitchoffnext
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sdynamicswitchoffnext}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sdynamicswitchoffnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+ \@dynamicframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \if@notthiscol
+ \def\@ff@pages{none}%
+ \else
+ \def\@ff@pages{\number\@ff@pages@countreg}%
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@dynamicswitchoffnext}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@dynamicswitchoffnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \if@notthiscol
+ \def\@ff@pages{none}%
+ \else
+ \def\@ff@pages{\number\@ff@pages@countreg}%
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dynamicswitchoffnextodd}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed dynamic frames from the next odd page onwards
+% \begin{macrocode}
+\newcommand*{\dynamicswitchoffnextodd}{%
+ \@ifstar\@sdynamicswitchoffnextodd\@dynamicswitchoffnextodd
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sdynamicswitchoffnextodd}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sdynamicswitchoffnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \@dynamicframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is off on this page, so set to
+% none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@df@chckifthispg[\count@]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page as well, so set to none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% Not off on the next page, so set to next page only.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\count@}%
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% It's not off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is not off on this page, so set to
+% this page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@df@chckifthispg[\count@]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page but not off on this page. So set to just this
+% page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% Not off on the next page as well, so set to this page and next page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@nextpages}%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
+%
+%\begin{macro}{\@dynamicswitchoffnextodd}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@dynamicswitchoffnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is off on this page, so set to
+% none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@df@chckifthispg[\count@]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page as well, so set to none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% Not off on the next page, so set to next page only.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\count@}%
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% It's not off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is not off on this page, so set to
+% this page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@df@chckifthispg[\count@]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page but not off on this page. So set to just this
+% page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% Not off on the next page as well, so set to this page and next page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@nextpages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dynamicswitchonnextonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed dynamic frames for just the next page
+% \begin{macrocode}
+\newcommand*{\dynamicswitchonnextonly}{%
+ \@ifstar\@sdynamicswitchonnextonly\@dynamicswitchonnextonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sdynamicswitchonnextonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sdynamicswitchonnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+ \@dynamicframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+% \end{macrocode}
+% Not, it isn't, so just set to the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\ff@id}{\number\count@}%
+ }%
+ \else
+% \end{macrocode}
+% Yes, it is, so set to this page and the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\ff@id}%
+ {\number\@ff@pages@countreg,\number\count@}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@dynamicswitchonnextonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@dynamicswitchonnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+% \end{macrocode}
+% Not, it isn't, so just set to the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\@ff@id}{\number\count@}%
+ }%
+ \else
+% \end{macrocode}
+% Yes, it is, so set to this page and the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\@ff@id}%
+ {\number\@ff@pages@countreg,\number\count@}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dynamicswitchonnextoddonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed dynamic frames for just the next odd page
+% \begin{macrocode}
+\newcommand*{\dynamicswitchonnextoddonly}{%
+ \@ifstar\@sdynamicswitchonnextoddonly\@dynamicswitchonnextoddonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sdynamicswitchonnextoddonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sdynamicswitchonnextoddonly}[1]{%
+ \@for\@ff@id:=#1\do{%
+ \@dynamicframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% No, it isn't. If this is an odd page, is it on or off on the next
+% page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. So this frame isn't on this page, but is it on or
+% off on the next page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@df@chckifthispg[\count@]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's not switched on either on this (odd) page or the next (even) page. So
+% the page list should be just the next odd page after this one.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \else
+% \end{macrocode}
+% It's not switched on for this (odd) page but it is for the next (even) page. So
+% the page list should be the next even and odd pages after this
+% page.
+% \begin{macrocode}
+ \edef\@ff@pages{\number\count@}%
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\@ff@pages,\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% No, it's even. So it's not on this (even) page, but needs to be on
+% for the following (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is on this page. If this is an odd page, is it on or off on
+% the next page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. Is the frame on or off for the next (even) page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@df@chckifthispg[\count@]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Frame is off. So the frame is switched on for this (odd) page but
+% is off for the next (even) page. So the page list needs to be this
+% (odd) page and the following odd page, skipping the even page in
+% between.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \else
+% \end{macrocode}
+% Frame is on. So the frame is switched on for this (odd) page and
+% the next (even) page. So the page list needs to be this
+% (odd) page, the next even page and the following odd page.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is switched on for this page and this page is even. So the
+% page list needs to be this (even) page and the next (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@dynamicswitchonnextoddonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@dynamicswitchonnextoddonly}[1]{%
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% No, it isn't. If this is an odd page, is it on or off on the next
+% page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. So this frame isn't on this page, but is it on or
+% off on the next page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@df@chckifthispg[\count@]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's not switched on either on this (odd) page or the next (even) page. So
+% the page list should be just the next odd page after this one.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \else
+% \end{macrocode}
+% It's not switched on for this (odd) page but it is for the next (even) page. So
+% the page list should be the next even and odd pages after this
+% page.
+% \begin{macrocode}
+ \edef\@ff@pages{\number\count@}%
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\@ff@pages,\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% No, it's even. So it's not on this (even) page, but needs to be on
+% for the following (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is on this page. If this is an odd page, is it on or off on
+% the next page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. Is the frame on or off for the next (even) page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@df@chckifthispg[\count@]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Frame is off. So the frame is switched on for this (odd) page but
+% is off for the next (even) page. So the page list needs to be this
+% (odd) page and the following odd page, skipping the even page in
+% between.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \else
+% \end{macrocode}
+% Frame is on. So the frame is switched on for this (odd) page and
+% the next (even) page. So the page list needs to be this
+% (odd) page, the next even page and the following odd page.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is switched on for this page and this page is even. So the
+% page list needs to be this (even) page and the next (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\dynamicswitchoffnextonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed dynamic frames for just the next page
+% \begin{macrocode}
+\newcommand*{\dynamicswitchoffnextonly}{%
+ \@ifstar\@sdynamicswitchoffnextonly\@dynamicswitchoffnextonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sdynamicswitchoffnextonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sdynamicswitchoffnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+ \@dynamicframeid{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicaddexclusion{\number\ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@dynamicswitchoffnextonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@dynamicswitchoffnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicaddexclusion{\number\@ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\dynamicswitchoffnextoddonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed dynamic frames for just the next odd page
+% \begin{macrocode}
+\newcommand*{\dynamicswitchoffnextoddonly}{%
+ \@ifstar\@sdynamicswitchoffnextoddonly\@dynamicswitchoffnextoddonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sdynamicswitchoffnextoddonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sdynamicswitchoffnextoddonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \ifodd\count@\relax
+ \else
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \@dynamicframeid{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicaddexclusion{\number\ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@dynamicswitchoffnextoddonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@dynamicswitchoffnextoddonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \ifodd\count@\relax
+ \else
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\dynamicaddexclusion{\number\@ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\staticswitchonnext}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed static frames from the next page onwards
+% \begin{macrocode}
+\newcommand*{\staticswitchonnext}{%
+ \@ifstar\@sstaticswitchonnext\@staticswitchonnext
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sstaticswitchonnext}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sstaticswitchonnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+ \@staticframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}%
+ }%
+ \else
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\ff@id}%
+ {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@staticswitchonnext}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@staticswitchonnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}%
+ }%
+ \else
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\@ff@id}%
+ {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\staticswitchonnextodd}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed static frames from the next odd page onwards
+% \begin{macrocode}
+\newcommand*{\staticswitchonnextodd}{%
+ \@ifstar\@sstaticswitchonnextodd\@staticswitchonnextodd
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sstaticswitchonnextodd}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sstaticswitchonnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\count@\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \@staticframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \def\@ff@prepages{}%
+ \if@notthiscol
+ \else
+ \def\@ff@prepages{\number\@ff@pages@countreg,}%
+ \fi
+% \end{macrocode}
+% Is this frame already switched on for the next page?
+% \begin{macrocode}
+ \@sf@chckifthispg[\count@]{\ff@id}%
+ \ifnum\count@=\@ff@pages@countreg\relax
+ \else
+ \if@notthiscol
+ \else
+ \edef\@ff@prepages{\@ff@prepages\number\count@,}%
+ \fi
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\ff@id}%
+ {\@ff@prepages>\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@staticswitchonnextodd}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@staticswitchonnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\count@\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \def\@ff@prepages{}%
+ \if@notthiscol
+ \else
+ \def\@ff@prepages{\number\@ff@pages@countreg,}%
+ \fi
+% \end{macrocode}
+% Is this frame already switched on for the next page?
+% \begin{macrocode}
+ \@sf@chckifthispg[\count@]{\@ff@id}%
+ \ifnum\count@=\@ff@pages@countreg\relax
+ \else
+ \if@notthiscol
+ \else
+ \edef\@ff@prepages{\@ff@prepages\number\count@,}%
+ \fi
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\@ff@id}%
+ {\@ff@prepages>\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\staticswitchoffnext}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed static frames from the next page onwards
+% \begin{macrocode}
+\newcommand*{\staticswitchoffnext}{%
+ \@ifstar\@sstaticswitchoffnext\@staticswitchoffnext
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sstaticswitchoffnext}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sstaticswitchoffnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+ \@staticframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \if@notthiscol
+ \def\@ff@pages{none}%
+ \else
+ \def\@ff@pages{\number\@ff@pages@countreg}%
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@staticswitchoffnext}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@staticswitchoffnext}[1]{%
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \if@notthiscol
+ \def\@ff@pages{none}%
+ \else
+ \def\@ff@pages{\number\@ff@pages@countreg}%
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\staticswitchoffnextodd}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed static frames from the next odd page onwards
+% \begin{macrocode}
+\newcommand*{\staticswitchoffnextodd}{%
+ \@ifstar\@sstaticswitchoffnextodd\@staticswitchoffnextodd
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sstaticswitchoffnextodd}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sstaticswitchoffnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \@staticframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is off on this page, so set to
+% none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@sf@chckifthispg[\count@]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page as well, so set to none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% Not off on the next page, so set to next page only.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\count@}%
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% It's not off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is not off on this page, so set to
+% this page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@sf@chckifthispg[\count@]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page but not off on this page. So set to just this
+% page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% Not off on the next page as well, so set to this page and next page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\ff@id}{\@ff@nextpages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@staticswitchoffnextodd}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@staticswitchoffnextodd}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \ifodd\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already off on this page?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is off on this page, so set to
+% none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@sf@chckifthispg[\count@]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page as well, so set to none.
+% \begin{macrocode}
+ \def\@ff@nextpages{none}%
+ \else
+% \end{macrocode}
+% Not off on the next page, so set to next page only.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\count@}%
+ \fi
+ \fi
+ \else
+% \end{macrocode}
+% It's not off on this page. Is it on or off on the next page, if this
+% page is odd? First, is this page odd?
+% \begin{macrocode}
+ \ifnum\@ff@pages@countreg=\count@\relax
+% \end{macrocode}
+% This page is even and the frame is not off on this page, so set to
+% this page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% This page is odd. Is the frame on or off on the next page?
+% \begin{macrocode}
+ \@sf@chckifthispg[\count@]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Off on the next page but not off on this page. So set to just this
+% page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg}%
+ \else
+% \end{macrocode}
+% Not off on the next page as well, so set to this page and next page.
+% \begin{macrocode}
+ \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@nextpages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\staticswitchonnextonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed static frames for just the next page
+% \begin{macrocode}
+\newcommand*{\staticswitchonnextonly}{%
+ \@ifstar\@sstaticswitchonnextonly\@staticswitchonnextonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sstaticswitchonnextonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sstaticswitchonnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+ \@staticframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+% \end{macrocode}
+% Not, it isn't, so just set to the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\ff@id}{\number\count@}%
+ }%
+ \else
+% \end{macrocode}
+% Yes, it is, so set to this page and the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\ff@id}%
+ {\number\@ff@pages@countreg,\number\count@}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@staticswitchonnextonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@staticswitchonnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \if@notthiscol
+% \end{macrocode}
+% Not, it isn't, so just set to the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\@ff@id}{\number\count@}%
+ }%
+ \else
+% \end{macrocode}
+% Yes, it is, so set to this page and the next page:
+% \begin{macrocode}
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\@ff@id}%
+ {\number\@ff@pages@countreg,\number\count@}%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\staticswitchonnextoddonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch on the listed static frames for just the next odd page
+% \begin{macrocode}
+\newcommand*{\staticswitchonnextoddonly}{%
+ \@ifstar\@sstaticswitchonnextoddonly\@staticswitchonnextoddonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sstaticswitchonnextoddonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sstaticswitchonnextoddonly}[1]{%
+ \@for\@ff@id:=#1\do{%
+ \@staticframeid{\@ff@id}%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% No, it isn't. If this is an odd page, is it on or off on the next
+% page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. So this frame isn't on this page, but is it on or
+% off on the next page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@sf@chckifthispg[\count@]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's not switched on either on this (odd) page or the next (even) page. So
+% the page list should be just the next odd page after this one.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \else
+% \end{macrocode}
+% It's not switched on for this (odd) page but it is for the next (even) page. So
+% the page list should be the next even and odd pages after this
+% page.
+% \begin{macrocode}
+ \edef\@ff@pages{\number\count@}%
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\@ff@pages,\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% No, it's even. So it's not on this (even) page, but needs to be on
+% for the following (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is on this page. If this is an odd page, is it on or off on
+% the next page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. Is the frame on or off for the next (even) page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@sf@chckifthispg[\count@]{\ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Frame is off. So the frame is switched on for this (odd) page but
+% is off for the next (even) page. So the page list needs to be this
+% (odd) page and the following odd page, skipping the even page in
+% between.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \else
+% \end{macrocode}
+% Frame is on. So the frame is switched on for this (odd) page and
+% the next (even) page. So the page list needs to be this
+% (odd) page, the next even page and the following odd page.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is switched on for this page and this page is even. So the
+% page list needs to be this (even) page and the next (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@staticswitchonnextoddonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@staticswitchonnextoddonly}[1]{%
+ \@for\@ff@id:=#1\do{%
+% \end{macrocode}
+% Is this frame already on?
+% \begin{macrocode}
+ \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% No, it isn't. If this is an odd page, is it on or off on the next
+% page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. So this frame isn't on this page, but is it on or
+% off on the next page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@sf@chckifthispg[\count@]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% It's not switched on either on this (odd) page or the next (even) page. So
+% the page list should be just the next odd page after this one.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \else
+% \end{macrocode}
+% It's not switched on for this (odd) page but it is for the next (even) page. So
+% the page list should be the next even and odd pages after this
+% page.
+% \begin{macrocode}
+ \edef\@ff@pages{\number\count@}%
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\@ff@pages,\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% No, it's even. So it's not on this (even) page, but needs to be on
+% for the following (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is on this page. If this is an odd page, is it on or off on
+% the next page? First, is this an odd page?
+% \begin{macrocode}
+ \ifodd\@ff@pages@countreg
+% \end{macrocode}
+% Yes, it's odd. Is the frame on or off for the next (even) page?
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@sf@chckifthispg[\count@]{\@ff@id}%
+ \if@notthiscol
+% \end{macrocode}
+% Frame is off. So the frame is switched on for this (odd) page but
+% is off for the next (even) page. So the page list needs to be this
+% (odd) page and the following odd page, skipping the even page in
+% between.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \else
+% \end{macrocode}
+% Frame is on. So the frame is switched on for this (odd) page and
+% the next (even) page. So the page list needs to be this
+% (odd) page, the next even page and the following odd page.
+% \begin{macrocode}
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}%
+ \fi
+ \else
+% \end{macrocode}
+% Frame is switched on for this page and this page is even. So the
+% page list needs to be this (even) page and the next (odd) page.
+% \begin{macrocode}
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}%
+ \fi
+% \end{macrocode}
+% \begin{macrocode}
+ \fi
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@pages}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%
+%\begin{macro}{\staticswitchoffnextonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed static frames for just the next page
+% \begin{macrocode}
+\newcommand*{\staticswitchoffnextonly}{%
+ \@ifstar\@sstaticswitchoffnextonly\@staticswitchoffnextonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sstaticswitchoffnextonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sstaticswitchoffnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+ \@staticframeid{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticaddexclusion{\number\ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@staticswitchoffnextonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@staticswitchoffnextonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \@for\@ff@id:=#1\do{%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticaddexclusion{\number\@ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\staticswitchoffnextoddonly}
+%\changes{1.14}{2012-11-10}{new}
+% Switch off the listed static frames for just the next odd page
+% \begin{macrocode}
+\newcommand*{\staticswitchoffnextoddonly}{%
+ \@ifstar\@sstaticswitchoffnextoddonly\@staticswitchoffnextoddonly
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@sstaticswitchoffnextoddonly}
+% The starred version uses \glspl{idl}.
+% \begin{macrocode}
+\newcommand{\@sstaticswitchoffnextoddonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \ifodd\count@\relax
+ \else
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \@staticframeid{\@ff@id}%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticaddexclusion{\number\ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\@staticswitchoffnextoddonly}
+% The unstarred version uses \glspl{idn}.
+% \begin{macrocode}
+\newcommand{\@staticswitchoffnextoddonly}[1]{%
+ \count@=\@ff@pages@countreg\relax
+ \advance\count@ by 1\relax
+ \ifodd\count@\relax
+ \else
+ \advance\count@ by 1\relax
+ \fi
+ \@for\@ff@id:=#1\do{%
+ \expandafter\toks@\expandafter{\@ff@output@adjustframes}%
+ \xdef\@ff@output@adjustframes{%
+ \the\toks@
+ \noexpand\staticaddexclusion{\number\@ff@id}{\number\count@}%
+ }%
+ }%
+}
+% \end{macrocode}
+%\end{macro}
+%
+%\begin{macro}{\ffaddtoadjustframeshook}
+%\changes{1.14}{2012-11-10}{new}
+% Add stuff to the output hook.
+% \begin{macrocode}
+\newcommand*{\ffaddtoadjustframeshook}[1]{%
+ \@ff@addtolist\@ff@output@adjustframes\entry{#1}%
+}
+% \end{macrocode}
+%\end{macro}
+%
%\begin{macro}{\@g@tnextcol}
% Find the next \gls{flow}. If there are no more flow
% frames, define a new one the size of the \gls{typeblock}.
@@ -4268,30 +8307,70 @@ Frames must be defined in the preamble}#1}%
\newif\if@ff@nwpg
\newcount\c@curpg
\newcommand*{\@g@tnextcol}[1]{%
-\@ff@checkifmoreframes
-\if@ff@moreframes
-\else
+% \end{macrocode}
+% Do any frame adjustments
+% \begin{macrocode}
+ \@ff@output@adjustframes
+% \end{macrocode}
+% Now clear the hook
+% \begin{macrocode}
+ \global\let\@ff@output@adjustframes\@empty
+% \end{macrocode}
+% Now check for any more frames.
+% \begin{macrocode}
+ \@ff@checkifmoreframes
+ \if@ff@moreframes
+ \else
+% \end{macrocode}
% No more frames, add new frame
-\PackageWarning{flowfram}{Run out of flows frames,
-adding new one}%
-\@onecolumn
-#1=\c@maxflow
-\fi
-\@notthiscoltrue
-\@ff@nwpgfalse
-\@colN=#1\relax
-\c@curpg=\c@page
-\loop
-\ifnum\@colN=\c@maxflow
- \@colN=1\@ff@nwpgtrue
- \advance\c@curpg by 1\relax
-\else
- \advance\@colN by 1\relax
-\fi
-\@ff@chckifthispg{\c@curpg}{\@colN}%
-\if@notthiscol
-\repeat
-#1=\@colN
+% \begin{macrocode}
+ \PackageWarning{flowfram}%
+ {Run out of flows frames on page \number\@ff@pages@countreg, adding new one}%
+ \flf@doifverbose
+ {%
+ \def\flf@messinfo{Here's the list of flow frames:}%
+ \count@=0\relax
+ \loop
+ \advance\count@ by 1\relax
+ \expandafter\toks@\expandafter{\flf@messinfo\MessageBreak}%
+ \edef\flf@messinfo{\the\toks@
+ \number\count@.
+ Pages: \csname @ff@pages@\romannumeral\count@\endcsname.
+ Exclusions: \csname @ff@xpages@\romannumeral\count@\endcsname.
+ }%
+ \ifnum\count@<\c@maxflow
+ \repeat
+ \PackageInfo{flowfram}{\flf@messinfo\@gobbletwo}%
+ }%
+ \@onecolumn
+ #1=\c@maxflow
+ \fi
+ \@notthiscoltrue
+ \@ff@nwpgfalse
+ \@colN=#1\relax
+% \end{macrocode}
+%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with
+%\cs{@ff@pages@countreg}}
+% \begin{macrocode}
+ \c@curpg=\@ff@pages@countreg
+ \loop
+ \ifnum\@colN=\c@maxflow
+% \end{macrocode}
+% Reached the end of the page. Try the next one.
+% \begin{macrocode}
+ \@colN=1\relax
+ \@ff@nwpgtrue
+ \advance\c@curpg by 1\relax
+ \else
+% \end{macrocode}
+% Move on to the next flow frame on this page.
+% \begin{macrocode}
+ \advance\@colN by 1\relax
+ \fi
+ \@ff@chckifthispg{\c@curpg}{\@colN}%
+ \if@notthiscol
+ \repeat
+ #1=\@colN\relax
}
% \end{macrocode}
%\end{macro}
@@ -4302,9 +8381,21 @@ adding new one}%
% First set up some variables.
% \begin{macrocode}
\newcommand*{\@ff@chckifthispg}[2]{%
-\@notthiscoltrue
-\edef\ff@pages{\csname @ff@pages@\romannumeral#2\endcsname}%
-\@@ff@chckifthispg{#1}%
+ \@notthiscolfalse
+ \edef\ff@xpages{\csname @ff@xpages@\romannumeral#2\endcsname}%
+ \@for\@ff@pp:=\ff@xpages\do
+ {%
+ \ifnum0\@ff@pp=#1\relax
+ \@notthiscoltrue
+ \@endfortrue
+ \fi
+ }%
+ \if@notthiscol
+ \else
+ \@notthiscoltrue
+ \edef\ff@pages{\csname @ff@pages@\romannumeral#2\endcsname}%
+ \@@ff@chckifthispg{#1}%
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -4312,42 +8403,73 @@ adding new one}%
% Now go ahead and check.
% \begin{macrocode}
\newcommand*{\@@ff@chckifthispg}[1]{%
-\ifthenelse{\equal{\ff@pages}{none}}{}{%
-\ifthenelse{\equal{\ff@pages}{all}}{\@notthiscolfalse}{%
-\ifthenelse{\equal{\ff@pages}{odd}}{%
-\ifodd#1\@notthiscolfalse\fi}{%
-\ifthenelse{\equal{\ff@pages}{even}}{%
-\ifodd#1\else\@notthiscolfalse\fi}{%
+ \ifthenelse{\equal{\ff@pages}{none}}%
+ {}%
+ {%
+ \ifthenelse{\equal{\ff@pages}{all}}%
+ {%
+ \@notthiscolfalse
+ }%
+ {%
+ \ifthenelse{\equal{\ff@pages}{odd}}%
+ {%
+ \ifodd#1\@notthiscolfalse\fi
+ }%
+ {%
+ \ifthenelse{\equal{\ff@pages}{even}}%
+ {%
+ \ifodd#1\else\@notthiscolfalse\fi
+ }%
+ {%
+% \end{macrocode}
% check through list of page numbers
-\@for\@ff@pp:=\ff@pages\do{%
-\def\@ff@numstart{0}\def\@ff@numend{0}%
-\@ff@getrange{\@ff@pp}%
-\ifthenelse{#1<\@ff@numstart \or #1>\@ff@numend}{}{%
-\@notthiscolfalse}%
-}%
-}}}}%
+% \begin{macrocode}
+ \@for\@ff@pp:=\ff@pages\do{%
+ \def\@ff@numstart{0}%
+ \def\@ff@numend{0}%
+ \@ff@getrange{\@ff@pp}%
+ \ifthenelse{#1<\@ff@numstart \or #1>\@ff@numend}%
+ {}%
+ {%
+ \@notthiscolfalse
+ }%
+ }%
+ }%
+ }%
+ }%
+ }%
}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sf@chckifthispg}
% Checks to see if \gls{static} "#1" is defined on the
-% current page.
+% current page (or the page given by the optional argument).
+%\changes{1.14}{2012-11-10}{added optional argument}
% \begin{macrocode}
-\newcommand*{\@sf@chckifthispg}[1]{%
-\@notthiscoltrue
-\edef\ff@pages{\csname @sf@pages@\romannumeral#1\endcsname}%
-\@@ff@chckifthispg{\c@page}%
+\newcommand*{\@sf@chckifthispg}[2][\@ff@pages@countreg]{%
+ \@notthiscoltrue
+ \edef\ff@pages{\csname @sf@pages@\romannumeral#2\endcsname}%
+% \end{macrocode}
+%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with
+%\cs{@ff@pages@countreg}}
+% \begin{macrocode}
+ \@@ff@chckifthispg{#1}%
}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@df@chckifthispg}
% Checks to see if \gls{dynamic} "#1" is defined on the
-% current page.
+% current page (or the page given by the optional argument).
+%\changes{1.14}{2012-11-10}{added optional argument}
+% \begin{macrocode}
+\newcommand*{\@df@chckifthispg}[2][\@ff@pages@countreg]{%
+ \@notthiscoltrue
+ \edef\ff@pages{\csname @df@pages@\romannumeral#2\endcsname}%
+% \end{macrocode}
+%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with
+%\cs{@ff@pages@countreg}}
% \begin{macrocode}
-\newcommand*{\@df@chckifthispg}[1]{%
-\@notthiscoltrue
-\edef\ff@pages{\csname @df@pages@\romannumeral#1\endcsname}%
-\@@ff@chckifthispg{\c@page}%
+ \@@ff@chckifthispg{#1}%
}
% \end{macrocode}
%\end{macro}
@@ -4357,8 +8479,9 @@ adding new one}%
% all the \glspl{flow} have been filled for that page.
% \begin{macrocode}
\newcommand*{\@setcolbox}[1]{%
-\expandafter\global\expandafter\setbox
-\csname column\romannumeral#1\endcsname\box\@outputbox
+ \flf@message{Setting contents of box for flow frame \number#1}%
+ \expandafter\global\expandafter\setbox
+ \csname column\romannumeral#1\endcsname\box\@outputbox
}
% \end{macrocode}
%\end{macro}
@@ -4367,36 +8490,81 @@ adding new one}%
% has one.
% \begin{macrocode}
\newcommand*{\@docolbox}[1]{%
-\edef\ff@frametype{%
-\csname @ff@frametype@\romannumeral#1\endcsname}%
-\edef\ff@col{\csname @ff@col@\romannumeral#1\endcsname}%
-\edef\ff@txtcol{\csname @ff@txtcol@\romannumeral#1\endcsname}%
-\edef\ff@backcol{\csname @ff@backcol@\romannumeral#1\endcsname}%
-\@ff@setoffset{#1}%
-\rotateframe{\csname @ff@angle@\romannumeral#1\endcsname}{%
-\ifthenelse{\boolean{columnframe\romannumeral#1}}{%
-\@ff@fbox{\csname colwidth\romannumeral#1\endcsname}%
-{\csname colheight\romannumeral#1\endcsname}{%
-\expandafter\box\csname column\romannumeral#1\endcsname}{%
-\csname\ff@frametype\endcsname}%
-}{%
-\@ff@box{\csname colwidth\romannumeral#1\endcsname}%
-{\csname colheight\romannumeral#1\endcsname}{%
-\expandafter\box\csname column\romannumeral#1\endcsname}%
-}}}
+ \flf@message{Doing flow frame \number#1\space
+ (page \number\@ff@pages@countreg)}%
+ \edef\ff@frametype{%
+ \csname @ff@frametype@\romannumeral#1\endcsname}%
+% \end{macrocode}
+% Frame colour
+% \begin{macrocode}
+ \edef\ff@col{\csname @ff@col@\romannumeral#1\endcsname}%
+% \end{macrocode}
+% Text colour
+% \begin{macrocode}
+ \edef\ff@txtcol{\csname @ff@txtcol@\romannumeral#1\endcsname}%
+% \end{macrocode}
+% Background colour
+% \begin{macrocode}
+ \edef\ff@backcol{\csname @ff@backcol@\romannumeral#1\endcsname}%
+% \end{macrocode}
+% Compute offset for this frame
+% \begin{macrocode}
+ \@ff@setoffset{#1}%
+% \end{macrocode}
+% Rotate frame if required
+% \begin{macrocode}
+ \rotateframe{\csname @ff@angle@\romannumeral#1\endcsname}%
+ {%
+% \end{macrocode}
+% Check if frame has a border
+% \begin{macrocode}
+ \ifthenelse{\boolean{columnframe\romannumeral#1}}%
+ {%
+% \end{macrocode}
+% Put the required border around the frame
+% \begin{macrocode}
+ \@ff@fbox
+ {\csname colwidth\romannumeral#1\endcsname}%
+ {\csname colheight\romannumeral#1\endcsname}%
+ {%
+ \expandafter\box\csname column\romannumeral#1\endcsname
+ }%
+ {%
+ \csname\ff@frametype\endcsname
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Do the frame without a border
+% \begin{macrocode}
+ \@ff@box
+ {\csname colwidth\romannumeral#1\endcsname}%
+ {\csname colheight\romannumeral#1\endcsname}%
+ {%
+ \expandafter\box\csname column\romannumeral#1\endcsname
+ }%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@docolbbox}
% Do the \gls{bbox} for given \gls{flow}.
% \begin{macrocode}
\newcommand*{\@docolbbox}[1]{%
-\@ff@setoffset{#1}%
-\def\ff@col{}\def\ff@txtcol{}%
-\@fr@meifdraft{%
-\@ff@box{\csname colwidth\romannumeral#1\endcsname}%
-{\csname colheight\romannumeral#1\endcsname}{%
-\expandafter\box\csname column\romannumeral#1\endcsname}}%
-{F:\number#1;\csname @col@id@\romannumeral#1\endcsname}}
+ \@ff@setoffset{#1}%
+ \def\ff@col{}\def\ff@txtcol{}%
+ \@fr@meifdraft
+ {%
+ \@ff@box
+ {\csname colwidth\romannumeral#1\endcsname}%
+ {\csname colheight\romannumeral#1\endcsname}%
+ {%
+ \expandafter\box\csname column\romannumeral#1\endcsname
+ }%
+ }%
+ {F:\number#1;\csname @col@id@\romannumeral#1\endcsname}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@fbox}
@@ -4404,18 +8572,29 @@ adding new one}%
% height "#2", and frame making command
% specified by "#4".
% \begin{macrocode}
-\newcommand{\@ff@fbox}[4]{{%
-\fboxsep=\flowframesep\fboxrule=\flowframerule\@s@tffcol
-\kern\@ff@offset
-#4{\@ff@box{#1}{#2}{#3}}}}
+\newcommand{\@ff@fbox}[4]{%
+ {%
+ \fboxsep=\flowframesep
+ \fboxrule=\flowframerule
+ \@s@tffcol
+ \kern\@ff@offset
+ #4{\@ff@box{#1}{#2}{#3}}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@box}
% Put the \TeX\ box "#3" of width "#1" and height "#2" on
% the page.
% \begin{macrocode}
-\newcommand{\@ff@box}[3]{{\@ffbackground{\vbox to#2
-{\hb@xt@ #1{\hss{\@s@tfftextcol #3}\hss}\vss\kern\z@}}}}
+\newcommand{\@ff@box}[3]{%
+ {%
+ \@ffbackground
+ {%
+ \vbox to#2 {\hb@xt@ #1{\hss{\@s@tfftextcol #3}\hss}\vss\kern\z@}%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@putcolbox}
@@ -4425,29 +8604,56 @@ adding new one}%
% location.
% \begin{macrocode}
\newcommand*{\@putcolbox}[1]{%
-\@ff@chckifthispg{\c@page}{#1}%
-\if@notthiscol
-\else
-\@killglue
-\if@twoside
-\ifodd\c@page
-\expandafter\raise\csname col@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname col@\romannumeral#1@posx\endcsname
-\@docolbox{#1}\hss}%
-\else
-\expandafter\raise\csname col@\romannumeral#1@eveny\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname col@\romannumeral#1@evenx\endcsname
-\@docolbox{#1}\hss}%
-\fi
-\else
-\expandafter\raise\csname col@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname col@\romannumeral#1@posx\endcsname
-\@docolbox{#1}\hss}%
-\fi
-\fi
+% \end{macrocode}
+%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with
+%\cs{@ff@pages@countreg}}
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{#1}%
+% \end{macrocode}
+%\changes{1.14}{2012-11-10}{added check for non-void box}
+% \begin{macrocode}
+ \if@notthiscol
+ \expandafter\ifvoid\csname column\romannumeral#1\endcsname
+ \else
+ \PackageWarning{flowfram}{Box \number#1\space is not void.
+ Dumping. This page: \number\@ff@pages@countreg.
+ Page list: "\csname @ff@pages@\romannumeral#1\endcsname".
+ Exclusion list: "\csname @ff@xpages@\romannumeral#1\endcsname".
+ (Maybe the page list was changed after this frame was
+ selected or maybe you should use package option pages=absolute)}%
+ \@notthiscolfalse
+ \fi
+ \fi
+ \if@notthiscol
+ \flf@message{Flow frame \number#1\space is not required on page
+ \number\@ff@pages@countreg}%
+ \else
+ \@killglue
+ \if@twoside
+ \ifodd\c@page
+ \expandafter\raise\csname col@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname col@\romannumeral#1@posx\endcsname
+ \@docolbox{#1}\hss
+ }%
+ \else
+ \expandafter\raise\csname col@\romannumeral#1@eveny\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname col@\romannumeral#1@evenx\endcsname
+ \@docolbox{#1}\hss
+ }%
+ \fi
+ \else
+ \expandafter\raise\csname col@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname col@\romannumeral#1@posx\endcsname
+ \@docolbox{#1}\hss
+ }%
+ \fi
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -4455,29 +8661,38 @@ adding new one}%
% Same for \gls{flow} \gls{bbox}:
% \begin{macrocode}
\newcommand*{\@putcolbbox}[1]{%
-\@ff@chckifthispg{\c@page}{#1}%
-\if@notthiscol
-\else
-\@killglue
-\if@twoside
-\ifodd\c@page
-\expandafter\raise\csname col@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname col@\romannumeral#1@posx\endcsname
-\@docolbbox{#1}\hss}%
-\else
-\expandafter\raise\csname col@\romannumeral#1@eveny\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname col@\romannumeral#1@evenx\endcsname
-\@docolbbox{#1}\hss}%
-\fi
-\else
-\expandafter\raise\csname col@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname col@\romannumeral#1@posx\endcsname
-\@docolbbox{#1}\hss}%
-\fi
-\fi
+% \end{macrocode}
+%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with \cs{@ff@pages@countreg}}
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{#1}%
+ \if@notthiscol
+ \else
+ \@killglue
+ \if@twoside
+ \ifodd\c@page
+ \expandafter\raise\csname col@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname col@\romannumeral#1@posx\endcsname
+ \@docolbbox{#1}\hss
+ }%
+ \else
+ \expandafter\raise\csname col@\romannumeral#1@eveny\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname col@\romannumeral#1@evenx\endcsname
+ \@docolbbox{#1}\hss
+ }%
+ \fi
+ \else
+ \expandafter\raise\csname col@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname col@\romannumeral#1@posx\endcsname
+ \@docolbbox{#1}\hss
+ }%
+ \fi
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -4491,9 +8706,9 @@ adding new one}%
% Compute offset for "\doublebox":
% \begin{macrocode}
\newcommand*{\@ff@s@t@doubleboxoffset}{%
-\setlength{\@ff@offset}{-\flowframesep}%
-\addtolength{\@ff@offset}{-3.75\flowframerule}%
-\addtolength{\@ff@offset}{-.5pt}%
+ \setlength{\@ff@offset}{-\flowframesep}%
+ \addtolength{\@ff@offset}{-3.75\flowframerule}%
+ \addtolength{\@ff@offset}{-.5pt}%
}
% \end{macrocode}
%\end{macro}
@@ -4501,8 +8716,8 @@ adding new one}%
% Compute offset for "\ovalbox":
% \begin{macrocode}
\newcommand*{\@ff@s@t@ovalboxoffset}{%
-\@ff@offset=-\fontdimen 8\tenln\relax
-\advance\@ff@offset by -\flowframesep\relax
+ \@ff@offset=-\fontdimen 8\tenln\relax
+ \advance\@ff@offset by -\flowframesep\relax
}
% \end{macrocode}
%\end{macro}
@@ -4510,8 +8725,8 @@ adding new one}%
% Compute offset for "\ovalbox":
% \begin{macrocode}
\newcommand*{\@ff@s@t@Ovalboxoffset}{%
-\@ff@offset=-\fontdimen 8\tenlnw\relax
-\advance\@ff@offset by -\flowframesep\relax
+ \@ff@offset=-\fontdimen 8\tenlnw\relax
+ \advance\@ff@offset by -\flowframesep\relax
}
% \end{macrocode}
%\end{macro}
@@ -4519,8 +8734,8 @@ adding new one}%
% Compute default offset:
% \begin{macrocode}
\newcommand*{\@ff@s@t@defaultoffset}{%
-\@ff@offset=-\flowframesep\relax
-\addtolength{\@ff@offset}{-\flowframerule}%
+ \@ff@offset=-\flowframesep\relax
+ \addtolength{\@ff@offset}{-\flowframerule}%
}
% \end{macrocode}
%\end{macro}
@@ -4529,29 +8744,49 @@ adding new one}%
% in "\ff@offset".
% \begin{macrocode}
\newcommand*{\@ff@setoffset}[1]{%
-\ifthenelse{\equal{\csname @ff@offset@\romannumeral#1\endcsname}%
-{compute}}{%
-\ifthenelse{\boolean{columnframe\romannumeral#1}}{%
-\ifthenelse{%
-\equal{\csname @ff@frametype@\romannumeral#1\endcsname}%
-{doublebox}}{%
-\@ff@s@t@doubleboxoffset
-}{%
-\ifthenelse{%
-\equal{\csname @ff@frametype@\romannumeral#1\endcsname}%
-{ovalbox}}{%
-\@ff@s@t@ovalboxoffset
-}{%
-\ifthenelse{%
-\equal{\csname @ff@frametype@\romannumeral#1\endcsname}%
-{Ovalbox}}{%
-\@ff@s@t@Ovalboxoffset}{%
-\@ff@s@t@defaultoffset
-}}}%
-}{}%
-}{%
-\setlength{\@ff@offset}%
-{\csname @ff@offset@\romannumeral#1\endcsname}}%
+ \ifthenelse
+ {\equal{\csname @ff@offset@\romannumeral#1\endcsname}{compute}}%
+ {%
+ \ifthenelse{\boolean{columnframe\romannumeral#1}}%
+ {%
+ \ifthenelse
+ {%
+ \equal{\csname @ff@frametype@\romannumeral#1\endcsname}%
+ {doublebox}%
+ }%
+ {%
+ \@ff@s@t@doubleboxoffset
+ }%
+ {%
+ \ifthenelse
+ {%
+ \equal{\csname @ff@frametype@\romannumeral#1\endcsname}%
+ {ovalbox}%
+ }%
+ {%
+ \@ff@s@t@ovalboxoffset
+ }%
+ {%
+ \ifthenelse
+ {%
+ \equal{\csname @ff@frametype@\romannumeral#1\endcsname}%
+ {Ovalbox}%
+ }%
+ {%
+ \@ff@s@t@Ovalboxoffset
+ }%
+ {%
+ \@ff@s@t@defaultoffset
+ }%
+ }%
+ }%
+ }%
+ {}%
+ }%
+ {%
+ \setlength{\@ff@offset}%
+ {\csname @ff@offset@\romannumeral#1\endcsname}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -4560,31 +8795,52 @@ adding new one}%
% in "\ff@offset".
% \begin{macrocode}
\newcommand*{\@sf@setoffset}[1]{%
-\ifthenelse{%
-\equal{\csname @sf@offset@\romannumeral#1\endcsname}%
-{compute}}{%
-\ifthenelse{\boolean{staticframe\romannumeral#1}}{%
-\ifthenelse{%
-\equal{\csname @sf@frametype@\romannumeral#1\endcsname}%
-{doublebox}}{%
-\@ff@s@t@doubleboxoffset
-}{%
-\ifthenelse{%
-\equal{\csname @sf@frametype@\romannumeral#1\endcsname}%
-{ovalbox}}{%
-\@ff@s@t@ovalboxoffset
-}{%
-\ifthenelse{%
-\equal{\csname @sf@frametype@\romannumeral#1\endcsname}%
-{Ovalbox}}{%
-\@ff@s@t@Ovalboxoffset
-}{%
-\@ff@s@t@defaultoffset
-}}}%
-}{}%
-}{%
-\setlength{\@ff@offset}%
-{\csname @sf@offset@\romannumeral#1\endcsname}}%
+ \ifthenelse
+ {%
+ \equal{\csname @sf@offset@\romannumeral#1\endcsname}%
+ {compute}%
+ }%
+ {%
+ \ifthenelse{\boolean{staticframe\romannumeral#1}}%
+ {%
+ \ifthenelse
+ {%
+ \equal{\csname @sf@frametype@\romannumeral#1\endcsname}%
+ {doublebox}%
+ }%
+ {%
+ \@ff@s@t@doubleboxoffset
+ }%
+ {%
+ \ifthenelse
+ {%
+ \equal{\csname @sf@frametype@\romannumeral#1\endcsname}%
+ {ovalbox}%
+ }%
+ {%
+ \@ff@s@t@ovalboxoffset
+ }%
+ {%
+ \ifthenelse
+ {%
+ \equal{\csname @sf@frametype@\romannumeral#1\endcsname}%
+ {Ovalbox}%
+ }%
+ {%
+ \@ff@s@t@Ovalboxoffset
+ }%
+ {%
+ \@ff@s@t@defaultoffset
+ }%
+ }%
+ }%
+ }%
+ {}%
+ }%
+ {%
+ \setlength{\@ff@offset}%
+ {\csname @sf@offset@\romannumeral#1\endcsname}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -4593,31 +8849,53 @@ adding new one}%
% in "\ff@offset".
% \begin{macrocode}
\newcommand*{\@df@setoffset}[1]{%
-\ifthenelse{%
-\equal{\csname @df@offset@\romannumeral#1\endcsname}%
-{compute}}{%
-\setlength{\@ff@offset}{0pt}%
-\ifthenelse{\boolean{dynamicframe\romannumeral#1}}{%
-\ifthenelse{%
-\equal{\csname @df@frametype@\romannumeral#1\endcsname}%
-{doublebox}}{%
-\@ff@s@t@doubleboxoffset
-}{%
-\ifthenelse{%
-\equal{\csname @df@frametype@\romannumeral#1\endcsname}%
-{ovalbox}}{%
-\@ff@s@t@ovalboxoffset
-}{%
-\ifthenelse{%
-\equal{\csname @df@frametype@\romannumeral#1\endcsname}%
-{Ovalbox}}{%
-\@ff@s@t@Ovalboxoffset}{%
-\@ff@s@t@defaultoffset
-}}}%
-}{}%
-}{%
-\setlength{\@ff@offset}%
-{\csname @df@offset@\romannumeral#1\endcsname}}%
+ \ifthenelse
+ {%
+ \equal{\csname @df@offset@\romannumeral#1\endcsname}%
+ {compute}%
+ }%
+ {%
+ \setlength{\@ff@offset}{0pt}%
+ \ifthenelse{\boolean{dynamicframe\romannumeral#1}}%
+ {%
+ \ifthenelse
+ {%
+ \equal{\csname @df@frametype@\romannumeral#1\endcsname}%
+ {doublebox}%
+ }%
+ {%
+ \@ff@s@t@doubleboxoffset
+ }%
+ {%
+ \ifthenelse
+ {%
+ \equal{\csname @df@frametype@\romannumeral#1\endcsname}%
+ {ovalbox}%
+ }%
+ {%
+ \@ff@s@t@ovalboxoffset
+ }%
+ {%
+ \ifthenelse
+ {%
+ \equal{\csname @df@frametype@\romannumeral#1\endcsname}%
+ {Ovalbox}%
+ }%
+ {%
+ \@ff@s@t@Ovalboxoffset
+ }%
+ {%
+ \@ff@s@t@defaultoffset
+ }%
+ }%
+ }%
+ }%
+ {}%
+ }%
+ {%
+ \setlength{\@ff@offset}%
+ {\csname @df@offset@\romannumeral#1\endcsname}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -4625,44 +8903,56 @@ adding new one}%
% Draw box representing the margin for \gls{flow} "#1".
% \begin{macrocode}
\newcommand*{\@putmarginbox}[1]{%
-\@ff@chckifthispg{\c@page}{#1}%
-\if@notthiscol
-\else
-\@killglue
-\if@twoside
-\ifodd\c@page
-\edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}%
-\edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}%
-\else
-\edef\ff@x{\csname col@\romannumeral#1@evenx\endcsname}%
-\edef\ff@y{\csname col@\romannumeral#1@eveny\endcsname}%
-\fi
-\else
-\edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}%
-\edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}%
-\fi
-\setlength{\@ff@tmp@x}{\ff@x}%
-\setlength{\@ff@tmp@y}{\ff@y}%
-\@getmarginpos{\csname @ff@margin@\romannumeral#1\endcsname}%
-\ifthenelse{\equal{\ff@margin}{left}}{%
-\addtolength{\@ff@tmp@x}{-\marginparwidth}%
-\addtolength{\@ff@tmp@x}{-\marginparsep}%
-\ifthenelse{\boolean{columnframe\romannumeral#1}}{%
-}{}%
-}{%
-\addtolength{\@ff@tmp@x}%
-{\csname colwidth\romannumeral#1\endcsname}%
-\addtolength{\@ff@tmp@x}{\marginparsep}%
-\ifthenelse{\boolean{columnframe\romannumeral#1}}{%
-}{}%
-}%
-\raise\@ff@tmp@y
-\hb@xt@\z@{%
-\expandafter\kern\@ff@tmp@x
-\@fr@meifdraft{\@ff@box{\marginparwidth}%
-{\csname colheight\romannumeral#1\endcsname}{}}%
-{M:\number#1}\hss}\fi
-\ignorespaces}
+% \end{macrocode}
+%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with
+%\cs{@ff@pages@countreg}}
+% \begin{macrocode}
+ \@ff@chckifthispg{\@ff@pages@countreg}{#1}%
+ \if@notthiscol
+ \else
+ \@killglue
+ \if@twoside
+ \ifodd\c@page
+ \edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}%
+ \edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}%
+ \else
+ \edef\ff@x{\csname col@\romannumeral#1@evenx\endcsname}%
+ \edef\ff@y{\csname col@\romannumeral#1@eveny\endcsname}%
+ \fi
+ \else
+ \edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}%
+ \edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}%
+ \fi
+ \setlength{\@ff@tmp@x}{\ff@x}%
+ \setlength{\@ff@tmp@y}{\ff@y}%
+ \@getmarginpos{\csname @ff@margin@\romannumeral#1\endcsname}%
+ \ifthenelse{\equal{\ff@margin}{left}}%
+ {%
+ \addtolength{\@ff@tmp@x}{-\marginparwidth}%
+ \addtolength{\@ff@tmp@x}{-\marginparsep}%
+ \ifthenelse{\boolean{columnframe\romannumeral#1}}%
+ {}%
+ {}%
+ }%
+ {%
+ \addtolength{\@ff@tmp@x}%
+ {\csname colwidth\romannumeral#1\endcsname}%
+ \addtolength{\@ff@tmp@x}{\marginparsep}%
+ \ifthenelse{\boolean{columnframe\romannumeral#1}}%
+ {}%
+ {}%
+ }%
+ \raise\@ff@tmp@y
+ \hb@xt@\z@
+ {%
+ \expandafter\kern\@ff@tmp@x
+ \@fr@meifdraft{\@ff@box{\marginparwidth}%
+ {\csname colheight\romannumeral#1\endcsname}{}}%
+ {M:\number#1}\hss
+ }%
+ \fi
+ \ignorespaces
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@drawmargins}
@@ -4670,11 +8960,12 @@ adding new one}%
% on the current page.
% \begin{macrocode}
\newcommand*{\@ff@drawmargins}{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxflow}{%
-\advance\@colN by 1\relax
-\makebox[0pt][l]{\@putmarginbox{\@colN}}%
-}%
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxflow}%
+ {%
+ \advance\@colN by 1\relax
+ \makebox[0pt][l]{\@putmarginbox{\@colN}}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -4682,45 +8973,63 @@ adding new one}%
% Extract the width and height for static or \gls{dynamic}
% specified in the form \oarg{c}\oarg{height}\oarg{valign}\marg{width}
% \begin{macrocode}
-\def\@ff@getstaticpos[#1][#2][#3]#4{\@ff@tmp@x=#4\relax
-\@ff@tmp@y=#2\relax
-\def\ff@valign{#3}}
+\def\@ff@getstaticpos[#1][#2][#3]#4{%
+ \@ff@tmp@x=#4\relax
+ \@ff@tmp@y=#2\relax
+ \def\ff@valign{#3}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@dostaticbox}
% Display the savebox associated with \gls{static} "#1"
% \begin{macrocode}
\newcommand*{\@dostaticbox}[1]{%
-\edef\ff@frametype{%
-\csname @sf@frametype@\romannumeral#1\endcsname}%
-\edef\ff@col{\csname @sf@col@\romannumeral#1\endcsname}%
-\edef\ff@backcol{\csname @sf@backcol@\romannumeral#1\endcsname}%
-\@sf@setoffset{#1}%
-\expandafter\expandafter\expandafter
-\@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname
-\rotateframe{\csname @sf@angle@\romannumeral#1\endcsname}{%
-\ifthenelse{\boolean{staticframe\romannumeral#1}}{%
-\@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}{%
-\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname}
-{\csname\ff@frametype\endcsname}%
-}{%
-\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}%
-{\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname}%
-}}}
+ \edef\ff@frametype{%
+ \csname @sf@frametype@\romannumeral#1\endcsname
+ }%
+ \edef\ff@col{\csname @sf@col@\romannumeral#1\endcsname}%
+ \edef\ff@backcol{\csname @sf@backcol@\romannumeral#1\endcsname}%
+ \@sf@setoffset{#1}%
+ \expandafter\expandafter\expandafter
+ \@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname
+ \rotateframe
+ {\csname @sf@angle@\romannumeral#1\endcsname}%
+ {%
+ \ifthenelse{\boolean{staticframe\romannumeral#1}}%
+ {%
+ \@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}%
+ {%
+ \expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname
+ }
+ {\csname\ff@frametype\endcsname}%
+ }%
+ {%
+ \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}%
+ {%
+ \expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname
+ }%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@dostaticbbox}
% Now for the \gls{bbox}:
% \begin{macrocode}
\newcommand*{\@dostaticbbox}[1]{%
-\edef\ff@col{}%
-\@sf@setoffset{#1}%
-\expandafter\expandafter\expandafter
-\@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname
-\@fr@meifdraft{%
-\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}%
-{\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname}%
-}{S:\number#1;\csname @sf@id@\romannumeral#1\endcsname}}
+ \edef\ff@col{}%
+ \@sf@setoffset{#1}%
+ \expandafter\expandafter\expandafter
+ \@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname
+ \@fr@meifdraft
+ {%
+ \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}%
+ {%
+ \expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname
+ }%
+ }%
+ {S:\number#1;\csname @sf@id@\romannumeral#1\endcsname}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@putstaticbox}
@@ -4728,56 +9037,75 @@ adding new one}%
% associated border.
% \begin{macrocode}
\newcommand*{\@putstaticbox}[1]{%
-\@sf@chckifthispg{#1}%
-\if@notthiscol\else
-\@killglue
-\if@twoside
-\ifodd\c@page
-\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
-\@dostaticbox{#1}\hss}%
-\else
-\expandafter\raise\csname @sf@\romannumeral#1@eveny\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @sf@\romannumeral#1@evenx\endcsname
-\@dostaticbox{#1}\hss}%
-\fi
-\else
-\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
-\@dostaticbox{#1}\hss}%
+ \@sf@chckifthispg{#1}%
+ \if@notthiscol
+ \else
+ \@killglue
+ \if@twoside
+ \ifodd\c@page
+ \expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
+ \@dostaticbox{#1}\hss
+ }%
+ \else
+ \expandafter\raise\csname @sf@\romannumeral#1@eveny\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @sf@\romannumeral#1@evenx\endcsname
+ \@dostaticbox{#1}\hss
+ }%
+ \fi
+ \else
+ \expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
+ \@dostaticbox{#1}\hss
+ }%
+ \fi
\fi
-\fi}
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@putstaticbbox}
% Now for the \gls{bbox}:
% \begin{macrocode}
\newcommand*{\@putstaticbbox}[1]{%
-\@sf@chckifthispg{#1}%
-\if@notthiscol\else
-\@killglue
-\if@twoside
-\ifodd\c@page
-\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
-\@dostaticbbox{#1}\hss}\ignorespaces
-\else
-\expandafter\raise\csname @sf@\romannumeral#1@eveny\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @sf@\romannumeral#1@evenx\endcsname
-\@dostaticbbox{#1}\hss}\ignorespaces
-\fi
-\else
-\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
-\@dostaticbbox{#1}\hss}\ignorespaces
-\fi
-\fi}
+ \@sf@chckifthispg{#1}%
+ \if@notthiscol
+ \else
+ \@killglue
+ \if@twoside
+ \ifodd\c@page
+ \expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
+ \@dostaticbbox{#1}\hss
+ }%
+ \ignorespaces
+ \else
+ \expandafter\raise\csname @sf@\romannumeral#1@eveny\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @sf@\romannumeral#1@evenx\endcsname
+ \@dostaticbbox{#1}\hss
+ }%
+ \ignorespaces
+ \fi
+ \else
+ \expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname
+ \@dostaticbbox{#1}\hss
+ }%
+ \ignorespaces
+ \fi
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@resetst@tics}
@@ -4785,11 +9113,27 @@ adding new one}%
% the "clear" option set.
% \begin{macrocode}
\newcommand*{\@resetst@tics}{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax
-\ifthenelse{\boolean{@sf@clear@\romannumeral\@colN}}{%
-\global\sbox{%
-\csname @staticframe@\romannumeral\@colN\endcsname}{}}{}}}
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxstatic}%
+ {%
+ \advance\@colN by 1\relax
+% \end{macrocode}
+% Has the clear flag been set?
+% \begin{macrocode}
+ \ifthenelse{\boolean{@sf@clear@\romannumeral\@colN}}%
+ {%
+% \end{macrocode}
+% Set the contents of the box to empty
+% \begin{macrocode}
+ \global\sbox
+ {%
+ \csname @staticframe@\romannumeral\@colN\endcsname
+ }%
+ {}%
+ }%
+ {}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@resetdyn@mics}
@@ -4797,11 +9141,18 @@ adding new one}%
% set.
% \begin{macrocode}
\newcommand*{\@resetdyn@mics}{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax
-\ifthenelse{\boolean{@df@clear@\romannumeral\@colN}}{%
-\expandafter\global\expandafter
-\gdef\csname @dynamicframe@\romannumeral\@colN\endcsname{}}{}}}
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxdynamic}%
+ {%
+ \advance\@colN by 1\relax
+ \ifthenelse{\boolean{@df@clear@\romannumeral\@colN}}%
+ {%
+ \expandafter\global\expandafter
+ \gdef\csname @dynamicframe@\romannumeral\@colN\endcsname{}%
+ }%
+ {}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@dodfparbox}
@@ -4809,37 +9160,51 @@ adding new one}%
% "\ff@contents", style given by "\ff@style"):
% \begin{macrocode}
\newcommand*{\@dodfparbox}[1]{%
-\expandafter\let\expandafter
-\@ff@parshape\csname @df@shape@\romannumeral#1\endcsname
-\expandafter\@ff@getshape\@ff@parshape\relax
-\ifcase\ff@shape
+ \expandafter\let\expandafter
+ \@ff@parshape\csname @df@shape@\romannumeral#1\endcsname
+ \expandafter\@ff@getshape\@ff@parshape\relax
+ \ifcase\ff@shape
+% \end{macrocode}
% no shape
-\expandafter\expandafter\expandafter
-\parbox\csname @df@dim@\romannumeral#1\endcsname
-{%
-\setlength\parindent\sdfparindent
-\csname\ff@style\endcsname{\ff@contents}}%
-\or
-% \parshape
-\expandafter\expandafter\expandafter
-\parbox\csname @df@dim@\romannumeral#1\endcsname
-{%
-\setlength\parindent\sdfparindent
-\csname\ff@style\endcsname{{%
-\let\oldpar=\par
-\let\par=\ffpshpar
-\@ff@setsecthead
-\@ff@parshape
-\ff@contents\oldpar}}}%
-\or
-% \shapepar
-\expandafter\expandafter\expandafter
-\parbox\csname @df@dim@\romannumeral#1\endcsname
-{%
-\setlength\parindent\sdfparindent
-\csname\ff@style\endcsname{{\@ff@disablesec\@ff@parshape
-\ff@contents\par}}}%
-\fi
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter
+ \parbox\csname @df@dim@\romannumeral#1\endcsname
+ {%
+ \setlength\parindent\sdfparindent
+ \csname\ff@style\endcsname{\ff@contents}%
+ }%
+ \or
+% \end{macrocode}
+% \ics{parshape}
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter
+ \parbox\csname @df@dim@\romannumeral#1\endcsname
+ {%
+ \setlength\parindent\sdfparindent
+ \csname\ff@style\endcsname
+ {{%
+ \let\oldpar=\par
+ \let\par=\ffpshpar
+ \@ff@setsecthead
+ \@ff@parshape
+ \ff@contents\oldpar
+ }}%
+ }%
+ \or
+% \end{macrocode}
+% \ics{shapepar}
+% \begin{macrocode}
+ \expandafter\expandafter\expandafter
+ \parbox\csname @df@dim@\romannumeral#1\endcsname
+ {%
+ \setlength\parindent\sdfparindent
+ \csname\ff@style\endcsname
+ {{%
+ \@ff@disablesec\@ff@parshape
+ \ff@contents\par
+ }}%
+ }%
+ \fi
}
% \end{macrocode}
%\end{macro}
@@ -4847,109 +9212,144 @@ adding new one}%
% Typeset the dynamic box with its associated border.
% \begin{macrocode}
\newcommand*{\@dodynamicbox}[1]{%
-\edef\ff@frametype{%
-\csname @df@frametype@\romannumeral#1\endcsname}%
-\edef\ff@col{\csname @df@col@\romannumeral#1\endcsname}%
-\edef\ff@txtcol{\csname @df@txtcol@\romannumeral#1\endcsname}%
-\edef\ff@backcol{\csname @df@backcol@\romannumeral#1\endcsname}%
-\edef\ff@style{\csname @df@style@\romannumeral#1\endcsname}%
-\def\ff@contents{\csname @dynamicframe@\romannumeral#1\endcsname}%
-\@df@setoffset{#1}%
-\expandafter\expandafter\expandafter
-\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname
-\rotateframe{\csname @df@angle@\romannumeral#1\endcsname}{%
-\ifthenelse{\boolean{dynamicframe\romannumeral#1}}{%
-\@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}%
-{\@dodfparbox{#1}}%
-{\csname\ff@frametype\endcsname}%
-}{%
-\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}{%
-\@dodfparbox{#1}}%
-}}}
+ \edef\ff@frametype{%
+ \csname @df@frametype@\romannumeral#1\endcsname
+ }%
+ \edef\ff@col{\csname @df@col@\romannumeral#1\endcsname}%
+ \edef\ff@txtcol{\csname @df@txtcol@\romannumeral#1\endcsname}%
+ \edef\ff@backcol{\csname @df@backcol@\romannumeral#1\endcsname}%
+ \edef\ff@style{\csname @df@style@\romannumeral#1\endcsname}%
+ \def\ff@contents{\csname @dynamicframe@\romannumeral#1\endcsname}%
+ \@df@setoffset{#1}%
+ \expandafter\expandafter\expandafter
+ \@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname
+ \rotateframe{\csname @df@angle@\romannumeral#1\endcsname}%
+ {%
+ \ifthenelse{\boolean{dynamicframe\romannumeral#1}}%
+ {%
+ \@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}%
+ {\@dodfparbox{#1}}%
+ {\csname\ff@frametype\endcsname}%
+ }%
+ {%
+ \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}%
+ {%
+ \@dodfparbox{#1}%
+ }%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@dodynamicbbox}
% Now for the \gls{bbox}:
% \begin{macrocode}
\newcommand*{\@dodynamicbbox}[1]{%
-\edef\ff@col{}%
-\@df@setoffset{#1}%
-\expandafter\expandafter\expandafter
-\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname
-\@fr@meifdraft{%
-\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}{%
-\expandafter\expandafter\expandafter
-\parbox\csname @df@dim@\romannumeral#1\endcsname
-{}}%
-}{D:\number#1;\csname @df@id@\romannumeral#1\endcsname}}
+ \edef\ff@col{}%
+ \@df@setoffset{#1}%
+ \expandafter\expandafter\expandafter
+ \@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname
+ \@fr@meifdraft
+ {%
+ \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}%
+ {%
+ \expandafter\expandafter\expandafter
+ \parbox\csname @df@dim@\romannumeral#1\endcsname
+ {}%
+ }%
+ }%
+ {D:\number#1;\csname @df@id@\romannumeral#1\endcsname}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@putdynamicbox}
% Put the \gls{dynamic} "#1" at its given position
% \begin{macrocode}
\newcommand*{\@putdynamicbox}[1]{%
-\@df@chckifthispg{#1}%
-\if@notthiscol\else
-\@killglue
-\if@twoside
-\ifodd\c@page
-\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
-\@dodynamicbox{#1}\hss}\ignorespaces
-\else
-\expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname
-\@dodynamicbox{#1}\hss}\ignorespaces
-\fi
-\else
-\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
-\@dodynamicbox{#1}\hss}\ignorespaces
-\fi
-\fi}
+ \@df@chckifthispg{#1}%
+ \if@notthiscol
+ \else
+ \@killglue
+ \if@twoside
+ \ifodd\c@page
+ \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
+ \@dodynamicbox{#1}\hss
+ }%
+ \ignorespaces
+ \else
+ \expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname
+ \@dodynamicbox{#1}\hss
+ }%
+ \ignorespaces
+ \fi
+ \else
+ \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
+ \@dodynamicbox{#1}\hss
+ }%
+ \ignorespaces
+ \fi
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@putdynamicbbox}
% Bounding box:
% \begin{macrocode}
\newcommand*{\@putdynamicbbox}[1]{%
-\@df@chckifthispg{#1}%
-\if@notthiscol\else
-\@killglue
-\if@twoside
-\ifodd\c@page
-\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
-\@dodynamicbbox{#1}\hss}\ignorespaces
-\else
-\expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname
-\@dodynamicbbox{#1}\hss}\ignorespaces
-\fi
-\else
-\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
-\hb@xt@\z@{%
-\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
-\@dodynamicbbox{#1}\hss}\ignorespaces
-\fi
-\fi}
+ \@df@chckifthispg{#1}%
+ \if@notthiscol
+ \else
+ \@killglue
+ \if@twoside
+ \ifodd\c@page
+ \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
+ \@dodynamicbbox{#1}\hss
+ }%
+ \ignorespaces
+ \else
+ \expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname
+ \@dodynamicbbox{#1}\hss
+ }%
+ \ignorespaces
+ \fi
+ \else
+ \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname
+ \hb@xt@\z@
+ {%
+ \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname
+ \@dodynamicbbox{#1}\hss
+ }%
+ \ignorespaces
+ \fi
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@doheader}
% Do standard header in the standard place.
% \begin{macrocode}
\newcommand*{\@@doheader}{%
-\setlength\@ff@tmp@y{\textheight}%
-\addtolength{\@ff@tmp@y}{\headsep}%
-\def\ff@col{}%
-\def\ff@txtcol{}%
-\def\ff@backcol{{none}}%
-\@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothehead}}%
+ \setlength\@ff@tmp@y{\textheight}%
+ \addtolength{\@ff@tmp@y}{\headsep}%
+ \def\ff@col{}%
+ \def\ff@txtcol{}%
+ \def\ff@backcol{{none}}%
+ \@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothehead}}%
}
% \end{macrocode}
%\end{macro}
@@ -4957,11 +9357,11 @@ adding new one}%
% Do standard footer in the standard place.
% \begin{macrocode}
\newcommand*{\@@dofooter}{%
-\setlength\@ff@tmp@y{-\footskip}%
-\def\ff@col{}%
-\def\ff@txtcol{}%
-\def\ff@backcol{{none}}%
-\@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothefoot}}%
+ \setlength\@ff@tmp@y{-\footskip}%
+ \def\ff@col{}%
+ \def\ff@txtcol{}%
+ \def\ff@backcol{{none}}%
+ \@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothefoot}}%
}
% \end{macrocode}
%\end{macro}
@@ -4969,22 +9369,34 @@ adding new one}%
% This is a modified version of the way the picture environment
% works:
% \begin{macrocode}
-\newcommand{\@s@tfr@mes}[1]{{\@picht\textheight
-\setbox\@picbox\hb@xt@ \textwidth
-\bgroup \hbox \bgroup #1\relax
-\egroup
-\hss \egroup
-\ht\@picbox\@picht \dp\@picbox
-\z@ \mbox{\box \@picbox}}}
+\newcommand{\@s@tfr@mes}[1]{%
+ {%
+ \@picht\textheight
+ \setbox\@picbox\hb@xt@ \textwidth
+ \bgroup
+ \hbox
+ \bgroup
+ #1\relax
+ \egroup
+ \hss
+ \egroup
+ \ht\@picbox\@picht
+ \dp\@picbox\z@
+ \mbox{\box\@picbox}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@doallflowframes}
% Puts all the \glspl{flow} defined on the current page
% \begin{macrocode}
\newcommand*{\@ff@doallflowframes}{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
-\@putcolbox{\@colN}}%
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxflow}%
+ {%
+ \advance\@colN by 1\relax
+ \@putcolbox{\@colN}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -4992,9 +9404,12 @@ adding new one}%
% Flow frame \glspl{bbox}:
% \begin{macrocode}
\newcommand*{\@ff@doallflowframesbbox}{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
-\@putcolbbox{\@colN}}%
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxflow}%
+ {%
+ \advance\@colN by 1\relax
+ \@putcolbbox{\@colN}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -5002,9 +9417,12 @@ adding new one}%
% Puts all \glspl{static} defined on the current page
% \begin{macrocode}
\newcommand*{\@ff@doallstatics}{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax
-\@putstaticbox{\@colN}}%
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxstatic}%
+ {%
+ \advance\@colN by 1\relax
+ \@putstaticbox{\@colN}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -5012,9 +9430,12 @@ adding new one}%
% Static frame \glspl{bbox}:
% \begin{macrocode}
\newcommand*{\@ff@doallstaticsbbox}{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax
-\@putstaticbbox{\@colN}}%
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxstatic}%
+ {%
+ \advance\@colN by 1\relax
+ \@putstaticbbox{\@colN}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -5022,9 +9443,12 @@ adding new one}%
% Puts all the \glspl{dynamic} defined on the current page
% \begin{macrocode}
\newcommand*{\@ff@doalldynamics}{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax
-\@putdynamicbox{\@colN}}%
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxdynamic}%
+ {%
+ \advance\@colN by 1\relax
+ \@putdynamicbox{\@colN}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -5032,9 +9456,12 @@ adding new one}%
% Dynamic frame \glspl{bbox}:
% \begin{macrocode}
\newcommand*{\@ff@doalldynamicsbbox}{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax
-\@putdynamicbbox{\@colN}}%
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxdynamic}%
+ {%
+ \advance\@colN by 1\relax
+ \@putdynamicbbox{\@colN}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -5042,8 +9469,15 @@ adding new one}%
% Draw \gls{typeblock} frame if draft.
% \begin{macrocode}
\newcommand*{\@ff@dotypeblock}{%
-\makebox[0pt][l]{\@fr@meifdraft[\setffdrafttypeblockcolor]{%
-\vbox to \textheight{\hbox to \textwidth{}}}{}}}
+ \makebox[0pt][l]%
+ {%
+ \@fr@meifdraft[\setffdrafttypeblockcolor]%
+ {%
+ \vbox to \textheight{\hbox to \textwidth{}}%
+ }%
+ {}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ff@do@allframes}
@@ -5051,36 +9485,40 @@ adding new one}%
% \begin{macrocode}
\newlength\ffevenoffset
\newcommand*{\@ff@do@allframes}{%
-\ffevenoffset=0pt\relax
-\if@twoside
- \ifodd\c@page
- \else
- \ffevenoffset=-\oddsidemargin\relax
- \advance\ffevenoffset by \evensidemargin\relax
- \kern\ffevenoffset\relax
+ \ffevenoffset=0pt\relax
+ \if@twoside
+ \ifodd\c@page
+ \else
+ \ffevenoffset=-\oddsidemargin\relax
+ \advance\ffevenoffset by \evensidemargin\relax
+ \kern\ffevenoffset\relax
+ \fi
\fi
-\fi
-\setlength{\@ff@tmp@x}{\textwidth}%
-\advance\@ff@tmp@x by -\ffevenoffset\relax
-\makebox[\@ff@tmp@x][l]{%
-\@s@tfr@mes{%
-\@ff@doallstatics
-\@@doheader
-\@@dofooter
-\@ff@doallflowframes
-\@ff@doalldynamics
-\ifshowtypeblock
- \@ff@dotypeblock
-\fi
-\ifshowframebbox
- \@ff@doallstaticsbbox
- \@ff@doallflowframesbbox
- \@ff@doalldynamicsbbox
-\fi
-\ifshowmargins
- \@ff@drawmargins
-\fi
-}}}
+ \setlength{\@ff@tmp@x}{\textwidth}%
+ \advance\@ff@tmp@x by -\ffevenoffset\relax
+ \makebox[\@ff@tmp@x][l]%
+ {%
+ \@s@tfr@mes
+ {%
+ \@ff@doallstatics
+ \@@doheader
+ \@@dofooter
+ \@ff@doallflowframes
+ \@ff@doalldynamics
+ \ifshowtypeblock
+ \@ff@dotypeblock
+ \fi
+ \ifshowframebbox
+ \@ff@doallstaticsbbox
+ \@ff@doallflowframesbbox
+ \@ff@doalldynamicsbbox
+ \fi
+ \ifshowmargins
+ \@ff@drawmargins
+ \fi
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@outputdblcol}
@@ -5094,53 +9532,71 @@ adding new one}%
% \begin{macrocode}
\newcount\@nxtcol
\def\@outputdblcol{%
-\@nxtcol=\c@thisframe
-\c@curpg=\c@page
-\@g@tnextcol{\@nxtcol}%
-\if@ff@nwpg % next flow frame starts on new page
- \global\@firstcolumntrue
- \@setcolbox\c@thisframe
- \if@specialpage
- \global\@specialpagefalse
- \@nameuse{ps@\@specialstyle}\relax
- \fi
- \if@twoside
- \ifodd\count\z@
+ \@nxtcol=\c@thisframe
+% \end{macrocode}
+%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with
+%\cs{@ff@pages@countreg}}
+% \begin{macrocode}
+ \c@curpg=\@ff@pages@countreg
+ \@g@tnextcol{\@nxtcol}%
+ \if@ff@nwpg
+% \end{macrocode}
+% Next flow frame starts on new page.
+% \begin{macrocode}
+ \global\@firstcolumntrue
+ \@setcolbox\c@thisframe
+ \if@specialpage
+ \global\@specialpagefalse
+ \@nameuse{ps@\@specialstyle}\relax
+ \fi
+ \if@twoside
+ \ifodd\count\z@
+ \let\@thehead\@oddhead
+ \let\@thefoot\@oddfoot
+ \else
+ \let\@thehead\@evenhead
+ \let\@thefoot\@evenfoot
+ \fi
+ \else
\let\@thehead\@oddhead
\let\@thefoot\@oddfoot
- \else
- \let\@thehead\@evenhead
- \let\@thefoot\@evenfoot
\fi
+ \@begindvi
+ \@dodynamicthehead\@dodynamicthefoot
+ \vbadness=\@M
+ \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}%
+ \@combinedblfloats
+ \@outputpage
+% \end{macrocode}
+% Shipout pages without flow frames.
+%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with
+%\cs{@ff@pages@countreg}}
+% \begin{macrocode}
+ \advance\c@curpg by -\@ff@pages@countreg\relax
+ \whiledo{\c@curpg>0}%
+ {%
+ \advance\c@curpg by -1\relax
+ \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}%
+ \@outputpage
+ }
+ \begingroup
+ \@dblfloatplacement
+ \@startdblcolumn
+ \@whilesw \if@fcolmade \fi
+ {\@outputpage \@startdblcolumn }%
+ \endgroup
+ \@resetst@tics
+ \@resetdyn@mics
\else
- \let\@thehead\@oddhead
- \let\@thefoot\@oddfoot
- \fi
- \@begindvi
- \@dodynamicthehead\@dodynamicthefoot
- \vbadness=\@M
- \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}%
- \@combinedblfloats
- \@outputpage
-%shipout pages without flow frames
-\advance\c@curpg by -\c@page\relax
- \whiledo{\c@curpg>0}{\advance\c@curpg by -1\relax
- \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}%
-\@outputpage}
- \begingroup
- \@dblfloatplacement
- \@startdblcolumn
- \@whilesw \if@fcolmade \fi
- {\@outputpage \@startdblcolumn }\endgroup
- \@resetst@tics
- \@resetdyn@mics
-\else % still on same page, save contents of box255
- \global\@firstcolumnfalse
- \@setcolbox\c@thisframe
-\fi
-\global\c@thisframe=\@nxtcol
-\@setcol{\c@thisframe}\relax
-\global\@colht\vsize
+% \end{macrocode}
+% Still on same page, save contents of box255
+% \begin{macrocode}
+ \global\@firstcolumnfalse
+ \@setcolbox\c@thisframe
+ \fi
+ \global\c@thisframe=\@nxtcol
+ \@setcol{\c@thisframe}\relax
+ \global\@colht\vsize
}
% \end{macrocode}
%\end{macro}
@@ -5153,7 +9609,8 @@ adding new one}%
\global\@dbltoproom\dbltopfraction\@colht\@textmin
\@colht\advance\@textmin -\@dbltoproom
\@fpmin\dblfloatpagefraction\vsize
- \@fptop \@dblfptop \@fpsep \@dblfpsep \@fpbot \@dblfpbot}
+ \@fptop \@dblfptop \@fpsep \@dblfpsep \@fpbot \@dblfpbot
+}
% \end{macrocode}
%\end{macro}
%
@@ -5205,7 +9662,8 @@ adding new one}%
%\begin{macro}{\@onecolumn}
% \begin{macrocode}
\newcommand*{\@onecolumn}[1][all]{%
-\@onecolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}}
+ \@onecolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}%
+}
% \end{macrocode}
%\end{macro}
% Need a length to store the height of
@@ -5235,9 +9693,12 @@ adding new one}%
%\begin{macro}{\@onecolumninarea}
% \begin{macrocode}
\newcommand*{\@onecolumninarea}[5][all]{%
-\setlength{\columnheight}{#3}%
-\ifffvadjust\adjustheight{\columnheight}\fi%
-\@n@wflowframe[#1]{#2}{\columnheight}{#4}{#5}}
+ \setlength{\columnheight}{#3}%
+ \ifffvadjust
+ \adjustheight{\columnheight}%
+ \fi
+ \@n@wflowframe[#1]{#2}{\columnheight}{#4}{#5}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\twocolumn}
@@ -5257,7 +9718,8 @@ adding new one}%
%\begin{macro}{\@twocolumn}
% \begin{macrocode}
\newcommand*{\@twocolumn}[1][all]{%
-\@twocolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}}
+ \@twocolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\twocolumninarea}
@@ -5274,7 +9736,9 @@ adding new one}%
% \begin{macrocode}
\newcommand*{\@twocolumninarea}[5][all]{%
\setlength{\columnheight}{#3}%
- \ifffvadjust\adjustheight{\columnheight}\fi%
+ \ifffvadjust
+ \adjustheight{\columnheight}%
+ \fi
\setlength{\columnwidth}{#2}%
\addtolength{\columnwidth}{-\columnsep}%
\divide\columnwidth by 2\relax
@@ -5303,7 +9767,8 @@ adding new one}%
% \cs{Ncolumn}\oarg{pages}\marg{n}.
% \begin{macrocode}
\newcommand*{\Ncolumn}[2][all]{%
-\Ncolumninarea[#1]{#2}{\textwidth}{\textheight}{0pt}{0pt}}
+ \Ncolumninarea[#1]{#2}{\textwidth}{\textheight}{0pt}{0pt}%
+}
\@onlypreamble{\Ncolumn}
% \end{macrocode}
%\end{macro}
@@ -5314,24 +9779,32 @@ adding new one}%
% \cs{Ncolumninarea}\oarg{pages}\marg{n}\marg{w}\marg{h}\marg{x}\marg{y}.
% \begin{macrocode}
\newcommand*{\Ncolumninarea}[6][all]{%
-\ifnum#2>2\relax
- \@Ncolumninarea[#1]{#2}{#3}{#4}{#5}{#6}%
-\else
- \ifcase#2\relax
- \PackageError{flowfram}{%
- You have requested 0 flowframes!}{%
- It does not make much sense to ask to create 0 flow frames}%
- \or
- \onecolumninarea[#1]{#3}{#4}{#5}{#6}%
- \or
- \twocolumninarea[#1]{#3}{#4}{#5}{#6}%
+ \ifnum#2>2\relax
+ \@Ncolumninarea[#1]{#2}{#3}{#4}{#5}{#6}%
\else
- \PackageError{flowfram}{%
- Can't create a negative number of flow frames!}{%
- You have asked for \number#2 \space flow frames
- which really doesn't make sense}%
+ \ifcase#2\relax
+ \PackageError{flowfram}%
+ {%
+ You have requested 0 flowframes!%
+ }%
+ {%
+ It does not make much sense to ask to create 0 flow frames%
+ }%
+ \or
+ \onecolumninarea[#1]{#3}{#4}{#5}{#6}%
+ \or
+ \twocolumninarea[#1]{#3}{#4}{#5}{#6}%
+ \else
+ \PackageError{flowfram}%
+ {%
+ Can't create a negative number of flow frames!%
+ }%
+ {%
+ You have asked for \number#2 \space flow frames
+ which really doesn't make sense%
+ }%
+ \fi
\fi
-\fi
}
\@onlypreamble{\Ncolumninarea}
@@ -5397,7 +9870,8 @@ adding new one}%
% \cs{onecolumntop}\oarg{pages}\marg{type}\marg{H}
% \begin{macrocode}
\newcommand*{\onecolumntop}[3][all]{%
-\onecolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
+ \onecolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}%
+}
\@onlypreamble{\onecolumntop}
% \end{macrocode}
%\end{macro}
@@ -5406,7 +9880,8 @@ adding new one}%
% Syntax: \cs{onecolumnStop}\oarg{pages}\marg{H}
% \begin{macrocode}
\newcommand*{\onecolumnStop}[2][all]{%
-\onecolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}}
+ \onecolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\onecolumnDtop}
@@ -5414,7 +9889,8 @@ adding new one}%
% Syntax: \cs{onecolumnDtop}\oarg{pages}\marg{H}
% \begin{macrocode}
\newcommand*{\onecolumnDtop}[2][all]{%
-\onecolumntopinarea[#1]{dynamic}{#2}{\textwidth}{\textheight}{0pt}{0pt}}
+ \onecolumntopinarea[#1]{dynamic}{#2}{\textwidth}{\textheight}{0pt}{0pt}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\newframe}
@@ -5423,15 +9899,30 @@ adding new one}%
% \cs{newframe}\oarg{pages}\marg{type}\marg{w}\marg{h}\marg{x}\marg{y}.
% \begin{macrocode}
\newcommand*{\newframe}[6][all]{%
-\ifthenelse{\equal{#2}{flow}}{%
-\@n@wflowframe[#1]{#3}{#4}{#5}{#6}%
-}{%
-\ifthenelse{\equal{#2}{dynamic}}{%
-\@n@wdynamicframe[#1]{#3}{#4}{#5}{#6}}{%
-\ifthenelse{\equal{#2}{static}}{%
-\@n@wstaticframe[#1]{#3}{#4}{#5}{#6}}{%
-\PackageError{flowfram}{Unknown frame type '#2'}{%
-Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
+ \ifthenelse{\equal{#2}{flow}}%
+ {%
+ \@n@wflowframe[#1]{#3}{#4}{#5}{#6}%
+ }%
+ {%
+ \ifthenelse{\equal{#2}{dynamic}}%
+ {%
+ \@n@wdynamicframe[#1]{#3}{#4}{#5}{#6}%
+ }%
+ {%
+ \ifthenelse{\equal{#2}{static}}%
+ {%
+ \@n@wstaticframe[#1]{#3}{#4}{#5}{#6}%
+ }%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type '#2'}%
+ {%
+ Available frame types are: 'flow', 'static' and 'dynamic'%
+ }%
+ }%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\onecolumntopinarea}
@@ -5442,15 +9933,17 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
\newlength\@ff@staticH
\newcommand*{\onecolumntopinarea}[7][all]{%
-\setlength{\@ff@staticH}{#3}%
-\setlength{\@ff@tmp@y}{#5}%
-\addtolength{\@ff@tmp@y}{-\@ff@staticH}%
-\setlength{\columnheight}{\@ff@tmp@y}%
-\addtolength{\columnheight}{-\vcolumnsep}%
-\ifffvadjust\adjustheight{\columnheight}\fi%
-\addtolength{\@ff@tmp@y}{#7}%
-\newframe[#1]{#2}{#4}{\@ff@staticH}{#6}{\@ff@tmp@y}%
-\@n@wflowframe[#1]{#4}{\columnheight}{#6}{#7}%
+ \setlength{\@ff@staticH}{#3}%
+ \setlength{\@ff@tmp@y}{#5}%
+ \addtolength{\@ff@tmp@y}{-\@ff@staticH}%
+ \setlength{\columnheight}{\@ff@tmp@y}%
+ \addtolength{\columnheight}{-\vcolumnsep}%
+ \ifffvadjust
+ \adjustheight{\columnheight}%
+ \fi
+ \addtolength{\@ff@tmp@y}{#7}%
+ \newframe[#1]{#2}{#4}{\@ff@staticH}{#6}{\@ff@tmp@y}%
+ \@n@wflowframe[#1]{#4}{\columnheight}{#6}{#7}%
}
\@onlypreamble{\onecolumntopinarea}
@@ -5462,7 +9955,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% \cs{onecolumnStopinarea}\oarg{pages}\marg{H}\marg{w}\marg{h}\marg{x}\marg{y}.
% \begin{macrocode}
\newcommand*{\onecolumnStopinarea}[6][all]{%
-\onecolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
+ \onecolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\onecolumnDtopinarea}
@@ -5471,7 +9965,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% \cs{onecolumnDtopinarea}\oarg{pages}\marg{H}\marg{w}\marg{h}\marg{x}\marg{y}.
% \begin{macrocode}
\newcommand*{\onecolumnDtopinarea}[6][all]{%
-\onecolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
+ \onecolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\twocolumntop}
@@ -5484,7 +9979,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% \gls{typeblock}:
% \begin{macrocode}
\newcommand*{\twocolumntop}[3][all]{%
-\twocolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
+ \twocolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}%
+}
\@onlypreamble{\twocolumntop}
% \end{macrocode}
%\end{macro}
@@ -5492,14 +9988,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Special case for \gls{static}.
% \begin{macrocode}
\newcommand*{\twocolumnStop}[2][all]{%
-\@twocolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}}
+ \@twocolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\twocolumnDtop}
% Special case for \gls{dynamic}.
% \begin{macrocode}
\newcommand*{\twocolumnDtop}[2][all]{%
-\twocolumntop[#1]{dynamic}{#2}}
+ \twocolumntop[#1]{dynamic}{#2}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -5558,14 +10056,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Special case for \gls{static}.
% \begin{macrocode}
\newcommand*{\twocolumnStopinarea}[6][all]{%
-\twocolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
+ \twocolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\twocolumnDtopinarea}
% Special case for \gls{dynamic}.
% \begin{macrocode}
\newcommand*{\twocolumnDtopinarea}[6][all]{%
-\twocolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
+ \twocolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\Ncolumntop}
@@ -5576,7 +10076,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% \cs{Ncolumntop}\oarg{pages}\marg{type}\marg{n}\marg{H}
% \begin{macrocode}
\newcommand*{\Ncolumntop}[4][all]{%
-\Ncolumntopinarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}}
+ \Ncolumntopinarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}%
+}
\@onlypreamble{\Ncolumntop}
% \end{macrocode}
%\end{macro}
@@ -5584,14 +10085,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Special case for \gls{static}.
% \begin{macrocode}
\newcommand*{\NcolumnStop}[3][all]{%
-\Ncolumntop[#1]{static}{#2}{#3}}
+ \Ncolumntop[#1]{static}{#2}{#3}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\NcolumnDtop}
% Special case for \gls{dynamic}.
% \begin{macrocode}
\newcommand*{\NcolumnDtop}[3][all]{%
-\Ncolumntop[#1]{dynamic}{#2}{#3}}
+ \Ncolumntop[#1]{dynamic}{#2}{#3}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\Ncolumntopinarea}
@@ -5599,24 +10102,32 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% number.
% \begin{macrocode}
\newcommand*{\Ncolumntopinarea}[8][all]{%
-\ifnum#3>2\relax
- \@Ncolumntopinarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
-\else
- \ifcase#3\relax
- \PackageError{flowfram}{%
- You have requested 0 flowframes!}{%
- It does not make much sense to ask to create 0 flow frames}
- \or
- \onecolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
- \or
- \twocolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
+ \ifnum#3>2\relax
+ \@Ncolumntopinarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
\else
- \PackageError{flowfram}{%
- Can't create a negative number of flow frames!}{%
- You have asked for \number#3 \space flow frames
- which really doesn't make sense}%
+ \ifcase#3\relax
+ \PackageError{flowfram}%
+ {%
+ You have requested 0 flowframes!%
+ }%
+ {%
+ It does not make much sense to ask to create 0 flow frames%
+ }%
+ \or
+ \onecolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
+ \or
+ \twocolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
+ \else
+ \PackageError{flowfram}%
+ {%
+ Can't create a negative number of flow frames!%
+ }%
+ {%
+ You have asked for \number#3 \space flow frames
+ which really doesn't make sense%
+ }%
+ \fi
\fi
-\fi
}
\@onlypreamble{\Ncolumntopinarea}
% \end{macrocode}
@@ -5644,7 +10155,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% adjust the flow frame height so that it is a multiple of
% \cs{baselineskip}
% \begin{macrocode}
- \ifffvadjust\adjustheight{\columnheight}\fi%
+ \ifffvadjust
+ \adjustheight{\columnheight}%
+ \fi
% \end{macrocode}
% work out the widths of the flow frames
% \begin{macrocode}
@@ -5685,14 +10198,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Specific case for \gls{static}.
% \begin{macrocode}
\newcommand*{\NcolumnStopinarea}[7][all]{%
-\Ncolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}{#7}}
+ \Ncolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}{#7}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\NcolumnDtopinarea}
% Specific case for \gls{dynamic}.
% \begin{macrocode}
\newcommand*{\NcolumnDtopinarea}[7][all]{%
-\Ncolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}{#7}}
+ \Ncolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}{#7}%
+}
% \end{macrocode}
%\end{macro}
% Now the same kind of thing but with the \meta{type} frame at the
@@ -5704,7 +10219,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% \cs{onecolumnbottom}\oarg{pages}\marg{type}\marg{H}
% \begin{macrocode}
\newcommand*{\onecolumnbottom}[3][all]{%
-\onecolumnbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
+ \onecolumnbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}%
+}
% \end{macrocode}
%\end{macro}
% This command may only be used in the preamble.
@@ -5715,14 +10231,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Special case for \gls{static}.
% \begin{macrocode}
\newcommand*{\onecolumnSbottom}[2][all]{%
-\onecolumnbottom[#1]{static}{#2}}
+ \onecolumnbottom[#1]{static}{#2}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\onecolumnDbottom}
% Special case for \gls{dynamic}.
% \begin{macrocode}
\newcommand*{\onecolumnDbottom}[2][all]{%
-\onecolumnbottom[#1]{dynamic}{#2}}
+ \onecolumnbottom[#1]{dynamic}{#2}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -5740,7 +10258,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
\setlength{\columnheight}{#5}%
\addtolength{\columnheight}{-\@ff@staticH}%
\addtolength{\columnheight}{-\vcolumnsep}%
- \ifffvadjust\adjustheight{\columnheight}\fi%
+ \ifffvadjust
+ \adjustheight{\columnheight}%
+ \fi
\setlength{\@ff@tmp@y}{#5}%
\addtolength{\@ff@tmp@y}{-\columnheight}%
\addtolength{\@ff@tmp@y}{#7}%
@@ -5757,14 +10277,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Special case for \gls{static}.
% \begin{macrocode}
\newcommand*{\onecolumnSbottominarea}[6][all]{%
-\onecolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
+ \onecolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\onecolumnDbottominarea}
% Special case for \gls{dynamic}.
% \begin{macrocode}
\newcommand*{\onecolumnDbottominarea}[6][all]{%
-\onecolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
+ \onecolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\twocolumnbottom}
@@ -5775,7 +10297,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% \cs{twocolumnbottom}\oarg{pages}\marg{type}\marg{H}.
% \begin{macrocode}
\newcommand*{\twocolumnbottom}[3][all]{%
-\twocolumnSbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
+ \twocolumnSbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}%
+}
\@onlypreamble{\twocolumnbottom}
% \end{macrocode}
%\end{macro}
@@ -5783,14 +10306,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Special case for \gls{static}.
% \begin{macrocode}
\newcommand*{\twocolumnSbottom}[2][all]{%
-\twocolumnbottom[#1]{static}{#2}}
+ \twocolumnbottom[#1]{static}{#2}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\twocolumnDbottom}
% Special case for \gls{dynamic}.
% \begin{macrocode}
\newcommand*{\twocolumnDbottom}[2][all]{%
-\twocolumnbottom[#1]{dynamic}{#2}}
+ \twocolumnbottom[#1]{dynamic}{#2}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\twocolumnbottominarea}
@@ -5854,14 +10379,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Special case for \gls{static}.
% \begin{macrocode}
\newcommand*{\twocolumnSbottominarea}[6][all]{%
-\twocolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
+ \twocolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\twocolumnDbottominarea}
% Special case for \gls{dynamic}.
% \begin{macrocode}
\newcommand*{\twocolumnDbottominarea}[6][all]{%
-\twocolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
+ \twocolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}%
+}
% \end{macrocode}
%\end{macro}
% Now for an arbitrary number of parallel \glspl{flow}
@@ -5873,7 +10400,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% \cs{Ncolumnbottom}\oarg{pages}\marg{type}\marg{H}.
% \begin{macrocode}
\newcommand*{\Ncolumnbottom}[4][all]{%
-\Ncolumnbottominarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}}
+ \Ncolumnbottominarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}%
+}
\@onlypreamble{\Ncolumnbottom}
% \end{macrocode}
%\end{macro}
@@ -5881,38 +10409,44 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Special case for \gls{static}.
% \begin{macrocode}
\newcommand*{\NcolumnSbottom}[3][all]{%
-\Ncolumnbottom[#1]{static}{#2}{#3}}
+ \Ncolumnbottom[#1]{static}{#2}{#3}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\NcolumnDbottom}
% Special case for \gls{dynamic}.
% \begin{macrocode}
\newcommand*{\NcolumnDbottom}[3][all]{%
-\Ncolumnbottom[#1]{dynamic}{#2}{#3}}
+ \Ncolumnbottom[#1]{dynamic}{#2}{#3}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\Ncolumnbottominarea}
% Again check the user has requested a sensible number.
% \begin{macrocode}
\newcommand*{\Ncolumnbottominarea}[8][all]{%
-\ifnum#3>2\relax
- \@Ncolumnbottominarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
-\else
- \ifcase#3\relax
- \PackageError{flowfram}{%
- You have requested 0 flowframes!}{%
- It does not make much sense to ask to create 0 flow frames}
- \or
- \onecolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
- \or
- \twocolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
+ \ifnum#3>2\relax
+ \@Ncolumnbottominarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
\else
- \PackageError{flowfram}{%
- Can't create a negative number of flow frames!}{%
- You have asked for \number#3 \space flow frames
- which really doesn't make sense}%
+ \ifcase#3\relax
+ \PackageError{flowfram}{%
+ You have requested 0 flowframes!}{%
+ It does not make much sense to ask to create 0 flow frames}
+ \or
+ \onecolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
+ \or
+ \twocolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}%
+ \else
+ \PackageError{flowfram}%
+ {%
+ Can't create a negative number of flow frames!%
+ }%
+ {%
+ You have asked for \number#3 \space flow frames
+ which really doesn't make sense%
+ }%
+ \fi
\fi
-\fi
}
\@onlypreamble{\Ncolumnbottominarea}
% \end{macrocode}
@@ -5933,7 +10467,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% adjust the flow frame height so that it is a multiple of
% \cs{baselineskip}
% \begin{macrocode}
- \ifffvadjust\adjustheight{\columnheight}\fi
+ \ifffvadjust
+ \adjustheight{\columnheight}%
+ \fi
\newframe[#1]{#2}{#5}{\@ff@staticH}{#7}{#8}%
% \end{macrocode}
% work out the $y$ offset of the flow frames
@@ -5982,14 +10518,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Specific case for \gls{static}.
% \begin{macrocode}
\newcommand*{\NcolumnSbottominarea}[1][all]{%
-\Ncolumnbottominarea[#1]{static}}
+ \Ncolumnbottominarea[#1]{static}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\NcolumnDbottominarea}
% Specific case for \gls{dynamic}.
% \begin{macrocode}
\newcommand*{\NcolumnDbottominarea}[1][all]{%
-\Ncolumnbottominarea[#1]{dynamic}}
+ \Ncolumnbottominarea[#1]{dynamic}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\adjustheight}
@@ -6000,10 +10538,10 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% \end{macrocode}
% convert to an integer
% \begin{macrocode}
-\@ff@adjh=#1\relax
-\divide\@ff@adjh by \baselineskip\relax
-#1=\baselineskip\relax
-\multiply#1 by \@ff@adjh\relax
+ \@ff@adjh=#1\relax
+ \divide\@ff@adjh by \baselineskip\relax
+ #1=\baselineskip\relax
+ \multiply#1 by \@ff@adjh\relax
}
% \end{macrocode}
%\end{macro}
@@ -6011,8 +10549,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Adjust the value of "\columnsep" so that the margins will fit between columns.
% \begin{macrocode}
\newcommand*{\adjustcolsep}{%
-\multiply\columnsep by 2\relax
-\addtolength{\columnsep}{\marginparwidth}}
+ \multiply\columnsep by 2\relax
+ \addtolength{\columnsep}{\marginparwidth}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -6040,7 +10579,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% frames is equal to the paper height.
% \begin{macrocode}
\newcommand*{\vtwotone}[1][all]{%
-\def\ff@pages{#1}\@vtwotone}
+ \def\ff@pages{#1}%
+ \@vtwotone
+}
\newcommand*{\@vtwotone}[1][0pt]{\@@vtwotonebottom{#1}{\paperheight}}
% \end{macrocode}
@@ -6053,17 +10594,17 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% where the first frame starts at \meta{xoffset}.
% \begin{macrocode}
\newcommand*{\@@vtwotonebottom}[8]{%
-\computeleftedgeodd{\@ff@tmp@x}%
-\if@twoside
- \computeleftedgeeven{\@ff@tmp@x@even}%
-\else
- \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
-\fi
-\computebottomedge{\@ff@tmp@y}%
-\addtolength{\@ff@tmp@x}{#1}%
-\addtolength{\@ff@tmp@x@even}{#1}%
-\@nextvband{\ff@pages}{#2}{#3}{#4}{#5}%
-\@nextvband{\ff@pages}{#2}{#6}{#7}{#8}%
+ \computeleftedgeodd{\@ff@tmp@x}%
+ \if@twoside
+ \computeleftedgeeven{\@ff@tmp@x@even}%
+ \else
+ \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
+ \fi
+ \computebottomedge{\@ff@tmp@y}%
+ \addtolength{\@ff@tmp@x}{#1}%
+ \addtolength{\@ff@tmp@x@even}{#1}%
+ \@nextvband{\ff@pages}{#2}{#3}{#4}{#5}%
+ \@nextvband{\ff@pages}{#2}{#6}{#7}{#8}%
}
\@onlypreamble{\vtwotone}
@@ -6073,7 +10614,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Border strip along the bottom of the page
% \begin{macrocode}
\newcommand*{\vtwotonebottom}[1][all]{%
-\def\ff@pages{#1}\@vtwotonebottom}
+ \def\ff@pages{#1}%
+ \@vtwotonebottom
+}
\@onlypreamble{\vtwotonebottom}
@@ -6084,23 +10627,25 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Border strip along the top of the page
% \begin{macrocode}
\newcommand*{\vtwotonetop}[1][all]{%
-\def\ff@pages{#1}\@vtwotonetop}
+ \def\ff@pages{#1}%
+ \@vtwotonetop
+}
\newcommand*{\@vtwotonetop}[2][0pt]{\@@vtwotonetop{#1}{#2}}
\newcommand*{\@@vtwotonetop}[8]{%
-\computeleftedgeodd{\@ff@tmp@x}%
-\if@twoside
- \computeleftedgeeven{\@ff@tmp@x@even}%
-\else
- \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
-\fi
-\computetopedge{\@ff@tmp@y}%
-\addtolength{\@ff@tmp@y}{-#2}%
-\addtolength{\@ff@tmp@x}{#1}%
-\addtolength{\@ff@tmp@x@even}{#1}%
-\@nextvband{\ff@pages}{#2}{#3}{#4}{#5}%
-\@nextvband{\ff@pages}{#2}{#6}{#7}{#8}%
+ \computeleftedgeodd{\@ff@tmp@x}%
+ \if@twoside
+ \computeleftedgeeven{\@ff@tmp@x@even}%
+ \else
+ \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
+ \fi
+ \computetopedge{\@ff@tmp@y}%
+ \addtolength{\@ff@tmp@y}{-#2}%
+ \addtolength{\@ff@tmp@x}{#1}%
+ \addtolength{\@ff@tmp@x@even}{#1}%
+ \@nextvband{\ff@pages}{#2}{#3}{#4}{#5}%
+ \@nextvband{\ff@pages}{#2}{#6}{#7}{#8}%
}
% \end{macrocode}
%\end{macro}
@@ -6111,16 +10656,20 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% On exit, "\@ff@tmp@x" is set to the right border.
% \begin{macrocode}
\newcommand*{\@nextvband}[5]{%
-\setlength{\@ff@staticW}{#3}%
-\ifthenelse{\equal{#5}{}}{%
-\newstaticframe[#1]{\@ff@staticW}{#2}{\@ff@tmp@x}{\@ff@tmp@y}}%
-{\newstaticframe[#1]{\@ff@staticW}{#2}{\@ff@tmp@x}{\@ff@tmp@y}[#5]}%
-\expandafter\global\expandafter\setlength
- \csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{%
- \@ff@tmp@x@even}%
-\@setframecol#4\end{\c@maxstatic}{backcol}{sf}%
-\addtolength{\@ff@tmp@x}{\@ff@staticW}%
-\addtolength{\@ff@tmp@x@even}{\@ff@staticW}%
+ \setlength{\@ff@staticW}{#3}%
+ \ifthenelse{\equal{#5}{}}%
+ {%
+ \newstaticframe[#1]{\@ff@staticW}{#2}{\@ff@tmp@x}{\@ff@tmp@y}%
+ }%
+ {%
+ \newstaticframe[#1]{\@ff@staticW}{#2}{\@ff@tmp@x}{\@ff@tmp@y}[#5]%
+ }%
+ \expandafter\global\expandafter\setlength
+ \csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{%
+ \@ff@tmp@x@even}%
+ \@setframecol#4\end{\c@maxstatic}{backcol}{sf}%
+ \addtolength{\@ff@tmp@x}{\@ff@staticW}%
+ \addtolength{\@ff@tmp@x@even}{\@ff@staticW}%
}
% \end{macrocode}
%\end{macro}
@@ -6140,14 +10689,17 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% first optional argument, and look for the next.
% \begin{macrocode}
\newcommand*{\vNtone}[1][all]{%
-\def\ff@pages{#1}\@vNtone}
+ \def\ff@pages{#1}%
+ \@vNtone
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@vNtone}
% Got the first argument, now get the next.
% \begin{macrocode}
\newcommand*{\@vNtone}[2][0pt]{%
-\@@vNtone{#1}{#2}{\paperheight}}
+ \@@vNtone{#1}{#2}{\paperheight}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@vNtone}
@@ -6155,18 +10707,18 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% bottom of the page with height "#3".
% \begin{macrocode}
\newcommand*{\@@vNtone}[3]{%
-\computeleftedgeodd{\@ff@tmp@x}%
-\if@twoside
- \computeleftedgeeven{\@ff@tmp@x@even}%
-\else
- \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
-\fi
-\computebottomedge{\@ff@tmp@y}%
-\addtolength{\@ff@tmp@x}{#1}%
-\addtolength{\@ff@tmp@x@even}{#1}%
-\@thisstrip=#2\relax
-\setlength{\@ff@staticH}{#3}%
-\@nextvNband%
+ \computeleftedgeodd{\@ff@tmp@x}%
+ \if@twoside
+ \computeleftedgeeven{\@ff@tmp@x@even}%
+ \else
+ \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
+ \fi
+ \computebottomedge{\@ff@tmp@y}%
+ \addtolength{\@ff@tmp@x}{#1}%
+ \addtolength{\@ff@tmp@x@even}{#1}%
+ \@thisstrip=#2\relax
+ \setlength{\@ff@staticH}{#3}%
+ \@nextvNband
}
% \end{macrocode}
%\end{macro}
@@ -6174,20 +10726,23 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Recursively do the next strip.
% \begin{macrocode}
\newcommand*{\@nextvNband}{%
-\ifnum\@thisstrip>0\relax
- \let\flf@next\@@nextvNband
-\else
- \let\flf@next\relax
-\fi
-\advance\@thisstrip by -1\relax
-\flf@next}
+ \ifnum\@thisstrip>0\relax
+ \let\flf@next\@@nextvNband
+ \else
+ \let\flf@next\relax
+ \fi
+ \advance\@thisstrip by -1\relax
+ \flf@next
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@nextvNband}
% Do current strip, and go on to next one.
% \begin{macrocode}
\newcommand*{\@@nextvNband}[3]{%
-\@nextvband{\ff@pages}{\@ff@staticH}{#1}{#2}{#3}\@nextvNband}
+ \@nextvband{\ff@pages}{\@ff@staticH}{#1}{#2}{#3}%
+ \@nextvNband
+}
\@onlypreamble{\vNtone}
% \end{macrocode}
@@ -6197,14 +10752,17 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% but user specifies the height.
% \begin{macrocode}
\newcommand*{\vNtonebottom}[1][all]{%
-\def\ff@pages{#1}\@vNtonebottom}
+ \def\ff@pages{#1}%
+ \@vNtonebottom
+}
\@onlypreamble{\vNtonebottom}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@vNtonebottom}
% \begin{macrocode}
\newcommand*{\@vNtonebottom}[3][0pt]{%
-\@@vNtone{#1}{#2}{#3}}
+ \@@vNtone{#1}{#2}{#3}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\vNtonetop}
@@ -6213,7 +10771,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% argument.
% \begin{macrocode}
\newcommand*{\vNtonetop}[1][all]{%
-\def\ff@pages{#1}\@vNtonetop}
+ \def\ff@pages{#1}%
+ \@vNtonetop
+}
\@onlypreamble{\vNtonetop}
% \end{macrocode}
%\end{macro}
@@ -6221,7 +10781,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Get next optional argument.
% \begin{macrocode}
\newcommand*{\@vNtonetop}[3][0pt]{%
-\@@vNtonetop{#1}{#2}{#3}}
+ \@@vNtonetop{#1}{#2}{#3}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@vNtonetop}
@@ -6229,19 +10790,19 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% recursively.
% \begin{macrocode}
\newcommand*{\@@vNtonetop}[3]{%
-\computeleftedgeodd{\@ff@tmp@x}%
-\if@twoside
- \computeleftedgeeven{\@ff@tmp@x@even}%
-\else
- \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
-\fi
-\computetopedge{\@ff@tmp@y}%
-\addtolength{\@ff@tmp@y}{-#3}%
-\addtolength{\@ff@tmp@x}{#1}%
-\addtolength{\@ff@tmp@x@even}{#1}%
-\@thisstrip=#2\relax
-\setlength{\@ff@staticH}{#3}%
-\@nextvNband%
+ \computeleftedgeodd{\@ff@tmp@x}%
+ \if@twoside
+ \computeleftedgeeven{\@ff@tmp@x@even}%
+ \else
+ \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
+ \fi
+ \computetopedge{\@ff@tmp@y}%
+ \addtolength{\@ff@tmp@y}{-#3}%
+ \addtolength{\@ff@tmp@x}{#1}%
+ \addtolength{\@ff@tmp@x@even}{#1}%
+ \@thisstrip=#2\relax
+ \setlength{\@ff@staticH}{#3}%
+ \@nextvNband%
}
% \end{macrocode}
%\end{macro}
@@ -6250,7 +10811,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% \cs{htwotone}\oarg{pages}\oarg{y offset}\marg{H1}\marg{C1}\marg{L1}\marg{H2}\marg{C2}\marg{L2}
% \begin{macrocode}
\newcommand*{\htwotone}[1][all]{%
-\def\ff@pages{#1}\@htwotone}
+ \def\ff@pages{#1}%
+ \@htwotone
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@htwotone}
@@ -6263,16 +10826,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% strips.
% \begin{macrocode}
\newcommand*{\@@htwotoneleft}[8]{%
-\computeleftedgeodd{\@ff@tmp@x}%
-\if@twoside
- \computeleftedgeeven{\@ff@tmp@x@even}%
-\else
- \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
-\fi
-\computebottomedge{\@ff@tmp@y}%
-\addtolength{\@ff@tmp@y}{#1}%
-\@nexthband{\ff@pages}{#2}{#3}{#4}{#5}%
-\@nexthband{\ff@pages}{#2}{#6}{#7}{#8}%
+ \computeleftedgeodd{\@ff@tmp@x}%
+ \if@twoside
+ \computeleftedgeeven{\@ff@tmp@x@even}%
+ \else
+ \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
+ \fi
+ \computebottomedge{\@ff@tmp@y}%
+ \addtolength{\@ff@tmp@y}{#1}%
+ \@nexthband{\ff@pages}{#2}{#3}{#4}{#5}%
+ \@nexthband{\ff@pages}{#2}{#6}{#7}{#8}%
}
\@onlypreamble{\htwotone}
@@ -6283,7 +10846,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Syntax: \cs{htwotoneleft}\oarg{pages}\oarg{y offset}\marg{width}\marg{H1}\marg{C1}\marg{L1}\marg{H2}\marg{C2}\marg{L2}
% \begin{macrocode}
\newcommand*{\htwotoneleft}[1][all]{%
-\def\ff@pages{#1}\@htwotoneleft}
+ \def\ff@pages{#1}%
+ \@htwotoneleft
+}
\@onlypreamble{\htwotoneleft}
% \end{macrocode}
%\end{macro}
@@ -6296,7 +10861,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Two tone horizontal strips along right border
% \begin{macrocode}
\newcommand*{\htwotoneright}[1][all]{%
-\def\ff@pages{#1}\@htwotoneright}
+ \def\ff@pages{#1}%
+ \@htwotoneright
+}
\@onlypreamble{\htwotoneright}
% \end{macrocode}
%\end{macro}
@@ -6308,18 +10875,18 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
%\begin{macro}{\@@htwotoneright}
% \begin{macrocode}
\newcommand*{\@@htwotoneright}[8]{%
-\computerightedgeodd{\@ff@tmp@x}%
-\if@twoside
- \computerightedgeeven{\@ff@tmp@x@even}%
-\else
- \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
-\fi
-\computebottomedge{\@ff@tmp@y}%
-\addtolength{\@ff@tmp@y}{#1}%
-\addtolength{\@ff@tmp@x}{-#2}%
-\addtolength{\@ff@tmp@x@even}{-#2}%
-\@nexthband{\ff@pages}{#2}{#3}{#4}{#5}%
-\@nexthband{\ff@pages}{#2}{#6}{#7}{#8}%
+ \computerightedgeodd{\@ff@tmp@x}%
+ \if@twoside
+ \computerightedgeeven{\@ff@tmp@x@even}%
+ \else
+ \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
+ \fi
+ \computebottomedge{\@ff@tmp@y}%
+ \addtolength{\@ff@tmp@y}{#1}%
+ \addtolength{\@ff@tmp@x}{-#2}%
+ \addtolength{\@ff@tmp@x@even}{-#2}%
+ \@nexthband{\ff@pages}{#2}{#3}{#4}{#5}%
+ \@nexthband{\ff@pages}{#2}{#6}{#7}{#8}%
}
% \end{macrocode}
%\end{macro}
@@ -6327,30 +10894,33 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Now for \meta{N} coloured horizontal strips
% \begin{macrocode}
\newcommand*{\hNtone}[1][all]{%
-\def\ff@pages{#1}\@hNtone}
+ \def\ff@pages{#1}%
+ \@hNtone
+}
\@onlypreamble{\hNtone}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@hNtone}
% \begin{macrocode}
\newcommand*{\@hNtone}[2][0pt]{%
-\@@hNtone{#1}{#2}{\paperwidth}}
+ \@@hNtone{#1}{#2}{\paperwidth}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@hNtone}
% \begin{macrocode}
\newcommand*{\@@hNtone}[3]{%
-\computeleftedgeodd{\@ff@tmp@x}%
-\if@twoside
- \computeleftedgeeven{\@ff@tmp@x@even}%
-\else
- \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
-\fi
-\computebottomedge{\@ff@tmp@y}%
-\addtolength{\@ff@tmp@y}{#1}%
-\@thisstrip=#2\relax
-\setlength{\@ff@staticW}{#3}%
-\@nexthNband%
+ \computeleftedgeodd{\@ff@tmp@x}%
+ \if@twoside
+ \computeleftedgeeven{\@ff@tmp@x@even}%
+ \else
+ \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
+ \fi
+ \computebottomedge{\@ff@tmp@y}%
+ \addtolength{\@ff@tmp@y}{#1}%
+ \@thisstrip=#2\relax
+ \setlength{\@ff@staticW}{#3}%
+ \@nexthNband
}
% \end{macrocode}
%\end{macro}
@@ -6358,46 +10928,52 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Now for the N tone strips along the left border
% \begin{macrocode}
\newcommand*{\hNtoneleft}[1][all]{%
-\def\ff@pages{#1}\@hNtoneleft}
+ \def\ff@pages{#1}%
+ \@hNtoneleft
+}
\@onlypreamble{\hNtoneleft}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@hNtoneleft}
% \begin{macrocode}
\newcommand*{\@hNtoneleft}[3][0pt]{%
-\@@hNtone{#1}{#2}{#3}}
+ \@@hNtone{#1}{#2}{#3}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\hNtoneright}
% Border strip along the right border
% \begin{macrocode}
\newcommand*{\hNtoneright}[1][all]{%
-\def\ff@pages{#1}\@hNtoneright}
+ \def\ff@pages{#1}%
+ \@hNtoneright
+}
\@onlypreamble{\hNtoneright}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@hNtoneright}
% \begin{macrocode}
\newcommand*{\@hNtoneright}[3][0pt]{%
-\@@hNtoneright{#1}{#2}{#3}}
+ \@@hNtoneright{#1}{#2}{#3}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@hNtoneright}
% \begin{macrocode}
\newcommand*{\@@hNtoneright}[3]{%
-\computerightedgeodd{\@ff@tmp@x}%
-\if@twoside
- \computerightedgeeven{\@ff@tmp@x@even}%
-\else
- \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
-\fi
-\computebottomedge{\@ff@tmp@y}%
-\addtolength{\@ff@tmp@y}{#1}%
-\addtolength{\@ff@tmp@x}{-#3}%
-\addtolength{\@ff@tmp@x@even}{-#3}%
-\@thisstrip=#2\relax
-\setlength{\@ff@staticW}{#3}%
-\@nexthNband%
+ \computerightedgeodd{\@ff@tmp@x}%
+ \if@twoside
+ \computerightedgeeven{\@ff@tmp@x@even}%
+ \else
+ \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
+ \fi
+ \computebottomedge{\@ff@tmp@y}%
+ \addtolength{\@ff@tmp@y}{#1}%
+ \addtolength{\@ff@tmp@x}{-#3}%
+ \addtolength{\@ff@tmp@x@even}{-#3}%
+ \@thisstrip=#2\relax
+ \setlength{\@ff@staticW}{#3}%
+ \@nexthNband
}
% \end{macrocode}
%\end{macro}
@@ -6408,15 +10984,19 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% On exit, "\@ff@tmp@y" is set to the top border.
% \begin{macrocode}
\newcommand*{\@nexthband}[5]{%
-\setlength{\@ff@staticH}{#3}%
-\ifthenelse{\equal{#5}{}}{%
-\newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}}%
-{\newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}[#5]}%
-\expandafter\global\expandafter
-\setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{%
-\@ff@tmp@x@even}%
-\@setframecol#4\end{\c@maxstatic}{backcol}{sf}%
-\addtolength{\@ff@tmp@y}{\@ff@staticH}%
+ \setlength{\@ff@staticH}{#3}%
+ \ifthenelse{\equal{#5}{}}%
+ {%
+ \newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}%
+ }%
+ {%
+ \newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}[#5]%
+ }%
+ \expandafter\global\expandafter
+ \setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname
+ {\@ff@tmp@x@even}%
+ \@setframecol#4\end{\c@maxstatic}{backcol}{sf}%
+ \addtolength{\@ff@tmp@y}{\@ff@staticH}%
}
% \end{macrocode}
%\end{macro}
@@ -6424,19 +11004,22 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Get next horizontal strip recursively.
% \begin{macrocode}
\newcommand*{\@nexthNband}{%
-\ifnum\@thisstrip>0\relax
- \let\flf@next\@@nexthNband%
-\else
- \let\flf@next\relax%
-\fi
-\advance\@thisstrip by -1\relax
-\flf@next}
+ \ifnum\@thisstrip>0\relax
+ \let\flf@next\@@nexthNband
+ \else
+ \let\flf@next\relax
+ \fi
+ \advance\@thisstrip by -1\relax
+ \flf@next
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@nexthNband}
% \begin{macrocode}
\newcommand*{\@@nexthNband}[3]{%
-\@nexthband{\ff@pages}{\@ff@staticW}{#1}{#2}{#3}\@nexthNband}
+ \@nexthband{\ff@pages}{\@ff@staticW}{#1}{#2}{#3}%
+ \@nexthNband
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\makebackgroundframe}
@@ -6447,23 +11030,27 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% \cs{makebackgroundframe}\oarg{pages}\oarg{label}.
% \begin{macrocode}
\newcommand*{\makebackgroundframe}[1][all]{%
-\ifnum\c@maxstatic>0\relax
- \PackageWarning{flowfram}{Background frame is not
- first static frame to be defined. All previously defined
- static frames may be obscured.}%
-\fi
-\computeleftedgeodd{\@ff@tmp@x}%
-\if@twoside
- \computeleftedgeeven{\@ff@tmp@x@even}%
-\else
- \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
-\fi
-\computebottomedge{\@ff@tmp@y}%
-\newstaticframe[#1]{\paperwidth}{\paperheight}{\@ff@tmp@x}%
-{\@ff@tmp@y}%
-\expandafter\global\expandafter
-\setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname
-{\@ff@tmp@x@even}}
+ \ifnum\c@maxstatic>0\relax
+ \PackageWarning{flowfram}%
+ {%
+ Background frame is not first static frame to be
+ defined. All previously defined static frames may be
+ obscured.%
+ }%
+ \fi
+ \computeleftedgeodd{\@ff@tmp@x}%
+ \if@twoside
+ \computeleftedgeeven{\@ff@tmp@x@even}%
+ \else
+ \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}%
+ \fi
+ \computebottomedge{\@ff@tmp@y}%
+ \newstaticframe[#1]{\paperwidth}{\paperheight}{\@ff@tmp@x}%
+ {\@ff@tmp@y}%
+ \expandafter\global\expandafter
+ \setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname
+ {\@ff@tmp@x@even}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -6507,7 +11094,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% Two optional arguments required.
% \begin{macrocode}
\newcommand*{\@insertvrule}[1][0pt]{%
-\@ifnextchar[{\@@insertvrule[#1]}{\@@insertvrule[#1][0pt]}}
+ \@ifnextchar[{\@@insertvrule[#1]}{\@@insertvrule[#1][0pt]}%
+}
% \end{macrocode}
%\end{macro}
% Need some lengths:
@@ -6524,19 +11112,55 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}}
% into a number to make life easier
% \begin{macrocode}
\def\@@insertvrule[#1][#2]#3#4#5#6{%
-\ifthenelse{\equal{#3}{flow}}{%
-\def\@ff@type@i{1}}{\ifthenelse{\equal{#3}{static}}{%
-\def\@ff@type@i{2}}{\ifthenelse{\equal{#3}{dynamic}}{%
-\def\@ff@type@i{3}}{\PackageError{flowfram}{Unknown frame
-type '#3'}{Available frame types are: 'flow', 'static'
-or 'dynamic'}}}}%
-\ifthenelse{\equal{#5}{flow}}{%
-\def\@ff@type@ii{1}}{\ifthenelse{\equal{#5}{static}}{%
-\def\@ff@type@ii{2}}{\ifthenelse{\equal{#5}{dynamic}}{%
-\def\@ff@type@ii{3}}{\PackageError{flowfram}{Unknown frame
-type '#5'}{Available frame types are: 'flow', 'static'
-or 'dynamic'}}}}%
-\@@insert@vrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}%
+ \ifthenelse{\equal{#3}{flow}}%
+ {%
+ \def\@ff@type@i{1}%
+ }%
+ {%
+ \ifthenelse{\equal{#3}{static}}%
+ {%
+ \def\@ff@type@i{2}%
+ }%
+ {%
+ \ifthenelse{\equal{#3}{dynamic}}%
+ {%
+ \def\@ff@type@i{3}%
+ }%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type '#3'}%
+ {%
+ Available frame types are: 'flow', 'static'
+ or 'dynamic'%
+ }%
+ }%
+ }%
+ }%
+ \ifthenelse{\equal{#5}{flow}}%
+ {%
+ \def\@ff@type@ii{1}%
+ }%
+ {%
+ \ifthenelse{\equal{#5}{static}}%
+ {%
+ \def\@ff@type@ii{2}%
+ }%
+ {%
+ \ifthenelse{\equal{#5}{dynamic}}%
+ {%
+ \def\@ff@type@ii{3}%
+ }%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type '#5'}%
+ {%
+ Available frame types are: 'flow', 'static'
+ or 'dynamic'%
+ }%
+ }%
+ }%
+ }%
+ \@@insert@vrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}%
}
% \end{macrocode}
%\end{macro}
@@ -6548,60 +11172,60 @@ or 'dynamic'}}}}%
%\cs{@@insert@vrule}\marg{y top}\marg{y bottom}\marg{type ID}\marg{IDN}\marg{type ID}\marg{IDN}.
% \begin{macrocode}
\newcommand*{\@@insert@vrule}[6]{%
-\@ff@getdim{#3}{#4}%
-\setlength{\@ff@left@x}{\ffareax}%
-\setlength{\@ff@left@y}{\ffareay}%
-\setlength{\@ff@left@width}{\ffareawidth}%
-\setlength{\@ff@left@height}{\ffareaheight}%
-\@ff@getdim{#5}{#6}%
-\ifnum\@ff@left@x>\ffareax\relax
- \@ff@swaplen{\@ff@left@x}{\ffareax}%
- \@ff@swaplen{\@ff@left@y}{\ffareax}%
- \@ff@swaplen{\@ff@left@evenx}{\ffareaevenx}%
- \@ff@swaplen{\@ff@left@eveny}{\ffareaevenx}%
- \@ff@swaplen{\@ff@left@width}{\ffareawidth}%
- \@ff@swaplen{\@ff@left@height}{\ffareaheight}%
-\fi
-\setlength{\@ff@tmp@x}{\@ff@left@x}
-\addtolength{\@ff@tmp@x}{\@ff@left@width}%
-\setlength{\@ff@staticW}{\ffareax}%
-\addtolength{\@ff@staticW}{-\@ff@tmp@x}%
-\setlength{\@ff@staticH}{\@ff@left@y}%
-\addtolength{\@ff@staticH}{\@ff@left@height}%
-\setlength{\@ff@tmp@y}{\ffareay}%
-\addtolength{\@ff@tmp@y}{\ffareaheight}%
-\ifnum\@ff@tmp@y>\@ff@staticH
- \setlength{\@ff@staticH}{\@ff@tmp@y}%
-\fi
-\ifnum\@ff@left@y<\ffareay\relax
- \setlength{\@ff@tmp@y}{\@ff@left@y}%
-\else
+ \@ff@getdim{#3}{#4}%
+ \setlength{\@ff@left@x}{\ffareax}%
+ \setlength{\@ff@left@y}{\ffareay}%
+ \setlength{\@ff@left@width}{\ffareawidth}%
+ \setlength{\@ff@left@height}{\ffareaheight}%
+ \@ff@getdim{#5}{#6}%
+ \ifnum\@ff@left@x>\ffareax\relax
+ \@ff@swaplen{\@ff@left@x}{\ffareax}%
+ \@ff@swaplen{\@ff@left@y}{\ffareax}%
+ \@ff@swaplen{\@ff@left@evenx}{\ffareaevenx}%
+ \@ff@swaplen{\@ff@left@eveny}{\ffareaevenx}%
+ \@ff@swaplen{\@ff@left@width}{\ffareawidth}%
+ \@ff@swaplen{\@ff@left@height}{\ffareaheight}%
+ \fi
+ \setlength{\@ff@tmp@x}{\@ff@left@x}
+ \addtolength{\@ff@tmp@x}{\@ff@left@width}%
+ \setlength{\@ff@staticW}{\ffareax}%
+ \addtolength{\@ff@staticW}{-\@ff@tmp@x}%
+ \setlength{\@ff@staticH}{\@ff@left@y}%
+ \addtolength{\@ff@staticH}{\@ff@left@height}%
\setlength{\@ff@tmp@y}{\ffareay}%
-\fi
-\addtolength{\@ff@staticH}{-\@ff@tmp@y}%
-\newstaticframe{\@ff@staticW}{\@ff@staticH}%
-{\@ff@tmp@x}{\@ff@tmp@y}%
-\addtolength{\@ff@staticH}{#1}%
-\addtolength{\@ff@staticH}{#2}%
-\setstaticcontents{\c@maxstatic}{%
-\ffruledeclarations
-\ffvrule{#2}{\ffcolumnseprule}{\@ff@staticH}}%
-\ifcase#3\relax
-\or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}%
-\or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}%
-\or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}%
-\fi
-\setstaticframe{\c@maxstatic}{pages=\@ff@pages}%
+ \addtolength{\@ff@tmp@y}{\ffareaheight}%
+ \ifnum\@ff@tmp@y>\@ff@staticH
+ \setlength{\@ff@staticH}{\@ff@tmp@y}%
+ \fi
+ \ifnum\@ff@left@y<\ffareay\relax
+ \setlength{\@ff@tmp@y}{\@ff@left@y}%
+ \else
+ \setlength{\@ff@tmp@y}{\ffareay}%
+ \fi
+ \addtolength{\@ff@staticH}{-\@ff@tmp@y}%
+ \newstaticframe{\@ff@staticW}{\@ff@staticH}%
+ {\@ff@tmp@x}{\@ff@tmp@y}%
+ \addtolength{\@ff@staticH}{#1}%
+ \addtolength{\@ff@staticH}{#2}%
+ \setstaticcontents{\c@maxstatic}{%
+ \ffruledeclarations
+ \ffvrule{#2}{\ffcolumnseprule}{\@ff@staticH}}%
+ \ifcase#3\relax
+ \or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}%
+ \or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}%
+ \or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}%
+ \fi
+ \setstaticframe{\c@maxstatic}{pages=\@ff@pages}%
% \end{macrocode}
-% check the difference between odd and even page co-ordinates
+% Check the difference between odd and even page co-ordinates
% and shift new frame in same direction. (Assumes the two
% original frames stay in the same relative position.)
% \begin{macrocode}
-\addtolength{\@ff@tmp@x}{\@ff@left@evenx}%
-\addtolength{\@ff@tmp@x}{-\@ff@left@x}%
-\addtolength{\@ff@tmp@y}{\@ff@left@eveny}%
-\addtolength{\@ff@tmp@y}{-\@ff@left@y}%
-\setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}%
+ \addtolength{\@ff@tmp@x}{\@ff@left@evenx}%
+ \addtolength{\@ff@tmp@x}{-\@ff@left@x}%
+ \addtolength{\@ff@tmp@y}{\@ff@left@eveny}%
+ \addtolength{\@ff@tmp@y}{-\@ff@left@y}%
+ \setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}%
}
% \end{macrocode}
%\end{macro}
@@ -6611,40 +11235,78 @@ or 'dynamic'}}}}%
% Draws the rule for \cs{insertvrule}
% \begin{macrocode}
\newcommand*{\ffvrule}[3]{%
-\hfill \rule[-#1]{#2}{#3}\hfill\mbox{}}
+ \hfill \rule[-#1]{#2}{#3}\hfill\mbox{}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sinsertvrule}
% Starred version. Two optional arguments required.
% \begin{macrocode}
\newcommand*{\@sinsertvrule}[1][0pt]{%
-\@ifnextchar[{\@@sinsertvrule[#1]}{\@@sinsertvrule[#1][0pt]}}
+ \@ifnextchar[{\@@sinsertvrule[#1]}{\@@sinsertvrule[#1][0pt]}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@sinsertvrule}
% Find out the frame types and their \gls{idn}.
% \begin{macrocode}
\def\@@sinsertvrule[#1][#2]#3#4#5#6{%
-\ifthenelse{\equal{#3}{flow}}{%
-\def\@ff@type@i{1}\@flowframeid{#4}\@ff@tmpN=\ff@id}{%
-\ifthenelse{\equal{#3}{static}}{%
-\def\@ff@type@i{2}\@staticframeid{#4}\@ff@tmpN=\ff@id}{%
-\ifthenelse{\equal{#3}{dynamic}}{%
-\def\@ff@type@i{3}\@dynamicframeid{#4}\@ff@tmpN=\ff@id}{%
-\PackageError{flowfram}{Unknown frame
-type '#3'}{Available frame types are: 'flow', 'static'
-or 'dynamic'}}}}%
-\ifthenelse{\equal{#5}{flow}}{%
-\def\@ff@type@ii{1}\@flowframeid{#6}}{%
-\ifthenelse{\equal{#5}{static}}{%
-\def\@ff@type@ii{2}\@staticframeid{#6}}{%
-\ifthenelse{\equal{#5}{dynamic}}{%
-\def\@ff@type@ii{3}\@dynamicframeid{#6}}{%
-\PackageError{flowfram}{Unknown frame
-type '#5'}{Available frame types are: 'flow', 'static'
-or 'dynamic'}}}}%
-\@@insert@vrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}%
-{\@ff@type@ii}{\ff@id}%
+ \ifthenelse{\equal{#3}{flow}}%
+ {%
+ \def\@ff@type@i{1}%
+ \@flowframeid{#4}%
+ \@ff@tmpN=\ff@id
+ }%
+ {%
+ \ifthenelse{\equal{#3}{static}}%
+ {%
+ \def\@ff@type@i{2}\@staticframeid{#4}\@ff@tmpN=\ff@id
+ }%
+ {%
+ \ifthenelse{\equal{#3}{dynamic}}%
+ {%
+ \def\@ff@type@i{3}%
+ \@dynamicframeid{#4}%
+ \@ff@tmpN=\ff@id
+ }%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type '#3'}%
+ {%
+ Available frame types are: 'flow', 'static'
+ or 'dynamic'%
+ }%
+ }%
+ }%
+ }%
+ \ifthenelse{\equal{#5}{flow}}%
+ {%
+ \def\@ff@type@ii{1}\@flowframeid{#6}%
+ }%
+ {%
+ \ifthenelse{\equal{#5}{static}}%
+ {%
+ \def\@ff@type@ii{2}%
+ \@staticframeid{#6}%
+ }%
+ {%
+ \ifthenelse{\equal{#5}{dynamic}}%
+ {%
+ \def\@ff@type@ii{3}%
+ \@dynamicframeid{#6}%
+ }%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type '#5'}%
+ {%
+ Available frame types are: 'flow', 'static'
+ or 'dynamic'%
+ }%
+ }%
+ }%
+ }%
+ \@@insert@vrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}%
+ {\@ff@type@ii}{\ff@id}%
}
% \end{macrocode}
%\end{macro}
@@ -6660,7 +11322,8 @@ or 'dynamic'}}}}%
% Two optional arguments required.
% \begin{macrocode}
\newcommand*{\@inserthrule}[1][0pt]{%
-\@ifnextchar[{\@@inserthrule[#1]}{\@@inserthrule[#1][0pt]}}
+ \@ifnextchar[{\@@inserthrule[#1]}{\@@inserthrule[#1][0pt]}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@inserthrule}
@@ -6668,19 +11331,54 @@ or 'dynamic'}}}}%
% into a number to make life easier
% \begin{macrocode}
\def\@@inserthrule[#1][#2]#3#4#5#6{%
-\ifthenelse{\equal{#3}{flow}}{%
-\def\@ff@type@i{1}}{\ifthenelse{\equal{#3}{static}}{%
-\def\@ff@type@i{2}}{\ifthenelse{\equal{#3}{dynamic}}{%
-\def\@ff@type@i{3}}{\PackageError{flowfram}{Unknown frame
-type '#3'}{Available frame types are: 'flow', 'static'
-or 'dynamic'}}}}%
-\ifthenelse{\equal{#5}{flow}}{%
-\def\@ff@type@ii{1}}{\ifthenelse{\equal{#5}{static}}{%
-\def\@ff@type@ii{2}}{\ifthenelse{\equal{#5}{dynamic}}{%
-\def\@ff@type@ii{3}}{\PackageError{flowfram}{Unknown frame
-type '#5'}{Available frame types are: 'flow', 'static'
-or 'dynamic'}}}}%
-\@@insert@hrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}%
+ \ifthenelse{\equal{#3}{flow}}%
+ {%
+ \def\@ff@type@i{1}%
+ }%
+ {%
+ \ifthenelse{\equal{#3}{static}}%
+ {%
+ \def\@ff@type@i{2}%
+ }%
+ {%
+ \ifthenelse{\equal{#3}{dynamic}}%
+ {%
+ \def\@ff@type@i{3}}%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type '#3'}%
+ {%
+ Available frame types are: 'flow', 'static'
+ or 'dynamic'%
+ }%
+ }%
+ }%
+ }%
+ \ifthenelse{\equal{#5}{flow}}%
+ {%
+ \def\@ff@type@ii{1}%
+ }%
+ {%
+ \ifthenelse{\equal{#5}{static}}%
+ {%
+ \def\@ff@type@ii{2}%
+ }%
+ {%
+ \ifthenelse{\equal{#5}{dynamic}}%
+ {%
+ \def\@ff@type@ii{3}%
+ }%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type '#5'}%
+ {%
+ Available frame types are: 'flow', 'static'
+ or 'dynamic'%
+ }%
+ }%
+ }%
+ }%
+ \@@insert@hrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}%
}
% \end{macrocode}
%\end{macro}
@@ -6692,53 +11390,55 @@ or 'dynamic'}}}}%
%\cs{@@insert@hrule}\marg{x left}\marg{x right}\marg{type ID}\marg{IDN}\marg{type ID}\marg{IDN}.
% \begin{macrocode}
\newcommand*{\@@insert@hrule}[6]{%
-\@ff@getdim{#3}{#4}%
-\setlength{\@ff@left@x}{\ffareax}%
-\setlength{\@ff@left@y}{\ffareay}%
-\setlength{\@ff@left@width}{\ffareawidth}%
-\setlength{\@ff@left@height}{\ffareaheight}%
-\@ff@getdim{#5}{#6}%
-\ifnum\@ff@left@y>\ffareay\relax
- \@ff@swaplen{\@ff@left@x}{\ffareax}%
- \@ff@swaplen{\@ff@left@y}{\ffareay}%
- \@ff@swaplen{\@ff@left@width}{\ffareawidth}%
- \@ff@swaplen{\@ff@left@height}{\ffareaheight}%
-\fi
-\setlength{\@ff@tmp@y}{\@ff@left@y}%
-\addtolength{\@ff@tmp@y}{\@ff@left@height}%
-\setlength{\@ff@staticH}{\ffareay}%
-\addtolength{\@ff@staticH}{-\@ff@tmp@y}%
-\setlength{\@ff@staticW}{\@ff@left@x}%
-\addtolength{\@ff@staticW}{\@ff@left@width}%
-\setlength{\@ff@tmp@x}{\ffareax}%
-\addtolength{\@ff@tmp@x}{\ffareawidth}%
-\ifnum\@ff@tmp@x>\@ff@staticW\relax
- \setlength{\@ff@staticW}{\@ff@tmp@x}%
-\fi
-\ifnum\@ff@left@x<\ffareax\relax
- \setlength{\@ff@tmp@x}{\@ff@left@x}%
-\else
+ \@ff@getdim{#3}{#4}%
+ \setlength{\@ff@left@x}{\ffareax}%
+ \setlength{\@ff@left@y}{\ffareay}%
+ \setlength{\@ff@left@width}{\ffareawidth}%
+ \setlength{\@ff@left@height}{\ffareaheight}%
+ \@ff@getdim{#5}{#6}%
+ \ifnum\@ff@left@y>\ffareay\relax
+ \@ff@swaplen{\@ff@left@x}{\ffareax}%
+ \@ff@swaplen{\@ff@left@y}{\ffareay}%
+ \@ff@swaplen{\@ff@left@width}{\ffareawidth}%
+ \@ff@swaplen{\@ff@left@height}{\ffareaheight}%
+ \fi
+ \setlength{\@ff@tmp@y}{\@ff@left@y}%
+ \addtolength{\@ff@tmp@y}{\@ff@left@height}%
+ \setlength{\@ff@staticH}{\ffareay}%
+ \addtolength{\@ff@staticH}{-\@ff@tmp@y}%
+ \setlength{\@ff@staticW}{\@ff@left@x}%
+ \addtolength{\@ff@staticW}{\@ff@left@width}%
\setlength{\@ff@tmp@x}{\ffareax}%
-\fi
-\addtolength{\@ff@staticW}{-\@ff@tmp@x}%
-\newstaticframe{\@ff@staticW}{\@ff@staticH}%
-{\@ff@tmp@x}{\@ff@tmp@y}%
-\addtolength{\@ff@staticW}{#1}%
-\addtolength{\@ff@staticW}{#2}%
-\setstaticcontents{\c@maxstatic}{%
-\ffruledeclarations
-\ffhrule{#1}{\@ff@staticW}{\ffcolumnseprule}}%
-\ifcase#3\relax
-\or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}%
-\or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}%
-\or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}%
-\fi
-\setstaticframe{\c@maxstatic}{pages=\@ff@pages}%
-\addtolength{\@ff@tmp@x}{\@ff@left@evenx}%
-\addtolength{\@ff@tmp@x}{-\@ff@left@x}%
-\addtolength{\@ff@tmp@y}{\@ff@left@eveny}%
-\addtolength{\@ff@tmp@y}{-\@ff@left@y}%
-\setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}%
+ \addtolength{\@ff@tmp@x}{\ffareawidth}%
+ \ifnum\@ff@tmp@x>\@ff@staticW\relax
+ \setlength{\@ff@staticW}{\@ff@tmp@x}%
+ \fi
+ \ifnum\@ff@left@x<\ffareax\relax
+ \setlength{\@ff@tmp@x}{\@ff@left@x}%
+ \else
+ \setlength{\@ff@tmp@x}{\ffareax}%
+ \fi
+ \addtolength{\@ff@staticW}{-\@ff@tmp@x}%
+ \newstaticframe{\@ff@staticW}{\@ff@staticH}%
+ {\@ff@tmp@x}{\@ff@tmp@y}%
+ \addtolength{\@ff@staticW}{#1}%
+ \addtolength{\@ff@staticW}{#2}%
+ \setstaticcontents{\c@maxstatic}%
+ {%
+ \ffruledeclarations
+ \ffhrule{#1}{\@ff@staticW}{\ffcolumnseprule}%
+ }%
+ \ifcase#3\relax
+ \or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}%
+ \or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}%
+ \or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}%
+ \fi
+ \setstaticframe{\c@maxstatic}{pages=\@ff@pages}%
+ \addtolength{\@ff@tmp@x}{\@ff@left@evenx}%
+ \addtolength{\@ff@tmp@x}{-\@ff@left@x}%
+ \addtolength{\@ff@tmp@y}{\@ff@left@eveny}%
+ \addtolength{\@ff@tmp@y}{-\@ff@left@y}%
+ \setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}%
}
% \end{macrocode}
%\end{macro}
@@ -6748,40 +11448,81 @@ or 'dynamic'}}}}%
% Draws the rule for \cs{inserthrule}
% \begin{macrocode}
\newcommand*{\ffhrule}[3]{%
-\hspace*{-#1}\rule{#2}{#3}}
+ \hspace*{-#1}\rule{#2}{#3}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sinserthrule}
% Starred version. Two optional arguments required.
% \begin{macrocode}
\newcommand*{\@sinserthrule}[1][0pt]{%
-\@ifnextchar[{\@@sinserthrule[#1]}{\@@sinserthrule[#1][0pt]}}
+ \@ifnextchar[{\@@sinserthrule[#1]}{\@@sinserthrule[#1][0pt]}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@sinserthrule}
% Find out the frame types and their \gls{idn}.
% \begin{macrocode}
\def\@@sinserthrule[#1][#2]#3#4#5#6{%
-\ifthenelse{\equal{#3}{flow}}{%
-\def\@ff@type@i{1}\@flowframeid{#4}\@ff@tmpN=\ff@id}{%
-\ifthenelse{\equal{#3}{static}}{%
-\def\@ff@type@i{2}\@staticframeid{#4}\@ff@tmpN=\ff@id}{%
-\ifthenelse{\equal{#3}{dynamic}}{%
-\def\@ff@type@i{3}\@dynamicframeid{#4}\@ff@tmpN=\ff@id}{%
-\PackageError{flowfram}{Unknown frame
-type '#3'}{Available frame types are: 'flow', 'static'
-or 'dynamic'}}}}%
-\ifthenelse{\equal{#5}{flow}}{%
-\def\@ff@type@ii{1}\@flowframeid{#6}}{%
-\ifthenelse{\equal{#5}{static}}{%
-\def\@ff@type@ii{2}\@staticframeid{#6}}{%
-\ifthenelse{\equal{#5}{dynamic}}{%
-\def\@ff@type@ii{3}\@dynamicframeid{#6}}{%
-\PackageError{flowfram}{Unknown frame
-type '#5'}{Available frame types are: 'flow', 'static'
-or 'dynamic'}}}}%
-\@@insert@hrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}%
-{\@ff@type@ii}{\ff@id}%
+ \ifthenelse{\equal{#3}{flow}}%
+ {%
+ \def\@ff@type@i{1}%
+ \@flowframeid{#4}%
+ \@ff@tmpN=\ff@id
+ }%
+ {%
+ \ifthenelse{\equal{#3}{static}}%
+ {%
+ \def\@ff@type@i{2}%
+ \@staticframeid{#4}%
+ \@ff@tmpN=\ff@id
+ }%
+ {%
+ \ifthenelse{\equal{#3}{dynamic}}%
+ {%
+ \def\@ff@type@i{3}%
+ \@dynamicframeid{#4}%
+ \@ff@tmpN=\ff@id
+ }%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type '#3'}%
+ {%
+ Available frame types are: 'flow', 'static'
+ or 'dynamic'%
+ }%
+ }%
+ }%
+ }%
+ \ifthenelse{\equal{#5}{flow}}%
+ {%
+ \def\@ff@type@ii{1}%
+ \@flowframeid{#6}%
+ }%
+ {%
+ \ifthenelse{\equal{#5}{static}}%
+ {%
+ \def\@ff@type@ii{2}%
+ \@staticframeid{#6}%
+ }%
+ {%
+ \ifthenelse{\equal{#5}{dynamic}}%
+ {%
+ \def\@ff@type@ii{3}%
+ \@dynamicframeid{#6}%
+ }%
+ {%
+ \PackageError{flowfram}%
+ {Unknown frame type '#5'}%
+ {%
+ Available frame types are: 'flow', 'static'
+ or 'dynamic'%
+ }%
+ }%
+ }%
+ }%
+ \@@insert@hrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}%
+ {\@ff@type@ii}{\ff@id}%
}
% \end{macrocode}
%\end{macro}
@@ -6797,7 +11538,8 @@ or 'dynamic'}}}}%
% the unstarred form identifies the frame \gls{idn}.
% \begin{macrocode}
\newcommand*{\dfchaphead}{%
-\@ifstar\@sdynamicchap\@dynamicchap}
+ \@ifstar\@sdynamicchap\@dynamicchap
+}
% \end{macrocode}
%\end{macro}
% Define style for the chapter heading. These commands
@@ -6816,28 +11558,59 @@ or 'dynamic'}}}}%
% Unstarred version.
% \begin{macrocode}
\newcommand{\@dynamicchap}[1]{%
-\@ifundefined{chapter}{\PackageError{flowfram}{Chapters aren't
-defined}{The document
-class you are using does not define chapters}}{%
-\let\@ff@OLDmakechapterhead\@makechapterhead
-\let\@ff@OLDmakeschapterhead\@makeschapterhead
-\renewcommand{\DFchapterstyle}[1]{\@ff@OLDmakechapterhead{##1}}%
-\renewcommand{\DFschapterstyle}[1]{\@ff@OLDmakeschapterhead{##1}}%
-%
-\xdef\@makechapterhead##1{%
-\noexpand\@setdynamiccontents{\number#1}{%
-\noexpand\DFchapterstyle{##1}}}%
-\xdef\@makeschapterhead##1{%
-\noexpand\@setdynamiccontents{\number#1}{%
-\noexpand\DFschapterstyle{##1}}}%
-}}
+ \@ifundefined{chapter}%
+ {%
+ \PackageError{flowfram}%
+ {Chapters aren't defined}%
+ {%
+ The document class you are using does not
+ define chapters%
+ }%
+ }%
+ {%
+% \end{macrocode}
+% Store current chapter head definitions for starred and unstarred
+% versions
+% \begin{macrocode}
+ \let\@ff@OLDmakechapterhead\@makechapterhead
+ \let\@ff@OLDmakeschapterhead\@makeschapterhead
+% \end{macrocode}
+% Define user commands that can be redefined to modify the chapter
+% head style (in the event that the user is using a class that
+% doesn't provide an easy means to do this.)
+% \begin{macrocode}
+ \renewcommand{\DFchapterstyle}[1]{\@ff@OLDmakechapterhead{##1}}%
+ \renewcommand{\DFschapterstyle}[1]{\@ff@OLDmakeschapterhead{##1}}%
+% \end{macrocode}
+% Redefine chapter heads so that they put their contents in the
+% requested dynamic frame. First the unstarred version:
+% \begin{macrocode}
+ \xdef\@makechapterhead##1{%
+ \noexpand\@setdynamiccontents{\number#1}%
+ {%
+ \noexpand\DFchapterstyle{##1}%
+ }%
+ }%
+% \end{macrocode}
+% Now the starred version:
+% \begin{macrocode}
+ \xdef\@makeschapterhead##1{%
+ \noexpand\@setdynamiccontents{\number#1}%
+ {%
+ \noexpand\DFschapterstyle{##1}%
+ }%
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sdynamicchap}
% Starred form.
% \begin{macrocode}
\newcommand{\@sdynamicchap}[1]{%
-\@dynamicframeid{#1}\@dynamicchap{\ff@id}}
+ \@dynamicframeid{#1}%
+ \@dynamicchap{\ff@id}%
+}
% \end{macrocode}
%\end{macro}
% There is no facility for placing other sectional types
@@ -6861,9 +11634,12 @@ class you are using does not define chapters}}{%
% thumbtabs correspond to chapters, otherwise make
% thumbtabs correspond to sections.
% \begin{macrocode}
-\@ifundefined{chapter}{%
-\newcommand*{\defaultthumbtabtype}{section}}{
-\newcommand*{\defaultthumbtabtype}{chapter}
+\@ifundefined{chapter}%
+{%
+ \newcommand*{\defaultthumbtabtype}{section}%
+}%
+{%
+ \newcommand*{\defaultthumbtabtype}{chapter}%
}
% \end{macrocode}
%\end{macro}
@@ -6882,8 +11658,11 @@ class you are using does not define chapters}}{%
% First check to see if there is a second optional argument.
% \begin{macrocode}
\newcommand*{\makethumbtabs}[2][0pt]{%
-\@ifnextchar[{\@makethumbtabs[#1]{#2}}{%
-\@makethumbtabs[#1]{#2}[\defaultthumbtabtype]}%
+ \@ifnextchar[%
+ {\@makethumbtabs[#1]{#2}}%
+ {%
+ \@makethumbtabs[#1]{#2}[\defaultthumbtabtype]%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -6893,14 +11672,30 @@ class you are using does not define chapters}}{%
% and create the thumbtabs.
% \begin{macrocode}
\def\@makethumbtabs[#1]#2[#3]{%
-\@ifundefined{#3}{\PackageError{flowfram}{%
-Unknown section type '#3'}{}}{%
-\renewcommand{\@ttb@type}{#3}%
-\ifthenelse{\equal{#3}{chapter}}{\@makethumbchapter}{%
-\ifthenelse{\equal{#3}{part}}{\@makethumbpart}{%
-\@makethumbsection{#3}}}}
-\@starttoc{ttb}%
-\@dothumbtabs{#1}{#2}%
+ \@ifundefined{#3}%
+ {%
+ \PackageError{flowfram}%
+ {%
+ Unknown section type '#3'%
+ }%
+ {}%
+ }%
+ {%
+ \renewcommand{\@ttb@type}{#3}%
+ \ifthenelse{\equal{#3}{chapter}}%
+ {%
+ \@makethumbchapter
+ }%
+ {%
+ \ifthenelse{\equal{#3}{part}}%
+ {\@makethumbpart}%
+ {%
+ \@makethumbsection{#3}%
+ }%
+ }%
+ }%
+ \@starttoc{ttb}%
+ \@dothumbtabs{#1}{#2}%
}
% \end{macrocode}
%\end{macro}
@@ -6909,14 +11704,15 @@ Unknown section type '#3'}{}}{%
% so that each unstarred chapter writes an entry to the
% ".ttb" file.
% \begin{macrocode}
-\newcommand{\@makethumbchapter}{
-\let\@ttb@old@chapter\@chapter
-\def\@chapter[##1]##2{%
-\@ttb@old@chapter[##1]{##2}%
-\addtocontents{ttb}{\protect\thumbtab
- {\thepage}{\thechapter}{##1}{chapter.\thechapter}}%
-\@afterheading
-}}
+\newcommand{\@makethumbchapter}{%
+ \let\@ttb@old@chapter\@chapter
+ \def\@chapter[##1]##2{%
+ \@ttb@old@chapter[##1]{##2}%
+ \addtocontents{ttb}{\protect\thumbtab
+ {\thepage}{\thechapter}{##1}{chapter.\thechapter}}%
+ \@afterheading
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@makethumbpart}
@@ -6930,24 +11726,33 @@ Unknown section type '#3'}{}}{%
% If this happens, just redefine "\@part", and hope for the
% best.
% \begin{macrocode}
-\newcommand{\@makethumbpart}{
-\let\@ttb@old@part\@part
-\@ifundefined{@endpart}{%
-\def\@part[##1]##2{\@ttb@old@part[##1]{##2}%
-\addtocontents{ttb}{\protect\thumbtab
- {\thepage}{\thepart}{##1}{part.\thepage}}%
-\@afterheading}}{%
-\let\@ttb@old@endpart\@endpart
-\def\@part[##1]##2{%
-\def\@parttitle{##1}%
-\@ttb@old@part[##1]{##2}%
-}%
-\def\@endpart{%
-\addtocontents{ttb}{%
-\protect\thumbtab{\thepage}%
-{\thepart}{\@parttitle}{part.\thepage}}%
-\@ttb@old@endpart
-}}}
+\newcommand{\@makethumbpart}{%
+ \let\@ttb@old@part\@part
+ \@ifundefined{@endpart}%
+ {%
+ \def\@part[##1]##2{%
+ \@ttb@old@part[##1]{##2}%
+ \addtocontents{ttb}{\protect\thumbtab
+ {\thepage}{\thepart}{##1}{part.\thepage}}%
+ \@afterheading
+ }%
+ }%
+ {%
+ \let\@ttb@old@endpart\@endpart
+ \def\@part[##1]##2{%
+ \def\@parttitle{##1}%
+ \@ttb@old@part[##1]{##2}%
+ }%
+ \def\@endpart{%
+ \addtocontents{ttb}%
+ {%
+ \protect\thumbtab{\thepage}%
+ {\thepart}{\@parttitle}{part.\thepage}%
+ }%
+ \@ttb@old@endpart
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@makethumbsection}
@@ -6957,15 +11762,21 @@ Unknown section type '#3'}{}}{%
% "\@sect" to add the thumbtab information to the .ttb file.
% \begin{macrocode}
\newcommand*{\@makethumbsection}[1]{%
-\let\@ttb@old@sect=\@sect
-\def\@sect##1##2##3##4##5##6[##7]##8{%
-\@ttb@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}%
-\ifthenelse{\equal{##1}{#1}}{%
-\addtocontents{ttb}{%
-\protect\thumbtab{\thepage}{\csname the#1\endcsname}%
-{##7}{#1.\csname the#1\endcsname}}%
-\@afterheading}{}%
-}}
+ \let\@ttb@old@sect=\@sect
+ \def\@sect##1##2##3##4##5##6[##7]##8{%
+ \@ttb@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}%
+ \ifthenelse{\equal{##1}{#1}}%
+ {%
+ \addtocontents{ttb}%
+ {%
+ \protect\thumbtab{\thepage}{\csname the#1\endcsname}%
+ {##7}{#1.\csname the#1\endcsname}%
+ }%
+ \@afterheading
+ }%
+ {}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\thumbtab}
@@ -6974,19 +11785,16 @@ Unknown section type '#3'}{}}{%
% information for now.
% \begin{macrocode}
\newcommand{\thumbtab}[4]{%
-\stepcounter{maxthumbtabs}%
-\expandafter
-\gdef\csname thumbtab@pages@\romannumeral\c@maxthumbtabs\endcsname
-{#1}%
-\expandafter
-\gdef\csname thumbtab@num@\romannumeral\c@maxthumbtabs\endcsname
-{#2}%
-\expandafter
-\gdef\csname thumbtab@title@\romannumeral\c@maxthumbtabs\endcsname
-{#3}%
-\expandafter
-\gdef\csname thumbtab@link@\romannumeral\c@maxthumbtabs\endcsname
-{#4}}
+ \stepcounter{maxthumbtabs}%
+ \expandafter
+ \gdef\csname thumbtab@pages@\romannumeral\c@maxthumbtabs\endcsname{#1}%
+ \expandafter
+ \gdef\csname thumbtab@num@\romannumeral\c@maxthumbtabs\endcsname{#2}%
+ \expandafter
+ \gdef\csname thumbtab@title@\romannumeral\c@maxthumbtabs\endcsname{#3}%
+ \expandafter
+ \gdef\csname thumbtab@link@\romannumeral\c@maxthumbtabs\endcsname{#4}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@dothumbtabs}
@@ -7007,30 +11815,31 @@ Unknown section type '#3'}{}}{%
% Syntax: \cs{@dothumbtabs}\marg{y offset}\marg{height}.
% \begin{macrocode}
\newcommand*{\@dothumbtabs}[2]{%
-\@colN=0\relax
-\whiledo{\@colN<\c@maxthumbtabs}{%
- \advance\@colN by 1\relax
- \edef\ff@pages{%
- \csname thumbtab@pages@\romannumeral\@colN\endcsname}%
- \ifnum\@colN=\c@maxthumbtabs
- \expandafter
- \xdef\csname thumbtab@pages@\romannumeral\@colN\endcsname{%
- \ff@pages,>\ff@pages}%
- \else
+ \@colN=0\relax
+ \whiledo{\@colN<\c@maxthumbtabs}%
+ {%
\advance\@colN by 1\relax
- \edef\ff@endpage{%
+ \edef\ff@pages{%
\csname thumbtab@pages@\romannumeral\@colN\endcsname}%
- \advance\@colN by -1\relax
- \@ff@tmpN=\ff@endpage\relax
- \advance\@ff@tmpN by -1\relax
- \ifnum\@ff@tmpN>\ff@pages
+ \ifnum\@colN=\c@maxthumbtabs
\expandafter
\xdef\csname thumbtab@pages@\romannumeral\@colN\endcsname{%
- \ff@pages-\number\@ff@tmpN}%
+ \ff@pages,>\ff@pages}%
+ \else
+ \advance\@colN by 1\relax
+ \edef\ff@endpage{%
+ \csname thumbtab@pages@\romannumeral\@colN\endcsname}%
+ \advance\@colN by -1\relax
+ \@ff@tmpN=\ff@endpage\relax
+ \advance\@ff@tmpN by -1\relax
+ \ifnum\@ff@tmpN>\ff@pages
+ \expandafter
+ \xdef\csname thumbtab@pages@\romannumeral\@colN\endcsname{%
+ \ff@pages-\number\@ff@tmpN}%
+ \fi
\fi
- \fi
-}%
-\@@dothumbtabs{#1}{#2}%
+ }%
+ \@@dothumbtabs{#1}{#2}%
}
% \end{macrocode}
%\end{macro}
@@ -7046,11 +11855,16 @@ Unknown section type '#3'}{}}{%
% use a hyperlink in the thumbtab index.
% Syntax: \cs{thumbtabindexformat}\marg{link}\marg{text}\marg{height}
% \begin{macrocode}
-\@ifundefined{hyperlink}{%
-\newcommand{\thumbtabindexformat}[3]{%
-\thumbtabformat{#2}{#3}}}{%
-\newcommand{\thumbtabindexformat}[3]{%
-\hyperlink{#1}{\thumbtabformat{#2}{#3}}}
+\@ifundefined{hyperlink}%
+{%
+ \newcommand{\thumbtabindexformat}[3]{%
+ \thumbtabformat{#2}{#3}%
+ }%
+}%
+{%
+ \newcommand{\thumbtabindexformat}[3]{%
+ \hyperlink{#1}{\thumbtabformat{#2}{#3}}%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -7061,13 +11875,19 @@ Unknown section type '#3'}{}}{%
% Syntax: \cs{thumbtabformat}\marg{text}\marg{height}
% \begin{macrocode}
\newcommand{\thumbtabformat}[2]{%
-\if@ttb@rotate
-\rotatebox{-90}{\parbox[c][\thumbtabwidth]{#2}{%
-\centering#1}}%
-\else
-\parbox[c][#2]{\thumbtabwidth}{%
-\centering\@ttb@stack{#1}}%
-\fi}
+ \if@ttb@rotate
+ \rotatebox{-90}%
+ {%
+ \parbox[c][\thumbtabwidth]{#2}{%
+ \centering#1%
+ }%
+ }%
+ \else
+ \parbox[c][#2]{\thumbtabwidth}{%
+ \centering\@ttb@stack{#1}%
+ }%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@flf@subsp}
@@ -7076,18 +11896,18 @@ Unknown section type '#3'}{}}{%
%\changes{1.10}{2007/08/21}{new}
% \begin{macrocode}
\def\@flf@subsp#1 #2{%
-\expandafter\flf@ta\expandafter{\@flf@subsptext}%
-\flf@tb{#1}%
-\edef\@flf@subsptext{\the\flf@ta\the\flf@tb}%
-\def\@flf@tmp{#2}%
-\ifx\@flf@tmp\@nnil
- \let\@flf@donextsubsp=\@gobble
-\else
\expandafter\flf@ta\expandafter{\@flf@subsptext}%
- \edef\@flf@subsptext{\the\flf@ta\noexpand\space}%
- \let\@flf@donextsubsp=\@flf@subsp
-\fi
-\@flf@donextsubsp{#2}%
+ \flf@tb{#1}%
+ \edef\@flf@subsptext{\the\flf@ta\the\flf@tb}%
+ \def\@flf@tmp{#2}%
+ \ifx\@flf@tmp\@nnil
+ \let\@flf@donextsubsp=\@gobble
+ \else
+ \expandafter\flf@ta\expandafter{\@flf@subsptext}%
+ \edef\@flf@subsptext{\the\flf@ta\noexpand\space}%
+ \let\@flf@donextsubsp=\@flf@subsp
+ \fi
+ \@flf@donextsubsp{#2}%
}
% \end{macrocode}
%\end{macro}
@@ -7098,30 +11918,32 @@ Unknown section type '#3'}{}}{%
%\changes{1.10}{2007/08/21}{spaces now replaced with \cs{space}}
% \begin{macrocode}
\newcommand{\@ttb@stack}[1]{%
-\def\@flf@subsptext{}%
-\expandafter\@flf@subsp#1 \@nil\relax
-\begin{tabular}{l}%
-\expandafter\@@ttb@stack\@flf@subsptext\@nil\relax
-\end{tabular}}
+ \def\@flf@subsptext{}%
+ \expandafter\@flf@subsp#1 \@nil\relax
+ \begin{tabular}{l}%
+ \expandafter\@@ttb@stack\@flf@subsptext\@nil\relax
+ \end{tabular}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@ttb@stack}
%\changes{1.10}{2007/08/21}{now uses \cs{mbox}}
% \begin{macrocode}
\def\@@ttb@stack#1#2{%
-\def\@flf@tmp{#1}%
-\ifx\@flf@tmp\@nnil
- \let\flf@next\relax
-\else
- #1\\%
- \def\@flf@tmp{#2}%
- \ifx\@nnil#2\relax
- \let\flf@next\@gobble
+ \def\@flf@tmp{#1}%
+ \ifx\@flf@tmp\@nnil
+ \let\flf@next\relax
\else
- \let\flf@next\@@ttb@stack
+ #1\\%
+ \def\@flf@tmp{#2}%
+ \ifx\@nnil#2\relax
+ \let\flf@next\@gobble
+ \else
+ \let\flf@next\@@ttb@stack
+ \fi
\fi
-\fi
-\flf@next{#2}}
+ \flf@next{#2}%
+}
% \end{macrocode}
%\end{macro}
%
@@ -7142,100 +11964,129 @@ Unknown section type '#3'}{}}{%
% "thumbtabindex"\meta{n}, where \meta{n} is as before.
% \begin{macrocode}
\newcommand{\@@dothumbtabs}[2]{%
-\setlength{\@ff@tmp@y}{\textheight}%
-\addtolength{\@ff@tmp@y}{-#2}%
-\addtolength{\@ff@tmp@y}{-#1}%
-\computerightedgeodd{\@ff@tmp@x}%
-\addtolength{\@ff@tmp@x}{-\thumbtabwidth}%
-\computeleftedgeeven{\@ff@tmp@x@even}%
-\@ff@tmpN=0\relax
-\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
- \advance\@ff@tmpN by 1\relax
- \@greyscale=\@ff@tmpN\relax
- \multiply\@greyscale by 60\relax
- \divide\@greyscale by \c@maxthumbtabs
- \advance\@greyscale by 25\relax
- \edef\@ff@greyscale{0.\number\@greyscale}%
+ \setlength{\@ff@tmp@y}{\textheight}%
+ \addtolength{\@ff@tmp@y}{-#2}%
+ \addtolength{\@ff@tmp@y}{-#1}%
+ \computerightedgeodd{\@ff@tmp@x}%
+ \addtolength{\@ff@tmp@x}{-\thumbtabwidth}%
+ \computeleftedgeeven{\@ff@tmp@x@even}%
+ \@ff@tmpN=0\relax
+ \whiledo{\@ff@tmpN<\c@maxthumbtabs}%
+ {%
+ \advance\@ff@tmpN by 1\relax
+ \@greyscale=\@ff@tmpN\relax
+ \multiply\@greyscale by 60\relax
+ \divide\@greyscale by \c@maxthumbtabs
+ \advance\@greyscale by 25\relax
+ \edef\@ff@greyscale{0.\number\@greyscale}%
% \end{macrocode}
% Thumbtab
% \begin{macrocode}
- \newdynamicframe[none]{\thumbtabwidth}{#2}%
- {\@ff@tmp@x}{\@ff@tmp@y}[thumbtab\number\@ff@tmpN]%
- \expandafter\global\expandafter
- \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname
- {\@ff@tmp@x@even}%
+ \newdynamicframe[none]{\thumbtabwidth}{#2}%
+ {\@ff@tmp@x}{\@ff@tmp@y}[thumbtab\number\@ff@tmpN]%
+ \expandafter\global\expandafter
+ \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname
+ {\@ff@tmp@x@even}%
% \end{macrocode}
% set the contents of the dynamic frame
% \begin{macrocode}
- \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}{%
- \expandafter
- \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
- \noexpand\thumbtabformat{%
- \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\
- \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
- }{#2}}%
- }{%
- \if@ttb@title
- \expandafter
- \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
- \noexpand\thumbtabformat{%
- \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
- }{#2}}%
- \fi
- \if@ttb@num
+ \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}%
+ {%
\expandafter
- \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
- \noexpand\thumbtabformat{%
- \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname
- }{#2}}%
+ \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
+ \noexpand\thumbtabformat
+ {%
+ \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\
+ \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
+ }%
+ {#2}%
+ }%
+ }%
+ {%
+ \if@ttb@title
+ \expandafter
+ \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
+ \noexpand\thumbtabformat
+ {%
+ \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
+ }%
+ {#2}%
+ }%
+ \fi
+ \if@ttb@num
+ \expandafter
+ \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
+ \noexpand\thumbtabformat
+ {%
+ \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname
+ }%
+ {#2}%
+ }%
\fi
- }%
- \expandafter
- \xdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname
- {[gray]{\@ff@greyscale}}
+ }%
+ \expandafter
+ \xdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname
+ {[gray]{\@ff@greyscale}}
% \end{macrocode}
% Thumbtab index
% \begin{macrocode}
- \newdynamicframe[none]{\thumbtabwidth}{#2}%
- {\@ff@tmp@x}{\@ff@tmp@y}[thumbtabindex\number\@ff@tmpN]%
- \expandafter\global\expandafter
- \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname
- {\@ff@tmp@x@even}%
- \expandafter
+ \newdynamicframe[none]{\thumbtabwidth}{#2}%
+ {\@ff@tmp@x}{\@ff@tmp@y}[thumbtabindex\number\@ff@tmpN]%
+ \expandafter\global\expandafter
+ \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname
+ {\@ff@tmp@x@even}%
+ \expandafter
% \end{macrocode}
% set the contents of the dynamic frame
% \begin{macrocode}
- \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}{%
- \expandafter
- \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
- \noexpand\thumbtabindexformat{%
- \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname}{%
- \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\
- \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
- }{#2}}%
- }{%
- \if@ttb@title
+ \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}%
+ {%
\expandafter
- \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
- \noexpand\thumbtabindexformat{%
- \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname}{%
- \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
- }{#2}}%
- \fi
- \if@ttb@num
+ \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
+ \noexpand\thumbtabindexformat
+ {%
+ \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname
+ }%
+ {%
+ \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\
+ \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
+ }%
+ {#2}%
+ }%
+ }%
+ {%
+ \if@ttb@title
+ \expandafter
+ \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
+ \noexpand\thumbtabindexformat
+ {%
+ \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname
+ }%
+ {%
+ \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname
+ }%
+ {#2}%
+ }%
+ \fi
+ \if@ttb@num
+ \expandafter
+ \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
+ \noexpand\thumbtabindexformat
+ {%
+ \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname
+ }%
+ {%
+ \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname
+ }%
+ {#2}%
+ }%
+ \fi
+ }%
\expandafter
- \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{%
- \noexpand\thumbtabindexformat{%
- \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname}{%
- \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname
- }{#2}}%
- \fi
+ \xdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname
+ {[gray]{\@ff@greyscale}}
+ \addtolength{\@ff@tmp@y}{-#2}%
}%
- \expandafter
- \xdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname
- {[gray]{\@ff@greyscale}}
- \addtolength{\@ff@tmp@y}{-#2}%
-}%
}%
% \end{macrocode}
%\end{macro}
@@ -7246,65 +12097,78 @@ Unknown section type '#3'}{}}{%
% thumbtab index.)
% \begin{macrocode}
\newcommand*{\enablethumbtabs}{%
-\ifnum\c@maxthumbtabs>0
-\@ff@tmpN=0\relax
-\@dynamicframeid{thumbtab1}%
-\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
-\advance\@ff@tmpN by 1\relax
+ \ifnum\c@maxthumbtabs>0\relax
+ \@ff@tmpN=0\relax
+ \@dynamicframeid{thumbtab1}%
+ \whiledo{\@ff@tmpN<\c@maxthumbtabs}%
+ {%
+ \advance\@ff@tmpN by 1\relax
% \end{macrocode}
% thumbtab
% \begin{macrocode}
-\edef\@ff@pages{\csname thumbtab@pages@\romannumeral\@ff@tmpN\endcsname}%
-\@@setdynamicframe{\ff@id}{pages=\@ff@pages}%
-\advance\ff@id by 2\relax
-}%
-\else\PackageWarning{flowfram}{No thumb tabs defined}\fi}
+ \edef\@ff@pages{\csname thumbtab@pages@\romannumeral\@ff@tmpN\endcsname}%
+ \@@setdynamicframe{\ff@id}{pages=\@ff@pages}%
+ \advance\ff@id by 2\relax
+ }%
+ \else
+ \PackageWarning{flowfram}{No thumb tabs defined}%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\disablethumbtabs}
% Disable all thumbtabs.
% \begin{macrocode}
\newcommand*{\disablethumbtabs}{%
-\ifnum\c@maxthumbtabs>0
-\@ff@tmpN=0\relax
-\@dynamicframeid{thumbtab1}%
-\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
-\advance\@ff@tmpN by 1\relax
+ \ifnum\c@maxthumbtabs>0\relax
+ \@ff@tmpN=0\relax
+ \@dynamicframeid{thumbtab1}%
+ \whiledo{\@ff@tmpN<\c@maxthumbtabs}%
+ {%
+ \advance\@ff@tmpN by 1\relax
% \end{macrocode}
-%thumbtab
+% Thumbtab:
% \begin{macrocode}
-\expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname
-{none}%
-\advance\ff@id by 1\relax
+ \expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname
+ {none}%
+ \advance\ff@id by 1\relax
% \end{macrocode}
-%thumbtab index
+% Thumbtab index:
% \begin{macrocode}
-\expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname
-{none}%
-\advance\ff@id by 1\relax
-}\fi}
+ \expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname
+ {none}%
+ \advance\ff@id by 1\relax
+ }%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\thumbtabindex}
% Show thumbtab index on current page.
% The "\@ff@doafter" bit circumvents the problem of duplicate page
% numbers, as the table of contents
-% is quite frequently on page i while the first chapter starts on page 1.
+% is quite frequently on page~i while the first chapter starts on page~1.
% \begin{macrocode}
\newcommand*{\thumbtabindex}{%
-\ifnum\c@maxthumbtabs>0\relax
-\@ff@tmpN=0\relax
-\@dynamicframeid{thumbtabindex1}%
-\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
-\advance\@ff@tmpN by 1\relax
-\expandafter
-\xdef\csname @df@pages@\romannumeral\ff@id\endcsname{\c@page}%
-\edef\@ff@doafter{%
-\noexpand\afterpage{%
-\noexpand\setdynamicframe{\number\ff@id}{pages=none}}}
-\@ff@doafter
-\advance\ff@id by 2\relax
-}\fi}
+ \ifnum\c@maxthumbtabs>0\relax
+ \@ff@tmpN=0\relax
+ \@dynamicframeid{thumbtabindex1}%
+ \whiledo{\@ff@tmpN<\c@maxthumbtabs}%
+ {%
+ \advance\@ff@tmpN by 1\relax
+ \expandafter
+ \xdef\csname @df@pages@\romannumeral\ff@id\endcsname{\c@page}%
+ \edef\@ff@doafter{%
+ \noexpand\afterpage
+ {%
+ \noexpand\setdynamicframe{\number\ff@id}{pages=none}%
+ }%
+ }%
+ \@ff@doafter
+ \advance\ff@id by 2\relax
+ }%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\setthumbtab}
@@ -7320,26 +12184,43 @@ Unknown section type '#3'}{}}{%
% frame settings.
% \begin{macrocode}
\newcommand{\setthumbtab}[2]{%
-\ifthenelse{\equal{#1}{all}}{%
-\@ff@tmpN=0\relax
-\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
-\advance\@ff@tmpN by 1\relax
-\@setthumbtab{\@ff@tmpN}{#2}}}{%
-\@for\@ttb@id:=#1\do{\@setthumbtab{\@ttb@id}{#2}}}}
+ \ifthenelse{\equal{#1}{all}}%
+ {%
+ \@ff@tmpN=0\relax
+ \whiledo{\@ff@tmpN<\c@maxthumbtabs}%
+ {%
+ \advance\@ff@tmpN by 1\relax
+ \@setthumbtab{\@ff@tmpN}{#2}%
+ }%
+ }%
+ {%
+ \@for\@ttb@id:=#1\do{\@setthumbtab{\@ttb@id}{#2}}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@setthumbtab}
% Set individual thumbtab and its index tab.
% \begin{macrocode}
\newcommand{\@setthumbtab}[2]{%
-% check if this thumbtab exists
-\ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}{%
-\PackageWarning{flowfram}{Can't find thumbtab number '#1',
-ttb file may not be up-to-date}}{%
-\@dynamicframeid{thumbtab\number#1}%
-\@@setdynamicframe{\ff@id}{#2}%
-\@dynamicframeid{thumbtabindex\number#1}%
-\@@setdynamicframe{\ff@id}{#2}}}
+% \end{macrocode}
+% Check if this thumbtab exists
+% \begin{macrocode}
+ \ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}%
+ {%
+ \PackageWarning{flowfram}%
+ {%
+ Can't find thumbtab number '#1', ttb file may not be
+ up-to-date%
+ }%
+ }%
+ {%
+ \@dynamicframeid{thumbtab\number#1}%
+ \@@setdynamicframe{\ff@id}{#2}%
+ \@dynamicframeid{thumbtabindex\number#1}%
+ \@@setdynamicframe{\ff@id}{#2}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\setthumbtabindex}
@@ -7347,34 +12228,51 @@ ttb file may not be up-to-date}}{%
% take a comma-separated number list.
% \begin{macrocode}
\newcommand{\setthumbtabindex}[2]{%
-\ifthenelse{\equal{#1}{all}}{%
-\@ff@tmpN=0\relax
-\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
-\advance\@ff@tmpN by 1\relax
-\@setthumbtabindex{\@ff@tmpN}{#2}}}{%
-\@for\@ttb@id:=#1\do{\@setthumbtabindex{\@ttb@id}{#2}}}}
+ \ifthenelse{\equal{#1}{all}}%
+ {%
+ \@ff@tmpN=0\relax
+ \whiledo{\@ff@tmpN<\c@maxthumbtabs}%
+ {%
+ \advance\@ff@tmpN by 1\relax
+ \@setthumbtabindex{\@ff@tmpN}{#2}%
+ }%
+ }%
+ {%
+ \@for\@ttb@id:=#1\do{\@setthumbtabindex{\@ttb@id}{#2}}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@setthumbtabindex}
% Change setting for individual thumbtab index entry.
% \begin{macrocode}
\newcommand{\@setthumbtabindex}[2]{%
-% check if this thumbtab exists
-\ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}{%
-\PackageWarning{flowfram}{Can't find thumbtab number `\number#1',
-ttb file may not be up-to-date}}{%
-\@dynamicframeid{thumbtabindex\number#1}%
-\@@setdynamicframe{\ff@id}{#2}}}
+% \end{macrocode}
+% Check if this thumbtab exists
+% \begin{macrocode}
+ \ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}%
+ {%
+ \PackageWarning{flowfram}%
+ {%
+ Can't find thumbtab number `\number#1',
+ ttb file may not be up-to-date%
+ }%
+ }%
+ {%
+ \@dynamicframeid{thumbtabindex\number#1}%
+ \@@setdynamicframe{\ff@id}{#2}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\tocandhumbtabindex}
% Do both the table of contents and the thumbtab index
% \begin{macrocode}
\newcommand*{\tocandthumbtabindex}{%
-\aligntoctrue
-\tableofcontents
-\thumbtabindex
-\aligntocfalse
+ \aligntoctrue
+ \tableofcontents
+ \thumbtabindex
+ \aligntocfalse
}
% \end{macrocode}
%\end{macro}
@@ -7399,36 +12297,44 @@ ttb file may not be up-to-date}}{%
\newif\if@storetoc
\@storetocfalse
\renewcommand*{\@starttoc}[1]{%
-\if@storetoc
- \@ttb@storetoc{#1}%
-\else
- \@ttb@old@starttoc{#1}%
-\fi}
+ \if@storetoc
+ \@ttb@storetoc{#1}%
+ \else
+ \@ttb@old@starttoc{#1}%
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@ttb@storetoc}
% store the contents of the file with the given extension
% \begin{macrocode}
\newcommand*{\@ttb@storetoc}[1]{%
-\begingroup
-\makeatletter
-\@storefileconts{\jobname.#1}%
-\if@filesw
- \expandafter\newwrite\csname tf@#1\endcsname
- \immediate\openout\csname tf@#1\endcsname\jobname.#1\relax
-\fi
-\@nobreakfalse
-\endgroup}
+ \begingroup
+ \makeatletter
+ \@storefileconts{\jobname.#1}%
+ \if@filesw
+ \expandafter\newwrite\csname tf@#1\endcsname
+ \immediate\openout\csname tf@#1\endcsname\jobname.#1\relax
+ \fi
+ \@nobreakfalse
+ \endgroup
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@storefileconts}
-% store the contents of named file, if it exists.
+% Store the contents of named file, if it exists.
%\changes{1.10}{2007/08/21}{uses \cs{PackageInfo} instead of
% \cs{typeout}}
% \begin{macrocode}
-\newcommand*{\@storefileconts}[1]{\IfFileExists{#1}{%
-\@@storefileconts\@filef@und}{%
-\PackageInfo{flowfram}{No file #1.}}}
+\newcommand*{\@storefileconts}[1]{%
+ \IfFileExists{#1}%
+ {%
+ \@@storefileconts\@filef@und
+ }%
+ {%
+ \PackageInfo{flowfram}{No file #1.}%
+ }%
+}
% \end{macrocode}
%\end{macro}
% store the number of units corresponding to the
@@ -7452,18 +12358,25 @@ ttb file may not be up-to-date}}{%
% list.
% \begin{macrocode}
\newcommand{\@@storefileconts}[1]{%
-\@ifundefined{\@ttb@minitoctype}{\@ttb@minitoclevel=6\relax}{%
-\expandafter\@ttb@minitoclevel\expandafter
- =\csname @ttb@\@ttb@minitoctype @level\endcsname}%
-\newread\@ttb@toc
-\openin\@ttb@toc=#1\relax
-\c@maxtocunits=0\relax
-\c@maxminitoc=0\relax
-\whiledo{\not\boolean{eof}\@ttb@toc}{%
-\read\@ttb@toc to\tocline
-\@addtotoclist{\tocline}{\c@maxtocunits}%
-}%
-\closein\@ttb@toc}
+ \@ifundefined{\@ttb@minitoctype}%
+ {%
+ \@ttb@minitoclevel=6\relax
+ }%
+ {%
+ \expandafter\@ttb@minitoclevel\expandafter
+ =\csname @ttb@\@ttb@minitoctype @level\endcsname
+ }%
+ \newread\@ttb@toc
+ \openin\@ttb@toc=#1\relax
+ \c@maxtocunits=0\relax
+ \c@maxminitoc=0\relax
+ \whiledo{\not\boolean{eof}\@ttb@toc}%
+ {%
+ \read\@ttb@toc to\tocline
+ \@addtotoclist{\tocline}{\c@maxtocunits}%
+ }%
+ \closein\@ttb@toc
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@addtotoclist}
@@ -7483,45 +12396,55 @@ ttb file may not be up-to-date}}{%
\newcount\@ttb@minitoclevel
\newcommand{\@addtotoclist}[2]{%
-\expandafter\@checkcontentsline#1\end
-\if@contsline
-\expandafter\@gettype#1\end
-\ifthenelse{\equal{\@ttb@contstype}{\@ttb@type}}{%
-\global\advance#2 by 1\relax
-}{%
-}%
-\fi
-\@ifundefined{@toc@\romannumeral#2}{%
-\flf@ta=\expandafter{#1}%
-\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@ta}}{%
-\flf@ta=\expandafter{#1}%
-\flf@tb=\expandafter\expandafter\expandafter{\csname @toc@\romannumeral#2\endcsname}%
-\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@tb\the\flf@ta}}%
+ \expandafter\@checkcontentsline#1\end
+ \if@contsline
+ \expandafter\@gettype#1\end
+ \ifthenelse{\equal{\@ttb@contstype}{\@ttb@type}}%
+ {%
+ \global\advance#2 by 1\relax
+ }%
+ {}%
+ \fi
+ \@ifundefined{@toc@\romannumeral#2}%
+ {%
+ \flf@ta=\expandafter{#1}%
+ \expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@ta}%
+ }%
+ {%
+ \flf@ta=\expandafter{#1}%
+ \flf@tb=\expandafter\expandafter\expandafter
+ {\csname @toc@\romannumeral#2\endcsname}%
+ \expandafter\xdef\csname @toc@\romannumeral#2\endcsname{%
+ \the\flf@tb\the\flf@ta}%
+ }%
% \end{macrocode}
% now do minitoc stuff. If the sectioning type is unknown,
% assume it comes last
% \begin{macrocode}
-\if@minitoc
- \if@contsline
- \@ifundefined{\@ttb@contstype}{\@ttb@level=6}{%
- \@ttb@level=\csname @ttb@\@ttb@contstype @level\endcsname}%
- \relax
- \ifnum\@ttb@level=\@ttb@minitoclevel
- \global\advance\c@maxminitoc by 1\relax
- \expandafter
- \gdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{}%
- \else
- \ifnum\@ttb@level>\@ttb@minitoclevel
- \flf@ta=\expandafter{#1}\relax
- \flf@tb=\expandafter\expandafter\expandafter
- {\csname @minitoc@\romannumeral\c@maxminitoc\endcsname}\relax
+ \if@minitoc
+ \if@contsline
+ \@ifundefined{\@ttb@contstype}%
+ {\@ttb@level=6}%
+ {%
+ \@ttb@level=\csname @ttb@\@ttb@contstype @level\endcsname
+ }%
+ \relax
+ \ifnum\@ttb@level=\@ttb@minitoclevel
+ \global\advance\c@maxminitoc by 1\relax
\expandafter
- \xdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{%
- \the\flf@tb\the\flf@ta}
+ \gdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{}%
+ \else
+ \ifnum\@ttb@level>\@ttb@minitoclevel
+ \flf@ta=\expandafter{#1}\relax
+ \flf@tb=\expandafter\expandafter\expandafter
+ {\csname @minitoc@\romannumeral\c@maxminitoc\endcsname}\relax
+ \expandafter
+ \xdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{%
+ \the\flf@tb\the\flf@ta}
+ \fi
\fi
\fi
\fi
-\fi
}
% \end{macrocode}
%\end{macro}
@@ -7540,11 +12463,12 @@ ttb file may not be up-to-date}}{%
% Check to see if line starts with "\contentsline"
% \begin{macrocode}
\long\def\@checkcontentsline#1#2\end{%
-\ifx#1\contentsline
- \@contslinetrue
-\else
- \@contslinefalse
-\fi}
+ \ifx#1\contentsline
+ \@contslinetrue
+ \else
+ \@contslinefalse
+ \fi
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@gettype}
@@ -7553,7 +12477,8 @@ ttb file may not be up-to-date}}{%
% type.
% \begin{macrocode}
\def\@gettype\contentsline#1#2\end{%
-\def\@ttb@contstype{#1}}
+ \def\@ttb@contstype{#1}%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\tableofcontents}
@@ -7569,18 +12494,24 @@ ttb file may not be up-to-date}}{%
% \begin{macrocode}
\newif\ifaligntoc
\aligntocfalse
-
+% \end{macrocode}
+% Save original definition of "\tableofcontents"
+% \begin{macrocode}
\let\@ttb@old@tableofcontents\tableofcontents
+% \end{macrocode}
+% Redefine "\tableofcontents"
+% \begin{macrocode}
\renewcommand{\tableofcontents}{%
-\@storetoctrue
-\@ttb@old@tableofcontents
-\ifaligntoc
- \@printalignedtoc
-\else
- \@printtoc
-\fi
-\@storetocfalse
-\global\c@minitoc=0\relax}
+ \@storetoctrue
+ \@ttb@old@tableofcontents
+ \ifaligntoc
+ \@printalignedtoc
+ \else
+ \@printtoc
+ \fi
+ \@storetocfalse
+ \global\c@minitoc=0\relax
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\beforeminitocskip}
@@ -7602,25 +12533,35 @@ ttb file may not be up-to-date}}{%
% minitocs have been enabled.
% \begin{macrocode}
\newcommand*{\dominitoc}[1]{%
-\if@minitoc \@dominitoc{#1}\fi}
+ \if@minitoc
+ \@dominitoc{#1}%
+ \fi
+}
\newcommand*{\@dominitoc}[1]{\@@dominitoc{#1}}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\minitocstyle}
% Style in which to display the minitoc.
% \begin{macrocode}
-\newcommand{\minitocstyle}[1]{\normalfont\normalsize\normalcolor
-#1}
+\newcommand{\minitocstyle}[1]{%
+ \normalfont\normalsize\normalcolor
+ #1%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@@dominitoc}
% Now do the actual minitoc for unit "#1".
% \begin{macrocode}
\newcommand*{\@@dominitoc}[1]{%
-{\minitocstyle{%
-\vskip\beforeminitocskip
-\csname @minitoc@\romannumeral#1\endcsname}}
-\vskip\afterminitocskip}
+ {%
+ \minitocstyle
+ {%
+ \vskip\beforeminitocskip
+ \csname @minitoc@\romannumeral#1\endcsname
+ }%
+ }%
+ \vskip\afterminitocskip
+}
% \end{macrocode}
%\end{macro}
%
@@ -7633,24 +12574,29 @@ ttb file may not be up-to-date}}{%
% for a slightly more cryptic name.
% \begin{macrocode}
\newcommand*{\appenddfminitoc}{%
-\renewcommand{\beforeminitocskip}{\baselineskip}%
-\@ifstar\@sappendminitocdf\@appendminitocdf}
+ \renewcommand{\beforeminitocskip}{\baselineskip}%
+ \@ifstar\@sappendminitocdf\@appendminitocdf
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@sappendminitocdf}
% Starred version
% \begin{macrocode}
\newcommand*{\@sappendminitocdf}[1]{%
-\renewcommand{\@dominitoc}[1]{%
-\@sappenddynamic{#1}{\@@dominitoc{##1}}}}
+ \renewcommand{\@dominitoc}[1]{%
+ \@sappenddynamic{#1}{\@@dominitoc{##1}}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@appendminitocdf}
% Unstarred version
% \begin{macrocode}
\newcommand*{\@appendminitocdf}[1]{%
-\renewcommand{\@dominitoc}[1]{%
-\@appenddynamic{#1}{\@@dominitoc{##1}}}}
+ \renewcommand{\@dominitoc}[1]{%
+ \@appenddynamic{#1}{\@@dominitoc{##1}}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@printtoc}
@@ -7661,11 +12607,14 @@ ttb file may not be up-to-date}}{%
% "\@colN=0".)
% \begin{macrocode}
\newcommand*{\@printtoc}{%
-\@colN=0\relax
-\csname @toc@\romannumeral\@colN\endcsname
-\whiledo{\@colN<\c@maxtocunits}{%
-\advance\@colN by 1\relax
-\csname @toc@\romannumeral\@colN\endcsname}}
+ \@colN=0\relax
+ \csname @toc@\romannumeral\@colN\endcsname
+ \whiledo{\@colN<\c@maxtocunits}%
+ {%
+ \advance\@colN by 1\relax
+ \csname @toc@\romannumeral\@colN\endcsname
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@printalignedtoc}
@@ -7676,27 +12625,34 @@ ttb file may not be up-to-date}}{%
% in order to make them correctly aligned.
% \begin{macrocode}
\newcommand{\@printalignedtoc}{%
-\@ff@tmpN=0\relax
-\@ifundefined{@toc@\romannumeral\@ff@tmpN}{%
-}{%
-\csname @toc@\romannumeral\@ff@tmpN\endcsname
-\par\noindent\hrulefill
-}%
-\whiledo{\@ff@tmpN<\c@maxtocunits}{%
-\advance\@ff@tmpN by 1\relax
-\ifnum\@ff@tmpN>\c@maxthumbtabs
-\csname @toc@\romannumeral\@ff@tmpN\endcsname
-\else
-\@dynamicframeid{thumbtabindex\number\@ff@tmpN}%
-\expandafter\expandafter\expandafter
-\@ff@getstaticpos\csname @df@dim@\romannumeral\ff@id\endcsname
-\vbox to \@ff@tmp@y{%
-\noindent\parbox{\linewidth}{%
-\csname @toc@\romannumeral\@ff@tmpN\endcsname}%
-\vfill
-\par\noindent\hrulefill
-}%
-\fi}}
+ \@ff@tmpN=0\relax
+ \@ifundefined{@toc@\romannumeral\@ff@tmpN}%
+ {}%
+ {%
+ \csname @toc@\romannumeral\@ff@tmpN\endcsname
+ \par\noindent\hrulefill
+ }%
+ \whiledo{\@ff@tmpN<\c@maxtocunits}%
+ {%
+ \advance\@ff@tmpN by 1\relax
+ \ifnum\@ff@tmpN>\c@maxthumbtabs
+ \csname @toc@\romannumeral\@ff@tmpN\endcsname
+ \else
+ \@dynamicframeid{thumbtabindex\number\@ff@tmpN}%
+ \expandafter\expandafter\expandafter
+ \@ff@getstaticpos\csname @df@dim@\romannumeral\ff@id\endcsname
+ \vbox to \@ff@tmp@y
+ {%
+ \noindent\parbox{\linewidth}%
+ {%
+ \csname @toc@\romannumeral\@ff@tmpN\endcsname
+ }%
+ \vfill
+ \par\noindent\hrulefill
+ }%
+ \fi
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\enableminitoc}
@@ -7707,14 +12663,26 @@ ttb file may not be up-to-date}}{%
\@minitocfalse
\newcommand*{\enableminitoc}[1][\@ttb@type]{%
-\@minitoctrue
-\setcounter{minitoc}{0}%
-\@ifundefined{#1}{%
-\PackageError{flowfram}{Sectioning type `#1' not defined}{}}{%
-\renewcommand{\@ttb@minitoctype}{#1}%
-\ifthenelse{\equal{#1}{chapter}}{\@makeminitocchapter}{%
-\ifthenelse{\equal{#1}{part}}{\@makeminitocpart}{%
-\@makeminitocsection{#1}}}}%
+ \@minitoctrue
+ \setcounter{minitoc}{0}%
+ \@ifundefined{#1}%
+ {%
+ \PackageError{flowfram}{Sectioning type `#1' not defined}{}%
+ }%
+ {%
+ \renewcommand{\@ttb@minitoctype}{#1}%
+ \ifthenelse{\equal{#1}{chapter}}%
+ {%
+ \@makeminitocchapter
+ }%
+ {%
+ \ifthenelse{\equal{#1}{part}}%
+ {\@makeminitocpart}%
+ {%
+ \@makeminitocsection{#1}%
+ }%
+ }%
+ }%
}
% \end{macrocode}
%\end{macro}
@@ -7728,14 +12696,15 @@ ttb file may not be up-to-date}}{%
% "\@chapter" so that the minitoc appears after the
% chapter heading.
% \begin{macrocode}
-\newcommand{\@makeminitocchapter}{
-\let\@mtoc@old@chapter\@chapter
-\def\@chapter[##1]##2{%
-\@mtoc@old@chapter[##1]{##2}%
-\stepcounter{minitoc}%
-\dominitoc{\c@minitoc}%
-\@afterheading
-}}
+\newcommand{\@makeminitocchapter}{%
+ \let\@mtoc@old@chapter\@chapter
+ \def\@chapter[##1]##2{%
+ \@mtoc@old@chapter[##1]{##2}%
+ \stepcounter{minitoc}%
+ \dominitoc{\c@minitoc}%
+ \@afterheading
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@makeminitocpart}
@@ -7743,34 +12712,44 @@ ttb file may not be up-to-date}}{%
% "\@endpart" if it exists, otherwise redefine
% "\@part".
% \begin{macrocode}
-\newcommand{\@makeminitocpart}{
-\@ifundefined{@endpart}{%
-\let\@mtoc@old@part\@part
-\def\@part[##1]##2{%
-\@mtoc@old@part[##1]{##2}%
-\stepcounter{minitoc}%
-\dominitoc{\c@minitoc}%
-\@afterheading
-}}{%
-\let\@mtoc@old@endpart\@endpart
-\def\@endpart{%
-\stepcounter{minitoc}%
-\dominitoc{\c@minitoc}%
-\@mtoc@old@endpart
-}}}
+\newcommand{\@makeminitocpart}{%
+ \@ifundefined{@endpart}%
+ {%
+ \let\@mtoc@old@part\@part
+ \def\@part[##1]##2{%
+ \@mtoc@old@part[##1]{##2}%
+ \stepcounter{minitoc}%
+ \dominitoc{\c@minitoc}%
+ \@afterheading
+ }%
+ }%
+ {%
+ \let\@mtoc@old@endpart\@endpart
+ \def\@endpart{%
+ \stepcounter{minitoc}%
+ \dominitoc{\c@minitoc}%
+ \@mtoc@old@endpart
+ }%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\begin{macro}{\@makeminitocsection}
% Now for the remaining sectional units.
% \begin{macrocode}
\newcommand{\@makeminitocsection}[1]{%
-\let\@mtoc@old@sect=\@sect
-\def\@sect##1##2##3##4##5##6[##7]##8{%
-\@mtoc@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}%
-\ifthenelse{\equal{##1}{#1}}{%
-\stepcounter{minitoc}%
-\dominitoc{\c@minitoc}\@afterheading}{}%
-}}
+ \let\@mtoc@old@sect=\@sect
+ \def\@sect##1##2##3##4##5##6[##7]##8{%
+ \@mtoc@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}%
+ \ifthenelse{\equal{##1}{#1}}%
+ {%
+ \stepcounter{minitoc}%
+ \dominitoc{\c@minitoc}%
+ \@afterheading
+ }%
+ {}%
+ }%
+}
% \end{macrocode}
%\end{macro}
%\iffalse
@@ -7778,5 +12757,4547 @@ ttb file may not be up-to-date}}{%
%</flowfram.sty>
% \end{macrocode}
%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-article.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass[a4paper]{article}
+
+\usepackage[margin=1in,top=1in,bottom=1in]{geometry}
+\usepackage{url}
+\usepackage{color}
+\usepackage{flowfram}
+
+\newcommand{\sty}[1]{\textsf{#1}}
+\newcommand{\env}[1]{\textsf{#1}}
+\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}}
+\newcommand{\meta}[1]{\textnormal{\textless\textit{#1}\textgreater}}
+
+% set up the document frames
+
+% frames for page 1
+\twocolumnStop[1]{2in}
+\setstaticframe{1}{label=title}
+
+% frames for subsequent pages
+\twocolumn[>1]
+
+\begin{document}
+\begin{staticcontents*}{title}
+\title{Creating Flow Frames for Posters or Magazines}
+\author{Nicola L. C. Talbot\\[1cm]\url{http://www.dickimaw-books.com/}}
+\date{}
+\maketitle
+\end{staticcontents*}
+
+This document is a sample document, see \linebreak
+\texttt{ffuserguide.pdf} for
+an up-to-date guide on how to use the \sty{flowfram} package.
+
+\section{Introduction}
+
+The \sty{flowfram} package is designed to enable you to create
+frames in a document such that the
+contents of the \env{document} environment flow from one
+frame to the next in the order that they were defined.
+This is useful for creating posters\marginpar{A marginal note}
+or magazines or any other form of document that does not
+conform to the standard one or two column layout.
+
+\subsection{Setting up Frames}
+
+The \sty{flowfram} package provides three types of frame:
+{flow frames}, {static
+frames} and {dynamic frames}.
+
+\subsubsection{Flow Frames}
+
+The flow frame is the principle type of frame.
+The text of the \env{document} environment will flow from
+one frame to the next in order of definition. Each
+flow frame has an associated width, height,
+position on the page, and optionally a border\footnote{A
+footnote!}.
+
+\subsubsection{Static Frames}
+
+A static frame is a rectangular area in which text neither
+flows into, nor flows out of. The contents must be set
+explicitly, and once set, the contents of the static frame will
+remain the same on each page until it is explicitly
+changed. Thus, a static frame can be used, for example, to make
+a company logo appear in the same place on every page.
+
+\subsubsection{Dynamic Frames}
+
+A dynamic frame is similar to a static frame, but its contents
+are re-typeset on each page. (A static frame stores its
+contents in a savebox, whereas a dynamic frame stores its
+contents in a macro).
+
+\section{Frame Attributes}
+\label{sec:modattr}
+
+Once you have defined the {flow frames}, {static frames} and
+{dynamic frames}, their attributes can be changed.
+The three types of frame mostly have the
+same set of attributes, but some are specific to a certain type.
+The available attributes are as follows
+(\textsuperscript{\textbf{F}} indicates the key is
+only available for {flow frames},
+\textsuperscript{\textbf{S}} indicates the key is only available
+for {static frames}
+and \textsuperscript{\textbf{D}} indicates the key
+is only available for {dynamic frames}):
+
+\begin{description}
+\item[width=\meta{length}] The width of the frame.
+
+\item[height=\meta{length}] The height of the frame.
+
+\item[x=\meta{length}] The x-coordinate of the frame.
+
+\item[y=\meta{length}] The y-coordinate of the frame.
+
+\item[border=\meta{style}] The style of the border around the
+frame, this can take the values: \texttt{none} (no border),
+\texttt{plain} (plain border) or the name of a \LaTeX\
+frame making command without the preceding backslash.
+The value \texttt{fbox} is equivalent to \texttt{plain}.
+
+\item[offset=\meta{offset}] The border offset, if it is a
+user-defined border. This is the distance from the outer
+edge of the left hand border to the left edge of the
+bounding box of the text inside the border. The \sty{flowfram}
+package is able to compute the border for
+known frame making commands.
+If you define your own frame making command, you may need to
+specify the offset explicitly, or the frames
+may end up shifted to the right or left.
+
+\item[bordercolor=\meta{colour}] The colour of the border
+if you are using a standard frame making command.
+The colour can either be specified as, e.g.\ \texttt{green},
+or including the colour model, e.g. \verb/[rgb]{0,1,0}/.
+
+\item[textcolor=\meta{colour}] The text colour for that
+frame. Again, the colour can either be specified as,
+e.g.\ \texttt{green}, or including the colour model,
+e.g. \verb/[rgb]{0,1,0}/.
+
+\item[pages=\meta{page list}] The {list of
+pages} for which the frame
+should appear. This can either have the values: \texttt{all},
+\texttt{even}, \texttt{odd} or \texttt{none} (the latter
+removes the frame from that point on---useful if you
+have multiple pages with the same number), or it can be a
+comma-separated list of single pages, or
+{page ranges}.
+
+\item[margin=\meta{side}\textsuperscript{F}] The side of
+the flow frame that its corresponding margin should go on. This
+can take the values \texttt{left} or \texttt{right}.
+
+\item[clear=\meta{boolean}\textsuperscript{S}] If this value
+is set, the static frame will be cleared at the start of the
+next page.
+
+\item[style=\meta{cmd}\textsuperscript{D}] This should be
+the name of a command \emph{without} the preceding backslash,
+to be applied to the contents of the specified dynamic frame.
+The command may either be a declaration, for example \verb/style=large/
+which will set the contents of all the dynamic frames in a
+large font, or it can be a command that takes a single argument,
+for example \verb/style=textbf/
+which will make the text for all the dynamic frames come out in
+bold. To unset a style, do \verb/style=none/.
+
+\end{description}
+
+\section{Miscellaneous}
+
+\subsection{Page Layout}
+
+The \sty{flowfram} package has the package option \texttt{draft}
+which will draw the {bounding boxes} for
+each frame defined. At the bottom right of each
+bounding box (except for the bounding box denoting the
+typeblock), a marker will be shown to indictate the type
+of frame, its IDN and its IDL.
+
+You can see the layout for the current page (irrespective of
+whether or not the \texttt{draft} option has been set) using
+the command:\newline
+\cmdname{flowframeshowlayout}
+
+The headers and footers will appear as usual (but will not
+be shown in draft mode), according to the format given by
+\cmdname{pagestyle}.
+
+\subsection{Frame Stacking Order}
+
+The material on each page is placed in the following order:
+\begin{enumerate}
+\item Each static frame defined for that page in ascending
+order of IDN.
+
+\item Each flow frame defined for that page in ascending
+order of IDN.
+
+\item Each dynamic frame defined for that page in ascending
+order of IDN.
+
+\item {Bounding boxes} if the \texttt{draft}
+package option has been used.
+\end{enumerate}
+
+This ordering can be used to determine if you want something
+to overlay or underlay everything else on the page.
+
+\subsection{Prematurely Ending a Flow Frame}
+
+You can force text to move immediately to the next defined
+flow frame using one of the standard \LaTeX\ page breaking commands
+which work in an analogous way to the way they
+work in standard two column mode.
+
+The command \cmdname{framebreak} is provided for situations
+where a paragraph spans two flow frames
+of different widths, as \TeX's output routine does not
+adjust to the new value of \cmdname{hsize} until the last
+paragraph of the previous frame has ended. As a
+result, the end of the paragraph at the beginning of the new
+flow frame retains the width of the previous flow frame.
+
+If you want to start a new page, rather than simply move to the
+next frame, use the command\newline
+\cmdname{finishthispage}.
+
+\subsection{Floats}
+
+Since floats (such as figures and tables) can only go in
+{flow frames}, this package provides
+the additional environments:
+\env{staticfigure} and
+\env{statictable} which can be used in static frames
+and dynamic frames. Unlike their \env{figure} and
+\env{table} counterparts, they are fixed in place, and
+so do not take an optional placement specifier. The
+\cmdname{caption} and \cmdname{label} commands can
+be used within \env{staticfigure} and \env{statictable} as
+usual.
+
+The standard \env{figure} and \env{table} commands will
+behave as usual in the flow frames, but their starred versions,
+\env{figure*} and \env{table*} behave no differently
+from \env{figure} and \env{table}.
+
+\subsection{Global Values}
+
+The following macros can be changed using \cmdname{renewcommand}:
+
+\begin{itemize}
+\item \cmdname{setffdraftcolor}
+
+This sets the colour of the bounding box
+when it is displayed in draft mode.
+
+\item
+\cmdname{setffdrafttypeblockcolor}
+
+This sets the colour of
+the bounding box of the typeblock when it is displayed
+in draft mode.
+
+\item \cmdname{fflabelfont}
+
+This sets the font size for the bounding box markers in
+draft mode.
+
+\end{itemize}
+
+The following are lengths, which can be changed using
+\cmdname{setlength}:
+\marginpar{Another marginal note}
+
+\begin{itemize}
+\item \cmdname{fflabelsep}
+
+This is the distance from the right hand side of the
+bounding box at which to place the bounding box marker.
+
+\item \cmdname{flowframesep}
+
+This is the gap between the text of the frame and
+its border, for the standard border types.
+
+\item \cmdname{flowframerule}
+
+This is the width of the frame's border, if using
+a border given by a frame making command that uses \cmdname{fboxsep}
+to set its border width.
+\end{itemize}
+
+
+\section*{Contact Details}
+
+Dr Nicola Talbot\\
+Dickimaw Books\\
+\url{http://www.dickimaw-books.com/}
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-article.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-blanks.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass{article}
+
+\usepackage{lipsum}
+\usepackage[draft]{flowfram}
+
+\onecolumn[odd]
+
+\newdynamicframe{1in}{1in}{-1in}{-1in}
+\setdynamiccontents{1}{\arabic{absolutepage}-\arabic{page}}
+
+\begin{document}
+
+\lipsum[1-4]
+
+\lipsum[1-4]
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-blanks.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-brochure.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass[a4paper]{report}
+
+\usepackage[landscape,margin=1in]{geometry}
+\usepackage{color}
+\usepackage{flowfram}
+\usepackage[colorlinks]{hyperref}
+
+% Use sans-serif font as default font
+\renewcommand{\familydefault}{cmss}
+
+% adjust \textheight so that it is an integer multiple of
+% \baselineskip
+\adjustheight{\textheight}
+
+% set up pagelayout. One column for title page
+% two columns for the rest.
+\onecolumninarea[1,2]{0.6\textwidth}{\textheight}{0.4\textwidth}{0pt}
+\twocolumninarea[>2]{0.6\textwidth}{\textheight}{0.4\textwidth}{0pt}
+
+% Set up dynamic frame on the left. This is where
+% the headings will go.
+
+\newdynamicframe{0.4\textwidth}{\textheight}{0pt}{0pt}[left]
+
+% put the chapter headings in this frame
+\dfchaphead*{left}
+% Modify the default style
+\renewcommand{\DFchapterstyle}[1]{%
+\raggedright\Huge\slshape\MakeUppercase{#1}\par}
+
+% Make static frames for background (only for page 1)
+\vtwotone[1]{0.6\paperwidth}{[cmyk]{0.65,0.13,0,0}}{backleft}%
+{0.4\paperwidth}{[cmyk]{0.94,0.54,0,0}}{backright}
+
+% Make a border along the top of each page
+\vtwotonetop{1cm}{0.6\paperwidth}{[cmyk]{0.65,0.13,0,0}}{topleft}%
+{0.4\paperwidth}{[cmyk]{0.94,0.54,0,0}}{topright}
+
+% make a static frame for the logo
+\newstaticframe{0.2\textwidth}{0.25\textheight}{0pt}{0pt}[logo]
+
+% empty page style, because I am going to make my own
+\pagestyle{empty}
+
+% Each new chapter sets \thispagestyle{\chapterfirstpagestyle}, change this empty as well
+\renewcommand{\chapterfirstpagestyle}{empty}
+
+% Now make a frame in which to put my own customized footer
+\newdynamicframe[>1]{\textwidth}{\headheight}{0pt}{-\footskip}[footer]
+
+% set the contents of the frame:
+\setdynamiccontents*{footer}{%
+School of Computing Sciences, University of East Anglia\hfill
+http://www.cmp.uea.ac.uk/\hfill
+page \thepage\ of \pageref*{lastpage}}
+
+
+\newcommand{\env}[1]{\texttt{#1}}
+\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}}
+\newcommand{\meta}[1]{\textnormal{\textless\textit{#1}\textgreater}}
+
+\begin{document}
+
+% not a very interesting logo
+\setstaticcontents*{logo}{\sffamily{\Huge\slshape FLF} Flowfram}
+
+{\noindent
+\slshape\Huge\MakeUppercase{A Sample Brochure}\par
+\vskip0.5in
+\noindent\large\MakeUppercase{Nicola Talbot}\\
+}
+
+
+\chapter{Introduction}
+
+The \textsl{flowfram} package is designed to enable you to create
+frames in a document such that the
+contents of the \env{document} environment flow from one
+frame to the next in the order that they were defined.
+This is useful for creating posters
+or magazines or any other form of document that does not
+conform to the standard one or two column layout.
+
+This is a modified version of the manual for the \textsl{flowfram} package.
+It is intended to illustrated what can be done. See the full
+manual (ffuserguide.pdf) for
+a comprehensive description, as some parts of this document
+may now be out of date.
+If the columns are very narrow, it may be better to
+use \cmdname{raggedright}, otherwise \TeX\ may have a
+problem working out the line breaks.
+
+This is column~\thedisplayedframe.
+
+The main type of frame is the flow frame. This is described on
+column~\ref{flow:flowframe} on page~\pageref{flow:flowframe}.
+The order used to draw the contents of each frame on the page
+is described in column~\ref{flow:stacking} on
+page~\pageref{flow:stacking}. Floats are describe in
+column~\ref{flow:floats} on page~\pageref{flow:floats}.
+
+\chapter{Setting up Frames}
+
+This is column~\thedisplayedframe.
+
+The \textsl{flowfram} package provides three types of frame:
+{flow frames}, {static
+frames} and {dynamic frames}.
+
+\section*{Flow Frames}
+
+\labelflow{flow:flowframe}
+The flow frame is the principle type of frame.
+The text of the \env{document} environment will flow from
+one frame to the next in order of definition. Each
+flow frame has an associated width, height,
+position on the page, and optionally a border.
+
+It is recommended that all the flow frames in a document
+have the same width, otherwise problems may occur
+when a paragraph spans to flow frames of unequal
+widths. This is because \TeX's output routine does not
+register the change in \cmdname{hsize} until it reaches
+a paragraph break. If it is absolutely necessary for
+flow frames to have unequal widths, judicious use of
+\cmdname{framebreak} is required.
+
+\section*{Static Frames}
+
+A static frame is a rectangular area in which text neither
+flows into, nor flows out of. The contents must be set
+explicitly, and once set, the contents of the static frame will
+remain the same on each page until it is explicitly
+changed. Thus, a static frame can be used, for example, to make
+a company logo appear in the same place on every page.
+
+\section*{Dynamic Frames}
+
+A dynamic frame is similar to a static frame, but its contents
+are re-typeset on each page. (A static frame stores its
+contents in a savebox, whereas a dynamic frame stores its
+contents in a macro).
+
+This is column~\thedisplayedframe.
+
+\chapter{Frame Attributes}
+\label{sec:modattr}
+
+Once you have defined the {flow frames}, {static frames} and
+{dynamic frames}, their attributes can be changed.
+The three types of frame mostly have the
+same set of attributes, but some are specific to a certain type.
+The available attributes are as follows
+(\textsuperscript{\textbf{F}} indicates the key is
+only available for {flow frames},
+\textsuperscript{\textbf{S}} indicates the key is only available
+for {static frames}
+and \textsuperscript{\textbf{D}} indicates the key
+is only available for {dynamic frames}):
+
+\begin{description}
+\item[width=\meta{length}]\mbox{}\par The width of the frame.
+
+\item[height=\meta{length}]\mbox{}\par The height of the frame.
+
+\item[x=\meta{length}]\mbox{}\par The x-coordinate of the frame.
+
+\item[y=\meta{length}]\mbox{}\par The y-coordinate of the frame.
+
+\item[border=\meta{style}]\mbox{}\par The style of the border around the
+frame, this can take the values: \texttt{none} (no border),
+\texttt{plain} (plain border) or the name of a \LaTeX\
+frame making command without the preceding backslash.
+The value \texttt{fbox} is equivalent to \texttt{plain}.
+
+\item[offset=\meta{offset}]\mbox{}\par The border offset, if it is a
+user-defined border. This is the distance from the outer
+edge of the left hand border to the left edge of the
+bounding box of the text inside the border. The \textsl{flowfram}
+package is able to compute the border for
+known frame making commands.
+If you define your own frame making command, you may need to
+specify the offset explicitly, or the frames
+may end up shifted to the right or left.
+
+\item[bordercolor=\meta{colour}]\mbox{}\par The colour of the border
+if you are using a standard frame making command.
+The colour can either be specified as, e.g.\ \texttt{green},
+or including the colour model, for example
+\verb/[rgb]{0,1,0}/.
+
+\item[textcolor=\meta{colour}]\mbox{}\par The text colour for that
+frame. Again, the colour can either be specified as,
+e.g.\ \texttt{green}, or including the colour model,
+for example \verb/[rgb]{0,1,0}/.
+
+\item[pages=\meta{page list}]\mbox{}\par The {list of
+pages} for which the frame
+should appear. This can either have the values: \texttt{all},
+\texttt{even}, \texttt{odd} or \texttt{none} (the latter
+removes the frame from that point on---useful if you
+have multiple pages with the same number), or it can be a
+comma-separated list of single pages, or
+{page ranges}.
+
+\item[margin=\meta{side}\textsuperscript{F}]\mbox{}\par The side of
+the flow frame that its corresponding margin should go on. This
+can take the values \texttt{left} or \texttt{right}.
+
+\item[clear=\meta{boolean}\textsuperscript{S}] If this value
+is set, the static frame will be cleared at the start of the
+next page.
+
+\item[style=\meta{cmd}\textsuperscript{D}]\mbox{}\par This should be
+the name of a command \emph{without} the preceding backslash,
+to be applied to the contents of the specified dynamic frame.
+The command may either be a declaration, for example \verb/style=large/
+which will set the contents of all the dynamic frames in a
+large font, or it can be a command that takes a single argument,
+for example \verb/style=textbf/
+which will make the text for all the dynamic frames come out in
+bold. To unset a style, do \verb/style=none/.
+
+\end{description}
+
+\chapter{Miscellaneous}
+
+\section*{Page Layout}
+
+The \textsl{flowfram} package has the package option \texttt{draft}
+which will draw the {bounding boxes} for
+each frame defined. At the bottom right of each
+bounding box (except for the bounding box denoting the
+typeblock), a marker will be shown to indictate the type
+of frame, its IDN and its IDL.
+
+You can see the layout for the current page (irrespective of
+whether or not the \texttt{draft} option has been set) using
+the command:\newline
+\cmdname{flowframeshowlayout}
+
+The headers and footers will appear as usual (but will not
+be shown in draft mode), according to the format given by
+\cmdname{pagestyle}.
+
+\section*{Frame Stacking Order}
+
+\labelflow{flow:stacking}
+The material on each page is placed in the following order:
+\begin{enumerate}
+\item Each static frame defined for that page in ascending
+order of IDN.
+
+\item Each flow frame defined for that page in ascending
+order of IDN.
+
+\item Each dynamic frame defined for that page in ascending
+order of IDN.
+
+\item {Bounding boxes} if the \texttt{draft}
+package option has been used.
+\end{enumerate}
+
+This ordering can be used to determine if you want something
+to overlay or underlay everything else on the page.
+
+\section*{Prematurely Ending a Flow Frame}
+
+You can force text to move immediately to the next defined
+flow frame using one of the standard \LaTeX\ page breaking commands
+which work in an analogous way to the way they
+work in standard two column mode.
+
+The command \cmdname{framebreak} is provided for situations
+where a paragraph spans two flow frames
+of different widths, as \TeX's output routine does not
+adjust to the new value of \cmdname{hsize} until the last
+paragraph of the previous frame has ended. As a
+result, the end of the paragraph at the beginning of the new
+flow frame retains the width of the previous flow frame.
+
+If you want to start a new page, rather than simply move to the
+next frame, use the command\newline
+\cmdname{finishthispage}.
+
+\section*{Floats}
+
+\labelflow{flow:floats}
+Since floats (such as figures and tables) can only go in
+{flow frames}, this package provides
+the additional environments:
+\env{staticfigure} and
+\env{statictable} which can be used in static frames
+and dynamic frames. Unlike their \env{figure} and
+\env{table} counterparts, they are fixed in place, and
+so do not take an optional placement specifier. The
+\cmdname{caption} and \cmdname{label} commands can
+be used within \env{staticfigure} and \env{statictable} as
+usual.
+
+The standard \env{figure} and \env{table} commands will
+behave as usual in the flow frames, but their starred versions,
+\env{figure*} and \env{table*} behave no differently
+from \env{figure} and \env{table}.
+
+\section*{Global Values}
+
+The following macros can be changed using\linebreak \cmdname{renewcommand}:
+
+\begin{itemize}
+\item \cmdname{setffdraftcolor}
+
+This sets the colour of the bounding box
+when it is displayed in draft mode.
+
+\item
+\cmdname{setffdrafttypeblockcolor}
+
+This sets the colour of
+the bounding box of the typeblock when it is displayed
+in draft mode.
+
+\item \cmdname{fflabelfont}
+
+This sets the font size for the bounding box markers in
+draft mode.
+
+\end{itemize}
+
+The following are lengths, which can be changed using
+\cmdname{setlength}:
+
+\begin{itemize}
+\item \cmdname{fflabelsep}
+
+This is the distance from the right hand side of the
+bounding box at which to place the bounding box marker.
+
+\item \cmdname{flowframesep}
+
+This is the gap between the text of the frame and
+its border, for the standard border types.
+
+\item \cmdname{flowframerule}
+
+This is the width of the frame's border, if using
+a border given by a frame making command that uses \cmdname{fboxsep}
+to set its border width.
+
+\item \cmdname{columnsep}
+
+This is the horizontal distance between flow frames when using one of the
+\cmdname{Ncolumn} type of commands
+
+\item \cmdname{vcolumnsep}
+
+This is the vertical distance between the flow frames and the static or
+dynamic frame when using one of the \cmdname{Ncolumntop} type of commands.
+\end{itemize}
+
+\label{lastpage}
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-brochure.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-news.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass{article}
+
+\usepackage{color}
+\usepackage{flowfram}
+\usepackage[a5paper,top=10mm,bottom=10mm,margin=10mm]{geometry}
+\usepackage{graphicx}
+
+% define lengths to help compute positions
+\newlength\leftX
+\newlength\leftY
+\newlength\leftH
+\newlength\leftW
+
+\newlength\rightX
+\newlength\rightY
+\newlength\rightH
+\newlength\rightW
+
+% Create a static frame to put title in
+\setlength{\leftH}{2cm}
+\setlength{\leftY}{\textheight}
+\addtolength{\leftY}{-\leftH}
+
+\newstaticframe[1]{\textwidth}{\leftH}{0pt}{\leftY}[title]
+
+% First flow frame.
+
+\setlength{\leftH}{7cm}
+\adjustheight{\leftH}
+\addtolength{\leftY}{-\leftH}
+\setlength{\leftW}{0.5\textwidth}
+
+\newflowframe[1]{\leftW}{\leftH}{0pt}{\leftY}
+
+\setlength{\rightH}{\leftH}
+\setlength{\rightY}{\leftY}
+
+% Second flow frame
+
+\setlength{\leftH}{3.5cm}
+\adjustheight{\leftH}
+\addtolength{\leftY}{-\leftH}
+
+\newflowframe[1]{\textwidth}{\leftH}{0pt}{\leftY}
+
+% Right hand flow frame
+
+\setlength{\rightX}{\leftW}
+\addtolength{\rightX}{\columnsep}
+\setlength{\rightW}{\textwidth}
+\addtolength{\rightW}{-\rightX}
+
+\newflowframe[1]{\rightW}{\rightH}{\rightX}{\rightY}
+
+% insert vertical line between left and right flow frames
+
+\insertvrule{flow}{1}{flow}{3}
+
+% insert horizontal line between flow frames 2 and 3
+% don't want it to go under frame 1 so shift the starting
+% position
+
+\addtolength{\rightX}{-0.5\columnsep}
+\addtolength{\rightX}{-0.5\columnseprule}
+\inserthrule[-\rightX]{flow}{3}{flow}{2}
+
+% egg picture
+
+\addtolength{\rightY}{\rightH}
+\addtolength{\rightY}{-10mm}
+\setlength{\rightW}{0.75in}
+\setlength{\rightH}{0.8in}
+\addtolength{\rightY}{-\rightH}
+\setlength{\rightX}{\textwidth}
+\addtolength{\rightX}{-\rightW}
+\newstaticframe[1]{\rightW}{\rightH}{\rightX}{\rightY}[egg]
+
+% set contents
+\setstaticcontents*{egg}{\includegraphics[scale=0.75]{egg}}
+
+% middle heading
+
+\setlength{\leftH}{2cm}
+\addtolength{\leftY}{-\leftH}
+
+\newstaticframe[1]{\textwidth}{\leftH}{0pt}{\leftY}[midhead]
+
+% insert horizontal line
+\inserthrule*{flow}{2}{static}{midhead}
+
+% bottom left flow frame
+
+\setlength{\leftH}{\leftY}
+\adjustheight{\leftH}
+\setlength{\leftW}{0.6\textwidth}
+
+\newflowframe[1]{\leftW}{\leftH}{0pt}{0pt}
+
+% bottom right flow frame
+
+\setlength{\rightX}{\leftW}
+\addtolength{\rightX}{\columnsep}
+\setlength{\rightW}{\textwidth}
+\addtolength{\rightW}{-\rightX}
+
+\newflowframe[1]{\rightW}{\leftH}{\rightX}{0pt}
+
+% static frame for sheep picture
+
+\newstaticframe[1]{0.8in}{0.8in}{0pt}{0pt}[sheep]
+
+% set contents
+\setstaticcontents*{sheep}{\includegraphics[scale=0.75]{sheep}}
+
+\onecolumn[>1] % for any text that falls off the last page
+
+\setcounter{secnumdepth}{0}
+\pagestyle{empty}
+
+\begin{document}
+
+\begin{staticcontents*}{title}
+\begin{center}
+\bfseries\Huge
+Fairy Tale Times
+\end{center}
+\hfill Issue 1. 20 November 2005.
+\end{staticcontents*}
+
+\section{Killer Wolf on the Loose}
+
+The authorites are warning of a killer wolf on the
+loose. He has so far devoured an old grandmother and
+two pig brothers. He is described as being furry with
+big eyes and big teeth.
+
+On Monday this week he broke into a house, and devoured
+an old lady. He then disguised himself as the old lady
+in order to deceive her granddaughter. Luckily for the little
+girl a woodsman arrived in time to rescue her. Parents are
+being cautioned not to let their children wander about on
+their own, and to remind them not to talk to strangers.\par
+\framebreak
+
+The next day the wolf struck again, this time targeting two
+pig brothers who had most incautiously made their dwellings
+on the cheap using inadequate materials. The wolf also made
+an attempt on the third pig brother, but was unable to break
+into his house.
+
+Police are appealing to the public for witnesses and remind
+people to keep their doors securely fastened at all times.
+
+``Always ask to see identification,'' said one police advisor,
+``and invest in improving the general security of your property.''
+
+\framebreak
+\section{Tragic Wall Accident}
+
+{\parshape=6 0pt 13em 0pt 13em 0pt 11em 0pt 11em 0pt 13em
+0pt 17em
+An egg person tragically fell from a six foot wall yesterday
+afternoon and was smash\-ed to pieces. The king's cavalry rushed
+to the scene, but regretted that they were unable to help him.
+\par}
+
+Humpty Dumpty was believed to be sitting
+on the wall when he fell. Police have ruled out foul play, but
+are advising people not to play on high walls, particularly
+those vulnerable members of the population suffering from
+eggshell syndrome.
+
+\begin{staticcontents*}{midhead}
+\section{Relief as Missing Sheep Finally Return Home}
+\end{staticcontents*}
+
+\framebreak
+There was much celebration yesterday morning when Little Bo
+Peep's sheep finally returned home. They had been missing
+for more than a week.
+
+{\parshape=8 0pt \linewidth 0pt \linewidth 0pt \linewidth
+0pt \linewidth 40pt 180pt 36pt 184pt 29pt 191pt
+0pt \linewidth
+``I just didn't know where to find them,'' the shepherdess
+stated, ``but I was told to leave them alone and they'd come
+home.'' Unusual advice perhaps, but it seems to have worked
+as they did indeed come home. Eye witnesses reported that their
+tails were wagging behind them.
+``I'm just so happy they've come home,'' Little Bo Peep said
+in a press conference yesterday\framebreak}afternoon.
+The sheep themselves made no comment, and police are still
+trying to determine what happened to them.
+
+\noindent\hrulefill
+
+This is a sample document illustrating the
+flowfram package. It uses \TeX's \verb|\parshape| command
+to create irregularly shaped paragraphs.
+
+\hfill Nicola Talbot
+\framebreak
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-news.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-news2.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass[12pt]{article}
+
+\usepackage{graphicx}
+\usepackage{color}
+\usepackage{flowfram}
+\usepackage[a4paper,margin=20mm]{geometry}
+
+% define lengths to help compute positions
+\newlength\leftX
+\newlength\leftY
+\newlength\leftH
+\newlength\leftW
+
+\newlength\rightX
+\newlength\rightY
+\newlength\rightH
+\newlength\rightW
+
+% Create a static frame to put title in
+\setlength{\leftH}{3cm}
+\setlength{\leftY}{\textheight}
+\addtolength{\leftY}{-\leftH}
+
+\newstaticframe[1]{\textwidth}{\leftH}{0pt}{\leftY}[title]
+
+% Create left hand frame. This will have an L shape
+
+\setlength{\leftH}{13cm}
+\adjustheight{\leftH}
+\addtolength{\leftY}{-\leftH}
+
+\newstaticframe[1]{\textwidth}{\leftH}{0pt}{\leftY}[L]
+\setstaticframe*{L}{shape={\parshape=24
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt 0.5\linewidth
+0pt \linewidth
+0pt \linewidth
+0pt \linewidth
+0pt \linewidth
+0pt \linewidth
+0pt \linewidth
+0pt \linewidth
+}}
+
+% egg picture
+
+\addtolength{\rightY}{\leftY}
+\addtolength{\rightY}{73mm}
+\setlength{\rightW}{0.9in}
+\setlength{\rightH}{1.5in}
+\setlength{\rightX}{\textwidth}
+\addtolength{\rightX}{-\rightW}
+\newstaticframe[1]{\rightW}{\rightH}{\rightX}{\rightY}[egg]
+
+% set contents
+\setstaticcontents*{egg}{\includegraphics[scale=0.9]{egg}}
+
+% Right hand static frame
+
+\setlength{\rightX}{0.5\textwidth}
+\addtolength{\rightX}{\columnsep}
+\setlength{\rightW}{\textwidth}
+\addtolength{\rightW}{-\rightX}
+\setlength{\rightY}{\leftY}
+\addtolength{\rightY}{2.8cm}
+\setlength{\rightH}{\leftH}
+\addtolength{\rightH}{-2.8cm}
+
+\newstaticframe[1]{\rightW}{\rightH}{\rightX}{\rightY}[right]
+
+\setstaticframe*{right}{shape={\parshape=15
+0pt \linewidth
+0pt \linewidth
+0pt \linewidth
+0pt 0.75\linewidth
+0pt 0.65\linewidth
+0pt 0.75\linewidth
+0pt 0.8\linewidth
+0pt 0.8\linewidth
+0pt \linewidth
+0pt \linewidth
+0pt \linewidth
+0pt \linewidth
+0pt \linewidth
+0pt \linewidth
+0pt \linewidth
+}}
+
+% insert vertical and horizontal rules, can't use
+% \insertrule as left hand
+% frame is actually the width of the typeblock
+\addtolength{\rightX}{-0.5\columnsep}
+\newstaticframe[1]{0pt}{\rightH}{\rightX}{\rightY}[Lrule]
+\setstaticcontents*{Lrule}{\makebox[0pt][l]{%
+\rule{\columnseprule}{\rightH}\rule{\rightW}{\columnseprule}}}
+
+% middle heading
+
+\setlength{\leftH}{2cm}
+\addtolength{\leftY}{-\leftH}
+
+\newstaticframe[1]{\textwidth}{\leftH}{0pt}{\leftY}[midhead]
+
+% insert horizontal rule
+\inserthrule*{static}{L}{static}{midhead}
+
+% flow frames
+\twocolumninarea{\textwidth}{\leftY}{0pt}{0pt}
+
+% static frame for sheep picture
+
+\newstaticframe[1]{1.6in}{1.6in}{0pt}{0pt}[sheep]
+
+% set contents
+\setstaticcontents*{sheep}{\includegraphics[scale=1.2]{sheep}}
+
+\setcounter{secnumdepth}{0}
+\setlength{\sdfparindent}{\parindent}
+
+\begin{document}
+\begin{staticcontents*}{title}
+\begin{center}
+\bfseries\Huge
+Fairy Tale Times
+\end{center}
+\hfill Issue 2. 7 December 2005.
+\end{staticcontents*}
+
+\begin{staticcontents*}{L}
+\section{Killer Wolf on the Loose}
+
+The authorites are warning of a killer wolf on the
+loose. He has so far devoured an old grandmother and
+two pig brothers. He is described as being furry with
+big eyes and big teeth.
+
+On Monday this week he broke into a house, and devoured
+an old lady. He then disguised himself as the old lady
+in order to deceive her granddaughter. Luckily for the little
+girl a woodsman arrived in time to rescue her. Parents are
+being cautioned not to let their children wander about on
+their own, and to remind them not to talk to strangers.
+
+The next day the wolf struck again, this time targeting two
+pig brothers who had most incautiously made their dwellings
+on the cheap using inadequate materials. The wolf also made
+an attempt on the third pig brother, but was unable to break
+into his house.
+
+Police are appealing to the public for witnesses and remind
+people to keep their doors securely fastened at all times.
+``Always ask to see identification,'' said one police advisor,
+``and invest in improving the general security of your property.''
+\end{staticcontents*}
+
+\begin{staticcontents*}{right}
+\section{Tragic Wall Accident}
+
+An egg person tragically fell from a six foot wall yesterday
+afternoon and was smash\-ed to pieces. The king's cavalry rushed
+to the scene, but regretted that they were unable to help him.
+
+Humpty Dumpty was believed to be sitting on the wall when he fell. Police have ruled out foul play, but
+are advising people not to play on high walls, particularly
+those vulnerable members of the population suffering from
+eggshell syndrome.
+
+\small\em
+%Wall related incidents this year: page 3
+%
+Exclusive interview with one of the King's men on page 6
+\end{staticcontents*}
+
+\begin{staticcontents*}{midhead}
+\section{Relief as Missing Sheep Finally Return Home}
+\end{staticcontents*}
+
+There was much celebration yesterday morning when Little Bo
+Peep's sheep finally returned home. They had been missing
+for more than a week.
+
+``I just didn't know where to find them,'' the shepherdess
+stated, ``but I was told to leave them alone and they'd come
+home.''
+
+\parshape=8
+0pt \linewidth
+0pt \linewidth
+0.3\linewidth 0.7\linewidth
+0.3\linewidth 0.7\linewidth
+0.25\linewidth 0.75\linewidth
+0.25\linewidth 0.75\linewidth
+0pt \linewidth
+0pt \linewidth
+Unusual advice perhaps, but it seems to have worked
+as they did indeed come home. Eye witnesses reported that their
+tails were wagging behind them.
+``I'm just so happy they've come home,'' Little Bo Peep said
+in a press conference yesterday afternoon.
+The sheep themselves made no comment, and police are%
+\framebreak\parshape=0
+still trying to determine what happened to them.
+The big bad wolf is reportedly helping them with their inquiries.
+
+\noindent\hrulefill
+
+This is a sample document illustrating the
+flowfram package. It uses \TeX's \verb|\parshape| command
+to create irregularly shaped paragraphs. This can be a complicated
+and somewhat tiresome task, and is generally not recommended.
+Using the shapepar package provides you with more intricate
+shapes, but as its documentation says, it is not intended
+for use in large documents.
+
+\hfill Nicola Talbot
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-news2.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-pages.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass{book}
+
+\usepackage[demo]{graphicx}
+\usepackage{lipsum}
+\usepackage{color}
+\usepackage[
+ draft,
+ verbose,
+ pages=absolute
+ ]{flowfram}
+
+\onecolumn
+
+\setflowframe{1}{label=single}
+
+\twocolumnDtop[none]{2in}
+
+\setdynamicframe{1}{label=title}
+\setflowframe{2}{label=shortleft}
+\setflowframe{3}{label=shortright}
+
+\twocolumn[none]
+
+\setflowframe{4}{label=left}
+\setflowframe{5}{label=right}
+
+\newdynamicframe[none]{\textwidth}{\textheight}{0pt}{0pt}[image]
+
+\setdynamicframe*{image}{valign=c}
+
+\title{Sample Document}
+\author{A.N. Other}
+
+\begin{document}\raggedright
+\maketitle
+
+\frontmatter
+\tableofcontents
+\chapter{Acknowledgements}
+
+\lipsum[1]
+
+\flowswitchoffnextodd*{single}%
+\flowswitchonnextoddonly*{shortleft,shortright}%
+\dynamicswitchonnextoddonly*{title}%
+\dfchaphead*{title}
+
+
+\mainmatter
+\chapter{Sample}
+
+\flowswitchonnext*{left,right}%
+% From this point onwards, automate the switch at the start of
+% each chapter
+\renewcommand{\ffprechapterhook}{%
+ \flowswitchoffnextoddonly*{left,right}%
+ \flowswitchonnextoddonly*{shortleft,shortright}%
+ \dynamicswitchonnextoddonly*{title}%
+}
+
+\lipsum
+
+\lipsum
+
+\chapter{Another Sample Chapter}
+
+\lipsum[1-20]
+
+% Switch to single column just for the next page
+
+\flowswitchoffnextonly*{left,right}
+\flowswitchonnextonly*{single}
+
+\clearpage
+
+\begin{figure}[p]
+\centering
+ \includegraphics{image1}
+\caption{A Sample Figure}
+\label{fig:sample}
+\end{figure}
+
+\clearpage
+
+\lipsum[21-30]
+
+\chapter{Here's Another Chapter}
+
+\lipsum[1-20]
+
+% Switch of columns for next page only and switch on dynamic frame
+% called "image":
+
+\flowswitchoffnextonly*{left,right}
+\dynamicswitchonnextonly*{image}
+
+\setdynamiccontents*{image}{%
+ \begin{staticfigure}
+ \centering
+ \includegraphics{image2}
+ \caption{Another Sample Figure}
+ \label{fig:sample2}
+ \end{staticfigure}
+}
+
+\lipsum[21-40]
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-pages.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-poster.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass[a0]{a0poster}
+
+\usepackage{color}
+\usepackage{mathptmx}
+\usepackage{courier}
+\usepackage[scaled=0.92]{helvet}
+\usepackage{url}
+\usepackage{flowfram}
+
+% set up frames
+
+\setlength{\columnsep}{2cm}
+
+% Base the page layout on 4 column with static header.
+% The static frame has height = 0.2\textheight
+\NcolumnStop{4}{0.2\textheight}
+% give the static frame a label to make it easier to keep track of
+\setstaticframe{\value{maxstatic}}{label={title},backcolor=[cmyk]{0.64,0,0.95,0.40},textcolor=white}
+
+% Insert a vertical line between flow frames 2 and 3:
+\insertvrule{flow}{2}{flow}{3}
+
+% On the first page, replace last two columns with
+% 2 columns and a static underneath
+\setflowframe{3,4}{pages={>1}}
+
+\computeflowframearea{3,4}
+\twocolumnSbottominarea[1]{0.5\ffareaheight}{\ffareawidth}{\ffareaheight}{\ffareax}{\ffareay}
+\setstaticframe{\value{maxstatic}}{label={info},backcolor=[cmyk]{0.26,0,0.76,0},clear}
+
+% insert a horizontal rule between flow frame 5 and static
+% frame 5
+\inserthrule*[0.5\columnsep]{flow}{5}{static}{info}
+
+\setallflowframes{backcolor=[cmyk]{0.15,0,0.69,0}}
+
+\newcommand{\sty}[1]{\textsf{#1}}
+\newcommand{\env}[1]{\textsf{#1}}
+\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}}
+\newcommand{\meta}[1]{\textnormal{\textless\textit{#1}\textgreater}}
+
+%\raggedright
+%\setlength{\parindent}{15pt}
+
+\begin{document}
+\begin{staticcontents*}{title}
+\begin{center}
+\bfseries\veryHuge flowframe.sty : Creating Posters, Magazines or Brochures in \LaTeX
+\vskip1cm
+\huge Nicola L. C. Talbot
+\vskip2ex
+\normalsize \url{http://www.dickimaw-books.com/}
+\end{center}
+\end{staticcontents*}
+
+\pagestyle{empty}
+
+\begin{staticcontents*}{info}
+\begin{staticfigure}
+
+\begin{verbatim}
+ % Make the distance between columns = 1.5cm
+ \setlength{\columnsep}{2cm}
+
+ % Make a 4 column layout with a static frame on top.
+ % The static frame has height = 0.2\textheight
+ \NcolumnStop{4}{0.2\textheight}
+
+ % give the static frame a label to make it easier to keep track of
+ \setstaticframe{\value{maxstatic}}{label={title},backcolor=[cmyk]{0.64,0,0.95,0.40},textcolor=white}
+
+ % On the first page, replace the 3rd and 4th columns
+ % with two shorter columns with a static frame underneath
+ \setflowframe{3,4}{pages={>1}}
+
+ % The area taken up by the 3rd and 4th columns is given by
+ \computeflowframearea{3,4}
+
+ % Set up new frames in this area
+ \twocolumnSbottominarea[1]{0.5}{\ffareawidth}{\ffareaheight}{\ffareax}{\ffareay}
+
+ % Assign a label to the last static frame to be created, and set background colour
+ \setstaticframe{\value{maxstatic}}{label={info},backcolor=[cmyk]{0.26,0,0.76,0}}
+
+ % Set the background colour for all flow frames
+ \setallflowframes{backcolor=[cmyk]{0.15,0,0.69,0}}
+\end{verbatim}
+
+\caption{The commands used to define the frames for this document}
+\protect\label{fig:thisdoc}
+\end{staticfigure}
+\end{staticcontents*}
+
+This is a modified version of the manual for the \sty{flowfram}
+package. It is intended to illustrated what can be done. See the
+full manual (ffuserguide.pdf) for
+a comprehensive description, as this may now be out of date. The commands used to define the frames for
+this document are shown in Figure~\ref{fig:thisdoc}.
+If the columns are very narrow, it may be better to
+use \cmdname{raggedright}, otherwise \TeX\ may have a
+problem working out the line breaks.
+
+\section{Introduction}
+
+The \sty{flowfram} package is designed to enable you to create
+frames in a document such that the
+contents of the \env{document} environment flow from one
+frame to the next in the order that they were defined.
+This is useful for creating posters
+or magazines or any other form of document that does not
+conform to the standard one or two column layout.
+
+\section{Setting up Frames}
+
+The \sty{flowfram} package provides three types of frame:
+{flow frames}, {static
+frames} and {dynamic frames}.
+
+\subsection{Flow Frames}
+
+The flow frame is the principle type of frame.
+The text of the \env{document} environment will flow from
+one frame to the next in order of definition. Each
+flow frame has an associated width, height,
+position on the page, and optionally a border.
+
+It is recommended that all the flow frames in a document
+have the same width, otherwise problems may occur
+when a paragraph spans to flow frames of unequal
+widths. This is because \TeX's output routine does not
+register the change in \cmdname{hsize} until it reaches
+a paragraph break. If it is absolutely necessary for
+flow frames to have unequal widths, judicious use of
+\cmdname{framebreak} is required.
+
+\subsection{Static Frames}
+
+A static frame is a rectangular area in which text neither
+flows into, nor flows out of. The contents must be set
+explicitly, and once set, the contents of the static frame will
+remain the same on each page until it is explicitly
+changed. Thus, a static frame can be used, for example, to make
+a company logo appear in the same place on every page.
+
+\subsection{Dynamic Frames}
+
+A dynamic frame is similar to a static frame, but its contents
+are re-typeset on each page. (A static frame stores its
+contents in a savebox, whereas a dynamic frame stores its
+contents in a macro).
+
+\section{Frame Attributes}
+\label{sec:modattr}
+
+Once you have defined the {flow frames}, {static frames} and
+{dynamic frames}, their attributes can be changed.
+The three types of frame mostly have the
+same set of attributes, but some are specific to a certain type.
+The available attributes are as follows
+(\textsuperscript{\textbf{F}} indicates the key is
+only available for {flow frames},
+\textsuperscript{\textbf{S}} indicates the key is only available
+for {static frames}
+and \textsuperscript{\textbf{D}} indicates the key
+is only available for {dynamic frames}):
+
+\begin{description}
+\item[width=\meta{length}] The width of the frame.
+
+\item[height=\meta{length}] The height of the frame.
+
+\item[x=\meta{length}] The x-coordinate of the frame.
+
+\item[y=\meta{length}] The y-coordinate of the frame.
+
+\item[border=\meta{style}] The style of the border around the
+frame, this can take the values: \texttt{none} (no border),
+\texttt{plain} (plain border) or the name of a \LaTeX\
+frame making command without the preceding backslash.
+The value \texttt{fbox} is equivalent to \texttt{plain}.
+
+\item[offset=\meta{offset}] The border offset, if it is a
+user-defined border. This is the distance from the outer
+edge of the left hand border to the left edge of the
+bounding box of the text inside the border. The \sty{flowfram}
+package is able to compute the border for
+known frame making commands.
+If you define your own frame making command, you may need to
+specify the offset explicitly, or the frames
+may end up shifted to the right or left.
+
+\item[bordercolor=\meta{colour}] The colour of the border
+if you are using a standard frame making command.
+The colour can either be specified as, e.g.\ \texttt{green},
+or including the colour model, e.g. \verb/[rgb]{0,1,0}/.
+
+\item[textcolor=\meta{colour}] The text colour for that
+frame. Again, the colour can either be specified as,
+e.g.\ \texttt{green}, or including the colour model,
+e.g. \verb/[rgb]{0,1,0}/.
+
+\item[pages=\meta{page list}] The {list of
+pages} for which the frame
+should appear. This can either have the values: \texttt{all},
+\texttt{even}, \texttt{odd} or \texttt{none} (the latter
+removes the frame from that point on---useful if you
+have multiple pages with the same number), or it can be a
+comma-separated list of single pages, or
+{page ranges}.
+
+\item[margin=\meta{side}\textsuperscript{F}] The side of
+the flow frame that its corresponding margin should go on. This
+can take the values \texttt{left} or \texttt{right}.
+
+\item[clear=\meta{boolean}\textsuperscript{S}] If this value
+is set, the static frame will be cleared at the start of the
+next page.
+
+\item[style=\meta{cmd}\textsuperscript{D}] This should be
+the name of a command \emph{without} the preceding backslash,
+to be applied to the contents of the specified dynamic frame.
+The command may either be a declaration, for example \verb/style=large/
+which will set the contents of all the dynamic frames in a
+large font, or it can be a command that takes a single argument,
+for example \verb/style=textbf/
+which will make the text for all the dynamic frames come out in
+bold. To unset a style, do \verb/style=none/.
+
+\end{description}
+
+\section{Miscellaneous}
+
+\subsection{Page Layout}
+
+The \sty{flowfram} package has the package option \texttt{draft}
+which will draw the {bounding boxes} for
+each frame defined. At the bottom right of each
+bounding box (except for the bounding box denoting the
+typeblock), a marker will be shown to indictate the type
+of frame, its IDN and its IDL.
+
+You can see the layout for the current page (irrespective of
+whether or not the \texttt{draft} option has been set) using
+the command:\newline
+\cmdname{flowframeshowlayout}
+
+The headers and footers will appear as usual (but will not
+be shown in draft mode), according to the format given by
+\cmdname{pagestyle}.
+
+\subsection{Frame Stacking Order}
+
+The material on each page is placed in the following order:
+\begin{enumerate}
+\item Each static frame defined for that page in ascending
+order of IDN.
+
+\item Each flow frame defined for that page in ascending
+order of IDN.
+
+\item Each dynamic frame defined for that page in ascending
+order of IDN.
+
+\item {Bounding boxes} if the \texttt{draft}
+package option has been used.
+\end{enumerate}
+
+This ordering can be used to determine if you want something
+to overlay or underlay everything else on the page.
+
+\subsection{Prematurely Ending a Flow Frame}
+
+You can force text to move immediately to the next defined
+flow frame using one of the standard \LaTeX\ page breaking commands
+which work in an analogous way to the way they
+work in standard two column mode.
+
+The command \cmdname{framebreak} is provided for situations
+where a paragraph spans two flow frames
+of different widths, as \TeX's output routine does not
+adjust to the new value of \cmdname{hsize} until the last
+paragraph of the previous frame has ended. As a
+result, the end of the paragraph at the beginning of the new
+flow frame retains the width of the previous flow frame.
+
+If you want to start a new page, rather than simply move to the
+next frame, use the command\newline
+\cmdname{finishthispage}.
+
+\subsection{Floats}
+
+Since floats (such as figures and tables) can only go in
+{flow frames}, this package provides
+the additional environments:
+\env{staticfigure} and
+\env{statictable} which can be used in static frames
+and dynamic frames. Unlike their \env{figure} and
+\env{table} counterparts, they are fixed in place, and
+so do not take an optional placement specifier. The
+\cmdname{caption} and \cmdname{label} commands can
+be used within \env{staticfigure} and \env{statictable} as
+usual.
+
+The standard \env{figure} and \env{table} commands will
+behave as usual in the flow frames, but their starred versions,
+\env{figure*} and \env{table*} behave no differently
+from \env{figure} and \env{table}.
+
+\subsection{Global Values}
+
+The following macros can be changed using \cmdname{renewcommand}:
+
+\begin{itemize}
+\item \cmdname{setffdraftcolor}
+
+This sets the colour of the bounding box
+when it is displayed in draft mode.
+
+\item
+\cmdname{setffdrafttypeblockcolor}
+
+This sets the colour of
+the bounding box of the typeblock when it is displayed
+in draft mode.
+
+\item \cmdname{fflabelfont}
+
+This sets the font size for the bounding box markers in
+draft mode.
+
+\end{itemize}
+
+The following are lengths, which can be changed using
+\cmdname{setlength}:
+
+\begin{itemize}
+\item \cmdname{fflabelsep}
+
+This is the distance from the right hand side of the
+bounding box at which to place the bounding box marker.
+
+\item \cmdname{flowframesep}
+
+This is the gap between the text of the frame and
+its border, for the standard border types.
+
+\item \cmdname{flowframerule}
+
+This is the width of the frame's border, if using
+a border given by a frame making command that uses \cmdname{fboxsep}
+to set its border width.
+
+\item \cmdname{columnsep}
+
+This is the horizontal distance between flow frames when using one of the
+\cmdname{Ncolumn} type of commands
+
+\item \cmdname{vcolumnsep}
+
+This is the vertical distance between the flow frames and the static or
+dynamic frame when using one of the \cmdname{Ncolumntop} type of commands.
+\end{itemize}
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-poster.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample-rot.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass[a4paper]{article}
+
+\usepackage[draft]{flowfram}
+\usepackage{supertabular}
+
+\newflowframe{0.3\textwidth}{0.25\textheight}{0.5\textwidth}{0.5\textheight}
+
+\newflowframe{0.3\textwidth}{0.2\textheight}{0pt}{0.1\textheight}
+
+\newflowframe{0.3\textwidth}{0.2\textheight}{0.5\textwidth}{0.1\textheight}
+
+\setflowframe{1}{angle=45}
+\setflowframe{3}{angle=90}
+
+\begin{document}
+
+This is a sample document illustrating the use of the
+flowfram package. The first flow frame has been rotated
+by an angle of 45 degrees. There is an asterisk in the
+margin\marginpar{*}. There is also a
+footnote\footnote{down here.}.
+
+\framebreak
+\begin{supertabular}{rl}
+1 & A\\
+2 & B\\
+3 & C\\
+4 & D\\
+5 & E\\
+6 & F\\
+7 & G\\
+8 & H\\
+9 & I\\
+10 & J\\
+11 & K\\
+12 & L\\
+13 & M\\
+14 & N\\
+15 & O\\
+16 & P\\
+17 & Q\\
+18 & R\\
+19 & S\\
+20 & T\\
+\end{supertabular}
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample-rot.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass[a4paper,twoside]{book}
+
+\usepackage{times}
+\usepackage{courier}
+\usepackage{helvet}
+\usepackage[margin=1in,top=1in,bottom=1in]{geometry}
+\usepackage[colorlinks,
+ linkcolor=black,
+ urlcolor=black,
+ plainpages=false,
+ pdfpagelabels=true]{hyperref}
+\usepackage{fancybox}
+\usepackage{color}
+\usepackage{flowfram}
+
+\newcommand{\sty}[1]{\textsf{#1}}
+\newcommand{\env}[1]{\textsf{#1}}
+\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}}
+\newcommand{\meta}[1]{\textnormal{\textless\textit{#1}\textgreater}}
+
+% set up some background frames to liven up the title page
+\newlength{\leftwidth}
+\newlength{\rightwidth}
+
+\computeleftedgeodd{\leftwidth}
+\setlength{\leftwidth}{-\leftwidth}
+\addtolength{\leftwidth}{0.4\textwidth}
+\setlength{\rightwidth}{\paperwidth}
+\addtolength{\rightwidth}{-\leftwidth}
+% only defined on page 1 unfortunately the document
+% has more than one page 1, so will need to change the settings after the title page
+\vtwotone[1]{\leftwidth}{magenta}{backleft}{\rightwidth}{[cmyk]{0,0.48,0,0}}{backright}
+
+% This is for the back cover.
+\vtwotone[none]{\rightwidth}{[cmyk]{0,0.48,0,0}}{lastbackright}{\leftwidth}{magenta}{lastbackleft}
+
+\vtwotonetop[odd]{1cm}{\leftwidth}{magenta}{oddtopleft}{\rightwidth}{[cmyk]{0,0.48,0,0}}{oddtopright}
+\vtwotonetop[even]{1cm}{\rightwidth}{[cmyk]{0,0.48,0,0}}{eventopleft}{\leftwidth}{magenta}{eventopright}
+
+% Set the margin width
+\setlength{\marginparwidth}{2cm}
+
+% now set up main document frames. Each page has a dynamic
+% frame for the chapter heading, and a flow frame for the
+% text.
+\newflowframe{0.6\textwidth}{\textheight}{0pt}{0pt}[main]
+\newdynamicframe{0.38\textwidth}{\textheight}{0.62\textwidth}{0pt}[chaphead]
+
+% swap them round on even pages
+\setflowframe*{main}{evenx=0.4\textwidth}
+\setdynamicframe*{chaphead}{evenx=0pt}
+
+% set the margins to appear on the spine side of the page
+\setflowframe*{main}{margin=inner}
+
+% put chapter headings in dynamic frame with IDL chaphead
+\dfchaphead*{chaphead}
+
+% append chapter minitocs to same dynamic frame.
+\appenddfminitoc*{chaphead}
+
+% change the style of the chapter headings
+
+% numbered chapters:
+\renewcommand{\DFchapterstyle}[1]{%
+\raggedright\sffamily\bfseries\Huge\color{blue}#1\par
+}
+
+% unnumbered chapters:
+\renewcommand{\DFschapterstyle}[1]{\raggedright\sffamily\bfseries\Huge\color{blue} #1\par
+}
+
+% Make thumb tabs (specify each tab to be 2in high)
+
+\makethumbtabs{2in}
+\enableminitoc
+
+% Thumbtabs are grey by default which looks a bit boring,
+% so change the colours
+\setthumbtab{1}{backcolor=[rgb]{0.15,0.15,1}}
+\setthumbtab{2}{backcolor=[rgb]{0.2,0.2,1}}
+\setthumbtab{3}{backcolor=[rgb]{0.25,0.25,1}}
+\setthumbtab{4}{backcolor=[rgb]{0.3,0.3,1}}
+
+% change the text style on the thumbtabs
+%\newcommand{\thumbtabstyle}[1]{\textbf{\sffamily\large #1}}
+\newcommand{\thumbtabstyle}[1]{\textsc{\sffamily #1}}
+\setthumbtab{all}{style=thumbtabstyle,textcolor=white}
+
+% set default page style
+
+\pagestyle{plain}
+
+% Put headers and footers in dynamic frames
+\makedfheaderfooter
+
+\newlength{\xoffset}
+\computerightedgeodd{\xoffset}
+\addtolength{\xoffset}{-2cm}
+\newlength{\yoffset}
+\computebottomedge{\yoffset}
+
+\newcommand{\footstyle}[1]{\bfseries\LARGE #1}
+
+% pages is initially set to none, as I don't want the footer to
+% appear on the title page.
+
+\setdynamicframe*{footer}{oddx=\xoffset,y=\yoffset,width=2cm,height=2cm,
+backcolor=blue,textcolor=white,style=footstyle,pages=none}
+
+% now work out the x offset for the even pages
+
+\computeleftedgeeven{\xoffset}
+\setdynamicframe*{footer}{evenx=\xoffset}
+
+\begin{document}
+\ffswapoddeven*{main}% swap odd and even position of frame for the title page
+\dfswapoddeven*{chaphead}
+\title{Creating Flow Frames for Posters or Magazines}
+\author{Nicola L. C. Talbot\\[1cm]\url{http://www.dickimaw-books.com/}}
+\date{}
+\pagenumbering{alph}
+\maketitle
+
+% make table of contents appear on a right hand page
+\cleardoublepage
+%suppress the background
+\setstaticframe*{backleft}{pages=none}
+\setstaticframe*{backright}{pages=none}
+
+\frontmatter
+%\tableofcontents
+\tocandthumbtabindex
+% make the footers appear from this point on
+\setdynamicframe*{footer}{pages=all}
+
+\clearpage
+\dfswapoddeven*{chaphead}
+\ffswapoddeven*{main}% swap back again
+
+\mainmatter
+\chapter{Introduction}
+\enablethumbtabs
+\pagenumbering{arabic}
+
+The \sty{flowfram} package is designed to enable you to create
+frames in a document such that the
+contents of the \env{document} environment flow from one
+frame to the next in the order that they were defined.
+This is useful for creating posters\marginpar{A marginal note}
+or magazines or any other form of document that does not
+conform to the standard one or two column layout.
+
+This document has \themaxflow\ flow
+\ifthenelse{\value{maxflow}=1}{frame}{frames}, \themaxstatic\ static
+\ifthenelse{\value{maxstatic}=1}{frame}{frames} and
+\themaxdynamic\ dynamic \ifthenelse{\value{maxdynamic}=1}{frame}{frames}.
+
+\chapter{Setting up Frames}
+
+The \sty{flowfram} package provides three types of frame:
+{flow frames}, {static
+frames} and {dynamic frames}.
+
+\section{Flow Frames}
+
+The flow frame is the principle type of frame.
+The text of the \env{document} environment will flow from
+one frame to the next in order of definition. Each
+flow frame has an associated width, height,
+position on the page, and optionally a border\footnote{A
+footnote!}.
+
+\section{Static Frames}
+
+A static frame is a rectangular area in which text neither
+flows into, nor flows out of. The contents must be set
+explicitly, and once set, the contents of the static frame will
+remain the same on each page until it is explicitly
+changed. Thus, a static frame can be used, for example, to make
+a company logo appear in the same place on every page.
+
+\section{Dynamic Frames}
+
+A dynamic frame is similar to a static frame, but its contents
+are re-typeset on each page. (A static frame stores its
+contents in a savebox, whereas a dynamic frame stores its
+contents in a macro).
+
+\chapter{Frame Attributes}
+\label{sec:modattr}
+
+Once you have defined the {flow frames}, {static frames} and
+{dynamic frames}, their attributes can be changed.
+The three types of frame mostly have the
+same set of attributes, but some are specific to a certain type.
+The available attributes are as follows
+(\textsuperscript{\textbf{F}} indicates the key is
+only available for {flow frames},
+\textsuperscript{\textbf{S}} indicates the key is only available
+for {static frames}
+and \textsuperscript{\textbf{D}} indicates the key
+is only available for {dynamic frames}):
+
+\begin{description}
+\item[width=\meta{length}] The width of the frame.
+
+\item[height=\meta{length}] The height of the frame.
+
+\item[x=\meta{length}] The x-coordinate of the frame.
+
+\item[y=\meta{length}] The y-coordinate of the frame.
+
+\item[border=\meta{style}] The style of the border around the
+frame, this can take the values: \texttt{none} (no border),
+\texttt{plain} (plain border) or the name of a \LaTeX\
+frame making command without the preceding backslash.
+The value \texttt{fbox} is equivalent to \texttt{plain}.
+
+\item[offset=\meta{offset}] The border offset, if it is a
+user-defined border. This is the distance from the outer
+edge of the left hand border to the left edge of the
+bounding box of the text inside the border. The \sty{flowfram}
+package is able to compute the border for
+known frame making commands.
+If you define your own frame making command, you may need to
+specify the offset explicitly, or the frames
+may end up shifted to the right or left.
+
+\item[bordercolor=\meta{colour}] The colour of the border
+if you are using a standard frame making command.
+The colour can either be specified as, e.g.\ \texttt{green},
+or including the colour model, e.g. \verb/[rgb]{0,1,0}/.
+
+\item[textcolor=\meta{colour}] The text colour for that
+frame. Again, the colour can either be specified as,
+e.g.\ \texttt{green}, or including the colour model,
+e.g. \verb/[rgb]{0,1,0}/.
+
+\item[pages=\meta{page list}] The {list of
+pages} for which the frame
+should appear. This can either have the values: \texttt{all},
+\texttt{even}, \texttt{odd} or \texttt{none} (the latter
+removes the frame from that point on---useful if you
+have multiple pages with the same number), or it can be a
+comma-separated list of single pages, or
+{page ranges}.
+
+\item[margin=\meta{side}\textsuperscript{F}] The side of
+the flow frame that its corresponding margin should go on. This
+can take the values \texttt{left} or \texttt{right}.
+
+\item[clear=\meta{boolean}\textsuperscript{S}] If this value
+is set, the static frame will be cleared at the start of the
+next page.
+
+\item[style=\meta{cmd}\textsuperscript{D}] This should be
+the name of a command \emph{without} the preceding backslash,
+to be applied to the contents of the specified dynamic frame.
+The command may either be a declaration, for example \verb/style=large/
+which will set the contents of all the dynamic frames in a
+large font, or it can be a command that takes a single argument,
+for example \verb/style=textbf/
+which will make the text for all the dynamic frames come out in
+bold. To unset a style, do \verb/style=none/.
+
+\end{description}
+
+\chapter{Miscellaneous}
+
+\section{Page Layout}
+
+The \sty{flowfram} package has the package option \texttt{draft}
+which will draw the {bounding boxes} for
+each frame defined. At the bottom right of each
+bounding box (except for the bounding box denoting the
+typeblock), a marker will be shown to indictate the type
+of frame, its IDN and its IDL.
+
+You can see the layout for the current page (irrespective of
+whether or not the \texttt{draft} option has been set) using
+the command:\newline
+\cmdname{flowframeshowlayout}
+
+The headers and footers will appear as usual (but will not
+be shown in draft mode), according to the format given by
+\cmdname{pagestyle}.
+
+\section{Frame Stacking Order}
+
+The material on each page is placed in the following order:
+\begin{enumerate}
+\item Each static frame defined for that page in ascending
+order of IDN.
+
+\item Each flow frame defined for that page in ascending
+order of IDN.
+
+\item Each dynamic frame defined for that page in ascending
+order of IDN.
+
+\item {Bounding boxes} if the \texttt{draft}
+package option has been used.
+\end{enumerate}
+
+This ordering can be used to determine if you want something
+to overlay or underlay everything else on the page.
+
+\section{Prematurely Ending a Flow Frame}
+
+You can force text to move immediately to the next defined
+flow frame using one of the standard \LaTeX\ page breaking commands
+which work in an analogous way to the way they
+work in standard two column mode.
+
+The command \cmdname{framebreak} is provided for situations
+where a paragraph spans two flow frames
+of different widths, as \TeX's output routine does not
+adjust to the new value of \cmdname{hsize} until the last
+paragraph of the previous frame has ended. As a
+result, the end of the paragraph at the beginning of the new
+flow frame retains the width of the previous flow frame.
+
+If you want to start a new page, rather than simply move to the
+next frame, use the command\newline
+\cmdname{finishthispage}.
+
+\section{Floats}
+
+Since floats (such as figures and tables) can only go in
+{flow frames}, this package provides
+the additional environments:
+\env{staticfigure} and
+\env{statictable} which can be used in static frames
+and dynamic frames. Unlike their \env{figure} and
+\env{table} counterparts, they are fixed in place, and
+so do not take an optional placement specifier. The
+\cmdname{caption} and \cmdname{label} commands can
+be used within \env{staticfigure} and \env{statictable} as
+usual.
+
+The standard \env{figure} and \env{table} commands will
+behave as usual in the flow frames, but their starred versions,
+\env{figure*} and \env{table*} behave no differently
+from \env{figure} and \env{table}.
+
+\section{Global Values}
+
+The following macros can be changed using \cmdname{renewcommand}:
+
+\begin{itemize}
+\item \cmdname{setffdraftcolor}
+
+This sets the colour of the bounding box
+when it is displayed in draft mode.
+
+\item
+\cmdname{setffdrafttypeblockcolor}
+
+This sets the colour of
+the bounding box of the typeblock when it is displayed
+in draft mode.
+
+\item \cmdname{fflabelfont}
+
+This sets the font size for the bounding box markers in
+draft mode.
+
+\end{itemize}
+
+The following are lengths, which can be changed using
+\cmdname{setlength}:
+\marginpar{Another marginal note}
+
+\begin{itemize}
+\item \cmdname{fflabelsep}
+
+This is the distance from the right hand side of the
+bounding box at which to place the bounding box marker.
+
+\item \cmdname{flowframesep}
+
+This is the gap between the text of the frame and
+its border, for the standard border types.
+
+\item \cmdname{flowframerule}
+
+This is the width of the frame's border, if using
+a border given by a frame making command that uses \cmdname{fboxsep}
+to set its border width.
+\end{itemize}
+
+
+\chapter*{Contact Details}
+\disablethumbtabs
+
+Dr Nicola Talbot\\
+School of Computing Sciences\\
+University of East Anglia\\
+Norwich. Norfolk. NR4 7TJ. UK\\
+\url{http://theoval.cmp.uea.ac.uk/~nlct/}
+
+\finishthispage\mbox{}
+\setdynamiccontents*{chaphead}{}
+\setdynamicframe*{footer}{pages=none}
+\setstaticframe*{lastbackleft,lastbackright}{pages=even}
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample1.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass[a4paper]{article}
+
+\usepackage[a4paper,landscape,margin=1in]{geometry}
+\usepackage{fancybox}
+\usepackage{color}
+\usepackage{flowfram}
+
+\showframebboxtrue
+\showtypeblocktrue
+
+% set up frames
+
+% Base the page layout on 4 column with static header
+\NcolumnStop{4}{1in}
+
+% On the first page, replace last two columns with
+% 2 columns and a static underneath
+\setflowframe{3,4}{pages={>1}}
+\twocolumnSbottominarea[1]{1in}{0.5\textwidth}{\flowframeheight{3}}{0.5\textwidth}{0pt}
+
+\begin{staticcontents}{2}
+The page layout for this document was obtained with
+the following commands:
+\begin{verbatim}
+\NcolumnStop{4}{1in}
+\setflowframe{3,4}{pages={>1}}
+\twocolumnSbottominarea[1]{1in}{0.5\textwidth}{flowframeheight{3}}
+{0.5\textwidth}{0pt}
+\end{verbatim}
+\end{staticcontents}
+
+\newcommand{\sty}[1]{\textsf{#1}}
+\newcommand{\env}[1]{\textsf{#1}}
+\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}}
+\newcommand{\meta}[1]{\textnormal{\textless\textit{#1}\textgreater}}
+
+\raggedright
+%\setlength{\parindent}{15pt}
+
+\begin{document}
+
+\begin{staticcontents}{1}
+\title{Creating Flow Frames for Posters or Magazines}
+\author{Nicola L. C. Talbot}
+\date{}
+\maketitle
+\end{staticcontents}
+
+This is a modified version of the manual for the \sty{flowfram} package.
+It is intended to illustrated what can be done. See the full manual for
+a comprehensive description.
+
+If the columns are very narrow, it may be better to
+use \cmdname{raggedright}, otherwise \TeX\ may have a
+problem working out the line breaks.
+
+\section{Introduction}
+
+The \sty{flowfram} package is designed to enable you to create
+frames in a document such that the
+contents of the \env{document} environment flow from one
+frame to the next in the order that they were defined.
+This is useful for creating posters
+or magazines or any other form of document that does not
+conform to the standard one or two column layout.
+
+\section{Setting up Frames}
+
+The \sty{flowfram} package provides three types of frame:
+{flow frames}, {static
+frames} and {dynamic frames}.
+
+\subsection{Flow Frames}
+
+The flow frame is the principle type of frame.
+The text of the \env{document} environment will flow from
+one frame to the next in order of definition. Each
+flow frame has an associated width, height,
+position on the page, and optionally a border.
+
+It is recommended that all the flow frames in a document
+have the same width, otherwise problems may occur
+when a paragraph spans to flow frames of unequal
+widths. This is because \TeX's output routine does not
+register the change in \cmdname{hsize} until it reaches
+a paragraph break. If it is absolutely necessary for
+flow frames to have unequal widths, judicious use of
+\cmdname{framebreak} is required.
+
+\subsection{Static Frames}
+
+A static frame is a rectangular area in which text neither
+flows into, nor flows out of. The contents must be set
+explicitly, and once set, the contents of the static frame will
+remain the same on each page until it is explicitly
+changed. Thus, a static frame can be used, for example, to make
+a company logo appear in the same place on every page.
+
+\subsection{Dynamic Frames}
+
+A dynamic frame is similar to a static frame, but its contents
+are re-typeset on each page. (A static frame stores its
+contents in a savebox, whereas a dynamic frame stores its
+contents in a macro).
+
+
+\section{Frame Attributes}
+\label{sec:modattr}
+
+Once you have defined the {flow frames}, {static frames} and
+{dynamic frames}, their attributes can be changed.
+The three types of frame mostly have the
+same set of attributes, but some are specific to a certain type.
+The available attributes are as follows
+(\textsuperscript{\textbf{F}} indicates the key is
+only available for {flow frames},
+\textsuperscript{\textbf{S}} indicates the key is only available
+for {static frames}
+and \textsuperscript{\textbf{D}} indicates the key
+is only available for {dynamic frames}):
+
+\begin{description}
+\item[width=\meta{length}] The width of the frame.
+
+\item[height=\meta{length}] The height of the frame.
+
+\item[x=\meta{length}] The x-coordinate of the frame.
+
+\item[y=\meta{length}] The y-coordinate of the frame.
+
+\item[border=\meta{style}] The style of the border around the
+frame, this can take the values: \texttt{none} (no border),
+\texttt{plain} (plain border) or the name of a \LaTeX\
+frame making command without the preceding backslash.
+The value \texttt{fbox} is equivalent to \texttt{plain}.
+
+\item[offset=\meta{offset}] The border offset, if it is a
+user-defined border. This is the distance from the outer
+edge of the left hand border to the left edge of the
+bounding box of the text inside the border. The \sty{flowfram}
+package is able to compute the border for
+known frame making commands.
+If you define your own frame making command, you may need to
+specify the offset explicitly, or the frames
+may end up shifted to the right or left.
+
+\item[bordercolor=\meta{colour}] The colour of the border
+if you are using a standard frame making command.
+The colour can either be specified as, e.g.\ \texttt{green},
+or including the colour model, e.g. \verb/[rgb]{0,1,0}/.
+
+\item[textcolor=\meta{colour}] The text colour for that
+frame. Again, the colour can either be specified as,
+e.g.\ \texttt{green}, or including the colour model,
+e.g. \verb/[rgb]{0,1,0}/.
+
+\item[pages=\meta{page list}] The {list of
+pages} for which the frame
+should appear. This can either have the values: \texttt{all},
+\texttt{even}, \texttt{odd} or \texttt{none} (the latter
+removes the frame from that point on---useful if you
+have multiple pages with the same number), or it can be a
+comma-separated list of single pages, or
+{page ranges}.
+
+\item[margin=\meta{side}\textsuperscript{F}] The side of
+the flow frame that its corresponding margin should go on. This
+can take the values \texttt{left} or \texttt{right}.
+
+\item[clear=\meta{boolean}\textsuperscript{S}] If this value
+is set, the static frame will be cleared at the start of the
+next page.
+
+\item[style=\meta{cmd}\textsuperscript{D}] This should be
+the name of a command \emph{without} the preceding backslash,
+to be applied to the contents of the specified dynamic frame.
+The command may either be a declaration, for example \verb/style=large/
+which will set the contents of all the dynamic frames in a
+large font, or it can be a command that takes a single argument,
+for example \verb/style=textbf/
+which will make the text for all the dynamic frames come out in
+bold. To unset a style, do \verb/style=none/.
+
+\end{description}
+
+\section{Miscellaneous}
+
+\subsection{Page Layout}
+
+The \sty{flowfram} package has the package option \texttt{draft}
+which will draw the {bounding boxes} for
+each frame defined. At the bottom right of each
+bounding box (except for the bounding box denoting the
+typeblock), a marker will be shown to indictate the type
+of frame, its IDN and its IDL.
+
+You can see the layout for the current page (irrespective of
+whether or not the \texttt{draft} option has been set) using
+the command:\newline
+\cmdname{flowframeshowlayout}
+
+The headers and footers will appear as usual (but will not
+be shown in draft mode), according to the format given by
+\cmdname{pagestyle}.
+
+\subsection{Frame Stacking Order}
+
+The material on each page is placed in the following order:
+\begin{enumerate}
+\item Each static frame defined for that page in ascending
+order of IDN.
+
+\item Each flow frame defined for that page in ascending
+order of IDN.
+
+\item Each dynamic frame defined for that page in ascending
+order of IDN.
+
+\item {Bounding boxes} if the \texttt{draft}
+package option has been used.
+\end{enumerate}
+
+This ordering can be used to determine if you want something
+to overlay or underlay everything else on the page.
+
+\subsection{Prematurely Ending a Flow Frame}
+
+You can force text to move immediately to the next defined
+flow frame using one of the standard \LaTeX\ page breaking commands
+which work in an analogous way to the way they
+work in standard two column mode.
+
+The command \cmdname{framebreak} is provided for situations
+where a paragraph spans two flow frames
+of different widths, as \TeX's output routine does not
+adjust to the new value of \cmdname{hsize} until the last
+paragraph of the previous frame has ended. As a
+result, the end of the paragraph at the beginning of the new
+flow frame retains the width of the previous flow frame.
+
+If you want to start a new page, rather than simply move to the
+next frame, use the command\newline
+\cmdname{finishthispage}.
+
+\subsection{Floats}
+
+Since floats (such as figures and tables) can only go in
+{flow frames}, this package provides
+the additional environments:
+\env{staticfigure} and
+\env{statictable} which can be used in static frames
+and dynamic frames. Unlike their \env{figure} and
+\env{table} counterparts, they are fixed in place, and
+so do not take an optional placement specifier. The
+\cmdname{caption} and \cmdname{label} commands can
+be used within \env{staticfigure} and \env{statictable} as
+usual.
+
+The standard \env{figure} and \env{table} commands will
+behave as usual in the flow frames, but their starred versions,
+\env{figure*} and \env{table*} behave no differently
+from \env{figure} and \env{table}.
+
+\subsection{Global Values}
+
+The following macros can be changed using \cmdname{renewcommand}:
+
+\begin{itemize}
+\item \cmdname{setffdraftcolor}
+
+This sets the colour of the bounding box
+when it is displayed in draft mode.
+
+\item
+\cmdname{setffdrafttypeblockcolor}
+
+This sets the colour of
+the bounding box of the typeblock when it is displayed
+in draft mode.
+
+\item \cmdname{fflabelfont}
+
+This sets the font size for the bounding box markers in
+draft mode.
+
+\end{itemize}
+
+The following are lengths, which can be changed using
+\cmdname{setlength}:
+
+\begin{itemize}
+\item \cmdname{fflabelsep}
+
+This is the distance from the right hand side of the
+bounding box at which to place the bounding box marker.
+
+\item \cmdname{flowframesep}
+
+This is the gap between the text of the frame and
+its border, for the standard border types.
+
+\item \cmdname{flowframerule}
+
+This is the width of the frame's border, if using
+a border given by a frame making command that uses \cmdname{fboxsep}
+to set its border width.
+\end{itemize}
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample1.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample2.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass[a4paper,twoside]{report}
+
+\usepackage{url}
+
+\newcommand{\cmdname}[1]{\texttt{\char`\\#1}}
+\newcommand{\sty}[1]{\texttt{#1}}
+\newcommand{\env}[1]{\texttt{#1}}
+\newcommand{\meta}[1]{$\langle$\emph{#1}$\rangle$}
+
+\begin{document}
+
+\title{Creating Flow Frames for Posters or Magazines}
+\author{Nicola L. C. Talbot\\[1cm]\url{http://www.dickimaw-books.com/}}
+\date{}
+\pagenumbering{alph}
+\maketitle
+
+\pagenumbering{roman}
+\tableofcontents
+
+\chapter{Introduction}
+\pagenumbering{arabic}
+
+The \sty{flowfram} package is designed to enable you to create
+frames in a document such that the
+contents of the \env{document} environment flow from one
+frame to the next in the order that they were defined.
+This is useful for creating posters
+or magazines or any other form of document that does not
+conform to the standard one or two column layout.
+
+\chapter{Setting up Frames}
+
+The \sty{flowfram} package provides three types of frame:
+{flow frames}, {static
+frames} and {dynamic frames}.
+
+\section{Flow Frames}
+
+The flow frame is the principle type of frame.
+The text of the \env{document} environment will flow from
+one frame to the next in order of definition. Each
+flow frame has an associated width, height,
+position on the page, and optionally a border.
+
+\section{Static Frames}
+
+A static frame is a rectangular area in which text neither
+flows into, nor flows out of. The contents must be set
+explicitly, and once set, the contents of the static frame will
+remain the same on each page until it is explicitly
+changed. Thus, a static frame can be used, for example, to make
+a company logo appear in the same place on every page.
+
+\section{Dynamic Frames}
+
+A dynamic frame is similar to a static frame, but its contents
+are re-typeset on each page. (A static frame stores its
+contents in a savebox, whereas a dynamic frame stores its
+contents in a macro).
+
+\chapter{Frame Attributes}
+\label{sec:modattr}
+
+Once you have defined the {flow frames}, {static frames} and
+{dynamic frames}, their attributes can be changed.
+The three types of frame mostly have the
+same set of attributes, but some are specific to a certain type.
+The available attributes are as follows
+(\textsuperscript{\textbf{F}} indicates the key is
+only available for {flow frames},
+\textsuperscript{\textbf{S}} indicates the key is only available
+for {static frames}
+and \textsuperscript{\textbf{D}} indicates the key
+is only available for {dynamic frames}):
+
+\begin{description}
+\item[width=\meta{length}] The width of the frame.
+
+\item[height=\meta{length}] The height of the frame.
+
+\item[x=\meta{length}] The x-coordinate of the frame.
+
+\item[y=\meta{length}] The y-coordinate of the frame.
+
+\item[border=\meta{style}] The style of the border around the
+frame, this can take the values: \texttt{none} (no border),
+\texttt{plain} (plain border) or the name of a \LaTeX\
+frame making command without the preceding backslash.
+The value \texttt{fbox} is equivalent to \texttt{plain}.
+
+\item[offset=\meta{offset}] The border offset, if it is a
+user-defined border. This is the distance from the outer
+edge of the left hand border to the left edge of the
+bounding box of the text inside the border. The \sty{flowfram}
+package is able to compute the border for
+known frame making commands.
+If you define your own frame making command, you may need to
+specify the offset explicitly, or the frames
+may end up shifted to the right or left.
+
+\item[bordercolor=\meta{colour}] The colour of the border
+if you are using a standard frame making command.
+The colour can either be specified as, e.g.\ \texttt{green},
+or including the colour model, e.g. \verb/[rgb]{0,1,0}/.
+
+\item[textcolor=\meta{colour}] The text colour for that
+frame. Again, the colour can either be specified as,
+e.g.\ \texttt{green}, or including the colour model,
+e.g. \verb/[rgb]{0,1,0}/.
+
+\item[pages=\meta{page list}] The {list of
+pages} for which the frame
+should appear. This can either have the values: \texttt{all},
+\texttt{even}, \texttt{odd} or \texttt{none} (the latter
+removes the frame from that point on---useful if you
+have multiple pages with the same number), or it can be a
+comma-separated list of single pages, or
+{page ranges}.
+
+\item[margin=\meta{side}\textsuperscript{F}] The side of
+the flow frame that its corresponding margin should go on. This
+can take the values \texttt{left} or \texttt{right}.
+
+\item[clear=\meta{boolean}\textsuperscript{S}] If this value
+is set, the static frame will be cleared at the start of the
+next page.
+
+\item[style=\meta{cmd}\textsuperscript{D}] This should be
+the name of a command \emph{without} the preceding backslash,
+to be applied to the contents of the specified dynamic frame.
+The command may either be a declaration, for example \verb/style=large/
+which will set the contents of all the dynamic frames in a
+large font, or it can be a command that takes a single argument,
+for example \verb/style=textbf/
+which will make the text for all the dynamic frames come out in
+bold. To unset a style, do \verb/style=none/.
+
+\end{description}
+
+\chapter{Miscellaneous}
+
+\section{Page Layout}
+
+The \sty{flowfram} package has the package option \texttt{draft}
+which will draw the {bounding boxes} for
+each frame defined. At the bottom right of each
+bounding box (except for the bounding box denoting the
+typeblock), a marker will be shown to indictate the type
+of frame, its IDN and its IDL.
+
+You can see the layout for the current page (irrespective of
+whether or not the \texttt{draft} option has been set) using
+the command:\newline
+\cmdname{flowframeshowlayout}
+
+The headers and footers will appear as usual (but will not
+be shown in draft mode), according to the format given by
+\cmdname{pagestyle}.
+
+\section{Frame Stacking Order}
+
+The material on each page is placed in the following order:
+\begin{enumerate}
+\item Each static frame defined for that page in ascending
+order of IDN.
+
+\item Each flow frame defined for that page in ascending
+order of IDN.
+
+\item Each dynamic frame defined for that page in ascending
+order of IDN.
+
+\item {Bounding boxes} if the \texttt{draft}
+package option has been used.
+\end{enumerate}
+
+This ordering can be used to determine if you want something
+to overlay or underlay everything else on the page.
+
+\section{Prematurely Ending a Flow Frame}
+
+You can force text to move immediately to the next defined
+flow frame using one of the standard \LaTeX\ page breaking commands
+which work in an analogous way to the way they
+work in standard two column mode.
+
+The command \cmdname{framebreak} is provided for situations
+where a paragraph spans two flow frames
+of different widths, as \TeX's output routine does not
+adjust to the new value of \cmdname{hsize} until the last
+paragraph of the previous frame has ended. As a
+result, the end of the paragraph at the beginning of the new
+flow frame retains the width of the previous flow frame.
+
+If you want to start a new page, rather than simply move to the
+next frame, use the command\newline
+\cmdname{finishthispage}.
+
+\section{Floats}
+
+Since floats (such as figures and tables) can only go in
+{flow frames}, this package provides
+the additional environments:
+\env{staticfigure} and
+\env{statictable} which can be used in static frames
+and dynamic frames. Unlike their \env{figure} and
+\env{table} counterparts, they are fixed in place, and
+so do not take an optional placement specifier. The
+\cmdname{caption} and \cmdname{label} commands can
+be used within \env{staticfigure} and \env{statictable} as
+usual.
+
+The standard \env{figure} and \env{table} commands will
+behave as usual in the flow frames, but their starred versions,
+\env{figure*} and \env{table*} behave no differently
+from \env{figure} and \env{table}.
+
+\section{Global Values}
+
+The following macros can be changed using \cmdname{renewcommand}:
+
+\begin{itemize}
+\item \cmdname{setffdraftcolor}
+
+This sets the colour of the bounding box
+when it is displayed in draft mode.
+
+\item
+\cmdname{setffdrafttypeblockcolor}
+
+This sets the colour of
+the bounding box of the typeblock when it is displayed
+in draft mode.
+
+\item \cmdname{fflabelfont}
+
+This sets the font size for the bounding box markers in
+draft mode.
+
+\end{itemize}
+
+The following are lengths, which can be changed using
+\cmdname{setlength}:
+
+\begin{itemize}
+\item \cmdname{fflabelsep}
+
+This is the distance from the right hand side of the
+bounding box at which to place the bounding box marker.
+
+\item \cmdname{flowframesep}
+
+This is the gap between the text of the frame and
+its border, for the standard border types.
+
+\item \cmdname{flowframerule}
+
+This is the width of the frame's border, if using
+a border given by a frame making command that uses \cmdname{fboxsep}
+to set its border width.
+\end{itemize}
+
+
+\chapter*{Contact Details}
+
+Dr Nicola Talbot\\
+Dickimaw Books\\
+\url{http://www.dickimaw-books.com/}
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample2.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sample3.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass{article}
+
+\usepackage{color}
+\usepackage[draft]{flowfram}
+\usepackage{tikz}
+\usetikzlibrary{snakes}
+
+\newstaticframe[1,2]{3in}{3in}{0pt}{0pt}[sf1]
+\newdynamicframe[1,3]{2in}{3in}{0.5\textwidth}{0.5\textheight}[df1]
+
+\newstaticframe[2]{3in}{3in}{0.5\textwidth}{0.5\textheight}[sf2]
+
+\newdynamicframe[3]{2in}{2in}{0.5\textwidth}{0pt}[df2]
+
+\setlength{\sdfparindent}{\parindent}
+
+\onecolumn
+
+\newlength\fancywidth
+\newlength\fancyheight
+\newlength\fancydepth
+
+\newcommand{\fancyframe}[1]{%
+\settowidth{\fancywidth}{#1}%
+\settoheight{\fancyheight}{#1}%
+\settodepth{\fancydepth}{#1}%
+\addtolength{\fancyheight}{\fancydepth}%
+\hspace{-\flowframesep}%
+\tikz[baseline=0pt]{%
+\draw[snake=bumps,raise snake=\flowframesep,line width=\flowframerule]
+ (0pt,0pt)
+ rectangle (\fancywidth,\fancyheight);
+}}
+
+\begin{document}
+\setstaticframe{1,2}{valign=t}
+\setstaticframe{1}{border=fancyframe}
+\setstaticcontents{1}{Top\par
+\vfill
+Bottom}
+
+%\setdynamiccontents{1}{Bar}
+%\begin{dynamiccontents*}{df1}
+%Paragraph 1
+%
+%Paragraph 2
+%\end{dynamiccontents*}
+
+\mbox{}
+
+\newpage\mbox{}
+
+\begin{staticcontents*}{sf1}
+Some text on the left static frame.
+\continueonframe[continued \relativeframelocation{static}{2}{static}{1}]{sf2}
+Some more text on the right static frame, and
+some more text to pad it out a bit.
+\end{staticcontents*}
+
+\newpage\mbox{}
+
+\begin{dynamiccontents}{1}
+Some text in the first dynamic frame.
+\continueonframe[continued \reldynamicloc*{df2}{df1}]{2}
+Some more text in the second dynamic frame, and
+some more text to pad it out a bit.
+\end{dynamiccontents}
+
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sample3.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*sampleRL.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+ % This file is public domain.
+
+\documentclass{article}
+
+\usepackage{lipsum}
+\usepackage[RL,draft]{flowfram}
+
+\twocolumn
+
+\begin{document}
+This is the start of the text.
+
+\lipsum
+
+This is the end of the text.
+\end{document}
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</sampleRL.tex>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%<*flowfram.perl>
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+#!/usr/bin/env perl
+# File : flowfram.perl
+# Author : Nicola L C Talbot
+# Date : 28 June 2008
+# Last Modified : 1 July 2008
+# Version : 1.0
+# Description : LaTeX2HTML implementation of the flowfram package.
+# This is not meant to emulate the flowfram package.
+# Most of the frame related commands are ignored, to
+# provide a simple HTML version of the document.
+#
+# Copyright 2007 Nicola L.C. Talbot
+#
+# This work may be distributed and/or modified under the
+# conditions of the LaTeX Project Public License, either version 1.3
+# of this license of (at your option) any later version.
+# The latest version of this license is in
+# http://www.latex-project.org/lppl.txt
+# and version 1.3 or later is part of all distributions of LaTeX
+# version 2005/12/01 or later.
+#
+# This work has the LPPL maintenance status `maintained'.
+#
+# The Current Maintainer of this work is Nicola Talbot.
+
+package main;
+
+$showstaticcontents = 0;
+$showdynamiccontents = 0;
+
+sub do_cmd_onecolumninarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumninarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_Ncolumninarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_Ncolumn{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumntopinarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumntopinarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_Ncolumntopinarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumnbottominarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumnbottominarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_Ncolumnbottominarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumnStopinarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumnDtopinarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumnSbottominarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumnDbottominarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumnStopinarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumnDtopinarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumnSbottominarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumnDbottominarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_NcolumnDbottominarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_NcolumnSbottominarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumntop
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumntop
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_Ncolumntop
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumnStop
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumnStop
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_NcolumnStop
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumnDtop
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumnDtop
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_NcolumnDtop
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumnbottom
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumnbottom
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_Ncolumnbottom
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumnSbottom
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumnSbottom
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_NcolumnSbottom
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_onecolumnDbottom
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_twocolumnDbottom
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_NcolumnDbottom
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_NcolumnDtopinarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_NcolumnStopinarea
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_makebackgroundframe
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ ($keyval,$pat) = &get_next_optional_argument;
+
+ $_
+}
+
+sub do_cmd_vtwotone
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_vtwotonetop
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_vtwotonebottom
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_htwotone
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_htwotoneleft
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_htwotoneright
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_hNtone{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ $keyval,$pat = &get_next_optional_argument;
+
+ local($n);
+
+ $n = &missing_braces
+ unless(s/$next_pair_pr_rx/$n=$2;''/eo);
+
+ for ($idx = 1; $idx <= $n; $idx++)
+ {
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ }
+
+ $_;
+}
+
+sub do_cmd_hNtoneleft{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ $keyval,$pat = &get_next_optional_argument;
+
+ local($n);
+
+ $n = &missing_braces
+ unless(s/$next_pair_pr_rx/$n=$2;''/eo);
+
+ for ($idx = 1; $idx <= $n; $idx++)
+ {
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ }
+
+ $_;
+}
+
+sub do_cmd_hNtoneright{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ $keyval,$pat = &get_next_optional_argument;
+
+ local($n);
+
+ $n = &missing_braces
+ unless(s/$next_pair_pr_rx/$n=$2;''/eo);
+
+ for ($idx = 1; $idx <= $n; $idx++)
+ {
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ }
+
+ $_;
+}
+
+sub do_cmd_vNtone{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ $keyval,$pat = &get_next_optional_argument;
+
+ local($n);
+
+ $n = &missing_braces
+ unless(s/$next_pair_pr_rx/$n=$2;''/eo);
+
+ for ($idx = 1; $idx <= $n; $idx++)
+ {
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ }
+
+ $_;
+}
+
+sub do_cmd_vNtonetop{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ $keyval,$pat = &get_next_optional_argument;
+
+ local($n);
+
+ $n = &missing_braces
+ unless(s/$next_pair_pr_rx/$n=$2;''/eo);
+
+ for ($idx = 1; $idx <= $n; $idx++)
+ {
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ }
+
+ $_;
+}
+
+sub do_cmd_vNtonebottom{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ $keyval,$pat = &get_next_optional_argument;
+
+ local($n);
+
+ $n = &missing_braces
+ unless(s/$next_pair_pr_rx/$n=$2;''/eo);
+
+ for ($idx = 1; $idx <= $n; $idx++)
+ {
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ }
+
+ $_;
+}
+
+sub do_cmd_inserthrule{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+ ($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_insertvrule{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+ ($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_newflowframe
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ ($keyval,$pat) = &get_next_optional_argument;
+
+ $_
+}
+
+sub do_cmd_newflowframestar
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ ($keyval,$pat) = &get_next_optional_argument;
+
+ $_
+}
+
+sub do_cmd_newstaticframe
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ ($keyval,$pat) = &get_next_optional_argument;
+
+ $_
+}
+
+sub do_cmd_newstaticframestar
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ ($keyval,$pat) = &get_next_optional_argument;
+
+ $_
+}
+
+sub do_cmd_newdynamicframe
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ ($keyval,$pat) = &get_next_optional_argument;
+
+ $_
+}
+
+sub do_cmd_newdynamicframestar
+{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ ($keyval,$pat) = &get_next_optional_argument;
+
+ $_
+}
+
+sub do_cmd_setflowframe
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_setflowframestar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_setstaticframe
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_setstaticframestar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_setdynamicframe
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_setdynamicframestar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_setalldynamicframes
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_setallflowframes
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_setallstaticframes
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_setthumbtab
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_setthumbtabindex
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_ffswapoddeven
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_ffswapoddevenstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_dfswapoddeven
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_dfswapoddevenstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_sfswapoddeven
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_sfswapoddevenstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_dfchaphead
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_dfchapheadstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_computeleftedgeodd
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_computeleftedgeeven
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_computerightedgeodd
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_computerightedgeeven
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_computebottomedge
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_computetopedge
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_appenddfminitoc
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_appenddfminitocstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_makethumbtabs
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_setstaticcontents
+{
+ local($_) = @_;
+ local($text);
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $text = &missing_braces
+ unless (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $text = "" unless($showstaticcontents);
+
+ "$text$_"
+}
+
+sub do_cmd_setstaticcontentsstar
+{
+ local($_) = @_;
+ local($text);
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $text = &missing_braces
+ unless (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $text = "" unless($showstaticcontents);
+
+ "$text$_"
+}
+
+sub do_cmd_setdynamiccontents
+{
+ local($_) = @_;
+ local($text);
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $text = &missing_braces
+ unless (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $text = "" unless($showdynamiccontents);
+
+ "$text$_"
+}
+
+sub do_cmd_setdynamiccontentsstar
+{
+ local($_) = @_;
+ local($text);
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $text = &missing_braces
+ unless (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $text = "" unless($showdynamiccontents);
+
+ "$text$_"
+}
+
+sub do_cmd_appenddynamiccontents
+{
+ local($_) = @_;
+ local($text);
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $text = &missing_braces
+ unless (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $text = "" unless($showdynamiccontents);
+
+ "$text$_"
+}
+
+sub do_cmd_appenddynamiccontentsstar
+{
+ local($_) = @_;
+ local($text);
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $text = &missing_braces
+ unless (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ $text = "" unless($showdynamiccontents);
+
+ "$text$_"
+}
+
+sub do_env_staticcontents{
+ local($_) = @_;
+ local($id);
+
+ $id = &missing_braces
+ unless (s/$next_pair_rx/$id=$2,''/eo);
+
+ local($body) = ($showstaticcontents ? $_ : "");
+
+ $body
+}
+
+sub do_env_staticcontentsstar{
+ local($_) = @_;
+ local($id);
+
+ $id = &missing_braces
+ unless (s/$next_pair_rx/$id=$2,''/eo);
+
+ local($body) = ($showstaticcontents ? $_ : "");
+
+ $body
+}
+
+sub do_env_dynamiccontents{
+ local($_) = @_;
+ local($id);
+
+ $id = &missing_braces
+ unless (s/$next_pair_rx/$id=$2,''/eo);
+
+ local($body) = ($showdynamiccontents ? $_ : "");
+
+ $body
+}
+
+sub do_env_dynamiccontentsstar{
+ local($_) = @_;
+ local($id);
+
+ $id = &missing_braces
+ unless (s/$next_pair_rx/$id=$2,''/eo);
+
+ local($body) = ($showdynamiccontents ? $_ : "");
+
+ $body
+}
+
+sub do_continueonframe{
+ local($_) = @_;
+
+ local($keyval,$pat) = &get_next_optional_argument;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getflowid
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getstaticid
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getdynamicid
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getdynamiclabel
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getflowlabel
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getstaticlabel
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getdynamicbounds
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getdynamicboundsstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getflowbounds
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getflowboundsstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getstaticbounds
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_getstaticboundsstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_FFaboveleft{ "above left".$_[0] }
+sub do_cmd_FFaboveright{ "above right".$_[0] }
+sub do_cmd_FFbelowleft{ "below left".$_[0] }
+sub do_cmd_FFbelowright{ "below right".$_[0] }
+sub do_cmd_FFleft{ "on the left".$_[0] }
+sub do_cmd_FFright{ "on the right".$_[0] }
+sub do_cmd_FFabove{ "above".$_[0] }
+sub do_cmd_FFbelow{ "below".$_[0] }
+sub do_cmd_FFoverlap{ "overlap".$_[0] }
+
+sub do_cmd_ffcontinuedtextfont{
+ local($_) = @_;
+ local($text);
+
+ $text = &missingbraces
+ unless (s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ "<EM>$text</EM>$_"
+}
+
+sub do_cmd_ffhrule{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_ffvrule{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_labelflow{ &do_cmd_label(@_) }
+
+sub do_cmd_labelflowid{ &do_cmd_label(@_) }
+
+sub do_cmd_minitocstyle{
+ local($_) = @_;
+ local($text);
+
+ $text = &missing_braces
+ unless(s/$next_pair_pr_rx/$text=$2;''/eo);
+
+ "$text$_"
+}
+
+sub do_cmd_relativeframelocation
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_relativeframelocationstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_reldynamicloc
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_reldynamiclocstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_relflowloc
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_relflowlocstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_relstaticloc
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_relstaticlocstar
+{
+ local($_) = @_;
+
+ s/$next_pair_pr_rx/;''/eo;
+ s/$next_pair_pr_rx/;''/eo;
+
+ $_
+}
+
+sub do_cmd_simpar{
+ local($_) = @_;
+
+ "<P>$_"
+}
+
+sub do_env_staticfigure{ &do_env_figure(@_) }
+sub do_env_statictable{ &do_env_table(@_) }
+
+&ignore_commands( <<_IGNORED_CMDS);
+thumbtabindex
+tocandthumbtabindex
+enablethumbtabs
+disablethumbtabs
+enableminitoc
+makedfheaderfooter
+ffcontinuedtextlayout
+fflabelfont
+ffruledeclarations
+ffvadjustfalse
+ffvadjusttrue
+flowframeshowlayout
+finishthispage
+framebreak
+setffdraftcolor
+setffdraftypeblockcolor
+showframebboxfalse
+showframebboxtrue
+showmarginsfalse
+showmarginstrue
+showtypeblockfalse
+showtypeblocktrue
+thumbtabformat
+thumbtabindexformat
+_IGNORED_CMDS
+
+1;
+% \end{macrocode}
+%\fi
+%\iffalse
+% \begin{macrocode}
+%</flowfram.perl>
+% \end{macrocode}
+%\fi
%\Finale
\endinput
diff --git a/Master/texmf-dist/source/latex/flowfram/flowfram.ins b/Master/texmf-dist/source/latex/flowfram/flowfram.ins
index e5caad2fb22..999f48fe496 100644
--- a/Master/texmf-dist/source/latex/flowfram/flowfram.ins
+++ b/Master/texmf-dist/source/latex/flowfram/flowfram.ins
@@ -1,10 +1,10 @@
-% flowfram.ins generated using makedtx version 0.94b 2010/1/23 11:35
+% flowfram.ins generated using makedtx version 0.94b 2012/11/10 22:19
\input docstrip
\preamble
flowfram.dtx
- Copyright 2010 Nicola Talbot
+ Copyright 2012 Nicola Talbot
This work may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3
@@ -18,7 +18,7 @@
The Current Maintainer of this work is Nicola Talbot.
- This work consists of the files flowfram.dtx and flowfram.ins and the derived file flowfram.sty.
+ This work consists of the files flowfram.dtx and flowfram.ins and the derived files flowfram.sty, sample-article.tex, sample-blanks.tex, sample-brochure.tex, sample-news.tex, sample-news2.tex, sample-pages.tex, sample-poster.tex, sample-rot.tex, sample.tex, sample1.tex, sample2.tex, sample3.tex, sampleRL.tex, flowfram.perl.
\endpreamble
@@ -26,6 +26,20 @@
\generate{\file{flowfram.sty}{\usepreamble\defaultpreamble
\usepostamble\defaultpostamble\from{flowfram.dtx}{flowfram.sty,package}}
+\file{sample-article.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-article.tex}}
+\file{sample-blanks.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-blanks.tex}}
+\file{sample-brochure.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-brochure.tex}}
+\file{sample-news.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-news.tex}}
+\file{sample-news2.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-news2.tex}}
+\file{sample-pages.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-pages.tex}}
+\file{sample-poster.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-poster.tex}}
+\file{sample-rot.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-rot.tex}}
+\file{sample.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample.tex}}
+\file{sample1.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample1.tex}}
+\file{sample2.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample2.tex}}
+\file{sample3.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample3.tex}}
+\file{sampleRL.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sampleRL.tex}}
+\file{flowfram.perl}{\nopreamble\nopostamble\from{flowfram.dtx}{flowfram.perl}}
}
\endbatchfile
diff --git a/Master/texmf-dist/source/latex/flowfram/flowfram.perl b/Master/texmf-dist/source/latex/flowfram/flowfram.perl
deleted file mode 100644
index 7d7f8c23c56..00000000000
--- a/Master/texmf-dist/source/latex/flowfram/flowfram.perl
+++ /dev/null
@@ -1,1632 +0,0 @@
-#!/usr/bin/env perl
-# File : flowfram.perl
-# Author : Nicola L C Talbot
-# Date : 28 June 2008
-# Last Modified : 1 July 2008
-# Version : 1.0
-# Description : LaTeX2HTML implementation of the flowfram package.
-# This is not meant to emulate the flowfram package.
-# Most of the frame related commands are ignored, to
-# provide a simple HTML version of the document.
-#
-# Copyright 2007 Nicola L.C. Talbot
-#
-# This work may be distributed and/or modified under the
-# conditions of the LaTeX Project Public License, either version 1.3
-# of this license of (at your option) any later version.
-# The latest version of this license is in
-# http://www.latex-project.org/lppl.txt
-# and version 1.3 or later is part of all distributions of LaTeX
-# version 2005/12/01 or later.
-#
-# This work has the LPPL maintenance status `maintained'.
-#
-# The Current Maintainer of this work is Nicola Talbot.
-
-package main;
-
-$showstaticcontents = 0;
-$showdynamiccontents = 0;
-
-sub do_cmd_onecolumninarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumninarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_Ncolumninarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_Ncolumn{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumntopinarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumntopinarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_Ncolumntopinarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumnbottominarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumnbottominarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_Ncolumnbottominarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumnStopinarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumnDtopinarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumnSbottominarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumnDbottominarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumnStopinarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumnDtopinarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumnSbottominarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumnDbottominarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_NcolumnDbottominarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_NcolumnSbottominarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumntop
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumntop
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_Ncolumntop
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumnStop
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumnStop
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_NcolumnStop
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumnDtop
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumnDtop
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_NcolumnDtop
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumnbottom
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumnbottom
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_Ncolumnbottom
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumnSbottom
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumnSbottom
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_NcolumnSbottom
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_onecolumnDbottom
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_twocolumnDbottom
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_NcolumnDbottom
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_NcolumnDtopinarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_NcolumnStopinarea
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_makebackgroundframe
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- ($keyval,$pat) = &get_next_optional_argument;
-
- $_
-}
-
-sub do_cmd_vtwotone
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_vtwotonetop
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_vtwotonebottom
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_htwotone
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_htwotoneleft
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_htwotoneright
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_hNtone{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- $keyval,$pat = &get_next_optional_argument;
-
- local($n);
-
- $n = &missing_braces
- unless(s/$next_pair_pr_rx/$n=$2;''/eo);
-
- for ($idx = 1; $idx <= $n; $idx++)
- {
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- }
-
- $_;
-}
-
-sub do_cmd_hNtoneleft{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- $keyval,$pat = &get_next_optional_argument;
-
- local($n);
-
- $n = &missing_braces
- unless(s/$next_pair_pr_rx/$n=$2;''/eo);
-
- for ($idx = 1; $idx <= $n; $idx++)
- {
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- }
-
- $_;
-}
-
-sub do_cmd_hNtoneright{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- $keyval,$pat = &get_next_optional_argument;
-
- local($n);
-
- $n = &missing_braces
- unless(s/$next_pair_pr_rx/$n=$2;''/eo);
-
- for ($idx = 1; $idx <= $n; $idx++)
- {
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- }
-
- $_;
-}
-
-sub do_cmd_vNtone{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- $keyval,$pat = &get_next_optional_argument;
-
- local($n);
-
- $n = &missing_braces
- unless(s/$next_pair_pr_rx/$n=$2;''/eo);
-
- for ($idx = 1; $idx <= $n; $idx++)
- {
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- }
-
- $_;
-}
-
-sub do_cmd_vNtonetop{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- $keyval,$pat = &get_next_optional_argument;
-
- local($n);
-
- $n = &missing_braces
- unless(s/$next_pair_pr_rx/$n=$2;''/eo);
-
- for ($idx = 1; $idx <= $n; $idx++)
- {
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- }
-
- $_;
-}
-
-sub do_cmd_vNtonebottom{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- $keyval,$pat = &get_next_optional_argument;
-
- local($n);
-
- $n = &missing_braces
- unless(s/$next_pair_pr_rx/$n=$2;''/eo);
-
- for ($idx = 1; $idx <= $n; $idx++)
- {
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- }
-
- $_;
-}
-
-sub do_cmd_inserthrule{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
- ($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_insertvrule{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
- ($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_newflowframe
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- ($keyval,$pat) = &get_next_optional_argument;
-
- $_
-}
-
-sub do_cmd_newflowframestar
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- ($keyval,$pat) = &get_next_optional_argument;
-
- $_
-}
-
-sub do_cmd_newstaticframe
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- ($keyval,$pat) = &get_next_optional_argument;
-
- $_
-}
-
-sub do_cmd_newstaticframestar
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- ($keyval,$pat) = &get_next_optional_argument;
-
- $_
-}
-
-sub do_cmd_newdynamicframe
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- ($keyval,$pat) = &get_next_optional_argument;
-
- $_
-}
-
-sub do_cmd_newdynamicframestar
-{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- ($keyval,$pat) = &get_next_optional_argument;
-
- $_
-}
-
-sub do_cmd_setflowframe
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_setflowframestar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_setstaticframe
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_setstaticframestar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_setdynamicframe
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_setdynamicframestar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_setalldynamicframes
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_setallflowframes
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_setallstaticframes
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_setthumbtab
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_setthumbtabindex
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_ffswapoddeven
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_ffswapoddevenstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_dfswapoddeven
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_dfswapoddevenstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_sfswapoddeven
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_sfswapoddevenstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_dfchaphead
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_dfchapheadstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_computeleftedgeodd
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_computeleftedgeeven
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_computerightedgeodd
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_computerightedgeeven
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_computebottomedge
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_computetopedge
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_appenddfminitoc
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_appenddfminitocstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_makethumbtabs
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_setstaticcontents
-{
- local($_) = @_;
- local($text);
-
- s/$next_pair_pr_rx/;''/eo;
-
- $text = &missing_braces
- unless (s/$next_pair_pr_rx/$text=$2;''/eo);
-
- $text = "" unless($showstaticcontents);
-
- "$text$_"
-}
-
-sub do_cmd_setstaticcontentsstar
-{
- local($_) = @_;
- local($text);
-
- s/$next_pair_pr_rx/;''/eo;
-
- $text = &missing_braces
- unless (s/$next_pair_pr_rx/$text=$2;''/eo);
-
- $text = "" unless($showstaticcontents);
-
- "$text$_"
-}
-
-sub do_cmd_setdynamiccontents
-{
- local($_) = @_;
- local($text);
-
- s/$next_pair_pr_rx/;''/eo;
-
- $text = &missing_braces
- unless (s/$next_pair_pr_rx/$text=$2;''/eo);
-
- $text = "" unless($showdynamiccontents);
-
- "$text$_"
-}
-
-sub do_cmd_setdynamiccontentsstar
-{
- local($_) = @_;
- local($text);
-
- s/$next_pair_pr_rx/;''/eo;
-
- $text = &missing_braces
- unless (s/$next_pair_pr_rx/$text=$2;''/eo);
-
- $text = "" unless($showdynamiccontents);
-
- "$text$_"
-}
-
-sub do_cmd_appenddynamiccontents
-{
- local($_) = @_;
- local($text);
-
- s/$next_pair_pr_rx/;''/eo;
-
- $text = &missing_braces
- unless (s/$next_pair_pr_rx/$text=$2;''/eo);
-
- $text = "" unless($showdynamiccontents);
-
- "$text$_"
-}
-
-sub do_cmd_appenddynamiccontentsstar
-{
- local($_) = @_;
- local($text);
-
- s/$next_pair_pr_rx/;''/eo;
-
- $text = &missing_braces
- unless (s/$next_pair_pr_rx/$text=$2;''/eo);
-
- $text = "" unless($showdynamiccontents);
-
- "$text$_"
-}
-
-sub do_env_staticcontents{
- local($_) = @_;
- local($id);
-
- $id = &missing_braces
- unless (s/$next_pair_rx/$id=$2,''/eo);
-
- local($body) = ($showstaticcontents ? $_ : "");
-
- $body
-}
-
-sub do_env_staticcontentsstar{
- local($_) = @_;
- local($id);
-
- $id = &missing_braces
- unless (s/$next_pair_rx/$id=$2,''/eo);
-
- local($body) = ($showstaticcontents ? $_ : "");
-
- $body
-}
-
-sub do_env_dynamiccontents{
- local($_) = @_;
- local($id);
-
- $id = &missing_braces
- unless (s/$next_pair_rx/$id=$2,''/eo);
-
- local($body) = ($showdynamiccontents ? $_ : "");
-
- $body
-}
-
-sub do_env_dynamiccontentsstar{
- local($_) = @_;
- local($id);
-
- $id = &missing_braces
- unless (s/$next_pair_rx/$id=$2,''/eo);
-
- local($body) = ($showdynamiccontents ? $_ : "");
-
- $body
-}
-
-sub do_continueonframe{
- local($_) = @_;
-
- local($keyval,$pat) = &get_next_optional_argument;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getflowid
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getstaticid
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getdynamicid
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getdynamiclabel
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getflowlabel
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getstaticlabel
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getdynamicbounds
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getdynamicboundsstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getflowbounds
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getflowboundsstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getstaticbounds
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_getstaticboundsstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_FFaboveleft{ "above left".$_[0] }
-sub do_cmd_FFaboveright{ "above right".$_[0] }
-sub do_cmd_FFbelowleft{ "below left".$_[0] }
-sub do_cmd_FFbelowright{ "below right".$_[0] }
-sub do_cmd_FFleft{ "on the left".$_[0] }
-sub do_cmd_FFright{ "on the right".$_[0] }
-sub do_cmd_FFabove{ "above".$_[0] }
-sub do_cmd_FFbelow{ "below".$_[0] }
-sub do_cmd_FFoverlap{ "overlap".$_[0] }
-
-sub do_cmd_ffcontinuedtextfont{
- local($_) = @_;
- local($text);
-
- $text = &missingbraces
- unless (s/$next_pair_pr_rx/$text=$2;''/eo);
-
- "<EM>$text</EM>$_"
-}
-
-sub do_cmd_ffhrule{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_ffvrule{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_labelflow{ &do_cmd_label(@_) }
-
-sub do_cmd_labelflowid{ &do_cmd_label(@_) }
-
-sub do_cmd_minitocstyle{
- local($_) = @_;
- local($text);
-
- $text = &missing_braces
- unless(s/$next_pair_pr_rx/$text=$2;''/eo);
-
- "$text$_"
-}
-
-sub do_cmd_relativeframelocation
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_relativeframelocationstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_reldynamicloc
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_reldynamiclocstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_relflowloc
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_relflowlocstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_relstaticloc
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_relstaticlocstar
-{
- local($_) = @_;
-
- s/$next_pair_pr_rx/;''/eo;
- s/$next_pair_pr_rx/;''/eo;
-
- $_
-}
-
-sub do_cmd_simpar{
- local($_) = @_;
-
- "<P>$_"
-}
-
-sub do_env_staticfigure{ &do_env_figure(@_) }
-sub do_env_statictable{ &do_env_table(@_) }
-
-&ignore_commands( <<_IGNORED_CMDS);
-thumbtabindex
-tocandthumbtabindex
-enablethumbtabs
-disablethumbtabs
-enableminitoc
-makedfheaderfooter
-ffcontinuedtextlayout
-fflabelfont
-ffruledeclarations
-ffvadjustfalse
-ffvadjusttrue
-flowframeshowlayout
-finishthispage
-framebreak
-setffdraftcolor
-setffdraftypeblockcolor
-showframebboxfalse
-showframebboxtrue
-showmarginsfalse
-showmarginstrue
-showtypeblockfalse
-showtypeblocktrue
-thumbtabformat
-thumbtabindexformat
-_IGNORED_CMDS
-
-1;