summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/flowfram
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2006-01-12 23:55:54 +0000
committerKarl Berry <karl@freefriends.org>2006-01-12 23:55:54 +0000
commit8516050801ea41e5f0614285cfab1fca19cc5a9e (patch)
treea793a89afa91980d522fb34a56cead2ae76ebd99 /Master/texmf-dist/tex/latex/flowfram
parentbe07a7032cf925391965dce0f411638e27308971 (diff)
flowfram
git-svn-id: svn://tug.org/texlive/trunk@924 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/flowfram')
-rw-r--r--Master/texmf-dist/tex/latex/flowfram/flowfram.sty3303
1 files changed, 3303 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/flowfram/flowfram.sty b/Master/texmf-dist/tex/latex/flowfram/flowfram.sty
new file mode 100644
index 00000000000..68accc2af27
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/flowfram/flowfram.sty
@@ -0,0 +1,3303 @@
+%%
+%% This is file `flowfram.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% flowfram.dtx (with options: `flowfram.sty,package')
+%% Copyright (C) 2005 Nicola Talbot, all rights reserved.
+%% If you modify this file, you must change its name first.
+%% You are NOT ALLOWED to distribute this file alone. You are NOT
+%% ALLOWED to take money for the distribution or use of either this
+%% file or a changed version, except for a nominal charge for copying
+%% etc.
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{flowfram}[2005/07/23 v1.0]
+\RequirePackage{ifthen}
+\RequirePackage{keyval}
+\RequirePackage{graphics}
+\RequirePackage{afterpage}
+\newcommand{\setffdraftcolor}{\color[gray]{0.8}}
+\newcommand{\setffdrafttypeblockcolor}{\color[gray]{0.9}}
+\newlength\fflabelsep
+\fflabelsep=1pt
+\newcommand{\fflabelfont}{\small\sffamily}
+\newif\ifshowtypeblock
+\newif\ifshowmargins
+\newif\ifshowframebbox
+\newcommand{\@ffdraft}{%
+\showtypeblocktrue
+\showmarginstrue
+\showframebboxtrue
+}
+\newcommand{\@ffnodraft}{%
+\showtypeblockfalse
+\showmarginsfalse
+\showframebboxfalse
+}
+\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]}}}}%
+\newcommand{\@s@tffcol}{}
+\newcommand{\@s@tfftextcol}{}
+\newcommand{\@ffbackground}[1]{#1}
+\DeclareOption{draft}{\@ffdraft}
+\DeclareOption{final}{\@ffnodraft}
+\newif\if@ttb@rotate
+\@ttb@rotatetrue
+\DeclareOption{rotate}{\@ttb@rotatetrue}
+\DeclareOption{norotate}{\@ttb@rotatefalse}
+\newif\if@ttb@num
+\newif\if@ttb@title
+\@ttb@numfalse
+\@ttb@titletrue
+\DeclareOption{ttbtitle}{\@ttb@titletrue}
+\DeclareOption{ttbnotitle}{\@ttb@titlefalse}
+\DeclareOption{ttbnum}{\@ttb@numtrue}
+\DeclareOption{ttbnonum}{\@ttb@numfalse}
+\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}}}}
+}
+\DeclareOption{nocolor}{%
+\def\flowframetextcol{}%
+\def\flowframecol{}%
+\renewcommand{\@s@tffcol}{}\renewcommand{\@s@tfftextcol}{}
+\renewcommand{\@ffbackground}[1]{#1}
+}
+\ifdim\overfullrule=0pt
+\ExecuteOptions{final}
+\else
+\ExecuteOptions{draft}
+\fi
+\ifx\normalcolor\relax
+\ExecuteOptions{nocolor}
+\else
+\ExecuteOptions{color}
+\fi
+\ProcessOptions
+\ifx\normalcolor\relax
+\ifthenelse{\equal{\flowframetextcol}{}}{}{%
+\RequirePackage{color}}
+\fi
+\@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}
+}
+\newcounter{maxflow}
+\newcounter{thisframe}
+\c@maxflow=0
+\c@thisframe=0
+\newcounter{maxstatic}
+\c@maxstatic=0
+\newcounter{maxdynamic}
+\c@maxdynamic=0
+\newcount\@colN
+\newcount\@ff@tmpN
+\newcount\ff@id
+\newlength\@ff@offset
+\newlength\@ff@tmp@x
+\newlength\@ff@tmp@x@even
+\newlength\@ff@tmp@y
+\newlength\flowframesep
+\flowframesep=\fboxsep
+\newlength\flowframerule
+\flowframerule=\fboxrule
+\newcommand{\flowframeshowlayout}{%
+\finishthispage
+{\@ffdraft\mbox{}\finishthispage\clearpage}}
+\newif\ifusedframebreak
+\newcommand{\framebreak}[1][4]{%
+\usedframebreaktrue
+{\parfillskip=0pt\pagebreak[#1]\parskip=0pt\par\noindent}}
+\newcommand{\finishthispage}{%
+\@colN=\c@thisframe
+\clearpage
+\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
+\@ff@chckifthispg{\c@page}{\@colN}%
+\if@notthiscol\else
+\mbox{}\vfill\clearpage%
+\fi}
+}
+\def\cleardoublepage{\finishthispage
+\if@twoside
+\ifodd\c@page
+\else
+\hbox{}\finishthispage
+\fi
+\fi}
+\@twocolumnfalse
+\@mparswitchfalse
+\newcommand{\globalreversemargin}{%
+\global\@mparbottom\z@\global\@reversemargintrue}
+\newcommand{\globalnormalmargin}{%
+\global\@mparbottom\z@\global\@reversemarginfalse}
+\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}}}%
+}
+\newcommand{\setmargin}{%
+\@getmarginpos{%
+\csname @ff@margin@\romannumeral\c@thisframe\endcsname}%
+\ifthenelse{\equal{\ff@margin}{left}}%
+{\globalreversemargin}{\globalnormalmargin}%
+}
+\newcommand{\newflowframe}{\@n@wflowframe}
+\@onlypreamble{\newflowframe}
+\newcommand{\@n@wflowframe}{%
+\global\advance\c@maxflow by 1\relax
+\expandafter\global\expandafter\newif\csname ifcolumnframe\romannumeral\c@maxflow\endcsname
+\@ifstar\@snewflowframe\@newflowframe
+}
+\newcommand{\@snewflowframe}{%
+\expandafter\global\expandafter\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iftrue
+\@@newflowframe}
+\newcommand{\@newflowframe}{%
+\expandafter\global\expandafter\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iffalse
+\@@newflowframe}
+\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@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]}}
+\def\@s@tflowframeid#1[#2]{%
+\edef\ff@label{#2}%
+\@ff@checkuniqueidl{#1}{\ff@label}%
+\expandafter\xdef\csname @col@id@\romannumeral#1\endcsname{\ff@label}%
+}
+\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
+}}}
+\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
+\@colN=\c@maxflow}{}}%
+\ifnum\ff@id=0\relax
+\PackageError{flowfram}{Can't find flow frame id '#1'}{}\fi}
+\define@key{flowframe}{width}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'width' key}{}}{}%
+\def\ff@width{#1}}
+\define@key{flowframe}{height}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'height' key}{}}{}%
+\def\ff@height{#1}}
+\define@key{flowframe}{x}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'x' key}{}}{}%
+\def\ff@x{#1}}
+\define@key{flowframe}{y}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'y' key}{}}{}%
+\def\ff@y{#1}}
+\define@key{flowframe}{evenx}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'evenx' key}{}}{}%
+\def\ff@evenx{#1}}
+\define@key{flowframe}{eveny}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'eveny' key}{}}{}%
+\def\ff@eveny{#1}}
+\define@key{flowframe}{oddx}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'oddx' key}{}}{}%
+\def\ff@oddx{#1}}
+\define@key{flowframe}{oddy}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'oddy' key}{}}{}%
+\def\ff@oddy{#1}}
+\define@key{flowframe}{label}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'label' key}{}}{}%
+\def\ff@label{#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}}}}
+\define@key{flowframe}{bordercolor}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'bordercolor' key}{}}{}%
+\def\ff@col{#1}}
+\define@key{flowframe}{textcolor}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'textcolor' key}{}}{}%
+\def\ff@txtcol{#1}}
+\define@key{flowframe}{backcolor}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'backcolor' key}{}}{}%
+\def\ff@backcol{#1}}
+\define@key{flowframe}{pages}{\ifthenelse{\equal{#1}{}}{%
+\PackageError{flowfram}{Missing value for 'pages' key}{}}{}%
+\def\ff@pages{#1}}
+\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}{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@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@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}}}
+\newcommand{\setallflowframes}[1]{%
+\@colN=0\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
+\@@setflowframe{\@colN}{#1}}}
+\newcommand{\setflowframe}{\@ifstar\@ssetflowframe\@setflowframe}
+\newcommand{\@ssetflowframe}[2]{%
+\@for\@ff@id:=#1\do{%
+\@flowframeid{\@ff@id}%
+\@@setflowframe{\ff@id}{#2}}}
+\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
+ \def\@ff@numend{\c@maxflow}%
+\fi
+\@colN=\@ff@numstart
+\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
+\@@setflowframe{\@colN}{#2}%
+\advance\@colN by 1\relax
+}}}}}
+\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@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{}%
+\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@clear}{}}{}{%
+\PackageError{flowfram}%
+{Key 'clear' not available for flow frames}{}}%
+\ifthenelse{\equal{\ff@style}{}}{}{%
+\PackageError{flowfram}%
+{Key 'style' not available for flow frames}{}}%
+}
+\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}%
+}
+\newcommand{\ffswapoddeven}{%
+\@ifstar\@sflowframeswapcoords\@flowframeswapcoords}
+\newcommand{\@sflowframeswapcoords}[1]{%
+\@for\@ff@id:=#1\do{%
+\@flowframeid{\@ff@id}%
+\@@flowframeswapcoords{\ff@id}}}
+\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
+}}}}}
+\newcommand{\flowframex}[1]{%
+\csname col@\romannumeral#1@posx\endcsname}
+\newcommand{\flowframey}[1]{%
+\csname col@\romannumeral#1@posy\endcsname}
+\newcommand{\flowframeevenx}[1]{%
+\csname col@\romannumeral#1@evenx\endcsname}
+\newcommand{\flowframeeveny}[1]{%
+\csname col@\romannumeral#1@eveny\endcsname}
+\newcommand{\flowframewidth}[1]{%
+\csname colwidth\romannumeral#1\endcsname}
+\newcommand{\flowframeheight}[1]{%
+\csname colheight\romannumeral#1\endcsname}
+\def\@setframecol{\@ifnextchar[\@@setframecol\@@setfr@mecol}
+\def\@@setframecol[#1]#2\end#3#4#5{%
+\expandafter\edef\csname @#5@#4@\romannumeral#3\endcsname{%
+[#1]{#2}}}
+\def\@@setfr@mecol#1\end#2#3#4{%
+\expandafter\edef\csname @#4@#3@\romannumeral#2\endcsname{{#1}}}
+\newcommand{\newstaticframe}{\@n@wstaticframe}
+\newcommand{\@n@wstaticframe}{%
+\global\advance\c@maxstatic by 1\relax
+\newboolean{staticframe\romannumeral\c@maxstatic}%
+\@ifstar\@snewstaticframe\@newstaticframe
+}
+\newcommand{\@snewstaticframe}{%
+\setboolean{staticframe\romannumeral\c@maxstatic}{true}%
+\@@newstaticframe}
+\newcommand{\@newstaticframe}{%
+\setboolean{staticframe\romannumeral\c@maxstatic}{false}%
+\@@newstaticframe}
+\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
+\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]}}
+\def\@s@tstaticframeid#1[#2]{%
+\edef\ff@label{#2}%
+\@sf@checkuniqueidl{#1}{\ff@label}%
+\expandafter
+\xdef\csname @sf@id@\romannumeral#1\endcsname{\ff@label}}
+\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
+}}
+\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
+\@colN=\c@maxstatic}{}}%
+\ifnum\ff@id=0\PackageError{flowfram}{Can't find static frame
+id '#1'}{}\fi}
+\newcommand{\staticframex}[1]{%
+\csname @sf@\romannumeral#1@posx\endcsname}
+\newcommand{\staticframey}[1]{%
+\csname @sf@\romannumeral#1@posy\endcsname}
+\newcommand{\staticframeevenx}[1]{%
+\csname @sf@\romannumeral#1@evenx\endcsname}
+\newcommand{\staticframeeveny}[1]{%
+\csname @sf@\romannumeral#1@eveny\endcsname}
+\newcommand{\setallstaticframes}[1]{%
+\@colN=0\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax
+\@@setstaticframe{\@colN}{#1}}}
+\newcommand{\setstaticframe}{%
+\@ifstar\@ssetstaticframe\@setstaticframe}
+\newcommand{\@ssetstaticframe}[2]{%
+\@for\@ff@id:=#1\do{%
+\@staticframeid{\@ff@id}%
+\@@setstaticframe{\ff@id}{#2}}}
+\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
+ \def\@ff@numend{\c@maxstatic}%
+\fi
+\@colN=\@ff@numstart
+\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
+\@@setstaticframe{\@colN}{#2}%
+\advance\@colN by 1\relax
+}}}}}
+\newcommand{\@@setstaticframe}[2]{%
+\expandafter\expandafter\expandafter
+\@ff@getstaticpos\csname @sf@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{}%
+\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][c]{\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@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}{}}%
+}
+\newbox\staticframe
+\newenvironment{staticcontents}[1]{%
+\@ifundefined{@staticframe@\romannumeral#1}{%
+\PackageError{flowfram}{Static frame '#1' not defined}{}}{}%
+\edef\@sf@mpg{%
+\noexpand
+\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname}%
+\edef\@sf@thisframe{\csname @staticframe@\romannumeral#1\endcsname}%
+\begin{lrbox}{\staticframe}%
+\edef\ff@txtcol{\csname @sf@txtcol@\romannumeral#1\endcsname}%
+\@s@tfftextcol
+\@sf@mpg
+}{\end{minipage}\end{lrbox}%
+\expandafter\global\expandafter\sbox\@sf@thisframe{%
+\usebox\staticframe}\ignorespaces
+}
+\newenvironment{staticcontents*}[1]{\@staticframeid{#1}%
+\begin{staticcontents}{\ff@id}}{\end{staticcontents}}
+\newcommand{\setstaticcontents}{%
+\@ifstar\@sstaticconts\@staticconts}
+\newcommand{\@sstaticconts}[1]{\@staticframeid{#1}%
+\@staticconts{\ff@id}}
+\newcommand{\@staticconts}[2]{\begin{staticcontents}{#1}%
+#2\end{staticcontents}}
+\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}%
+}
+\newcommand{\sfswapoddeven}{%
+\@ifstar\@sstaticframeswapcoords\@staticframeswapcoords}
+\newcommand{\@sstaticframeswapcoords}[1]{%
+\@for\@ff@id:=#1\do{%
+\@staticframeid{\@ff@id}%
+\@@staticframeswapcoords{\ff@id}}}
+\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
+}}}}}
+\newcommand{\newdynamicframe}{%
+\global\advance\c@maxdynamic by 1\relax
+\newboolean{dynamicframe\romannumeral\c@maxdynamic}
+\@ifstar\@snewdynamicframe\@newdynamicframe
+}
+\newcommand{\@snewdynamicframe}{%
+\setboolean{dynamicframe\romannumeral\c@maxdynamic}{true}%
+\@@newdynamicframe}
+\newcommand{\@newdynamicframe}{%
+\setboolean{dynamicframe\romannumeral\c@maxdynamic}{false}%
+\@@newdynamicframe}
+\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}%
+\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]}}
+\def\@s@tdynamicframeid#1[#2]{%
+\edef\ff@label{#2}%
+\@df@checkuniqueidl{#1}{\ff@label}%
+\expandafter
+\xdef\csname @df@id@\romannumeral#1\endcsname{\ff@label}}
+\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
+}}
+\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
+\@colN=\c@maxdynamic}{}}%
+\ifnum\ff@id=0\PackageError{flowfram}{Can't find dynamic frame
+id '#1'}{}\fi}
+\newcommand{\dynamicframex}[1]{%
+\csname @df@\romannumeral#1@posx\endcsname}
+\newcommand{\dynamicframey}[1]{%
+\csname @df@\romannumeral#1@posy\endcsname}
+\newcommand{\dynamicframeevenx}[1]{%
+\csname @df@\romannumeral#1@evenx\endcsname}
+\newcommand{\dynamicframeeveny}[1]{%
+\csname @df@\romannumeral#1@eveny\endcsname}
+\newcommand{\setalldynamicframes}[1]{%
+\@colN=0\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax
+\@@setdynamicframe{\@colN}{#1}}}
+\newcommand{\setdynamicframe}{%
+\@ifstar\@ssetdynamicframe\@setdynamicframe}
+\newcommand{\@ssetdynamicframe}[2]{%
+\@for\@ff@id:=#1\do{%
+\@dynamicframeid{\@ff@id}%
+\@@setdynamicframe{\ff@id}{#2}}}
+\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
+ \def\@ff@numend{\c@maxdynamic}%
+\fi
+\@colN=\@ff@numstart
+\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{%
+\@@setdynamicframe{\@colN}{#2}%
+\advance\@colN by 1\relax
+}}}}}
+\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{}%
+\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][t]{\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@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\c@maxdynamic}{true}%
+}%
+\ifthenelse{\equal{\ff@margin}{}}{}{%
+\PackageError{flowfram}{Key 'margin' not available for dynamic
+frames}{dynamic frames don't have marginal notes}}%
+}
+\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}%
+}
+\newcommand{\dfswapoddeven}{%
+\@ifstar\@sdynamicframeswapcoords\@dynamicframeswapcoords}
+\newcommand{\@sdynamicframeswapcoords}[1]{%
+\@for\@ff@id:=#1\do{%
+\@dynamicframeid{\@ff@id}%
+\@@dynamicframeswapcoords{\ff@id}}}
+\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
+}}}}}
+\newcommand{\setdynamiccontents}{%
+\@ifstar\@ssetdynamiccontents\@setdynamiccontents}
+\newcommand{\@ssetdynamiccontents}[2]{%
+\@dynamicframeid{#1}\@setdynamiccontents{\ff@id}{#2}}
+\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}
+\newcommand{\appenddynamiccontents}{%
+\@ifstar\@sappenddynamic\@appenddynamic}
+\newcommand{\@sappenddynamic}[2]{%
+\@dynamicframeid{#1}\@appenddynamic{\ff@id}{#2}}
+\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}
+\toksdef\ta=0 \toksdef\tb=2
+\long\def\@ff@addtolist#1\entry#2{\ta={{#2}}\tb=\expandafter{#1}%
+\xdef#1{\the\tb\the\ta}}
+\newcommand{\setinitialframe}[1]{\c@thisframe=#1%
+\global\usedframebreaktrue
+\global\setlength{\hsize}{%
+\csname colwidth\romannumeral\c@thisframe\endcsname}}
+\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}%
+\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}
+\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
+\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
+}
+\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
+\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
+}
+\AtBeginDocument{%
+\ifnum\c@maxflow=0\relax
+\PackageWarning{flowfram}{No flow frames, adding one}%
+\@onecolumn
+\fi
+\setframes
+\let\onecolumn\emulateonecolumn
+\let\twocolumn\emulatetwocolumn
+}
+\AtEndDocument{\finishthispage}
+\newcommand{\@setcol}[1]{%
+\ifnum\c@maxflow<#1
+\PackageError{flowfram}{Can't set frame '\number#1', doesn't
+exist}{}%
+\else
+\expandafter\global\expandafter\columnwidth
+\csname colwidth\romannumeral#1\endcsname
+\ifdim\hsize=\columnwidth
+\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}%
+ \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
+}
+\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\maxdimen
+\fi
+}
+\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
+ \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}
+\newcommand{\@dothehead}{\vbox to \headheight{%
+\color@hbox\normalcolor\hbox to \textwidth{%
+\@thehead}\color@endbox}}
+\newcommand{\@dothefoot}{%
+\color@hbox\normalcolor\hbox to \textwidth{%
+\@thefoot}\color@endbox}
+\newcommand{\@dodynamicthehead}{}
+\newcommand{\@dodynamicthefoot}{}
+\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@
+ \@begindvi
+ \vskip\topmargin\moveright\@themargin
+ \vbox{%
+ \vskip\headheight
+ \vskip\headsep
+ \box\@outputbox
+ }}\global\let\if@newlist\@@if@newlist
+ \stepcounter{page}\let\firstmark\botmark}
+\newcommand{\makedfheaderfooter}{%
+\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}
+}%
+}
+\@onlypreamble{\makedfheaderfooter}
+\newcommand{\footnotecolor}{%
+\@ifundefined{@ff@txtcol@\romannumeral\c@thisframe}{%
+\normalcolor}{%
+\edef\ff@txtcol{%
+\csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}%
+\@s@tfftextcol}}
+\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}
+\def\@opcol{\@outputdblcol
+\global\@mparbottom\z@
+\global\@textfloatsheight\z@
+\@floatplacement
+}
+\newif\if@ff@moreframes
+\newcommand{\@ff@checkifmoreframes}{%
+\@ff@moreframesfalse
+\@colN=0\relax
+\whiledo{\@colN<\c@maxflow}{%
+\advance\@colN by 1\relax
+\edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}%
+\@ff@checkpages{\ff@pages}}}
+\newcommand{\@ff@checkpages}[1]{%
+\@for \@ff@pp:=#1\do{%
+\@ff@checkthispage{\@ff@pp}}}
+\newcommand{\@ff@checkthispage}[1]{%
+\ifthenelse{\equal{#1}{all}\or\equal{#1}{even}\or\equal{#1}{odd}}{%
+\@ff@moreframestrue}{%
+\ifthenelse{\equal{#1}{none}}{}{%
+\@ff@checknumrange{#1}}}}
+\newcommand{\@ff@checknumrange}[1]{%
+\def\@ff@numstart{0}\def\@ff@numend{10000}%
+\@ff@getrange{#1}%
+\ifnum\@ff@numend>\c@page
+\@ff@moreframestrue
+\else
+\fi
+}
+\newcount\c@ffrangenum
+\newcommand{\@ff@getrange}[1]{%
+\expandafter\@ff@@getrange#1-\@nil\end}
+\def\@ff@@getrange#1#2\end{%
+\ifx#1<%
+\@ff@getrangeless#1#2\end
+\else
+\ifx#1>%
+\@ff@getrangegreater#1#2\end
+\else
+\@@ff@getrange#1#2\end
+\fi
+\fi
+}
+\def\@ff@getrangeless<#1-\@nil\end{%
+\c@ffrangenum=#1\relax
+\advance\c@ffrangenum by -1\relax
+\def\@ff@numstart{0}%
+\edef\@ff@numend{\number\c@ffrangenum}}
+\def\@ff@getrangegreater>#1-\@nil\end{%
+\c@ffrangenum=#1\relax
+\advance\c@ffrangenum by 1\relax
+\edef\@ff@numstart{\number\c@ffrangenum}%
+\def\@ff@numend{10000}}
+\def\@@ff@getrange#1-#2\end{%
+\ifx#2\@nil
+\def\@ff@numstart{#1}\def\@ff@numend{#1}%
+\else
+\def\@ff@numstart{#1}\@@@ff@getrange#2\end
+\fi
+}
+\def\@@@ff@getrange#1-\@nil\end{%
+\def\@ff@numend{#1}}
+\newif\if@notthiscol
+\newif\if@ff@nwpg
+\newcount\c@curpg
+\newcommand{\@g@tnextcol}[1]{%
+\@ff@checkifmoreframes
+\if@ff@moreframes
+\else
+\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\fi
+\@ff@chckifthispg{\c@curpg}{\@colN}%
+\if@notthiscol
+\repeat
+#1=\@colN
+}
+\newcommand{\@ff@chckifthispg}[2]{%
+\@notthiscoltrue
+\edef\ff@pages{\csname @ff@pages@\romannumeral#2\endcsname}%
+\@@ff@chckifthispg{#1}%
+}
+\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}{%
+\@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}%
+}%
+}}}}%
+}
+\newcommand{\@sf@chckifthispg}[1]{%
+\@notthiscoltrue
+\edef\ff@pages{\csname @sf@pages@\romannumeral#1\endcsname}%
+\@@ff@chckifthispg{\c@page}%
+}
+\newcommand{\@df@chckifthispg}[1]{%
+\@notthiscoltrue
+\edef\ff@pages{\csname @df@pages@\romannumeral#1\endcsname}%
+\@@ff@chckifthispg{\c@page}%
+}
+\newcommand{\@setcolbox}[1]{%
+\expandafter\global\expandafter\setbox
+\csname column\romannumeral#1\endcsname\box\@outputbox
+}
+\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}%
+\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}%
+}}
+\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}}
+\newcommand{\@ff@fbox}[4]{{%
+\fboxsep=\flowframesep\fboxrule=\flowframerule\@s@tffcol
+\kern\@ff@offset
+#4{\@ff@box{#1}{#2}{#3}}}}
+\newcommand{\@ff@box}[3]{{\@ffbackground{\vbox to#2
+{\hb@xt@ #1{\hss{\@s@tfftextcol #3}\hss}\vss\kern\z@}}}}
+\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
+}
+\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
+}
+\newcommand{\@ff@s@t@doubleboxoffset}{%
+\setlength{\@ff@offset}{-\flowframesep}%
+\addtolength{\@ff@offset}{-3.75\flowframerule}%
+\addtolength{\@ff@offset}{-.5pt}%
+}
+\newcommand{\@ff@s@t@ovalboxoffset}{%
+\@ff@offset=-\fontdimen 8\tenln
+\advance\@ff@offset by -\flowframesep
+}
+\newcommand{\@ff@s@t@Ovalboxoffset}{%
+\@ff@offset=-\fontdimen 8\tenlnw
+\advance\@ff@offset by -\flowframesep
+}
+\newcommand{\@ff@s@t@defaultoffset}{%
+\@ff@offset=-\flowframesep
+\addtolength{\@ff@offset}{-\flowframerule}%
+}
+\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}}%
+}
+\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}}%
+}
+\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}}%
+}
+\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}
+\newcommand{\@ff@drawmargins}{%
+\@colN=0\relax
+\whiledo{\@colN<\c@maxflow}{%
+\advance\@colN by 1\relax
+\makebox[0pt][l]{\@putmarginbox{\@colN}}%
+}%
+}
+\def\@ff@getstaticpos[#1][#2][#3]#4{\@ff@tmp@x=#4\relax
+\@ff@tmp@y=#2}
+\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
+\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}%
+}}
+\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}}
+\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}%
+\fi
+\fi}
+\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}
+\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}{}}{}}}
+\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{}}{}}}
+\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
+\ifthenelse{\boolean{dynamicframe\romannumeral#1}}{%
+\@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}%
+{\expandafter\expandafter\expandafter
+\parbox\csname @df@dim@\romannumeral#1\endcsname
+{\csname\ff@style\endcsname{\ff@contents}}}%
+{\csname\ff@frametype\endcsname}%
+}{%
+\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}{%
+\expandafter\expandafter\expandafter
+\parbox\csname @df@dim@\romannumeral#1\endcsname
+{\csname \ff@style\endcsname{\ff@contents}}}%
+}}
+\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}}
+\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}
+\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}
+\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}}%
+}
+\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}}%
+}
+\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{\@ff@doallflowframes}{%
+\@colN=0\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
+\@putcolbox{\@colN}}%
+}
+\newcommand{\@ff@doallflowframesbbox}{%
+\@colN=0\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax
+\@putcolbbox{\@colN}}%
+}
+\newcommand{\@ff@doallstatics}{%
+\@colN=0\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1%
+\@putstaticbox{\@colN}}%
+}
+\newcommand{\@ff@doallstaticsbbox}{%
+\@colN=0\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1%
+\@putstaticbbox{\@colN}}%
+}
+\newcommand{\@ff@doalldynamics}{%
+\@colN=0\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1%
+\@putdynamicbox{\@colN}}%
+}
+\newcommand{\@ff@doalldynamicsbbox}{%
+\@colN=0\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1%
+\@putdynamicbbox{\@colN}}%
+}
+\newcommand{\@ff@dotypeblock}{%
+\makebox[0pt][l]{\@fr@meifdraft[\setffdrafttypeblockcolor]{%
+\vbox to \textheight{\hbox to \textwidth{}}}{}}}
+\newlength\ffevenoffset
+\newcommand{\@ff@do@allframes}{%
+\if@twoside
+\ifodd\c@page
+\else
+\ffevenoffset=-\oddsidemargin
+\advance\ffevenoffset by \evensidemargin
+\kern\ffevenoffset
+\fi
+\fi
+\@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
+}}
+\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}
+ \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
+ \fi
+ \@dodynamicthehead\@dodynamicthefoot
+ \vbadness=\@M
+ \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}%
+ \@combinedblfloats
+ \@outputpage
+\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
+}
+\def\@dblfloatplacement{%
+ \global\@dbltopnum\c@dbltopnumber
+ \global\@dbltoproom\dbltopfraction\@colht\@textmin
+ \@colht\advance\@textmin -\@dbltoproom
+ \@fpmin\dblfloatpagefraction\vsize
+ \@fptop \@dblfptop \@fpsep \@dblfpsep \@fpbot \@dblfpbot}
+\newenvironment{statictable}{\def\@captype{table}}{}
+\newenvironment{staticfigure}{\def\@captype{figure}}{}
+\newif\ifffvadjust
+\ffvadjusttrue
+\renewcommand*{\onecolumn}{\@onecolumn}
+\newcommand*{\@onecolumn}[1][all]{%
+\@onecolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}}
+\newlength\columnheight
+\newcommand*{\onecolumninarea}{\@onecolumninarea}
+\@onlypreamble{\onecolumninarea}
+
+\newcommand*{\@onecolumninarea}[5][all]{%
+\setlength{\columnheight}{#3}%
+\ifffvadjust\adjustheight{\columnheight}\fi%
+\@n@wflowframe[#1]{#2}{\columnheight}{#4}{#5}}
+\renewcommand{\twocolumn}{\@twocolumn}
+\newcommand*{\@twocolumn}[1][all]{%
+\@twocolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}}
+\newcommand{\twocolumninarea}{\@twocolumninarea}
+\newcommand*{\@twocolumninarea}[5][all]{%
+\setlength{\columnheight}{#3}%
+\ifffvadjust\adjustheight{\columnheight}\fi%
+\setlength{\columnwidth}{#2}%
+\addtolength{\columnwidth}{-\columnsep}%
+\divide\columnwidth by 2\relax
+\setlength{\@ff@tmp@x}{#4}%
+\addtolength{\@ff@tmp@x}{\columnwidth}%
+\addtolength{\@ff@tmp@x}{\columnsep}%
+\@n@wflowframe[#1]{\columnwidth}{\columnheight}{#4}{#5}%
+\setflowframe{\c@maxflow}{margin=left}%
+\@n@wflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#5}%
+\setflowframe{\c@maxflow}{margin=right}%
+}
+\@onlypreamble{\twocolumninarea}
+\newcommand*{\Ncolumn}[2][all]{%
+\Ncolumninarea[#1]{#2}{\textwidth}{\textheight}{0pt}{0pt}}
+\@onlypreamble{\Ncolumn}
+\newcommand{\Ncolumninarea}[6][all]{%
+\ifnum#2>2\relax
+\@Ncolumninarea[#1]{#2}{#3}{#4}{#5}{#6}%
+\else
+\ifcase#2
+\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
+}
+
+\@onlypreamble{\Ncolumninarea}
+\newcommand{\@Ncolumninarea}[6][all]{%
+\@colN=#2\relax
+\advance\@colN by -1\relax
+\setlength{\columnwidth}{#3}%
+\addtolength{\columnwidth}{-\@colN\columnsep}%
+\divide\columnwidth by #2\relax
+\setlength{\@ff@tmp@x}{#5}
+\setlength{\columnheight}{#4}%
+\ifffvadjust\adjustheight{\columnheight}\fi%
+\@colN=0\relax
+\loop
+\advance\@colN by 1\relax
+\newflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#6}
+\addtolength{\@ff@tmp@x}{\columnwidth}
+\addtolength{\@ff@tmp@x}{\columnsep}
+\ifnum\@colN<#2
+\repeat
+}
+\newlength{\vcolumnsep}
+\setlength{\vcolumnsep}{\columnsep}
+\newcommand{\onecolumntop}[3][all]{%
+\onecolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
+\@onlypreamble{\onecolumntop}
+\newcommand{\onecolumnStop}[2][all]{%
+\onecolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}}
+\newcommand{\onecolumnDtop}[2][all]{%
+\onecolumntopinarea[#1]{dynamic}{#2}{\textwidth}{\textheight}{0pt}{0pt}}
+\newcommand{\newframe}[6][all]{%
+\ifthenelse{\equal{#2}{flow}}{%
+\@n@wflowframe[#1]{#3}{#4}{#5}{#6}%
+}{%
+\ifthenelse{\equal{#2}{dynamic}}{%
+\newdynamicframe[#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'}}}}}
+\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}%
+}
+
+\@onlypreamble{\onecolumntopinarea}
+\newcommand{\onecolumnStopinarea}[6][all]{%
+\onecolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
+\newcommand{\onecolumnDtopinarea}[6][all]{%
+\onecolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
+\newcommand{\twocolumntop}[3][all]{%
+\twocolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
+\@onlypreamble{\twocolumntop}
+\newcommand{\twocolumnStop}[2][all]{%
+\@twocolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}}
+\newcommand{\twocolumnDtop}[2][all]{%
+\twocolumntop[#1]{dynamic}{#2}}
+\newcommand{\twocolumntopinarea}{\@twocolumntopinarea}
+\newcommand{\@twocolumntopinarea}[7][all]{%
+\setlength{\@ff@staticH}{#3}%
+\setlength{\@ff@tmp@y}{#5}
+\addtolength{\@ff@tmp@y}{-\@ff@staticH}
+\setlength{\columnheight}{\@ff@tmp@y}%
+\addtolength{\@ff@tmp@y}{#7}%
+\newframe[#1]{#2}{#4}{\@ff@staticH}{#6}{\@ff@tmp@y}%
+\addtolength{\columnheight}{-\vcolumnsep}
+\ifffvadjust\adjustheight{\columnheight}\fi%
+\setlength{\columnwidth}{#4}%
+\addtolength{\columnwidth}{-\columnsep}%
+\divide\columnwidth by 2\relax
+\setlength{\@ff@tmp@x}{\columnwidth}%
+\addtolength{\@ff@tmp@x}{\columnsep}%
+\addtolength{\@ff@tmp@x}{#6}%
+\@n@wflowframe[#1]{\columnwidth}{\columnheight}{#6}{#7}%
+\setflowframe{\c@maxflow}{margin=left}%
+\@n@wflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#7}%
+\setflowframe{\c@maxflow}{margin=right}%
+}
+\@onlypreamble{\twocolumntopinarea}
+\newcommand{\twocolumnStopinarea}[6][all]{%
+\twocolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
+\newcommand{\twocolumnDtopinarea}[6][all]{%
+\twocolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
+\newcommand{\Ncolumntop}[4][all]{%
+\Ncolumntopinarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}}
+\@onlypreamble{\Ncolumntop}
+\newcommand{\NcolumnStop}[3][all]{%
+\Ncolumntop[#1]{static}{#2}{#3}}
+\newcommand{\NcolumnDtop}[3][all]{%
+\Ncolumntop[#1]{dynamic}{#2}{#3}}
+\newcommand{\Ncolumntopinarea}[8][all]{%
+\ifnum#3>2\relax
+\@Ncolumntopinarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+\else
+\ifcase#3
+\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
+}
+\@onlypreamble{\Ncolumntopinarea}
+\newcommand{\@Ncolumntopinarea}[8][all]{%
+\setlength{\@ff@staticH}{#4}%
+\setlength{\@ff@tmp@y}{#6}%
+\addtolength{\@ff@tmp@y}{-\@ff@staticH}%
+\setlength{\columnheight}{\@ff@tmp@y}%
+\addtolength{\@ff@tmp@y}{#8}%
+\newframe[#1]{#2}{#5}{\@ff@staticH}{#7}{\@ff@tmp@y}%
+\addtolength{\columnheight}{-\vcolumnsep}%
+\ifffvadjust\adjustheight{\columnheight}\fi%
+\@colN=#3\relax
+\advance\@colN by -1\relax
+\setlength{\columnwidth}{#5}%
+\addtolength{\columnwidth}{-\@colN\columnsep}%
+\divide\columnwidth by #3\relax
+\setlength{\@ff@tmp@x}{#7}%
+\@colN=0\relax
+\loop
+\advance\@colN by 1\relax
+\newflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#8}%
+\addtolength{\@ff@tmp@x}{\columnwidth}%
+\addtolength{\@ff@tmp@x}{\columnsep}%
+\ifnum\@colN<#3
+\repeat
+}
+\newcommand{\NcolumnStopinarea}[7][all]{%
+\Ncolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}{#7}}
+\newcommand{\NcolumnDtopinarea}[7][all]{%
+\Ncolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}{#7}}
+\newcommand{\onecolumnbottom}[3][all]{%
+\onecolumnSbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
+\@onlypreamble{\onecolumnbottom}
+\newcommand{\onecolumnSbottom}[2][all]{%
+\onecolumnbottom[#1]{static}{#2}}
+\newcommand{\onecolumnDbottom}[2][all]{%
+\onecolumnbottom[#1]{dynamic}{#2}}
+\newcommand{\onecolumnbottominarea}[7][all]{%
+\setlength{\@ff@staticH}{#3}%
+\setlength{\columnheight}{#5}%
+\addtolength{\columnheight}{-\@ff@staticH}%
+\addtolength{\columnheight}{-\vcolumnsep}%
+\ifffvadjust\adjustheight{\columnheight}\fi%
+\setlength{\@ff@tmp@y}{#5}%
+\addtolength{\@ff@tmp@y}{-\columnheight}%
+\addtolength{\@ff@tmp@y}{#7}%
+\newframe[#1]{#2}{#4}{\@ff@staticH}{#6}{#7}%
+\newflowframe[#1]{#4}{\columnheight}{#6}{\@ff@tmp@y}%
+}
+\@onlypreamble{\onecolumnbottominarea}
+\newcommand{\onecolumnSbottominarea}[6][all]{%
+\onecolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
+\newcommand{\onecolumnDbottominarea}[6][all]{%
+\onecolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
+\newcommand{\twocolumnbottom}[3][all]{%
+\twocolumnSbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}}
+\@onlypreamble{\twocolumnbottom}
+\newcommand{\twocolumnSbottom}[2][all]{%
+\twocolumnbottom[#1]{static}{#2}}
+\newcommand{\twocolumnDbottom}[2][all]{%
+\twocolumnbottom[#1]{dynamic}{#2}}
+\newcommand{\twocolumnbottominarea}[7][all]{%
+\setlength{\@ff@staticW}{#4}%
+\setlength{\@ff@staticH}{#3}%
+\setlength{\columnheight}{#5}
+\addtolength{\columnheight}{-\@ff@staticH}
+\addtolength{\columnheight}{-\vcolumnsep}
+\ifffvadjust\adjustheight{\columnheight}\fi%
+\newframe[#1]{#2}{\@ff@staticW}{\@ff@staticH}{#6}{#7}%
+\setlength{\@ff@tmp@y}{#5}%
+\addtolength{\@ff@tmp@y}{-\columnheight}%
+\addtolength{\@ff@tmp@y}{#7}%
+\setlength{\columnwidth}{\@ff@staticW}%
+\addtolength{\columnwidth}{-\columnsep}%
+\divide\columnwidth by 2\relax
+\setlength{\@ff@tmp@x}{\columnwidth}%
+\addtolength{\@ff@tmp@x}{\columnsep}%
+\addtolength{\@ff@tmp@x}{#6}%
+\newflowframe[#1]{\columnwidth}{\columnheight}{#6}{\@ff@tmp@y}%
+\setflowframe{\c@maxflow}{margin=left}%
+\newflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{\@ff@tmp@y}%
+\setflowframe{\c@maxflow}{margin=right}%
+}
+\@onlypreamble{\twocolumnbottominarea}
+\newcommand{\twocolumnSbottominarea}[6][all]{%
+\twocolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}}
+\newcommand{\twocolumnDbottominarea}[6][all]{%
+\twocolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}}
+\newcommand{\Ncolumnbottom}[4][all]{%
+\Ncolumnbottominarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}}
+\@onlypreamble{\Ncolumnbottom}
+\newcommand{\NcolumnSbottom}[3][all]{%
+\Ncolumnbottom[#1]{static}{#2}{#3}}
+\newcommand{\NcolumnDbottom}[3][all]{%
+\Ncolumnbottom[#1]{dynamic}{#2}{#3}}
+\newcommand{\Ncolumnbottominarea}[8][all]{%
+\ifnum#3>2\relax
+\@Ncolumnbottominarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}%
+\else
+\ifcase#3
+\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
+}
+\@onlypreamble{\Ncolumnbottominarea}
+\newcommand{\@NcolumnSbottominarea}[8][all]{%
+\setlength{\@ff@staticH}{#4}%
+\setlength{\columnheight}{#6}%
+\addtolength{\columnheight}{-\@ff@staticH}%
+\addtolength{\columnheight}{-\vcolumnsep}%
+\ifffvadjust\adjustheight{\columnheight}\fi%
+\newframe[#1]{#2}{#5}{\@ff@staticH}{#7}{#8}%
+\setlength{\@ff@tmp@y}{#6}%
+\addtolength{\@ff@tmp@y}{-\columnheight}%
+\addtolength{\@ff@tmp@y}{#8}%
+\@colN=#3\relax
+\advance\@colN by -1\relax
+\setlength{\columnwidth}{#5}%
+\addtolength{\columnwidth}{-\@colN\columnsep}%
+\divide\columnwidth by #3\relax
+\setlength{\@ff@tmp@x}{#7}%
+\@colN=0\relax
+\loop
+\advance\@colN by 1\relax
+\newflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{\@ff@tmp@y}%
+\addtolength{\@ff@tmp@x}{\columnwidth}%
+\addtolength{\@ff@tmp@x}{\columnsep}%
+\ifnum\@colN<#3
+\repeat
+}
+\newcommand{\NcolumnSbottominarea}[1][all]{%
+\Ncolumnbottominarea[#1]{static}}
+\newcommand{\NcolumnDbottominarea}[1][all]{%
+\Ncolumnbottominarea[#1]{dynamic}}
+\newcount\@ff@adjh
+\newcommand{\adjustheight}[1]{%
+\@ff@adjh=#1\relax
+\divide\@ff@adjh by \baselineskip
+#1=\baselineskip
+\multiply#1 by \@ff@adjh}
+\newcommand{\adjustcolsep}{%
+\multiply\columnsep by 2\relax
+\addtolength{\columnsep}{\marginparwidth}}
+\newlength\@ff@staticW
+\newcommand{\vtwotone}[1][all]{%
+\def\ff@pages{#1}\@vtwotone}
+
+\newcommand{\@vtwotone}[1][0pt]{\@@vtwotonebottom{#1}{\paperheight}}
+\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}%
+}
+
+\@onlypreamble{\vtwotone}
+\newcommand{\vtwotonebottom}[1][all]{%
+\def\ff@pages{#1}\@vtwotonebottom}
+
+\@onlypreamble{\vtwotonebottom}
+
+\newcommand{\@vtwotonebottom}[2][0pt]{\@@vtwotonebottom{#1}{#2}}
+\newcommand{\vtwotonetop}[1][all]{%
+\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}%
+}
+\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}%
+}
+\newcount\@thisstrip
+\newcommand{\vNtone}[1][all]{%
+\def\ff@pages{#1}\@vNtone}
+\newcommand{\@vNtone}[2][0pt]{%
+\@@vNtone{#1}{#2}{\paperheight}}
+\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%
+}
+\newcommand{\@nextvNband}{%
+\ifnum\@thisstrip>0\relax
+ \let\next\@@nextvNband%
+\else
+ \let\next\relax%
+\fi
+\advance\@thisstrip by -1\relax
+\next}
+\newcommand{\@@nextvNband}[3]{%
+\@nextvband{\ff@pages}{\@ff@staticH}{#1}{#2}{#3}\@nextvNband}
+
+\@onlypreamble{\vNtone}
+\newcommand{\vNtonebottom}[1][all]{%
+\def\ff@pages{#1}\@vNtonebottom}
+
+\@onlypreamble{\vNtonebottom}
+
+\newcommand{\@vNtonebottom}[3][0pt]{%
+\@@vNtone{#1}{#2}{#3}}
+\newcommand{\vNtonetop}[1][all]{%
+\def\ff@pages{#1}\@vNtonetop}
+
+\@onlypreamble{\vNtonetop}
+\newcommand{\@vNtonetop}[3][0pt]{%
+\@@vNtonetop{#1}{#2}{#3}}
+\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%
+}
+\newcommand{\htwotone}[1][all]{%
+\def\ff@pages{#1}\@htwotone}
+
+\newcommand{\@htwotone}[1][0pt]{\@@htwotoneleft{#1}{\paperwidth}}
+\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}%
+}
+
+\@onlypreamble{\htwotone}
+\newcommand{\htwotoneleft}[1][all]{%
+\def\ff@pages{#1}\@htwotoneleft}
+
+\newcommand{\@htwotoneleft}[2][0pt]{\@@htwotoneleft{#1}{#2}}
+
+\@onlypreamble{\htwotoneleft}
+\newcommand{\htwotoneright}[1][all]{%
+\def\ff@pages{#1}\@htwotoneright}
+
+\newcommand{\@htwotoneright}[2][0pt]{\@@htwotoneright{#1}{#2}}
+
+\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}%
+}
+
+\@onlypreamble{\htwotoneright}
+\newcommand{\hNtone}[1][all]{%
+\def\ff@pages{#1}\@hNtone}
+
+\newcommand{\@hNtone}[2][0pt]{%
+\@@hNtone{#1}{#2}{\paperwidth}}
+
+\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%
+}
+
+\@onlypreamble{\hNtone}
+\newcommand{\hNtoneleft}[1][all]{%
+\def\ff@pages{#1}\@hNtoneleft}
+
+\@onlypreamble{\hNtoneleft}
+
+\newcommand{\@hNtoneleft}[3][0pt]{%
+\@@hNtone{#1}{#2}{#3}}
+\newcommand{\hNtoneright}[1][all]{%
+\def\ff@pages{#1}\@hNtoneright}
+
+\@onlypreamble{\hNtoneright}
+
+\newcommand{\@hNtoneright}[3][0pt]{%
+\@@hNtoneright{#1}{#2}{#3}}
+
+\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%
+}
+\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}%
+}
+\newcommand{\@nexthNband}{%
+\ifnum\@thisstrip>0\relax
+ \let\next\@@nexthNband%
+\else
+ \let\next\relax%
+\fi
+\advance\@thisstrip by -1\relax
+\next}
+
+\newcommand{\@@nexthNband}[3]{\@nexthband{\ff@pages}{\@ff@staticW}{#1}{#2}{#3}\@nexthNband}
+\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}}
+\setlength{\columnseprule}{2pt}
+\newcommand{\insertvrule}{\@ifstar\@sinsertvrule\@insertvrule}
+\newcommand{\@insertvrule}[1][0pt]{%
+\@ifnextchar[{\@@insertvrule[#1]}{\@@insertvrule[#1][0pt]}}
+\newlength\@ff@left@x
+\newlength\@ff@left@y
+\newlength\@ff@left@evenx
+\newlength\@ff@left@eveny
+\newlength\@ff@left@width
+\newlength\@ff@left@height
+\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}%
+}
+\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
+\@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
+\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}{\hfill
+\rule[-#2]{\columnseprule}{\@ff@staticH}\hfill\mbox{}}
+\ifcase#3
+\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}%
+}
+\newcommand{\@ff@swaplen}[2]{%
+\setlength{\@ff@tmp@x}{#1}%
+\setlength{#1}{#2}%
+\setlength{#2}{\@ff@tmp@x}}
+\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
+\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}{\flowframex{#2}}
+\setlength{\ffareay}{\flowframey{#2}}
+\setlength{\ffareawidth}{\flowframewidth{#2}}
+\setlength{\ffareaheight}{\flowframeheight{#2}}
+\fi
+\or
+\ifnum#2>\c@maxstatic
+\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}}
+\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@dynamic
+\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}}
+\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
+}
+\newcommand{\@sinsertvrule}[1][0pt]{%
+\@ifnextchar[{\@@sinsertvrule[#1]}{\@@sinsertvrule[#1][0pt]}}
+\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}%
+}
+\newcommand{\inserthrule}{\@ifstar\@sinserthrule\@inserthrule}
+\newcommand{\@inserthrule}[1][0pt]{%
+\@ifnextchar[{\@@inserthrule[#1]}{\@@inserthrule[#1][0pt]}}
+\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}%
+}
+\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
+\@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
+\setlength{\@ff@staticW}{\@ff@tmp@x}%
+\fi
+\ifnum\@ff@left@x<\ffareax
+\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}{%
+\hspace*{-#1}\rule{\@ff@staticW}{\columnseprule}}
+\ifcase#3
+\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}%
+}
+\newcommand{\@sinserthrule}[1][0pt]{%
+\@ifnextchar[{\@@sinserthrule[#1]}{\@@sinserthrule[#1][0pt]}}
+\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}%
+}
+\newcommand*{\computeleftedgeodd}[1]{%
+\setlength{#1}{-1in}%
+\addtolength{#1}{-\hoffset}%
+\addtolength{#1}{-\oddsidemargin}}
+\newcommand*{\computeleftedgeeven}[1]{%
+\setlength{#1}{-1in}%
+\addtolength{#1}{-\hoffset}%
+\addtolength{#1}{-\evensidemargin}}
+\newcommand*{\computetopedge}[1]{%
+\setlength{#1}{\textheight}%
+\addtolength{#1}{\headheight}%
+\addtolength{#1}{\headsep}%
+\addtolength{#1}{1in}%
+\addtolength{#1}{\voffset}%
+\addtolength{#1}{\topmargin}}
+\newcommand*{\computebottomedge}[1]{%
+\computetopedge{#1}%
+\addtolength{#1}{-\paperheight}}
+\newcommand*{\computerightedgeodd}[1]{%
+\computeleftedgeodd{#1}%
+\addtolength{#1}{\paperwidth}}
+\newcommand*{\computerightedgeeven}[1]{%
+\computeleftedgeeven{#1}%
+\addtolength{#1}{\paperwidth}}
+\newlength\ffareawidth
+\newlength\ffareaheight
+\newlength\ffareax
+\newlength\ffareay
+\newcommand{\computeflowframearea}{%
+\@ifstar\@scomputeffarea\@computeffarea}
+\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}%
+\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}}
+\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}}
+\newcommand{\dfchaphead}{%
+\@ifstar\@sdynamicchap\@dynamicchap}
+\newcommand{\DFchapterstyle}[1]{#1}
+\newcommand{\DFschapterstyle}[1]{#1}
+\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}}}%
+}}
+\newcommand{\@sdynamicchap}[1]{%
+\@dynamicframeid{#1}\@dynamicchap{\ff@id}}
+\newcounter{maxthumbtabs}
+\@ifundefined{chapter}{%
+\newcommand{\defaultthumbtabtype}{section}}{
+\newcommand{\defaultthumbtabtype}{chapter}
+}
+\newcommand{\@ttb@type}{\defaultthumbtabtype}
+\newcommand{\makethumbtabs}[2][0pt]{%
+\@ifnextchar[{\@makethumbtabs[#1]{#2}}{%
+\@makethumbtabs[#1]{#2}[\defaultthumbtabtype]}%
+}
+\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}%
+}
+\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{\@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{\@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}{}%
+}}
+\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}}
+\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
+\advance\@colN by 1\relax
+\edef\ff@endpage{%
+\csname thumbtab@pages@\romannumeral\@colN\endcsname}%
+\advance\@colN by -1\relax
+\@ff@tmpN=\ff@endpage
+\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}%
+\@@dothumbtabs{#1}{#2}%
+}
+\newlength{\thumbtabwidth}
+\setlength{\thumbtabwidth}{1cm}
+\@ifundefined{hyperlink}{%
+\newcommand{\thumbtabindexformat}[3]{%
+\thumbtabformat{#2}{#3}}}{%
+\newcommand{\thumbtabindexformat}[3]{%
+\hyperlink{#1}{\thumbtabformat{#2}{#3}}}
+}
+\newcommand{\thumbtabformat}[2]{%
+\if@ttb@rotate
+\rotatebox{-90}{\parbox[c][\thumbtabwidth]{#2}{%
+\centering#1}}%
+\else
+\parbox[c][#2]{\thumbtabwidth}{%
+\centering\@ttb@stack{#1}}%
+\fi}
+\newcommand{\@ttb@stack}[1]{%
+{\obeyspaces\expandafter\@@ttb@stack#1\end}}
+
+\def\@@ttb@stack#1{%
+\ifx#1\end\let\next\relax
+\else
+#1\par
+\let\next\@@ttb@stack
+\fi
+\next}
+\newcount\@greyscale
+
+\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
+\multiply\@greyscale by 60\relax
+\divide\@greyscale by \c@maxthumbtabs
+\advance\@greyscale by 25\relax
+\edef\@ff@greyscale{0.\number\@greyscale}%
+\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}%
+\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
+\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}}
+\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
+\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
+\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 @df@backcol@\romannumeral\c@maxdynamic\endcsname
+{[gray]{\@ff@greyscale}}
+\addtolength{\@ff@tmp@y}{-#2}%
+}%
+}%
+\newcommand{\enablethumbtabs}{%
+\ifnum\c@maxthumbtabs>0
+\@ff@tmpN=0\relax
+\@dynamicframeid{thumbtab1}%
+\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
+\advance\@ff@tmpN by 1\relax
+\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}
+\newcommand{\disablethumbtabs}{%
+\ifnum\c@maxthumbtabs>0
+\@ff@tmpN=0\relax
+\@dynamicframeid{thumbtab1}%
+\whiledo{\@ff@tmpN<\c@maxthumbtabs}{%
+\advance\@ff@tmpN by 1\relax
+\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
+}\fi}
+\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}
+\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}}}}
+\newcommand{\@setthumbtab}[2]{%
+\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}}}
+\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}}}}
+\newcommand{\@setthumbtabindex}[2]{%
+\ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}{%
+\PackageWarning{flowfram}{Can't find thumbtab number '#1',
+ttb file may not be up-to-date}}{%
+\@dynamicframeid{thumbtabindex\number#1}%
+\@@setdynamicframe{\ff@id}{#2}}}
+\newcommand{\tocandthumbtabindex}{%
+\aligntoctrue
+\tableofcontents
+\thumbtabindex
+\aligntocfalse
+}
+\newcommand{\@ttb@minitoctype}{\@ttb@type}
+\let\@ttb@old@starttoc\@starttoc
+\newif\if@storetoc
+\@storetocfalse
+\renewcommand{\@starttoc}[1]{%
+\if@storetoc
+\@ttb@storetoc{#1}%
+\else
+\@ttb@old@starttoc{#1}%
+\fi}
+\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}
+\newcommand{\@storefileconts}[1]{\IfFileExists{#1}{%
+\@@storefileconts\@filef@und}{%
+\typeout{No file #1.}}}
+\newcount\c@maxtocunits
+\newcount\c@maxminitoc
+\newcommand{\@@storefileconts}[1]{%
+\@ifundefined{\@ttb@minitoctype}{\@ttb@minitoclevel=6}{%
+\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}
+\newif\if@contsline
+\newcount\@ttb@level
+\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}{%
+\ta=\expandafter{#1}%
+\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\ta}}{%
+\ta=\expandafter{#1}%
+\tb=\expandafter\expandafter\expandafter{\csname @toc@\romannumeral#2\endcsname}%
+\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\tb\the\ta}}%
+\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{}\relax
+\else
+ \ifnum\@ttb@level>\@ttb@minitoclevel
+ \ta=\expandafter{#1}\relax
+ \tb=\expandafter\expandafter\expandafter{\csname @minitoc@\romannumeral\c@maxminitoc\endcsname}\relax
+ \expandafter\xdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{\the\tb\the\ta}
+ \fi
+\fi
+\fi
+\fi
+}
+\def\@ttb@part@level{-1}
+\def\@ttb@chapter@level{0}
+\def\@ttb@section@level{1}
+\def\@ttb@subsection@level{2}
+\def\@ttb@subsubsection@level{3}
+\def\@ttb@paragraph@level{4}
+\def\@ttb@subparagraph@level{5}
+\long\def\@checkcontentsline#1#2\end{%
+\ifx#1\contentsline
+\@contslinetrue
+\else
+\@contslinefalse
+\fi}
+\def\@gettype\contentsline#1#2\end{%
+\def\@ttb@contstype{#1}}
+\newif\ifaligntoc
+\aligntocfalse
+
+\let\@ttb@old@tableofcontents\tableofcontents
+\renewcommand{\tableofcontents}{
+\@storetoctrue
+\@ttb@old@tableofcontents
+\ifaligntoc
+\@printalignedtoc
+\else
+\@printtoc
+\fi
+\@storetocfalse
+\global\c@minitoc=0\relax}
+\newlength\beforeminitocskip
+\setlength{\beforeminitocskip}{0pt}
+\newlength\afterminitocskip
+\setlength{\afterminitocskip}{\baselineskip}
+\newcommand{\dominitoc}[1]{%
+\if@minitoc \@dominitoc{#1} \fi}
+\newcommand{\@dominitoc}[1]{\@@dominitoc{#1}}
+\newcommand{\minitocstyle}[1]{\normalfont\normalsize\normalcolor
+#1}
+\newcommand{\@@dominitoc}[1]{%
+{\minitocstyle{%
+\vskip\beforeminitocskip
+\csname @minitoc@\romannumeral#1\endcsname}}
+\vskip\afterminitocskip}
+\newcommand{\appenddfminitoc}{%
+\renewcommand{\beforeminitocskip}{\baselineskip}%
+\@ifstar\@sappendminitocdf\@appendminitocdf}
+\newcommand{\@sappendminitocdf}[1]{%
+\renewcommand{\@dominitoc}[1]{%
+\@sappenddynamic{#1}{\@@dominitoc{##1}}}}
+\newcommand{\@appendminitocdf}[1]{%
+\renewcommand{\@dominitoc}[1]{%
+\@appenddynamic{#1}{\@@dominitoc{##1}}}}
+\newcommand{\@printtoc}{%
+\@colN=0\relax
+\csname @toc@\romannumeral\@colN\endcsname
+\whiledo{\@colN<\c@maxtocunits}{%
+\advance\@colN by 1\relax
+\csname @toc@\romannumeral\@colN\endcsname}}
+\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}}
+\newcounter{minitoc}
+\newif\if@minitoc
+\@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}}}}
+}
+\@onlypreamble{\enableminitoc}
+\newcommand{\@makeminitocchapter}{
+\let\@mtoc@old@chapter\@chapter
+\def\@chapter[##1]##2{%
+\@mtoc@old@chapter[##1]{##2}%
+\stepcounter{minitoc}%
+\dominitoc{\c@minitoc}%
+\@afterheading
+}}
+\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{\@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}{}%
+}}
+\endinput
+%%
+%% End of file `flowfram.sty'.