diff options
author | Karl Berry <karl@freefriends.org> | 2006-01-12 23:55:54 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2006-01-12 23:55:54 +0000 |
commit | 8516050801ea41e5f0614285cfab1fca19cc5a9e (patch) | |
tree | a793a89afa91980d522fb34a56cead2ae76ebd99 | |
parent | be07a7032cf925391965dce0f411638e27308971 (diff) |
flowfram
git-svn-id: svn://tug.org/texlive/trunk@924 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/tex/latex/flowfram/flowfram.sty | 3303 |
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'. |