%% %% This is file `flowfram.sty', %% generated with the docstrip utility. %% %% The original source files were: %% %% flowfram.dtx (with options: `flowfram.sty,package') %% %% flowfram.dtx %% Copyright 2014 Nicola Talbot %% %% This work may be distributed and/or modified under the %% conditions of the LaTeX Project Public License, either version 1.3 %% of this license of (at your option) any later version. %% The latest version of this license is in %% http://www.latex-project.org/lppl.txt %% and version 1.3 or later is part of all distributions of LaTeX %% version 2005/12/01 or later. %% %% This work has the LPPL maintenance status `maintained'. %% %% The Current Maintainer of this work is Nicola Talbot. %% %% This work consists of the files flowfram.dtx and flowfram.ins and the derived files flowfram.sty, sample-article.tex, sample-blanks.tex, sample-brochure.tex, sample-news.tex, sample-news2.tex, sample-pages.tex, sample-poster.tex, sample-rot.tex, sample.tex, sample1.tex, sample2.tex, sample3.tex, sampleRL.tex, flowfram.perl. %% %% \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}[2014/09/30 v1.17 (NLCT)] \RequirePackage{ifthen} \RequirePackage{xkeyval} \RequirePackage{graphics} \RequirePackage{afterpage} \RequirePackage{xfor} \RequirePackage{etoolbox} \@ifundefined{@ldc@l@r}{\RequirePackage{color}}{} \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} \DeclareOptionX{draft}{\@ffdraft} \DeclareOptionX{final}{\@ffnodraft} \@ffnodraft \define@choicekey{flowfram.sty}% {verbose}[\val\nr]% {true,false}[true]% {% \ifcase\nr\relax \renewcommand*{\flf@doifverbose}[1]{##1}% \renewcommand*{\flf@message}[1]{\PackageInfo{flowfram}{##1}}% \or \renewcommand*{\flf@doifverbose}[1]{}% \renewcommand*{\flf@message}[1]{}% \fi } \newcommand*{\flf@message}[1]{% \flf@doifverbose {% \PackageInfo{flowfram}{##1}% }% } \newcommand*{\flf@doifverbose}[1]{} \define@boolkey{flowfram.sty}[@ttb@]{rotate}[true]{} \@ttb@rotatetrue \DeclareOptionX{norotate}{\@ttb@rotatefalse} \newcommand{\rotateframe}[2]{% \if@ttb@rotate \rotatebox{#1}{#2}% \else #2% \fi } \newif\if@ttb@num \@ttb@numfalse \newif\if@ttb@title \@ttb@titletrue \define@choicekey{flowfram.sty}% {thumbtabs}[\val\nr]% {title,number,both,none}[title]% {% \ifcase\nr\relax \@ttb@numfalse \@ttb@titletrue \or \@ttb@numtrue \@ttb@titlefalse \or \@ttb@numtrue \@ttb@titletrue \or \@ttb@numfalse \@ttb@titlefalse \fi } \DeclareOptionX{ttbtitle}{\@ttb@titletrue} \DeclareOptionX{ttbnotitle}{\@ttb@titlefalse} \DeclareOptionX{ttbnum}{\@ttb@numtrue} \DeclareOptionX{ttbnonum}{\@ttb@numfalse} \define@choicekey{flowfram.sty}{pages}[\val\nr]% {relative,absolute}% {% \ifcase\nr\relax \renewcommand*{\@ff@pages@countreg}{\c@page}% \or \renewcommand*{\@ff@pages@countreg}{\c@absolutepage}% \fi } \newcommand*{\@ff@pages@countreg}{\c@page} \newcounter{absolutepage} \define@choicekey{flowfram.sty}{color}[\val\nr]{true,false}[true]{% \ifcase\nr\relax \@ff@enablecolor \or \@ff@disablecolor \fi } \DeclareOptionX{nocolor}{% \@ff@disablecolor } \newcommand*{\@ff@enablecolor}{% \def\flowframecol{{black}}% \def\flowframetextcol{{black}}% \renewcommand*\@s@tffcol{% \ifthenelse{\equal{\ff@col}{}}% {}% {% \expandafter\color\ff@col}% }% \renewcommand*\@s@tfftextcol{% \ifthenelse{\equal{\ff@txtcol}{}}% {}% {% \expandafter\color\ff@txtcol }% }% \renewcommand*{\@ffbackground}[1]{% \ifthenelse{\equal{\ff@backcol}{{none}}}% {% ##1% }% {% {\fboxsep=0pt\expandafter\colorbox\ff@backcol{##1}}% }% }% } \newcommand*{\@ff@disablecolor}{% \def\flowframetextcol{}% \def\flowframecol{}% \renewcommand{\@s@tffcol}{}\renewcommand{\@s@tfftextcol}{}% \renewcommand{\@ffbackground}[1]{##1}% } \newif\iflefttorightcolumns \lefttorightcolumnstrue \DeclareOptionX{LR}{\lefttorightcolumnstrue} \DeclareOptionX{RL}{\lefttorightcolumnsfalse} \ifx\normalcolor\relax \@ff@disablecolor \else \@ff@enablecolor \fi \ProcessOptionsX \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 }% \newcommand*{\ffprechapterhook}{} \let\@ff@OLD@ch@pter\chapter \renewcommand{\chapter}{% \ffprechapterhook \@ff@OLD@ch@pter } } \newcounter{maxflow} \c@maxflow=0\relax \newcounter{thisframe} \c@thisframe=0\relax \@ifpackageloaded{hyperref} {% \def\theHthisframe{\thepage.\arabic{thisframe}}% }% {} \newcommand*{\labelflowidn}[1]{% {% \def\@currentlabel{\thethisframe}% \label{#1}% }% } \newcounter{displayedframe} \c@displayedframe=0 \@ifpackageloaded{hyperref}% {% \def\theHdisplayedframe{\thepage.\arabic{displayedframe}}% }% {} \newcommand*{\labelflow}[1]{% {% \def\@currentlabel{\thedisplayedframe}% \label{#1}% }% } \newcounter{maxstatic} \c@maxstatic=0\relax \newcounter{maxdynamic} \c@maxdynamic=0\relax \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\sdfparindent \newlength\flowframesep \flowframesep=\fboxsep \newlength\flowframerule \flowframerule=\fboxrule \newcommand*{\flowframeshowlayout}{% \finishthispage {% \@ffdraft\mbox{}\finishthispage\clearpage }% } \newif\ifusedframebreak \newcommand{\framebreak}[1][4]{% \global\usedframebreaktrue {% \parfillskip=0pt\pagebreak[#1]\parskip=0pt\par\noindent }% } \newcommand{\finishthispage}{% \ifvmode \@colN=\c@thisframe\relax \count@=\c@absolutepage\relax \ifdim \pagetotal<\topskip \hbox{}% \fi \newpage \write \m@ne {}\vbox {}\penalty -\@Mi \ifnum\count@=\c@absolutepage\relax \whiledo{\@colN<\c@maxflow \OR \@colN=\c@maxflow}% {% \@ff@chckifthispg{\@ff@pages@countreg}{\@colN}% \if@notthiscol \else \c@thisframe=\@colN\relax \hbox{}\newpage \fi \advance\@colN by 1\relax }% \fi \fi } \def\cleardoublepage{% \clearpage \if@twoside \ifodd\c@page \else \hbox{}% \clearpage \fi \fi } \preto\newpage{\global\usedframebreaktrue} \@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@xpages@\romannumeral\c@maxflow\endcsname{}% \expandafter \gdef\csname @ff@offset@\romannumeral\c@maxflow\endcsname{compute} \expandafter \gdef\csname @ff@angle@\romannumeral\c@maxflow\endcsname{0}% \expandafter \gdef\csname @ff@margin@\romannumeral\c@maxflow\endcsname{right} \ifnum\c@thisframe=0\relax \ifthenelse{\equal{#1}{all}\TE@or\equal{#1}{odd}}% {% \c@thisframe=\c@maxflow \global\setlength{\hsize}{#2}% \global\usedframebreaktrue }% {% \ifthenelse{\equal{#1}{even}\TE@or\equal{#1}{none}}% {}% {% \def\ff@pages{#1}% \@for\@ff@pp:=\ff@pages\do {% \def\@ff@numstart{0}\def\@ff@numend{0}% \@ff@getrange{\@ff@pp}% \ifnum\@ff@numstart=0\relax \def\@ff@numstart{1}% \fi \ifnum\@ff@numstart=1\relax \c@thisframe=\c@maxflow \global\setlength{\hsize}{#2}% \global\usedframebreaktrue \fi }% }% }% \fi \@ifnextchar[% {\@s@tflowframeid{\c@maxflow}}% {% \@s@tflowframeid{\c@maxflow}[\number\c@maxflow]% }% } \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*{\getflowlabel}[1]{% \csname @col@id@\romannumeral#1\endcsname } \newcommand*{\getflowid}[2]{% \@flowframeid{#2}% \edef#1{\number\ff@id}% } \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}{excludepages}% {% \def\ff@xpages{#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}{angle}{\def\ff@angle{#1}% } \define@choicekey{flowframe}{margin}{left,right,inner,outer}% {% \def\ff@margin{#1}% } \define@choicekey{flowframe}{clear}{true,false}[true]{% \def\ff@clear{#1}% } \define@key{flowframe}{style}% {% \ifthenelse{\equal{#1}{}}% {% \PackageError{flowfram}{Missing value for 'style' key}{}% }% {}% \ifthenelse{\equal{#1}{none}}% {% \def\ff@style{relax}% }% {% \def\ff@style{#1}% }% } \define@key{flowframe}{shape}% {% \def\ff@shape{#1}% } \define@choicekey{flowframe}{valign}{c,t,b}% {% \def\ff@valign{#1}% } \define@choicekey{flowframe}{hide}{true,false}[true]{% \def\ff@hide{#1}% } \define@choicekey{flowframe}{hidethis}{true,false}[true]{% \def\ff@hidethis{#1}% } \newcommand*{\setallflowframes}[1]{% \@colN=0\relax \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\relax }% {% \@colN=2\relax }% \whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}% {% \@@setflowframe{\@colN}{#2}% \advance\@colN by 2\relax }% }% {% \@for\@ff@id:=#1\do {% \def\@ff@numstart{0}% \def\@ff@numend{10000}% \@ff@getrange{\@ff@id}% \ifnum\@ff@numstart=0\relax \def\@ff@numstart{1}% \fi \ifnum\@ff@numend>\c@maxflow\relax \def\@ff@numend{\c@maxflow}% \fi \@colN=\@ff@numstart\relax \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% {% \@@setflowframe{\@colN}{#2}% \advance\@colN by 1\relax }% }% }% }% } \newcommand*{\@@setflowframe}[2]{% \def\ff@frame{}\def\ff@width{}\def\ff@height{}\def\ff@margin{}% \def\ff@x{}\def\ff@y{}\def\ff@frametype{}\def\ff@col{}% \def\ff@valign{}\def\ff@style{}% \def\ff@hide{}\def\ff@hidethis{}% \def\ff@txtcol{}\def\ff@clear{}\def\ff@offset{}\def\ff@pages{}% \def\ff@label{}\def\ff@backcol{}\def\ff@evenx{}\def\ff@eveny{}% \def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}% \let\ff@xpages\undefined \let\ff@shape\undefined \setkeys{flowframe}{#2}% \ifdefempty{\ff@frame}{}% {% \setboolean{columnframe\romannumeral#1}{\ff@frame}% }% \ifdefempty{\ff@width}{}% {% \expandafter \setlength\csname colwidth\romannumeral#1\endcsname {\ff@width}% }% \ifdefempty{\ff@height}{}% {% \expandafter \setlength\csname colheight\romannumeral#1\endcsname {\ff@height}% }% \ifdefempty{\ff@x}{}% {% \expandafter \setlength\csname col@\romannumeral#1@posx\endcsname {\ff@x}% \expandafter \setlength\csname col@\romannumeral#1@evenx\endcsname {\ff@x}% } \ifdefempty{\ff@y}{}% {% \expandafter \setlength\csname col@\romannumeral#1@posy\endcsname {\ff@y}% \expandafter \setlength\csname col@\romannumeral#1@eveny\endcsname {\ff@y}% }% \ifdefempty{\ff@evenx}{}% {% \expandafter \setlength\csname col@\romannumeral#1@evenx\endcsname {\ff@evenx}% }% \ifdefempty{\ff@eveny}{}% {% \expandafter \setlength\csname col@\romannumeral#1@eveny\endcsname {\ff@eveny}% }% \ifdefempty{\ff@oddx}{}% {% \expandafter \setlength\csname col@\romannumeral#1@posx\endcsname {\ff@oddx}% }% \ifdefempty{\ff@oddy}{}% {% \expandafter \setlength\csname col@\romannumeral#1@posy\endcsname {\ff@oddy}% }% \ifdefempty{\ff@label}{}% {% \@s@tflowframeid{#1}[\ff@label]% }% \ifdefempty{\ff@frametype}{}% {% \expandafter \edef\csname @ff@frametype@\romannumeral#1\endcsname{% \ff@frametype}% }% \ifdefempty{\ff@col}{}% {% \expandafter\@setframecol\ff@col\end{#1}{col}{ff}% }% \ifdefempty{\ff@txtcol}{}% {% \expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{ff}% }% \ifdefempty{\ff@backcol}{}% {% \expandafter\@setframecol\ff@backcol\end{#1}{backcol}{ff}% }% \ifdefempty{\ff@margin}{}% {% \expandafter \xdef\csname @ff@margin@\romannumeral#1\endcsname{% \ff@margin}% }% \ifdefempty{\ff@pages}{}% {% \flowsetpagelist{#1}{\ff@pages}% }% \ifundef{\ff@xpages}{}% {% \flowsetexclusion{#1}{\ff@xpages}% }% \ifdefempty{\ff@offset}{}% {% \expandafter \xdef\csname @ff@offset@\romannumeral#1\endcsname{% \ff@offset}% }% \ifdefempty{\ff@angle}{}% {% \expandafter \xdef\csname @ff@angle@\romannumeral#1\endcsname{% \ff@angle}% }% \ifdefempty{\ff@clear}{}% {% \PackageError{flowfram}% {Key 'clear' not available for flow frames}{}% }% \ifdefempty{\ff@style}{}% {% \PackageError{flowfram}% {Key 'style' not available for flow frames}{}% }% \ifundef{\ff@shape}{}% {% \PackageError{flowfram}% {Key 'shape' not available for flow frames}{}% }% \ifdefempty{\ff@valign}{}% {% \PackageError{flowfram}% {Key 'valign' not available for flow frames}{}% }% \ifdefempty{\ff@hide}{}% {% \PackageError{flowfram}% {Key 'hide' not available for flow frames}{}% }% \ifdefempty{\ff@hidethis}{}% {% \PackageError{flowfram}% {Key 'hidethis' not available for flow frames}{}% }% } \newcommand*{\flowsetpagelist}[2]{% \expandafter \xdef\csname @ff@pages@\romannumeral#1\endcsname{#2}% \flf@message{Setting page range for flow frame \number#1\space\space to "#2"}% } \newcommand*{\flowsetexclusion}[2]{% \expandafter \xdef\csname @ff@xpages@\romannumeral#1\endcsname{#2}% \flf@message{Setting exclusion for flow frame \number#1\space\space to "#2"}% } \newcommand*{\flowaddexclusion}[2]{% \ifcsempty{@ff@xpages@\romannumeral#1} {% \expandafter \xdef\csname @ff@xpages@\romannumeral#1\endcsname{#2}% }% {% \expandafter \xdef\csname @ff@xpages@\romannumeral#1\endcsname{% \csname @ff@xpages@\romannumeral#1\endcsname,#2}% }% \flf@message{Setting exclusion for flow frame \number#1\space\space to "\csname @ff@xpages@\romannumeral#1\endcsname"}% } \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{100000}% \@ff@getrange{\@ff@id}% \ifnum\@ff@numstart=0\relax \def\@ff@numstart{1}% \fi \ifnum\@ff@numend>\c@maxflow \def\@ff@numend{\c@maxflow}% \fi \@colN=\@ff@numstart \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% {% \@@flowframeswapcoords{\@colN}% \advance\@colN by 1\relax }% }% }% }% } \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@xpages@\romannumeral\c@maxflow\endcsname{}% \expandafter \gdef\csname @sf@offset@\romannumeral\c@maxstatic\endcsname{% compute}% \expandafter \gdef\csname @sf@angle@\romannumeral\c@maxstatic\endcsname{0}% \expandafter \gdef\csname @sf@shape@\romannumeral\c@maxstatic\endcsname{\relax}% \expandafter \def\csname @sf@frametype@\romannumeral\c@maxstatic\endcsname{% fbox}% \newboolean{@sf@clear@\romannumeral\c@maxstatic}% \setboolean{@sf@clear@\romannumeral\c@maxstatic}{false} \newboolean{@sf@hide@\romannumeral\c@maxstatic}% \setboolean{@sf@hide@\romannumeral\c@maxstatic}{false}% \newboolean{@sf@hidethis@\romannumeral\c@maxstatic}% \setboolean{@sf@hidethis@\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*{\getstaticlabel}[1]{% \csname @sf@id@\romannumeral#1\endcsname } \newcommand*{\getstaticid}[2]{% \@staticframeid{#2}\edef#1{\number\ff@id}% } \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\relax \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\relax \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\relax \def\@ff@numend{\c@maxstatic}% \fi \@colN=\@ff@numstart\relax \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% {% \@@setstaticframe{\@colN}{#2}% \advance\@colN by 1\relax }% }% }% }% } \newcommand*{\@@setstaticframe}[2]{% \expandafter\expandafter\expandafter \@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname \def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}\def\ff@angle{}% \edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}% \def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}% \def\ff@backcol{}% \def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}% \def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}% \def\ff@oddx{}\def\ff@oddy{}% \def\ff@hide{}\def\ff@hidethis{}% \let\ff@shape\undefined \let\ff@xpages\undefined \setkeys{flowframe}{#2}% \ifdefempty{\ff@frame}{}% {% \setboolean{staticframe\romannumeral#1}{\ff@frame}% }% \ifdefempty{\ff@x}{}% {% \expandafter\global\expandafter \setlength\csname @sf@\romannumeral#1@posx\endcsname {\ff@x}% \expandafter\global\expandafter \setlength\csname @sf@\romannumeral#1@evenx\endcsname {\ff@x}% }% \ifdefempty{\ff@y}{}% {% \expandafter\global\expandafter \setlength\csname @sf@\romannumeral#1@posy\endcsname {\ff@y}% \expandafter\global\expandafter \setlength\csname @sf@\romannumeral#1@eveny\endcsname {\ff@y}% }% \ifdefempty{\ff@evenx}{}% {% \expandafter\global\expandafter \setlength\csname @sf@\romannumeral#1@evenx\endcsname {\ff@evenx}% }% \ifdefempty{\ff@eveny}{}% {% \expandafter\global\expandafter \setlength\csname @sf@\romannumeral#1@eveny\endcsname {\ff@eveny}% }% \ifdefempty{\ff@oddx}{}% {% \expandafter\global\expandafter \setlength\csname @sf@\romannumeral#1@posx\endcsname {\ff@oddx}% }% \ifdefempty{\ff@oddy}{}% {% \expandafter\global\expandafter \setlength\csname @sf@\romannumeral#1@posy\endcsname {\ff@oddy}% }% \expandafter \xdef\csname @sf@dim@\romannumeral#1\endcsname{% [c][\ff@height][\ff@valign]{\ff@width}}% \ifdefempty{\ff@frametype}{}% {% \expandafter \xdef\csname @sf@frametype@\romannumeral#1\endcsname{% \ff@frametype}% }% \ifdefempty{\ff@label}{}% {% \@s@tstaticframeid{#1}[\ff@label]% } \ifdefempty{\ff@col}{}% {% \expandafter\@setframecol\ff@col\end{#1}{col}{sf}% }% \ifdefempty{\ff@txtcol}{}% {% \expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{sf}% }% \ifdefempty{\ff@backcol}{}% {% \expandafter\@setframecol\ff@backcol\end{#1}{backcol}{sf}% }% \ifdefempty{\ff@offset}{}% {% \expandafter \xdef\csname @sf@offset@\romannumeral#1\endcsname{\ff@offset}% }% \ifdefempty{\ff@angle}{}% {% \expandafter \xdef\csname @sf@angle@\romannumeral#1\endcsname{\ff@angle}% }% \ifundef{\ff@shape}{}% {% \expandafter\global\expandafter \let\csname @sf@shape@\romannumeral#1\endcsname\ff@shape }% \ifdefempty{\ff@pages}{}% {% \staticsetpagelist{#1}{\ff@pages}% }% \ifundef{\ff@xpages}{}% {% \staticsetexclusion{#1}{\ff@xpages}% }% \ifdefempty{\ff@hide}{}% {% \setboolean{@sf@hide@\romannumeral#1}{\ff@hide}% }% \ifdefempty{\ff@hidethis}{}% {% \global\csletcs{if@sf@hidethis@\romannumeral#1}{if\ff@hidethis}% }% \ifdefempty{\ff@clear}{}% {% \setboolean{@sf@clear@\romannumeral#1}{\ff@clear}% }% \ifdefempty{\ff@margin}{}% {% \PackageError{flowfram}% {Key 'margin' not available for static frames}% {Static frames don't have marginal notes}% }% \ifdefempty{\ff@style}{}% {% \PackageError{flowfram}% {Key 'style' not available for static frames}{}% }% } %\newcommand*{\simpar}{\hfil\vadjust{\vskip\parskip}\break\indent} \newcommand*{\simpar}{\hfill\\\indent\mbox{}} \let\FLForgpar\par \newcommand{\ffpshpar}{% \edef\flf@next{\hangafter=\the\hangafter \hangindent=\the\hangindent}% \FLForgpar\flf@next \edef\flf@next{\prevgraf=\the\prevgraf}% \@ff@parshape\indent\mbox{}\flf@next } \def\@ff@parshape{\parshape=0} \newcommand*{\@ff@sectionhead}[1]{% \def\ff@sechead{#1}% \ffpshpar \@ifstar{\@s@ff@heading}{\@dblarg\@ff@heading}% } \def\@s@ff@heading#1{% \@ifundefined{@ff@old\ff@sechead}% {% \PackageError{flowfram}% {Unknown heading command '\ff@sechead'}{}% }% {% \begingroup \edef\flf@next{\hangafter=\the\hangafter \hangindent=\the\hangindent}% \FLForgpar\flf@next \let\par=\FLForgpar \edef\flf@next{\prevgraf=\the\prevgraf}% \csname @ff@old\ff@sechead\endcsname*{% \@ff@parshape\flf@next #1}% \xdef\flf@next{% \@ff@parshape \prevgraf=\the\prevgraf}% \endgroup }% \mbox{}\flf@next \let\flf@next\undefined } \def\@ff@heading[#1]#2{% \@ifundefined{@ff@old\ff@sechead}% {% \PackageError{flowfram}% {Unknown heading command '\ff@sechead'}{}% }% {% \begingroup \edef\flf@next{% \hangafter=\the\hangafter \hangindent=\the\hangindent}% \FLForgpar\flf@next \let\par=\FLForgpar \edef\flf@next{\prevgraf=\the\prevgraf}% \csname @ff@old\ff@sechead\endcsname[#1]{% \@ff@parshape\flf@next #2}% \xdef\flf@next{\@ff@parshape \prevgraf=\the\prevgraf}% \endgroup }% \mbox{}\flf@next \let\flf@next\undefined } \newcommand*{\@ff@setsecthead}{% \let\@ff@oldsection=\section \let\@ff@oldsubsection=\subsection \let\@ff@oldsubsubsection=\subsubsection \let\@ff@oldparagraph=\paragraph \let\@ff@oldsubparagraph=\subparagraph \def\section{\@ff@sectionhead{section}}% \def\subsection{\@ff@sectionhead{subsection}}% \def\subsubsection{\@ff@sectionhead{subsubsection}}% \def\paragraph{\@ff@sectionhead{paragraph}}% \def\subparagraph{\@ff@sectionhead{subparagraph}}% } \def\@ff@getshape#1#2\relax{% \ifdefequal{#1}{\parshape}% {% \def\ff@shape{1}% }% {% \ifdefequal{#1}{\shapepar}% {% \def\ff@shape{2}% }% {% \ifdefequal{#1}{\Shapepar}% {% \def\ff@shape{2}% }% {% \ifx#1\relax \def\ff@shape{0}% \else \PackageError{flowfram}{Unknown shape \string#1}{}% \def\ff@shape{2}% \fi }% }% }% } \newcommand*{\@ff@disablesec}{% \def\section{% \PackageError{flowfram}% {You can't have sectioning commands within a \string\shapepar}{}% }% \def\subsection{% \PackageError{flowfram}% {You can't have sectioning commands within a \string\shapepar}{}% }% \def\subsubsection{% \PackageError{flowfram}% {You can't have sectioning commands within a \string\shapepar}{}% }% \def\paragraph{% \PackageError{flowfram}% {You can't have sectioning commands within a \string\shapepar}{}% }% \def\subparagraph{% \PackageError{flowfram}% {You can't have sectioning commands within a \string\shapepar}{}% }% } \newbox\staticframe \newenvironment{staticcontents}[1]{% \let\continueonframe=\@staticcontinueonframe \@beginstaticcontents{#1}% }% {% \@endstaticcontents \ignorespaces } \newenvironment{staticcontents*}[1]{% \@staticframeid{#1}% \let\continueonframe=\@staticscontinueonframe \@beginstaticcontents{\ff@id}% }% {% \@endstaticcontents \ignorespaces } \newcommand{\@beginstaticcontents}[1]{% \@ifundefined{@staticframe@\romannumeral#1}% {% \PackageError{flowfram}{Static frame '#1' not defined}{}% }% {}% \expandafter\let\expandafter\@ff@parshape\csname @sf@shape@\romannumeral#1\endcsname \expandafter\@ff@getshape\@ff@parshape\relax \ifcase\ff@shape \edef\@sf@mpg{% \noexpand \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname \noexpand\begingroup \noexpand\let\noexpand\FLForgpar=\noexpand\par }% \or \edef\@sf@mpg{% \noexpand \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname \@ff@parshape \noexpand\begingroup \noexpand\let\noexpand\FLForgpar=\noexpand\par \noexpand\let\noexpand\par=\noexpand\ffpshpar \noexpand\@ff@setsecthead }% \or \edef\@sf@mpg{% \noexpand \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname \noexpand\begingroup \noexpand\@ff@disablesec \noexpand\@ff@parshape }% \fi \edef\@sf@thisframe{\csname @staticframe@\romannumeral#1\endcsname}% \begin{lrbox}{\staticframe}% \edef\ff@txtcol{\csname @sf@txtcol@\romannumeral#1\endcsname}% \@s@tfftextcol\noindent \@sf@mpg \setlength\parindent\sdfparindent } \newcommand*{\@endstaticcontents}{% \ifnum\ff@shape=2\relax \par \else \FLForgpar \fi \endgroup \end{minipage}% \end{lrbox}% \expandafter\global\expandafter \sbox\@sf@thisframe{\usebox\staticframe}% } \newcommand{\setstaticcontents}{% \@ifstar\@sstaticconts\@staticconts } \newcommand{\@sstaticconts}[2]{% \begin{staticcontents*}{#1}% #2% \end{staticcontents*}% } \newcommand{\@staticconts}[2]{% \begin{staticcontents}{#1}% #2% \end{staticcontents}% } \newcommand*{\staticsetpagelist}[2]{% \expandafter \xdef\csname @sf@pages@\romannumeral#1\endcsname{#2}% \flf@message{Setting page range for static frame \number#1\space\space to "#2"}% } \newcommand*{\staticsetexclusion}[2]{% \expandafter \xdef\csname @sf@xpages@\romannumeral#1\endcsname{#2}% \flf@message{Setting exclusion for static frame \number#1\space\space to "#2"}% } \newcommand*{\staticaddexclusion}[2]{% \ifcsempty{@sf@xpages@\romannumeral#1} {% \expandafter \xdef\csname @sf@xpages@\romannumeral#1\endcsname{#2}% }% {% \expandafter \xdef\csname @sf@xpages@\romannumeral#1\endcsname{% \csname @sf@xpages@\romannumeral#1\endcsname,#2}% }% \flf@message{Setting exclusion for static frame \number#1\space\space to "\csname @sf@xpages@\romannumeral#1\endcsname"}% } \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{100000}% \@ff@getrange{\@ff@id}% \ifnum\@ff@numstart=0\relax \def\@ff@numstart{1}% \fi \ifnum\@ff@numend>\c@maxflow \def\@ff@numend{\c@maxflow}% \fi \@colN=\@ff@numstart \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% {% \@@staticframeswapcoords{\@colN}% \advance\@colN by 1\relax }% }% }% }% } \newcommand*{\newdynamicframe}{% \@n@wdynamicframe } \newcommand*{\@n@wdynamicframe}{% \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@xpages@\romannumeral\c@maxflow\endcsname{}% \expandafter \gdef\csname @df@frametype@\romannumeral\c@maxdynamic\endcsname{% fbox}% \expandafter \gdef\csname @df@style@\romannumeral\c@maxdynamic\endcsname{relax}% \expandafter \gdef\csname @df@offset@\romannumeral\c@maxdynamic\endcsname{compute}% \expandafter \gdef\csname @df@angle@\romannumeral\c@maxdynamic\endcsname{0}% \expandafter \gdef\csname @df@shape@\romannumeral\c@maxdynamic\endcsname{\relax}% \newboolean{@df@clear@\romannumeral\c@maxdynamic}% \setboolean{@df@clear@\romannumeral\c@maxdynamic}{false}% \newboolean{@df@hide@\romannumeral\c@maxdynamic}% \setboolean{@df@hide@\romannumeral\c@maxdynamic}{false}% \newboolean{@df@hidethis@\romannumeral\c@maxdynamic}% \setboolean{@df@hidethis@\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*{\getdynamiclabel}[1]{% \csname @df@id@\romannumeral#1\endcsname } \newcommand*{\getdynamicid}[2]{% \@dynamicframeid{#2}\edef#1{\number\ff@id}% } \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\relax \PackageError{flowfram}% {Can't find dynamic frame id '#1'}{}% \fi } \newcommand*{\@getframeid}[2]{% \@ifdefined{@#1frameid}% {\csname @#1frameid\endcsname{#2}}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {Frame types can be one of: flow, static or dynamic}% }% } \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\relax \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\relax \def\@ff@numend{\c@maxdynamic}% \fi \@colN=\@ff@numstart\relax \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% {% \@@setdynamicframe{\@colN}{#2}% \advance\@colN by 1\relax }% }% }% }% } \newcommand*{\@@setdynamicframe}[2]{% \expandafter\expandafter\expandafter \@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname \def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}% \edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}% \def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}\def\ff@backcol{}% \def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}% \def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}% \def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}% \def\ff@hide{}\def\ff@hidethis{}% \let\ff@shape\undefined \let\ff@xpages\undefined \setkeys{flowframe}{#2}% \ifdefempty{\ff@frame}% {}% {% \setboolean{dynamicframe\romannumeral#1}{\ff@frame}% }% \ifdefempty{\ff@x}% {}% {% \expandafter\global\expandafter\setlength \csname @df@\romannumeral#1@posx\endcsname{\ff@x}% \expandafter\global\expandafter\setlength \csname @df@\romannumeral#1@evenx\endcsname{\ff@x}% }% \ifdefempty{\ff@y}% {}% {% \expandafter\global\expandafter\setlength \csname @df@\romannumeral#1@posy\endcsname{\ff@y}% \expandafter\global\expandafter\setlength \csname @df@\romannumeral#1@eveny\endcsname{\ff@y}% }% \ifdefempty{\ff@evenx}% {}% {% \expandafter\global\expandafter\setlength \csname @df@\romannumeral#1@evenx\endcsname{\ff@evenx}% }% \ifdefempty{\ff@eveny}% {}% {% \expandafter\global\expandafter\setlength \csname @df@\romannumeral#1@eveny\endcsname{\ff@eveny}% }% \ifdefempty{\ff@oddx}% {}% {% \expandafter\global\expandafter\setlength \csname @df@\romannumeral#1@posx\endcsname{\ff@oddx}% }% \ifdefempty{\ff@oddy}% {}% {% \expandafter\global\expandafter\setlength \csname @df@\romannumeral#1@posy\endcsname{\ff@oddy}% }% \expandafter\xdef\csname @df@dim@\romannumeral#1\endcsname{% [c][\ff@height][\ff@valign]{\ff@width}% }% \ifdefempty{\ff@label}% {}% {% \@s@tdynamicframeid{#1}[\ff@label]% }% \ifdefempty{\ff@frametype}% {}% {% \expandafter \xdef\csname @df@frametype@\romannumeral#1\endcsname{% \ff@frametype }% }% \ifdefempty{\ff@col}% {}% {% \expandafter\@setframecol\ff@col\end{#1}{col}{df}% }% \ifdefempty{\ff@txtcol}% {}% {% \expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{df}% }% \ifdefempty{\ff@backcol}% {}% {% \expandafter\@setframecol\ff@backcol\end{#1}{backcol}{df}% }% \ifdefempty{\ff@offset}% {}% {% \expandafter \xdef\csname @df@offset@\romannumeral#1\endcsname{\ff@offset}% }% \ifdefempty{\ff@angle}% {}% {% \expandafter \xdef\csname @df@angle@\romannumeral#1\endcsname{\ff@angle}% }% \ifundef{\ff@shape}{}% {% \expandafter\global\expandafter \let\csname @df@shape@\romannumeral#1\endcsname\ff@shape }% \ifdefempty{\ff@pages}% {}% {% \dynamicsetpagelist{#1}{\ff@pages}% }% \ifundef{\ff@xpages}{}% {% \dynamicsetexclusion{#1}{\ff@xpages}% }% \ifdefempty{\ff@style}% {}% {% \ifcsundef{\ff@style}% {% \PackageError{flowfram}% {Unknown style '\ff@style'}% {% The command \expandafter\@gobble\string\\\ff@style \space has not been defined% }% }% {% \expandafter \xdef\csname @df@style@\romannumeral#1\endcsname{\ff@style}% }% }% \ifdefempty{\ff@clear}% {}% {% \setboolean{@df@clear@\romannumeral#1}{\ff@clear}% }% \ifdefempty{\ff@margin}% {}% {% \PackageError{flowfram}% {% Key 'margin' not available for dynamic frames% }% {dynamic frames don't have marginal notes}% }% \ifdefempty{\ff@hide}{}% {% \setboolean{@df@hide@\romannumeral#1}{\ff@hide}% }% \ifdefempty{\ff@hidethis}{}% {% \global\csletcs{if@df@hidethis@\romannumeral#1}{if\ff@hidethis}% }% } \newcommand*{\dynamicsetpagelist}[2]{% \expandafter \xdef\csname @df@pages@\romannumeral#1\endcsname{#2}% \flf@message{Setting page range for dynamic frame \number#1\space\space to "#2"}% } \newcommand*{\dynamicsetexclusion}[2]{% \expandafter \xdef\csname @df@xpages@\romannumeral#1\endcsname{#2}% \flf@message{Setting exclusion for dynamic frame \number#1\space\space to "#2"}% } \newcommand*{\dynamicaddexclusion}[2]{% \ifcsempty{@df@xpages@\romannumeral#1} {% \expandafter \xdef\csname @df@xpages@\romannumeral#1\endcsname{#2}% }% {% \expandafter \xdef\csname @df@xpages@\romannumeral#1\endcsname{% \csname @df@xpages@\romannumeral#1\endcsname,#2}% }% \flf@message{Setting exclusion for dynamic frame \number#1\space\space to "\csname @df@xpages@\romannumeral#1\endcsname"}% } \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 }% }% }% }% } \newenvironment{dynamiccontents}[1]{% \def\@flf@{dynamiccontents}% \xdynamiccontents{#1}}{% \endxdynamiccontents } \newtoks\@dynamictok \def\xdynamiccontents#1{% \def\@flf@idn{#1}% \@dynamictok{}\@flf@get@body } \long\def\@flf@get@body#1\end{% \@flf@checkcontinued#1\continueonframe\@nil \ifdfcontinued \expandafter\flf@ta\expandafter{\@flf@tmpa}% \edef\@flf@tmp{\the\@dynamictok\the\flf@ta}% \@dynamictok\expandafter{\@flf@tmp}% \else \@dynamictok\expandafter{\the\@dynamictok#1}% \fi \@flf@find@end } \newif\ifdfcontinued \long\def\@flf@checkcontinued#1\continueonframe#2\@nil{% \long\def\@flf@tmpa{#1}\long\def\@flf@tmpb{#2}% \ifx\@flf@tmpb\@lempty \dfcontinuedfalse \else \dfcontinuedtrue \flf@getcontargs#2\@ff@text\@ff@nextid\@ff@rest \fi } \long\def\@lempty{} \def\flf@getcontargs{% \@ifnextchar[{\@flf@getcontargs}{\@flf@getcontargs[]}% } \long\def\@flf@getcontargs[#1]#2#3\continueonframe#4#5#6{% \def#4{#1}\def#5{#2}\def#6{#3}% } \def\@flf@find@end#1{% \def\@tempa{#1}% \global\let\flf@next=\relax \ifdfcontinued \@dynamictok\expandafter {\the\@dynamictok\ffcontinuedtextlayout}% \protected@edef\@tmpa{\the\@dynamictok{\@ff@text}}% \@dynamictok\expandafter{\@tmpa}% \toks@\expandafter{\@ff@rest}% \edef\flf@next{\noexpand\@flf@get@body\noexpand\end{#1}% \noexpand\begin{#1}{\@ff@nextid}\noexpand\par \noexpand\noindent\noexpand\ignorespaces \the\toks@\noexpand\end{#1}}% \else \ifx\@tempa\@flf@ \let\flf@next=\@flf@endxdynamiccontents \else \@dynamictok\expandafter {\the\@dynamictok\end{#1}}% \let\flf@next=\@flf@get@body \fi \fi \flf@next } \let\endxdynamiccontents\relax \def\@flf@endxdynamiccontents{% \ifnum\@flf@idn>\c@maxdynamic \PackageError{flowfram}% {Dynamic frame \number\@flf@idn\ does not exist}% {% You have specified dynamic frame number \number\@flf@idn, but there are only \number\c@maxdynamic\space dynamic frames currently defined% }% \else \expandafter \xdef\csname @dynamicframe@\romannumeral\@flf@idn\endcsname{% \the\@dynamictok}% \expandafter \fi \expandafter\end\expandafter{\@flf@}% } \newenvironment{dynamiccontents*}[1]{% \def\@flf@{dynamiccontents*}% \@dynamicframeid{#1}% \xdynamiccontents{\ff@id}}{% \enddynamiccontents } \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 } \newtoks\flf@ta \newtoks\flf@tb \long\def\@ff@addtolist#1\entry#2{% \flf@ta={{#2}}% \flf@tb=\expandafter{#1}% \xdef#1{\the\flf@tb\the\flf@ta}% } \newcommand{\continueonframe}{% \PackageError{flowfram}% {% Can't continue to new frame: not in static or dynamic frame% }% {% \string\continueonframe\space may only be used inside `staticcontents' or `dynamiccontents' environments (or their starred versions)% }% } \newcommand*{\@staticscontinueonframe}[2][]{% \ffcontinuedtextlayout{#1}% \end{staticcontents*}% \begin{staticcontents*}{#2}\par\noindent\ignorespaces } \newcommand*{\@staticcontinueonframe}[2][]{% \ffcontinuedtextlayout{#1}% \end{staticcontents}% \begin{staticcontents}{#2}\par\noindent\ignorespaces } \newcommand{\ffcontinuedtextlayout}[1]{% \parfillskip=0pt\par\hfill \ffcontinuedtextfont{#1}% } \newcommand*{\ffcontinuedtextfont}[1]{\emph{\small #1}} \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 \newlength\ffareaevenx \newlength\ffareaeveny \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*{\@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\relax \PackageError{flowfram}% {Unknown frame ID type '#1'}% {% Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)% }% \or \ifnum#2>\c@maxflow\relax \PackageError{flowfram}{Invalid flow frame IDN '\number#2'}{% Flow frame IDNs go from 1 to \number\c@maxflow}% \else \setlength{\ffareax}{\flowframex{#2}}% \setlength{\ffareay}{\flowframey{#2}}% \setlength{\ffareaevenx}{\flowframeevenx{#2}}% \setlength{\ffareaeveny}{\flowframeeveny{#2}}% \setlength{\ffareawidth}{\flowframewidth{#2}}% \setlength{\ffareaheight}{\flowframeheight{#2}}% \fi \or \ifnum#2>\c@maxstatic\relax \PackageError{flowfram}% {Invalid static frame IDN '\number#2'}% {% Static frame IDNs go from 1 to \number\c@maxstatic }% \else \setlength{\ffareax}{\staticframex{#2}}% \setlength{\ffareay}{\staticframey{#2}}% \setlength{\ffareaevenx}{\staticframeevenx{#2}}% \setlength{\ffareaeveny}{\staticframeeveny{#2}}% \expandafter\expandafter\expandafter \@ff@getstaticpos \csname @sf@dim@\romannumeral#2\endcsname \setlength{\ffareawidth}{\@ff@tmp@x}% \setlength{\ffareaheight}{\@ff@tmp@y}% \fi \or \ifnum#2>\c@maxdynamic\relax \PackageError{flowfram}% {Invalid dynamic frame IDN '\number#2'}% {% Dynamic frame IDNs go from 1 to \number\c@maxdynamic }% \else \setlength{\ffareax}{\dynamicframex{#2}}% \setlength{\ffareay}{\dynamicframey{#2}}% \setlength{\ffareaevenx}{\dynamicframeevenx{#2}}% \setlength{\ffareaeveny}{\dynamicframeeveny{#2}}% \expandafter\expandafter\expandafter \@ff@getstaticpos \csname @df@dim@\romannumeral#2\endcsname \setlength{\ffareawidth}{\@ff@tmp@x}% \setlength{\ffareaheight}{\@ff@tmp@y}% \fi \else \PackageError{flowfram}% {Unknown frame ID type '#1'}% {% Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)% }% \fi } \newcommand*{\@ff@getevendim}[2]{% \ifnum#2<1\relax \PackageError{flowfram}% {Frame IDNs start from 1}% {% You have specified a frame IDN of '\number#2'% }% \fi \ifcase#1\relax \PackageError{flowfram}% {Unknown frame ID type '#1'}% {% Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)% } \or \ifnum#2>\c@maxflow \PackageError{flowfram}% {Invalid flow frame IDN '\number#2'}% {% Flow frame IDNs go from 1 to \number\c@maxflow }% \else \setlength{\ffareax}{\flowframeevenx{#2}}% \setlength{\ffareay}{\flowframeeveny{#2}}% \setlength{\ffareawidth}{\flowframewidth{#2}}% \setlength{\ffareaheight}{\flowframeheight{#2}}% \fi \or \ifnum#2>\c@maxstatic\relax \PackageError{flowfram}% {Invalid static frame IDN '\number#2'}% {% Static frame IDNs go from 1 to \number\c@maxstatic }% \else \setlength{\ffareax}{\staticframeevenx{#2}}% \setlength{\ffareay}{\staticframeeveny{#2}}% \expandafter\expandafter\expandafter \@ff@getstaticpos \csname @sf@dim@\romannumeral#2\endcsname \setlength{\ffareawidth}{\@ff@tmp@x}% \setlength{\ffareaheight}{\@ff@tmp@y}% \fi \or \ifnum#2>\c@maxdynamic\relax \PackageError{flowfram}% {Invalid dynamic frame IDN '\number#2'}% {% Dynamic frame IDNs go from 1 to \number\c@maxdynamic }% \else \setlength{\ffareax}{\dynamicframeevenx{#2}}% \setlength{\ffareay}{\dynamicframeeveny{#2}}% \expandafter\expandafter\expandafter \@ff@getstaticpos \csname @df@dim@\romannumeral#2\endcsname \setlength{\ffareawidth}{\@ff@tmp@x}% \setlength{\ffareaheight}{\@ff@tmp@y}% \fi \else \PackageError{flowfram}% {Unknown frame ID type '#1'}% {% Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)% }% \fi } \newcommand*{\getstaticbounds}{% \@ifstar\@sgetstaticbounds\@getstaticbounds } \newcommand*{\@sgetstaticbounds}[1]{% \@staticframeid{#1}\@getstaticbounds{\ff@id}% } \newcommand*{\@getstaticbounds}[1]{\@ff@getdim{2}{#1}} \newcommand*{\getstaticevenbounds}{% \@ifstar\@sgetstaticevenbounds\@getstaticevenbounds } \newcommand*{\@sgetstaticevenbounds}[1]{% \@staticframeid{#1}\@getstaticevenbounds{\ff@id}% } \newcommand*{\@getstaticevenbounds}[1]{\@ff@getevendim{2}{#1}} \newcommand*{\getflowbounds}{% \@ifstar\@sgetflowbounds\@getflowbounds } \newcommand*{\@sgetflowbounds}[1]{% \@flowframeid{#1}\@getflowbounds{\ff@id}% } \newcommand*{\@getflowbounds}[1]{\@ff@getdim{1}{#1}} \newcommand*{\getflowevenbounds}{% \@ifstar\@sgetflowevenbounds\@getflowevenbounds } \newcommand*{\@sgetflowevenbounds}[1]{% \@flowframeid{#1}\@getflowevenbounds{\ff@id}% } \newcommand*{\@getflowevenbounds}[1]{\@ff@getevendim{1}{#1}} \newcommand*{\getdynamicbounds}{% \@ifstar\@sgetdynamicbounds\@getdynamicbounds } \newcommand*{\@sgetdynamicbounds}[1]{% \@dynamicframeid{#1}\@getdynamicbounds{\ff@id}% } \newcommand*{\@getdynamicbounds}[1]{\@ff@getdim{3}{#1}} \newcommand*{\getdynamicevenbounds}{% \@ifstar\@sgetdynamicevenbounds\@getdynamicevenbounds } \newcommand*{\@sgetdynamicevenbounds}[1]{% \@dynamicframeid{#1}\@getdynamicevenbounds{\ff@id}% } \newcommand*{\@getdynamicevenbounds}[1]{\@ff@getevendim{3}{#1}} \newif\ifFLFabove \newif\ifFLFbelow \newif\ifFLFleft \newif\ifFLFright \newcommand*{\checkifframeabove}{% \@ifstar\@scheckifframeabove\@checkifframeabove } \newcommand*{\@scheckifframeabove}[4]{% \ifodd\c@page \@soddcheckifframeabove{#1}{#2}{#3}{#4}% \else \@sevencheckifframeabove{#1}{#2}{#3}{#4}% \fi } \newcommand*{\@checkifframeabove}[4]{% \ifodd\c@page \@oddcheckifframeabove{#1}{#2}{#3}{#4}% \else \@evencheckifframeabove{#1}{#2}{#3}{#4}% \fi } \newcommand*{\oddcheckifframeabove}{% \@ifstar\@soddcheckifframeabove\@oddcheckifframeabove } \newcommand*{\@soddcheckifframeabove}[4]{% \@ifundefined{@sget#1bounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#1bounds\endcsname{#2}% \edef\@ff@check{\the\ffareay}% \@ifundefined{@sget#3bounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#3bounds\endcsname{#4}% \advance\ffareay by \ffareaheight\relax \expandafter\ifdim\@ff@check>\ffareay \FLFabovetrue \else \FLFabovefalse \fi } \newcommand*{\@oddcheckifframeabove}[4]{% \@ifundefined{@get#1bounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#1bounds\endcsname{#2}% \edef\@ff@check{\the\ffareay}% \@ifundefined{@get#3bounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#3bounds\endcsname{#4}% \advance\ffareay by \ffareaheight\relax \expandafter\ifdim\@ff@check>\ffareay \FLFabovetrue \else \FLFabovefalse \fi } \newcommand*{\checkifframebelow}{% \@ifstar\@scheckifframebelow\@checkifframebelow } \newcommand*{\@scheckifframebelow}[4]{% \ifodd\c@page \@soddcheckifframebelow{#1}{#2}{#3}{#4}% \else \@sevencheckifframebelow{#1}{#2}{#3}{#4}% \fi } \newcommand*{\@checkifframebelow}[4]{% \ifodd\c@page \@oddcheckifframebelow{#1}{#2}{#3}{#4}% \else \@evencheckifframebelow{#1}{#2}{#3}{#4}% \fi } \newcommand*{\oddcheckifframebelow}{% \@ifstar\@soddcheckifframebelow\@oddcheckifframebelow } \newcommand*{\@soddcheckifframebelow}[4]{% \@ifundefined{@sget#1bounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#1bounds\endcsname{#2}% \advance\ffareay by \ffareaheight\relax \edef\@ff@check{\the\ffareay}% \@ifundefined{@sget#3bounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#3bounds\endcsname{#4}% \expandafter\ifdim\@ff@check<\ffareay \FLFbelowtrue \else \FLFbelowfalse \fi } \newcommand*{\@oddcheckifframebelow}[4]{% \@ifundefined{@get#1bounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#1bounds\endcsname{#2}% \advance\ffareay by \ffareaheight\relax \edef\@ff@check{\the\ffareay}% \@ifundefined{@get#3bounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#3bounds\endcsname{#4}% \expandafter\ifdim\@ff@check<\ffareay \FLFbelowtrue \else \FLFbelowfalse \fi } \newcommand*{\checkifframeleft}{% \@ifstar\@scheckifframeleft\@checkifframeleft } \newcommand*{\@scheckifframeleft}[4]{% \ifodd\c@page \@soddcheckifframeleft{#1}{#2}{#3}{#4}% \else \@sevencheckifframeleft{#1}{#2}{#3}{#4}% \fi } \newcommand*{\@checkifframeleft}[4]{% \ifodd\c@page \@oddcheckifframeleft{#1}{#2}{#3}{#4}% \else \@evencheckifframeleft{#1}{#2}{#3}{#4}% \fi } \newcommand*{\oddcheckifframeleft}{% \@ifstar\@soddcheckifframeleft\@oddcheckifframeleft } \newcommand*{\@soddcheckifframeleft}[4]{% \@ifundefined{@sget#1bounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#1bounds\endcsname{#2}% \advance\ffareax by \ffareawidth\relax \edef\@ff@check{\the\ffareax}% \@ifundefined{@sget#3bounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#3bounds\endcsname{#4}% \expandafter\ifdim\@ff@check<\ffareax \FLFlefttrue \else \FLFleftfalse \fi } \newcommand*{\@oddcheckifframeleft}[4]{% \@ifundefined{@get#1bounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#1bounds\endcsname{#2}% \advance\ffareax by \ffareawidth\relax \edef\@ff@check{\the\ffareax}% \@ifundefined{@get#3bounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#3bounds\endcsname{#4}% \expandafter\ifdim\@ff@check<\ffareax \FLFlefttrue \else \FLFleftfalse \fi } \newcommand*{\checkifframeright}{% \@ifstar\@scheckifframeright\@checkifframeright } \newcommand*{\@scheckifframeright}[4]{% \ifodd\c@page \@soddcheckifframeright{#1}{#2}{#3}{#4}% \else \@sevencheckifframeright{#1}{#2}{#3}{#4}% \fi } \newcommand*{\@checkifframeright}[4]{% \ifodd\c@page \@oddcheckifframeright{#1}{#2}{#3}{#4}% \else \@evencheckifframeright{#1}{#2}{#3}{#4}% \fi } \newcommand*{\oddcheckifframeright}{% \@ifstar\@soddcheckifframeright\@oddcheckifframeright } \newcommand*{\@soddcheckifframeright}[4]{% \@ifundefined{@sget#1bounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#1bounds\endcsname{#2}% \edef\@ff@check{\the\ffareax}% \@ifundefined{@sget#3bounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#3bounds\endcsname{#4}% \advance\ffareax by \ffareawidth\relax \expandafter\ifdim\@ff@check>\ffareax \FLFrighttrue \else \FLFrightfalse \fi } \newcommand*{\@oddcheckifframeright}[4]{% \@ifundefined{@get#1bounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#1bounds\endcsname{#2}% \edef\@ff@check{\the\ffareax}% \@ifundefined{@get#3bounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#3bounds\endcsname{#4}% \advance\ffareax by \ffareawidth\relax \expandafter\ifdim\@ff@check>\ffareax \FLFrighttrue \else \FLFrightfalse \fi } \newcommand*{\evencheckifframeabove}{% \@ifstar\@sevencheckifframeabove\@evencheckifframeabove } \newcommand*{\@sevencheckifframeabove}[4]{% \@ifundefined{@sget#1evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#1evenbounds\endcsname{#2}% \edef\@ff@check{\the\ffareay}% \@ifundefined{@sget#3evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#3evenbounds\endcsname{#4}% \advance\ffareay by \ffareaheight\relax \expandafter\ifdim\@ff@check>\ffareay \FLFabovetrue \else \FLFabovefalse \fi } \newcommand*{\@evencheckifframeabove}[4]{% \@ifundefined{@get#1evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#1evenbounds\endcsname{#2}% \edef\@ff@check{\the\ffareay}% \@ifundefined{@get#3evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#3evenbounds\endcsname{#4}% \advance\ffareay by \ffareaheight\relax \expandafter\ifdim\@ff@check>\ffareay \FLFabovetrue \else \FLFabovefalse \fi } \newcommand*{\evencheckifframebelow}{% \@ifstar\@sevencheckifframebelow\@evencheckifframebelow } \newcommand*{\@sevencheckifframebelow}[4]{% \@ifundefined{@sget#1evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#1evenbounds\endcsname{#2}% \advance\ffareay by \ffareaheight\relax \edef\@ff@check{\the\ffareay}% \@ifundefined{@sget#3evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#3evenbounds\endcsname{#4}% \expandafter\ifdim\@ff@check<\ffareay \FLFbelowtrue \else \FLFbelowfalse \fi } \newcommand*{\@evencheckifframebelow}[4]{% \@ifundefined{@get#1evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }{}% \csname @get#1evenbounds\endcsname{#2}% \advance\ffareay by \ffareaheight\relax \edef\@ff@check{\the\ffareay}% \@ifundefined{@get#3evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#3evenbounds\endcsname{#4}% \expandafter\ifdim\@ff@check<\ffareay \FLFbelowtrue \else \FLFbelowfalse \fi } \newcommand*{\evencheckifframeleft}{% \@ifstar\@sevencheckifframeleft\@evencheckifframeleft } \newcommand*{\@sevencheckifframeleft}[4]{% \@ifundefined{@sget#1evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#1evenbounds\endcsname{#2}% \advance\ffareax by \ffareawidth\relax \edef\@ff@check{\the\ffareax}% \@ifundefined{@sget#3evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#3evenbounds\endcsname{#4}% \expandafter\ifdim\@ff@check<\ffareax \FLFlefttrue \else \FLFleftfalse \fi } \newcommand*{\@evencheckifframeleft}[4]{% \@ifundefined{@get#1evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#1evenbounds\endcsname{#2}% \advance\ffareax by \ffareawidth\relax \edef\@ff@check{\the\ffareax}% \@ifundefined{@get#3evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#3evenbounds\endcsname{#4}% \expandafter\ifdim\@ff@check<\ffareax \FLFlefttrue \else \FLFleftfalse \fi } \newcommand*{\evencheckifframeright}{% \@ifstar\@sevencheckifframeright\@evencheckifframeright } \newcommand*{\@sevencheckifframeright}[4]{% \@ifundefined{@sget#1evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#1evenbounds\endcsname{#2}% \edef\@ff@check{\the\ffareax}% \@ifundefined{@sget#3evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @sget#3evenbounds\endcsname{#4}% \advance\ffareax by \ffareawidth\relax \expandafter\ifdim\@ff@check>\ffareax \FLFrighttrue \else \FLFrightfalse \fi } \newcommand*{\@evencheckifframeright}[4]{% \@ifundefined{@get#1evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#1'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#1evenbounds\endcsname{#2}% \edef\@ff@check{\the\ffareax}% \@ifundefined{@get#3evenbounds}% {% \PackageError{flowfram}% {Unknown frame type `#3'}% {% Frame types may only be one of: static, dynamic or flow% }% }% {}% \csname @get#3evenbounds\endcsname{#4}% \advance\ffareax by \ffareawidth\relax \expandafter\ifdim\@ff@check>\ffareax \FLFrighttrue \else \FLFrightfalse \fi } \newcommand*{\FFaboveleft}{above left} \newcommand*{\FFaboveright}{above right} \newcommand*{\FFbelowleft}{below left} \newcommand*{\FFbelowright}{below right} \newcommand*{\FFleft}{on the left} \newcommand*{\FFright}{on the right} \newcommand*{\FFabove}{above} \newcommand*{\FFbelow}{below} \newcommand*{\FFoverlap}{overlap} \DeclareRobustCommand*{\relativeframelocation}{% \@ifstar\@srelativeframelocation\@relativeframelocation } \newcommand*{\@srelativeframelocation}[4]{% \@scheckifframeabove{#1}{#2}{#3}{#4}% \@scheckifframebelow{#1}{#2}{#3}{#4}% \@scheckifframeleft{#1}{#2}{#3}{#4}% \@scheckifframeright{#1}{#2}{#3}{#4}% \ifFLFabove \ifFLFleft \FFaboveleft \else \ifFLFright \FFaboveright \else \FFabove \fi \fi \else \ifFLFbelow \ifFLFleft \FFbelowleft \else \ifFLFright \FFbelowright \else \FFbelow \fi \fi \else \ifFLFleft \FFleft \else \ifFLFright \FFright \else \FFoverlap \fi \fi \fi \fi } \newcommand*{\@relativeframelocation}[4]{% \@checkifframeabove{#1}{#2}{#3}{#4}% \@checkifframebelow{#1}{#2}{#3}{#4}% \@checkifframeleft{#1}{#2}{#3}{#4}% \@checkifframeright{#1}{#2}{#3}{#4}% \ifFLFabove \ifFLFleft \FFaboveleft \else \ifFLFright \FFaboveright \else \FFabove \fi \fi \else \ifFLFbelow \ifFLFleft \FFbelowleft \else \ifFLFright \FFbelowright \else \FFbelow \fi \fi \else \ifFLFleft \FFleft \else \ifFLFright \FFright \else \FFoverlap \fi \fi \fi \fi } \DeclareRobustCommand*{\reldynamicloc}{% \@ifstar\@sreldynamicloc\@reldynamicloc } \newcommand*{\@sreldynamicloc}[2]{% \@srelativeframelocation{dynamic}{#1}{dynamic}{#2}% } \newcommand*{\@reldynamicloc}[2]{% \@relativeframelocation{dynamic}{#1}{dynamic}{#2}% } \DeclareRobustCommand*{\relstaticloc}{% \@ifstar\@srelstaticloc\@relstaticloc } \newcommand*{\@srelstaticloc}[2]{% \@srelativeframelocation{static}{#1}{static}{#2}% } \newcommand*{\@relstaticloc}[2]{% \@relativeframelocation{static}{#1}{static}{#2}% } \DeclareRobustCommand*{\relflowloc}{% \@ifstar\@srelflowloc\@relflowloc } \newcommand*{\@srelflowloc}[2]{% \@srelativeframelocation{flow}{#1}{flow}{#2}% } \newcommand*{\@relflowloc}[2]{% \@relativeframelocation{flow}{#1}{flow}{#2}% } \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\relax \twocolumnStop[\@ff@pages@countreg]{\@ff@staticH}% \c@thisframe=\c@maxflow \advance\c@thisframe by -1\relax \@twocolumn[>\@ff@pages@countreg]% \setstaticcontents{\c@maxstatic}{#1}% \else \@twocolumn \c@thisframe=\c@maxflow \advance\c@thisframe by -1\relax \fi \@setcol{\c@thisframe}% \relax } \newcommand{\emulateonecolumn}[1][]{% \finishthispage \setallflowframes{pages=none}% \settoheight{\@ff@staticH}{#1}% \settodepth{\@ff@tmp@y}{#1}% \addtolength{\@ff@staticH}{\@ff@tmp@y}% \ifdim\@ff@staticH>0pt\relax \onecolumnStop[\@ff@pages@countreg]{\@ff@staticH}% \c@thisframe=\c@maxflow \advance\c@thisframe by -1\relax \@onecolumn[>\@ff@pages@countreg]% \setstaticcontents{\c@maxstatic}{#1}% \else \@twocolumn \c@thisframe=\c@maxflow \advance\c@thisframe by -1\relax \fi \@setcol{\c@thisframe}% \relax } \AtBeginDocument{% \c@absolutepage=1\relax \ifnum\c@maxflow=0\relax \PackageWarning{flowfram}{No flow frames, adding one}% \@onecolumn \fi \setframes \renewcommand{\onecolumn}[1][]{% \PackageWarning{flowfram}% {% Ignoring \string\onecolumn\space found in document environment. Frames must be defined in the preamble% }% #1% }% \renewcommand{\twocolumn}[1][]{% \PackageWarning{flowfram}% {% Ignoring \string\twocolumn\space found in document environment. Frames must be defined in the preamble}% #1% }% } \newlength\fftolerance \setlength\fftolerance{2pt} \newcommand{\@setcol}[1]{% \ifnum\c@maxflow<#1\relax \PackageError{flowfram}% {Can't set frame '\number#1', doesn't exist}{}% \else \flf@message{Switching to flow frame \number#1\space on page \number\@ff@pages@countreg}% \expandafter\global\expandafter\columnwidth \csname colwidth\romannumeral#1\endcsname \dimen@\columnwidth \advance\dimen@ by -\hsize\relax \ifdim\dimen@<0pt\relax \dimen@=-\dimen@ \fi \ifdim\dimen@>\fftolerance \ifusedframebreak \else \PackageWarning{flowfram}% {Moving to flow frame of unequal width,\MessageBreak use of \string\framebreak\space advised, or text might not appear correctly (difference = \the\dimen@, tolerance = \the\fftolerance)}% \fi \fi \global\usedframebreakfalse \global\hsize\columnwidth \expandafter\global \expandafter\vsize\csname colheight\romannumeral#1\endcsname \global\@colht\vsize \global\@colroom\@colht \ifnum\@listdepth>0\relax \ifnum\linewidth>\columnwidth \global\linewidth\columnwidth \fi \else \global\linewidth\columnwidth \fi %\global\textwidth\columnwidth \setmargin \fi \stepcounter{displayedframe}% } \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@ \vskip\topmargin\moveright\@themargin \vbox {% \vskip\headheight \vskip\headsep \box\@outputbox }% }% \global\let\if@newlist\@@if@newlist \stepcounter{page}% \stepcounter{absolutepage}% \setcounter{displayedframe}{0}% \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=\c@thisframe \whiledo{\@colN<\c@maxflow}% {% \advance\@colN by 1\relax \edef\ff@xpages{\csname @ff@xpages@\romannumeral\@colN\endcsname}% \@for\@ff@pp:=\ff@xpages\do {% \ifnum0\@ff@pp=\@ff@pages@countreg\relax \@endfortrue \fi }% \if@endfor \else \edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}% \@ff@checkpages{\ff@pages}% \if@ff@moreframes \@colN=\c@maxflow\relax \fi \fi }% \if@ff@moreframes \else \@ff@tmpN=\@ff@pages@countreg \count@=0\relax \loop \advance\@ff@tmpN by 1\relax \@colN=0\relax \whiledo{\@colN<\c@maxflow}% {% \advance\@colN by 1\relax \edef\ff@xpages{\csname @ff@xpages@\romannumeral\@colN\endcsname}% \@for\@ff@pp:=\ff@xpages\do {% \ifnum0\@ff@pp=\@ff@tmpN\relax \@endfortrue \fi }% \if@endfor \else \edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}% \@ff@checkpages[\@ff@tmpN]{\ff@pages}% \if@ff@moreframes \@colN=\c@maxflow\relax \fi \fi }% \if@ff@moreframes \count@=4\relax \else \advance\count@ by 1\relax \fi \ifnum\count@<4 \repeat \fi } \newcommand*{\@ff@checkpages}[2][\@ff@pages@countreg]{% \@for\@ff@pp:=#2\do{% \@ff@checkthispage{#1}{\@ff@pp}% }% } \newcommand*{\@ff@checkthispage}[2]{% \ifthenelse{\equal{#2}{all}\or\equal{#2}{even}\or\equal{#2}{odd}}% {% \@ff@moreframestrue }% {% \ifthenelse{\equal{#2}{none}}% {}% {% \@ff@checknumrange{#1}{#2}% }% }% } \newcommand*{\@ff@checknumrange}[2]{% \def\@ff@numstart{0}% \def\@ff@numend{100000}% \@ff@getrange{#2}% \ifnum\@ff@numend>#1\relax \@ff@moreframestrue \else \ifnum\@ff@numend=#1\relax \@ff@moreframestrue \fi \fi } \newcount\c@ffrangenum \newcommand*{\@ff@getrange}[1]{% \expandafter\@ff@@getrange#1-\relax\end } \def\@ff@@getrange#1#2\end{% \ifx#1<\relax \@ff@getrangeless#1#2\end \else \ifx#1>\relax \@ff@getrangegreater#1#2\end \else \@@ff@getrange#1#2\end \fi \fi } \def\@ff@getrangeless<#1-\relax\end{% \c@ffrangenum=#1\relax \advance\c@ffrangenum by -1\relax \def\@ff@numstart{0}% \edef\@ff@numend{\number\c@ffrangenum}% } \def\@ff@getrangegreater>#1-\relax\end{% \c@ffrangenum=#1\relax \advance\c@ffrangenum by 1\relax \edef\@ff@numstart{\number\c@ffrangenum}% \def\@ff@numend{100000}% } \def\@@ff@getrange#1-#2\end{% \ifx\relax#2\relax \def\@ff@numstart{#1}% \def\@ff@numend{#1}% \else \def\@ff@numstart{#1}% \@@@ff@getrange#2\end \fi } \def\@@@ff@getrange#1-\relax\end{% \def\@ff@numend{#1}% } \newcommand*{\@ff@output@adjustframes}{} \newcommand*{\flowswitchonnext}{% \@ifstar\@sflowswitchonnext\@flowswitchonnext } \newcommand{\@sflowswitchonnext}[1]{% \@for\@ff@id:=#1\do{% \@flowframeid{\@ff@id}% \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\ff@id}% {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% }% \fi }% } \newcommand{\@flowswitchonnext}[1]{% \@for\@ff@id:=#1\do{% \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\@ff@id}% {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% }% \fi }% } \newcommand*{\flowswitchonnextodd}{% \@ifstar\@sflowswitchonnextodd\@flowswitchonnextodd } \newcommand{\@sflowswitchonnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\count@\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@flowframeid{\@ff@id}% \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% \def\@ff@prepages{}% \if@notthiscol \else \def\@ff@prepages{\number\@ff@pages@countreg,}% \fi \@ff@chckifthispg{\count@}{\ff@id}% \ifnum\count@=\@ff@pages@countreg\relax \else \if@notthiscol \else \edef\@ff@prepages{\@ff@prepages\number\count@,}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\ff@id}% {\@ff@prepages>\number\count@}% }% }% } \newcommand{\@flowswitchonnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\count@\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% \def\@ff@prepages{}% \if@notthiscol \else \def\@ff@prepages{\number\@ff@pages@countreg,}% \fi \@ff@chckifthispg{\count@}{\@ff@id}% \ifnum\count@=\@ff@pages@countreg\relax \else \if@notthiscol \else \edef\@ff@prepages{\@ff@prepages\number\count@,}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\@ff@id}% {\@ff@prepages>\number\count@}% }% }% } \newcommand*{\flowswitchoffnext}{% \@ifstar\@sflowswitchoffnext\@flowswitchoffnext } \newcommand{\@sflowswitchoffnext}[1]{% \@for\@ff@id:=#1\do{% \@flowframeid{\@ff@id}% \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% \if@notthiscol \def\@ff@pages{none}% \else \def\@ff@pages{\number\@ff@pages@countreg}% \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\ff@id}{\@ff@pages}% }% }% } \newcommand{\@flowswitchoffnext}[1]{% \@for\@ff@id:=#1\do{% \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% \if@notthiscol \def\@ff@pages{none}% \else \def\@ff@pages{\number\@ff@pages@countreg}% \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@pages}% }% }% } \newcommand*{\flowswitchoffnextodd}{% \@ifstar\@sflowswitchoffnextodd\@flowswitchoffnextodd } \newcommand{\@sflowswitchoffnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\@ff@pages@countreg\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@flowframeid{\@ff@id}% \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% \if@notthiscol \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{none}% \else \@ff@chckifthispg{\count@}{\ff@id}% \if@notthiscol \def\@ff@nextpages{none}% \else \def\@ff@nextpages{\number\count@}% \fi \fi \else \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \@ff@chckifthispg{\count@}{\ff@id}% \if@notthiscol \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\ff@id}{\@ff@nextpages}% }% }% } \newcommand{\@flowswitchoffnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\@ff@pages@countreg\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% \if@notthiscol \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{none}% \else \@ff@chckifthispg{\count@}{\@ff@id}% \if@notthiscol \def\@ff@nextpages{none}% \else \def\@ff@nextpages{\number\count@}% \fi \fi \else \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \@ff@chckifthispg{\count@}{\@ff@id}% \if@notthiscol \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@nextpages}% }% }% } \newcommand*{\flowswitchonnextonly}{% \@ifstar\@sflowswitchonnextonly\@flowswitchonnextonly } \newcommand{\@sflowswitchonnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \@flowframeid{\@ff@id}% \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\ff@id}{\number\count@}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\ff@id}% {\number\@ff@pages@countreg,\number\count@}% }% \fi }% } \newcommand{\@flowswitchonnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\@ff@id}{\number\count@}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\@ff@id}% {\number\@ff@pages@countreg,\number\count@}% }% \fi }% } \newcommand*{\flowswitchonnextoddonly}{% \@ifstar\@sflowswitchonnextoddonly\@flowswitchonnextoddonly } \newcommand{\@sflowswitchonnextoddonly}[1]{% \@for\@ff@id:=#1\do{% \@flowframeid{\@ff@id}% \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% \if@notthiscol \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@ff@chckifthispg{\count@}{\ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \else \edef\@ff@pages{\number\count@}% \advance\count@ by 1\relax \edef\@ff@pages{\@ff@pages,\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \fi \else \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@ff@chckifthispg{\count@}{\ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \else \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\ff@id}{\@ff@pages}% }% }% } \newcommand{\@flowswitchonnextoddonly}[1]{% \@for\@ff@id:=#1\do{% \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% \if@notthiscol \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@ff@chckifthispg{\count@}{\@ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \else \edef\@ff@pages{\number\count@}% \advance\count@ by 1\relax \edef\@ff@pages{\@ff@pages,\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \fi \else \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@ff@chckifthispg{\count@}{\@ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \else \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@pages}% }% }% } \newcommand*{\flowswitchoffnextonly}{% \@ifstar\@sflowswitchoffnextonly\@flowswitchoffnextonly } \newcommand{\@sflowswitchoffnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \@flowframeid{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowaddexclusion{\number\ff@id}{\number\count@}% }% }% } \newcommand{\@flowswitchoffnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowaddexclusion{\number\@ff@id}{\number\count@}% }% }% } \newcommand*{\flowswitchoffnextoddonly}{% \@ifstar\@sflowswitchoffnextoddonly\@flowswitchoffnextoddonly } \newcommand{\@sflowswitchoffnextoddonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \ifodd\count@\relax \else \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@flowframeid{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowaddexclusion{\number\ff@id}{\number\count@}% }% }% } \newcommand{\@flowswitchoffnextoddonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \ifodd\count@\relax \else \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\flowaddexclusion{\number\@ff@id}{\number\count@}% }% }% } \newcommand*{\dynamicswitchonnext}{% \@ifstar\@sdynamicswitchonnext\@dynamicswitchonnext } \newcommand{\@sdynamicswitchonnext}[1]{% \@for\@ff@id:=#1\do{% \@dynamicframeid{\@ff@id}% \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\ff@id}% {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% }% \fi }% } \newcommand{\@dynamicswitchonnext}[1]{% \@for\@ff@id:=#1\do{% \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\@ff@id}% {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% }% \fi }% } \newcommand*{\dynamicswitchonnextodd}{% \@ifstar\@sdynamicswitchonnextodd\@dynamicswitchonnextodd } \newcommand{\@sdynamicswitchonnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\count@\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@dynamicframeid{\@ff@id}% \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% \def\@ff@prepages{}% \if@notthiscol \else \def\@ff@prepages{\number\@ff@pages@countreg,}% \fi \@df@chckifthispg[\count@]{\ff@id}% \ifnum\count@=\@ff@pages@countreg\relax \else \if@notthiscol \else \edef\@ff@prepages{\@ff@prepages\number\count@,}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\ff@id}% {\@ff@prepages>\number\count@}% }% }% } \newcommand{\@dynamicswitchonnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\count@\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \def\@ff@prepages{}% \if@notthiscol \else \def\@ff@prepages{\number\@ff@pages@countreg,}% \fi \@df@chckifthispg[\count@]{\@ff@id}% \ifnum\count@=\@ff@pages@countreg\relax \else \if@notthiscol \else \edef\@ff@prepages{\@ff@prepages\number\count@,}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\@ff@id}% {\@ff@prepages>\number\count@}% }% }% } \newcommand*{\dynamicswitchoffnext}{% \@ifstar\@sdynamicswitchoffnext\@dynamicswitchoffnext } \newcommand{\@sdynamicswitchoffnext}[1]{% \@for\@ff@id:=#1\do{% \@dynamicframeid{\@ff@id}% \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% \if@notthiscol \def\@ff@pages{none}% \else \def\@ff@pages{\number\@ff@pages@countreg}% \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@pages}% }% }% } \newcommand{\@dynamicswitchoffnext}[1]{% \@for\@ff@id:=#1\do{% \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \if@notthiscol \def\@ff@pages{none}% \else \def\@ff@pages{\number\@ff@pages@countreg}% \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@pages}% }% }% } \newcommand*{\dynamicswitchoffnextodd}{% \@ifstar\@sdynamicswitchoffnextodd\@dynamicswitchoffnextodd } \newcommand{\@sdynamicswitchoffnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\@ff@pages@countreg\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@dynamicframeid{\@ff@id}% \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% \if@notthiscol \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{none}% \else \@df@chckifthispg[\count@]{\ff@id}% \if@notthiscol \def\@ff@nextpages{none}% \else \def\@ff@nextpages{\number\count@}% \fi \fi \else \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \@df@chckifthispg[\count@]{\ff@id}% \if@notthiscol \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@nextpages}% }% }% } \newcommand{\@dynamicswitchoffnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\@ff@pages@countreg\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \if@notthiscol \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{none}% \else \@df@chckifthispg[\count@]{\@ff@id}% \if@notthiscol \def\@ff@nextpages{none}% \else \def\@ff@nextpages{\number\count@}% \fi \fi \else \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \@df@chckifthispg[\count@]{\@ff@id}% \if@notthiscol \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@nextpages}% }% }% } \newcommand*{\dynamicswitchonnextonly}{% \@ifstar\@sdynamicswitchonnextonly\@dynamicswitchonnextonly } \newcommand{\@sdynamicswitchonnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \@dynamicframeid{\@ff@id}% \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\ff@id}{\number\count@}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\ff@id}% {\number\@ff@pages@countreg,\number\count@}% }% \fi }% } \newcommand{\@dynamicswitchonnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\@ff@id}{\number\count@}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\@ff@id}% {\number\@ff@pages@countreg,\number\count@}% }% \fi }% } \newcommand*{\dynamicswitchonnextoddonly}{% \@ifstar\@sdynamicswitchonnextoddonly\@dynamicswitchonnextoddonly } \newcommand{\@sdynamicswitchonnextoddonly}[1]{% \@for\@ff@id:=#1\do{% \@dynamicframeid{\@ff@id}% \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% \if@notthiscol \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@df@chckifthispg[\count@]{\ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \else \edef\@ff@pages{\number\count@}% \advance\count@ by 1\relax \edef\@ff@pages{\@ff@pages,\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \fi \else \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@df@chckifthispg[\count@]{\ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \else \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@pages}% }% }% } \newcommand{\@dynamicswitchonnextoddonly}[1]{% \@for\@ff@id:=#1\do{% \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \if@notthiscol \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@df@chckifthispg[\count@]{\@ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \else \edef\@ff@pages{\number\count@}% \advance\count@ by 1\relax \edef\@ff@pages{\@ff@pages,\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \fi \else \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@df@chckifthispg[\count@]{\@ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \else \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@pages}% }% }% } \newcommand*{\dynamicswitchoffnextonly}{% \@ifstar\@sdynamicswitchoffnextonly\@dynamicswitchoffnextonly } \newcommand{\@sdynamicswitchoffnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \@dynamicframeid{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicaddexclusion{\number\ff@id}{\number\count@}% }% }% } \newcommand{\@dynamicswitchoffnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicaddexclusion{\number\@ff@id}{\number\count@}% }% }% } \newcommand*{\dynamicswitchoffnextoddonly}{% \@ifstar\@sdynamicswitchoffnextoddonly\@dynamicswitchoffnextoddonly } \newcommand{\@sdynamicswitchoffnextoddonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \ifodd\count@\relax \else \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@dynamicframeid{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicaddexclusion{\number\ff@id}{\number\count@}% }% }% } \newcommand{\@dynamicswitchoffnextoddonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \ifodd\count@\relax \else \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\dynamicaddexclusion{\number\@ff@id}{\number\count@}% }% }% } \newcommand*{\staticswitchonnext}{% \@ifstar\@sstaticswitchonnext\@staticswitchonnext } \newcommand{\@sstaticswitchonnext}[1]{% \@for\@ff@id:=#1\do{% \@staticframeid{\@ff@id}% \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\ff@id}% {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% }% \fi }% } \newcommand{\@staticswitchonnext}[1]{% \@for\@ff@id:=#1\do{% \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\@ff@id}% {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% }% \fi }% } \newcommand*{\staticswitchonnextodd}{% \@ifstar\@sstaticswitchonnextodd\@staticswitchonnextodd } \newcommand{\@sstaticswitchonnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\count@\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@staticframeid{\@ff@id}% \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% \def\@ff@prepages{}% \if@notthiscol \else \def\@ff@prepages{\number\@ff@pages@countreg,}% \fi \@sf@chckifthispg[\count@]{\ff@id}% \ifnum\count@=\@ff@pages@countreg\relax \else \if@notthiscol \else \edef\@ff@prepages{\@ff@prepages\number\count@,}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\ff@id}% {\@ff@prepages>\number\count@}% }% }% } \newcommand{\@staticswitchonnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\count@\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \def\@ff@prepages{}% \if@notthiscol \else \def\@ff@prepages{\number\@ff@pages@countreg,}% \fi \@sf@chckifthispg[\count@]{\@ff@id}% \ifnum\count@=\@ff@pages@countreg\relax \else \if@notthiscol \else \edef\@ff@prepages{\@ff@prepages\number\count@,}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\@ff@id}% {\@ff@prepages>\number\count@}% }% }% } \newcommand*{\staticswitchoffnext}{% \@ifstar\@sstaticswitchoffnext\@staticswitchoffnext } \newcommand{\@sstaticswitchoffnext}[1]{% \@for\@ff@id:=#1\do{% \@staticframeid{\@ff@id}% \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% \if@notthiscol \def\@ff@pages{none}% \else \def\@ff@pages{\number\@ff@pages@countreg}% \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\ff@id}{\@ff@pages}% }% }% } \newcommand{\@staticswitchoffnext}[1]{% \@for\@ff@id:=#1\do{% \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \if@notthiscol \def\@ff@pages{none}% \else \def\@ff@pages{\number\@ff@pages@countreg}% \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@pages}% }% }% } \newcommand*{\staticswitchoffnextodd}{% \@ifstar\@sstaticswitchoffnextodd\@staticswitchoffnextodd } \newcommand{\@sstaticswitchoffnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\@ff@pages@countreg\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@staticframeid{\@ff@id}% \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% \if@notthiscol \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{none}% \else \@sf@chckifthispg[\count@]{\ff@id}% \if@notthiscol \def\@ff@nextpages{none}% \else \def\@ff@nextpages{\number\count@}% \fi \fi \else \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \@sf@chckifthispg[\count@]{\ff@id}% \if@notthiscol \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\ff@id}{\@ff@nextpages}% }% }% } \newcommand{\@staticswitchoffnextodd}[1]{% \count@=\@ff@pages@countreg\relax \ifodd\@ff@pages@countreg\relax \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \if@notthiscol \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{none}% \else \@sf@chckifthispg[\count@]{\@ff@id}% \if@notthiscol \def\@ff@nextpages{none}% \else \def\@ff@nextpages{\number\count@}% \fi \fi \else \ifnum\@ff@pages@countreg=\count@\relax \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \@sf@chckifthispg[\count@]{\@ff@id}% \if@notthiscol \def\@ff@nextpages{\number\@ff@pages@countreg}% \else \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@nextpages}% }% }% } \newcommand*{\staticswitchonnextonly}{% \@ifstar\@sstaticswitchonnextonly\@staticswitchonnextonly } \newcommand{\@sstaticswitchonnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \@staticframeid{\@ff@id}% \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\ff@id}{\number\count@}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\ff@id}% {\number\@ff@pages@countreg,\number\count@}% }% \fi }% } \newcommand{\@staticswitchonnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \if@notthiscol \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\@ff@id}{\number\count@}% }% \else \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\@ff@id}% {\number\@ff@pages@countreg,\number\count@}% }% \fi }% } \newcommand*{\staticswitchonnextoddonly}{% \@ifstar\@sstaticswitchonnextoddonly\@staticswitchonnextoddonly } \newcommand{\@sstaticswitchonnextoddonly}[1]{% \@for\@ff@id:=#1\do{% \@staticframeid{\@ff@id}% \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% \if@notthiscol \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@sf@chckifthispg[\count@]{\ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \else \edef\@ff@pages{\number\count@}% \advance\count@ by 1\relax \edef\@ff@pages{\@ff@pages,\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \fi \else \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@sf@chckifthispg[\count@]{\ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \else \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\ff@id}{\@ff@pages}% }% }% } \newcommand{\@staticswitchonnextoddonly}[1]{% \@for\@ff@id:=#1\do{% \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% \if@notthiscol \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@sf@chckifthispg[\count@]{\@ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \else \edef\@ff@pages{\number\count@}% \advance\count@ by 1\relax \edef\@ff@pages{\@ff@pages,\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\count@}% \fi \else \ifodd\@ff@pages@countreg \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@sf@chckifthispg[\count@]{\@ff@id}% \if@notthiscol \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \else \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% \fi \else \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% \fi \fi \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@pages}% }% }% } \newcommand*{\staticswitchoffnextonly}{% \@ifstar\@sstaticswitchoffnextonly\@staticswitchoffnextonly } \newcommand{\@sstaticswitchoffnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \@staticframeid{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticaddexclusion{\number\ff@id}{\number\count@}% }% }% } \newcommand{\@staticswitchoffnextonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \@for\@ff@id:=#1\do{% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticaddexclusion{\number\@ff@id}{\number\count@}% }% }% } \newcommand*{\staticswitchoffnextoddonly}{% \@ifstar\@sstaticswitchoffnextoddonly\@staticswitchoffnextoddonly } \newcommand{\@sstaticswitchoffnextoddonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \ifodd\count@\relax \else \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \@staticframeid{\@ff@id}% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticaddexclusion{\number\ff@id}{\number\count@}% }% }% } \newcommand{\@staticswitchoffnextoddonly}[1]{% \count@=\@ff@pages@countreg\relax \advance\count@ by 1\relax \ifodd\count@\relax \else \advance\count@ by 1\relax \fi \@for\@ff@id:=#1\do{% \expandafter\toks@\expandafter{\@ff@output@adjustframes}% \xdef\@ff@output@adjustframes{% \the\toks@ \noexpand\staticaddexclusion{\number\@ff@id}{\number\count@}% }% }% } \newcommand*{\ffaddtoadjustframeshook}[1]{% \@ff@addtolist\@ff@output@adjustframes\entry{#1}% } \newif\if@notthiscol \newif\if@ff@nwpg \newcount\c@curpg \newcommand*{\@g@tnextcol}[1]{% \@ff@output@adjustframes \global\let\@ff@output@adjustframes\@empty \@ff@checkifmoreframes \if@ff@moreframes \else \PackageWarning{flowfram}% {Run out of flows frames on page \number\@ff@pages@countreg, adding new one}% \flf@doifverbose {% \def\flf@messinfo{Here's the list of flow frames:}% \count@=0\relax \loop \advance\count@ by 1\relax \expandafter\toks@\expandafter{\flf@messinfo\MessageBreak}% \edef\flf@messinfo{\the\toks@ \number\count@. Pages: \csname @ff@pages@\romannumeral\count@\endcsname. Exclusions: \csname @ff@xpages@\romannumeral\count@\endcsname. }% \ifnum\count@<\c@maxflow \repeat \PackageInfo{flowfram}{\flf@messinfo\@gobbletwo}% }% \@onecolumn #1=\c@maxflow \fi \@notthiscoltrue \@ff@nwpgfalse \@colN=#1\relax \c@curpg=\@ff@pages@countreg \loop \ifnum\@colN=\c@maxflow \@colN=1\relax \@ff@nwpgtrue \advance\c@curpg by 1\relax \else \advance\@colN by 1\relax \fi \@ff@chckifthispg{\c@curpg}{\@colN}% \if@notthiscol \repeat #1=\@colN\relax } \newcommand*{\@ff@chckifthispg}[2]{% \@notthiscolfalse \edef\ff@xpages{\csname @ff@xpages@\romannumeral#2\endcsname}% \@for\@ff@pp:=\ff@xpages\do {% \ifnum0\@ff@pp=#1\relax \@notthiscoltrue \@endfortrue \fi }% \if@notthiscol \else \@notthiscoltrue \edef\ff@pages{\csname @ff@pages@\romannumeral#2\endcsname}% \@@ff@chckifthispg{#1}% \fi } \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}[2][\@ff@pages@countreg]{% \@notthiscoltrue \edef\ff@pages{\csname @sf@pages@\romannumeral#2\endcsname}% \@@ff@chckifthispg{#1}% } \newcommand*{\@df@chckifthispg}[2][\@ff@pages@countreg]{% \@notthiscoltrue \edef\ff@pages{\csname @df@pages@\romannumeral#2\endcsname}% \@@ff@chckifthispg{#1}% } \newcommand*{\@setcolbox}[1]{% \flf@message{Setting contents of box for flow frame \number#1}% \expandafter\global\expandafter\setbox \csname column\romannumeral#1\endcsname\box\@outputbox } \newcommand*{\@docolbox}[1]{% \flf@message{Doing flow frame \number#1\space (page \number\@ff@pages@countreg)}% \edef\ff@frametype{% \csname @ff@frametype@\romannumeral#1\endcsname}% \edef\ff@col{\csname @ff@col@\romannumeral#1\endcsname}% \edef\ff@txtcol{\csname @ff@txtcol@\romannumeral#1\endcsname}% \edef\ff@backcol{\csname @ff@backcol@\romannumeral#1\endcsname}% \@ff@setoffset{#1}% \rotateframe{\csname @ff@angle@\romannumeral#1\endcsname}% {% \ifthenelse{\boolean{columnframe\romannumeral#1}}% {% \@ff@fbox {\csname colwidth\romannumeral#1\endcsname}% {\csname colheight\romannumeral#1\endcsname}% {% \expandafter\box\csname column\romannumeral#1\endcsname }% {% \csname\ff@frametype\endcsname }% }% {% \@ff@box {\csname colwidth\romannumeral#1\endcsname}% {\csname colheight\romannumeral#1\endcsname}% {% \expandafter\box\csname column\romannumeral#1\endcsname }% }% }% } \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{\@ff@pages@countreg}{#1}% \if@notthiscol \expandafter\ifvoid\csname column\romannumeral#1\endcsname \else \PackageWarning{flowfram}{Box \number#1\space is not void. Dumping. This page: \number\@ff@pages@countreg. Page list: "\csname @ff@pages@\romannumeral#1\endcsname". Exclusion list: "\csname @ff@xpages@\romannumeral#1\endcsname". (Maybe the page list was changed after this frame was selected or maybe you should use package option pages=absolute)}% \@notthiscolfalse \fi \fi \if@notthiscol \flf@message{Flow frame \number#1\space is not required on page \number\@ff@pages@countreg}% \else \@killglue \if@twoside \ifodd\c@page \expandafter\raise\csname col@\romannumeral#1@posy\endcsname \hb@xt@\z@ {% \expandafter\kern \csname col@\romannumeral#1@posx\endcsname \@docolbox{#1}\hss }% \else \expandafter\raise\csname col@\romannumeral#1@eveny\endcsname \hb@xt@\z@ {% \expandafter\kern \csname col@\romannumeral#1@evenx\endcsname \@docolbox{#1}\hss }% \fi \else \expandafter\raise\csname col@\romannumeral#1@posy\endcsname \hb@xt@\z@ {% \expandafter\kern \csname col@\romannumeral#1@posx\endcsname \@docolbox{#1}\hss }% \fi \fi } \newcommand*{\@putcolbbox}[1]{% \@ff@chckifthispg{\@ff@pages@countreg}{#1}% \if@notthiscol \else \@killglue \if@twoside \ifodd\c@page \expandafter\raise\csname col@\romannumeral#1@posy\endcsname \hb@xt@\z@ {% \expandafter\kern \csname col@\romannumeral#1@posx\endcsname \@docolbbox{#1}\hss }% \else \expandafter\raise\csname col@\romannumeral#1@eveny\endcsname \hb@xt@\z@ {% \expandafter\kern \csname col@\romannumeral#1@evenx\endcsname \@docolbbox{#1}\hss }% \fi \else \expandafter\raise\csname col@\romannumeral#1@posy\endcsname \hb@xt@\z@ {% \expandafter\kern \csname col@\romannumeral#1@posx\endcsname \@docolbbox{#1}\hss }% \fi \fi } \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\relax \advance\@ff@offset by -\flowframesep\relax } \newcommand*{\@ff@s@t@Ovalboxoffset}{% \@ff@offset=-\fontdimen 8\tenlnw\relax \advance\@ff@offset by -\flowframesep\relax } \newcommand*{\@ff@s@t@defaultoffset}{% \@ff@offset=-\flowframesep\relax \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{\@ff@pages@countreg}{#1}% \if@notthiscol \else \@killglue \if@twoside \ifodd\c@page \edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}% \edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}% \else \edef\ff@x{\csname col@\romannumeral#1@evenx\endcsname}% \edef\ff@y{\csname col@\romannumeral#1@eveny\endcsname}% \fi \else \edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}% \edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}% \fi \setlength{\@ff@tmp@x}{\ff@x}% \setlength{\@ff@tmp@y}{\ff@y}% \@getmarginpos{\csname @ff@margin@\romannumeral#1\endcsname}% \ifthenelse{\equal{\ff@margin}{left}}% {% \addtolength{\@ff@tmp@x}{-\marginparwidth}% \addtolength{\@ff@tmp@x}{-\marginparsep}% \ifthenelse{\boolean{columnframe\romannumeral#1}}% {}% {}% }% {% \addtolength{\@ff@tmp@x}% {\csname colwidth\romannumeral#1\endcsname}% \addtolength{\@ff@tmp@x}{\marginparsep}% \ifthenelse{\boolean{columnframe\romannumeral#1}}% {}% {}% }% \raise\@ff@tmp@y \hb@xt@\z@ {% \expandafter\kern\@ff@tmp@x \@fr@meifdraft{\@ff@box{\marginparwidth}% {\csname colheight\romannumeral#1\endcsname}{}}% {M:\number#1}\hss }% \fi \ignorespaces } \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\relax \def\ff@valign{#3}% } \newcommand*{\@dostaticbox}[1]{% \edef\ff@frametype{% \csname @sf@frametype@\romannumeral#1\endcsname }% \edef\ff@col{\csname @sf@col@\romannumeral#1\endcsname}% \edef\ff@backcol{\csname @sf@backcol@\romannumeral#1\endcsname}% \@sf@setoffset{#1}% \expandafter\expandafter\expandafter \@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname \rotateframe {\csname @sf@angle@\romannumeral#1\endcsname}% {% \ifthenelse{\boolean{staticframe\romannumeral#1}}% {% \@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}% {% \expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname } {\csname\ff@frametype\endcsname}% }% {% \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% {% \expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname }% }% }% } \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]{% \ifthenelse{\boolean{@sf@hidethis@\romannumeral#1}}% {% \@notthiscoltrue \global\csletcs{if@sf@hidethis@\romannumeral#1}{iffalse}% }% {% \ifthenelse{\boolean{@sf@hide@\romannumeral#1}}% {% \@notthiscoltrue }% {% \@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*{\@dodfparbox}[1]{% \expandafter\let\expandafter \@ff@parshape\csname @df@shape@\romannumeral#1\endcsname \expandafter\@ff@getshape\@ff@parshape\relax \ifcase\ff@shape \expandafter\expandafter\expandafter \parbox\csname @df@dim@\romannumeral#1\endcsname {% \setlength\parindent\sdfparindent \csname\ff@style\endcsname{\ff@contents}% }% \or \expandafter\expandafter\expandafter \parbox\csname @df@dim@\romannumeral#1\endcsname {% \setlength\parindent\sdfparindent \csname\ff@style\endcsname {{% \let\oldpar=\par \let\par=\ffpshpar \@ff@setsecthead \@ff@parshape \ff@contents\oldpar }}% }% \or \expandafter\expandafter\expandafter \parbox\csname @df@dim@\romannumeral#1\endcsname {% \setlength\parindent\sdfparindent \csname\ff@style\endcsname {{% \@ff@disablesec\@ff@parshape \ff@contents\par }}% }% \fi } \newcommand*{\@dodynamicbox}[1]{% \edef\ff@frametype{% \csname @df@frametype@\romannumeral#1\endcsname }% \edef\ff@col{\csname @df@col@\romannumeral#1\endcsname}% \edef\ff@txtcol{\csname @df@txtcol@\romannumeral#1\endcsname}% \edef\ff@backcol{\csname @df@backcol@\romannumeral#1\endcsname}% \edef\ff@style{\csname @df@style@\romannumeral#1\endcsname}% \def\ff@contents{\csname @dynamicframe@\romannumeral#1\endcsname}% \@df@setoffset{#1}% \expandafter\expandafter\expandafter \@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname \rotateframe{\csname @df@angle@\romannumeral#1\endcsname}% {% \ifthenelse{\boolean{dynamicframe\romannumeral#1}}% {% \@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}% {\@dodfparbox{#1}}% {\csname\ff@frametype\endcsname}% }% {% \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% {% \@dodfparbox{#1}% }% }% }% } \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]{% \ifthenelse{\boolean{@df@hidethis@\romannumeral#1}}% {% \@notthiscoltrue \global\csletcs{if@df@hidethis@\romannumeral#1}{iffalse}% }% {% \ifthenelse{\boolean{@df@hide@\romannumeral#1}}% {% \@notthiscoltrue }% {% \@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\relax \whiledo{\@colN<\c@maxflow}% {% \advance\@colN by 1\relax \@putcolbox{\@colN}% }% } \newcommand*{\@ff@doallflowframesbbox}{% \@colN=0\relax \whiledo{\@colN<\c@maxflow}% {% \advance\@colN by 1\relax \@putcolbbox{\@colN}% }% } \newcommand*{\@ff@doallstatics}{% \@colN=0\relax \whiledo{\@colN<\c@maxstatic}% {% \advance\@colN by 1\relax \@putstaticbox{\@colN}% }% } \newcommand*{\@ff@doallstaticsbbox}{% \@colN=0\relax \whiledo{\@colN<\c@maxstatic}% {% \advance\@colN by 1\relax \@putstaticbbox{\@colN}% }% } \newcommand*{\@ff@doalldynamics}{% \@colN=0\relax \whiledo{\@colN<\c@maxdynamic}% {% \advance\@colN by 1\relax \@putdynamicbox{\@colN}% }% } \newcommand*{\@ff@doalldynamicsbbox}{% \@colN=0\relax \whiledo{\@colN<\c@maxdynamic}% {% \advance\@colN by 1\relax \@putdynamicbbox{\@colN}% }% } \newcommand*{\@ff@dotypeblock}{% \makebox[0pt][l]% {% \@fr@meifdraft[\setffdrafttypeblockcolor]% {% \vbox to \textheight{\hbox to \textwidth{}}% }% {}% }% } \newlength\ffevenoffset \newcommand*{\@ff@do@allframes}{% \ffevenoffset=0pt\relax \if@twoside \ifodd\c@page \else \ffevenoffset=-\oddsidemargin\relax \advance\ffevenoffset by \evensidemargin\relax \kern\ffevenoffset\relax \fi \fi \setlength{\@ff@tmp@x}{\textwidth}% \advance\@ff@tmp@x by -\ffevenoffset\relax \makebox[\@ff@tmp@x][l]% {% \@s@tfr@mes {% \@ff@doallstatics \@@doheader \@@dofooter \@ff@doallflowframes \@ff@doalldynamics \ifshowtypeblock \@ff@dotypeblock \fi \ifshowframebbox \@ff@doallstaticsbbox \@ff@doallflowframesbbox \@ff@doalldynamicsbbox \fi \ifshowmargins \@ff@drawmargins \fi }% }% } \newcount\@nxtcol \def\@outputdblcol{% \@nxtcol=\c@thisframe \c@curpg=\@ff@pages@countreg \@g@tnextcol{\@nxtcol}% \if@ff@nwpg \global\@firstcolumntrue \@setcolbox\c@thisframe \if@specialpage \global\@specialpagefalse \@nameuse{ps@\@specialstyle}\relax \fi \if@twoside \ifodd\count\z@ \let\@thehead\@oddhead \let\@thefoot\@oddfoot \else \let\@thehead\@evenhead \let\@thefoot\@evenfoot \fi \else \let\@thehead\@oddhead \let\@thefoot\@oddfoot \fi \@begindvi \@dodynamicthehead\@dodynamicthefoot \vbadness=\@M \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% \@combinedblfloats \@outputpage \advance\c@curpg by -\@ff@pages@countreg\relax \whiledo{\c@curpg>0}% {% \advance\c@curpg by -1\relax \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% \@outputpage } \begingroup \@dblfloatplacement \@startdblcolumn \@whilesw \if@fcolmade \fi {\@outputpage \@startdblcolumn }% \endgroup \@resetst@tics \@resetdyn@mics \else \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} \@onlypreamble{\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}% \iflefttorightcolumns \@n@wflowframe[#1]{\columnwidth}{\columnheight}{#4}{#5}% \setflowframe{\c@maxflow}{margin=left}% \else \@n@wflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#5}% \setflowframe{\c@maxflow}{margin=right}% \fi \iflefttorightcolumns \@n@wflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#5}% \setflowframe{\c@maxflow}{margin=right}% \else \@n@wflowframe[#1]{\columnwidth}{\columnheight}{#4}{#5}% \setflowframe{\c@maxflow}{margin=left}% \fi } \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\relax \PackageError{flowfram}% {% You have requested 0 flowframes!% }% {% It does not make much sense to ask to create 0 flow frames% }% \or \onecolumninarea[#1]{#3}{#4}{#5}{#6}% \or \twocolumninarea[#1]{#3}{#4}{#5}{#6}% \else \PackageError{flowfram}% {% Can't create a negative number of flow frames!% }% {% You have asked for \number#2 \space flow frames which really doesn't make sense% }% \fi \fi } \@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}% \iflefttorightcolumns \else \addtolength{\@ff@tmp@x}{#3}% \addtolength{\@ff@tmp@x}{-\columnwidth}% \fi \setlength{\columnheight}{#4}% \ifffvadjust\adjustheight{\columnheight}\fi% \@colN=0\relax \loop \advance\@colN by 1\relax \newflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#6}% \iflefttorightcolumns \addtolength{\@ff@tmp@x}{\columnwidth}% \addtolength{\@ff@tmp@x}{\columnsep}% \else \addtolength{\@ff@tmp@x}{-\columnwidth}% \addtolength{\@ff@tmp@x}{-\columnsep}% \fi \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}}% {% \@n@wdynamicframe[#1]{#3}{#4}{#5}{#6}% }% {% \ifthenelse{\equal{#2}{static}}% {% \@n@wstaticframe[#1]{#3}{#4}{#5}{#6}% }% {% \PackageError{flowfram}% {Unknown frame type '#2'}% {% Available frame types are: 'flow', 'static' and 'dynamic'% }% }% }% }% } \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}% \iflefttorightcolumns \@n@wflowframe[#1]{\columnwidth}{\columnheight}{#6}{#7}% \setflowframe{\c@maxflow}{margin=left}% \else \@n@wflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#7}% \setflowframe{\c@maxflow}{margin=right}% \fi \iflefttorightcolumns \@n@wflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#7}% \setflowframe{\c@maxflow}{margin=right}% \else \@n@wflowframe[#1]{\columnwidth}{\columnheight}{#6}{#7}% \setflowframe{\c@maxflow}{margin=left}% \fi } \@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\relax \PackageError{flowfram}% {% You have requested 0 flowframes!% }% {% It does not make much sense to ask to create 0 flow frames% }% \or \onecolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% \or \twocolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% \else \PackageError{flowfram}% {% Can't create a negative number of flow frames!% }% {% You have asked for \number#3 \space flow frames which really doesn't make sense% }% \fi \fi } \@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}% \iflefttorightcolumns \else \addtolength{\@ff@tmp@x}{#5}% \addtolength{\@ff@tmp@x}{-\columnwidth}% \fi \@colN=0\relax \loop \advance\@colN by 1\relax \newflowframe[#1]{\columnwidth}{\columnheight}{\@ff@tmp@x}{#8}% \iflefttorightcolumns \addtolength{\@ff@tmp@x}{\columnwidth}% \addtolength{\@ff@tmp@x}{\columnsep}% \else \addtolength{\@ff@tmp@x}{-\columnwidth}% \addtolength{\@ff@tmp@x}{-\columnsep}% \fi \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]{% \onecolumnbottominarea[#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}% \iflefttorightcolumns \newflowframe[#1]{\columnwidth}{\columnheight}{#6}{\@ff@tmp@y}% \setflowframe{\c@maxflow}{margin=left}% \else \newflowframe[#1]{\columnwidth}{\columnheight}% {\@ff@tmp@x}{\@ff@tmp@y}% \setflowframe{\c@maxflow}{margin=right}% \fi \iflefttorightcolumns \newflowframe[#1]{\columnwidth}{\columnheight}% {\@ff@tmp@x}{\@ff@tmp@y}% \setflowframe{\c@maxflow}{margin=right}% \else \newflowframe[#1]{\columnwidth}{\columnheight}{#6}{\@ff@tmp@y}% \setflowframe{\c@maxflow}{margin=left}% \fi } \@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\relax \PackageError{flowfram}{% You have requested 0 flowframes!}{% It does not make much sense to ask to create 0 flow frames} \or \onecolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% \or \twocolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% \else \PackageError{flowfram}% {% Can't create a negative number of flow frames!% }% {% You have asked for \number#3 \space flow frames which really doesn't make sense% }% \fi \fi } \@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}% \iflefttorightcolumns \else \addtolength{\@ff@tmp@x}{#5}% \addtolength{\@ff@tmp@x}{-\columnwidth}% \fi \@colN=0\relax \loop \advance\@colN by 1\relax \newflowframe[#1]{\columnwidth}{\columnheight}% {\@ff@tmp@x}{\@ff@tmp@y}% \iflefttorightcolumns \addtolength{\@ff@tmp@x}{\columnwidth}% \addtolength{\@ff@tmp@x}{\columnsep}% \else \addtolength{\@ff@tmp@x}{-\columnwidth}% \addtolength{\@ff@tmp@x}{-\columnsep}% \fi \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\relax #1=\baselineskip\relax \multiply#1 by \@ff@adjh\relax } \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\flf@next\@@nextvNband \else \let\flf@next\relax \fi \advance\@thisstrip by -1\relax \flf@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 } \@onlypreamble{\htwotoneleft} \newcommand*{\@htwotoneleft}[2][0pt]{\@@htwotoneleft{#1}{#2}} \newcommand*{\htwotoneright}[1][all]{% \def\ff@pages{#1}% \@htwotoneright } \@onlypreamble{\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}% } \newcommand*{\hNtone}[1][all]{% \def\ff@pages{#1}% \@hNtone } \@onlypreamble{\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 } \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\flf@next\@@nexthNband \else \let\flf@next\relax \fi \advance\@thisstrip by -1\relax \flf@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}% } \newlength\ffcolumnseprule \setlength{\ffcolumnseprule}{2pt} \newcommand*{\ffruledeclarations}{} \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\relax \@ff@swaplen{\@ff@left@x}{\ffareax}% \@ff@swaplen{\@ff@left@y}{\ffareax}% \@ff@swaplen{\@ff@left@evenx}{\ffareaevenx}% \@ff@swaplen{\@ff@left@eveny}{\ffareaevenx}% \@ff@swaplen{\@ff@left@width}{\ffareawidth}% \@ff@swaplen{\@ff@left@height}{\ffareaheight}% \fi \setlength{\@ff@tmp@x}{\@ff@left@x} \addtolength{\@ff@tmp@x}{\@ff@left@width}% \setlength{\@ff@staticW}{\ffareax}% \addtolength{\@ff@staticW}{-\@ff@tmp@x}% \setlength{\@ff@staticH}{\@ff@left@y}% \addtolength{\@ff@staticH}{\@ff@left@height}% \setlength{\@ff@tmp@y}{\ffareay}% \addtolength{\@ff@tmp@y}{\ffareaheight}% \ifnum\@ff@tmp@y>\@ff@staticH \setlength{\@ff@staticH}{\@ff@tmp@y}% \fi \ifnum\@ff@left@y<\ffareay\relax \setlength{\@ff@tmp@y}{\@ff@left@y}% \else \setlength{\@ff@tmp@y}{\ffareay}% \fi \addtolength{\@ff@staticH}{-\@ff@tmp@y}% \newstaticframe{\@ff@staticW}{\@ff@staticH}% {\@ff@tmp@x}{\@ff@tmp@y}% \addtolength{\@ff@staticH}{#1}% \addtolength{\@ff@staticH}{#2}% \setstaticcontents{\c@maxstatic}{% \ffruledeclarations \ffvrule{#2}{\ffcolumnseprule}{\@ff@staticH}}% \ifcase#3\relax \or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}% \or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}% \or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}% \fi \setstaticframe{\c@maxstatic}{pages=\@ff@pages}% \addtolength{\@ff@tmp@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*{\ffvrule}[3]{% \hfill \rule[-#1]{#2}{#3}\hfill\mbox{}% } \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\relax \@ff@swaplen{\@ff@left@x}{\ffareax}% \@ff@swaplen{\@ff@left@y}{\ffareay}% \@ff@swaplen{\@ff@left@width}{\ffareawidth}% \@ff@swaplen{\@ff@left@height}{\ffareaheight}% \fi \setlength{\@ff@tmp@y}{\@ff@left@y}% \addtolength{\@ff@tmp@y}{\@ff@left@height}% \setlength{\@ff@staticH}{\ffareay}% \addtolength{\@ff@staticH}{-\@ff@tmp@y}% \setlength{\@ff@staticW}{\@ff@left@x}% \addtolength{\@ff@staticW}{\@ff@left@width}% \setlength{\@ff@tmp@x}{\ffareax}% \addtolength{\@ff@tmp@x}{\ffareawidth}% \ifnum\@ff@tmp@x>\@ff@staticW\relax \setlength{\@ff@staticW}{\@ff@tmp@x}% \fi \ifnum\@ff@left@x<\ffareax\relax \setlength{\@ff@tmp@x}{\@ff@left@x}% \else \setlength{\@ff@tmp@x}{\ffareax}% \fi \addtolength{\@ff@staticW}{-\@ff@tmp@x}% \newstaticframe{\@ff@staticW}{\@ff@staticH}% {\@ff@tmp@x}{\@ff@tmp@y}% \addtolength{\@ff@staticW}{#1}% \addtolength{\@ff@staticW}{#2}% \setstaticcontents{\c@maxstatic}% {% \ffruledeclarations \ffhrule{#1}{\@ff@staticW}{\ffcolumnseprule}% }% \ifcase#3\relax \or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}% \or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}% \or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}% \fi \setstaticframe{\c@maxstatic}{pages=\@ff@pages}% \addtolength{\@ff@tmp@x}{\@ff@left@evenx}% \addtolength{\@ff@tmp@x}{-\@ff@left@x}% \addtolength{\@ff@tmp@y}{\@ff@left@eveny}% \addtolength{\@ff@tmp@y}{-\@ff@left@y}% \setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}% } \newcommand*{\ffhrule}[3]{% \hspace*{-#1}\rule{#2}{#3}% } \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*{\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\relax \advance\@ff@tmpN by -1\relax \ifnum\@ff@tmpN>\ff@pages \expandafter \xdef\csname thumbtab@pages@\romannumeral\@colN\endcsname{% \ff@pages-\number\@ff@tmpN}% \fi \fi }% \@@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 } \def\@flf@subsp#1 #2{% \expandafter\flf@ta\expandafter{\@flf@subsptext}% \flf@tb{#1}% \edef\@flf@subsptext{\the\flf@ta\the\flf@tb}% \def\@flf@tmp{#2}% \ifx\@flf@tmp\@nnil \let\@flf@donextsubsp=\@gobble \else \expandafter\flf@ta\expandafter{\@flf@subsptext}% \edef\@flf@subsptext{\the\flf@ta\noexpand\space}% \let\@flf@donextsubsp=\@flf@subsp \fi \@flf@donextsubsp{#2}% } \newcommand{\@ttb@stack}[1]{% \def\@flf@subsptext{}% \expandafter\@flf@subsp#1 \@nil\relax \begin{tabular}{l}% \expandafter\@@ttb@stack\@flf@subsptext\@nil\relax \end{tabular}% } \def\@@ttb@stack#1#2{% \def\@flf@tmp{#1}% \ifx\@flf@tmp\@nnil \let\flf@next\relax \else #1\\% \def\@flf@tmp{#2}% \ifx\@nnil#2\relax \let\flf@next\@gobble \else \let\flf@next\@@ttb@stack \fi \fi \flf@next{#2}% } \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\relax \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\relax \@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\relax \@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 `\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 }% {% \PackageInfo{flowfram}{No file #1.}% }% } \newcount\c@maxtocunits \newcount\c@maxminitoc \newcommand{\@@storefileconts}[1]{% \@ifundefined{\@ttb@minitoctype}% {% \@ttb@minitoclevel=6\relax }% {% \expandafter\@ttb@minitoclevel\expandafter =\csname @ttb@\@ttb@minitoctype @level\endcsname }% \newread\@ttb@toc \openin\@ttb@toc=#1\relax \c@maxtocunits=0\relax \c@maxminitoc=0\relax \whiledo{\not\boolean{eof}\@ttb@toc}% {% \read\@ttb@toc to\tocline \@addtotoclist{\tocline}{\c@maxtocunits}% }% \closein\@ttb@toc } \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}% {% \flf@ta=\expandafter{#1}% \expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@ta}% }% {% \flf@ta=\expandafter{#1}% \flf@tb=\expandafter\expandafter\expandafter {\csname @toc@\romannumeral#2\endcsname}% \expandafter\xdef\csname @toc@\romannumeral#2\endcsname{% \the\flf@tb\the\flf@ta}% }% \if@minitoc \if@contsline \@ifundefined{\@ttb@contstype}% {\@ttb@level=6}% {% \@ttb@level=\csname @ttb@\@ttb@contstype @level\endcsname }% \relax \ifnum\@ttb@level=\@ttb@minitoclevel \global\advance\c@maxminitoc by 1\relax \expandafter \gdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{}% \else \ifnum\@ttb@level>\@ttb@minitoclevel \flf@ta=\expandafter{#1}\relax \flf@tb=\expandafter\expandafter\expandafter {\csname @minitoc@\romannumeral\c@maxminitoc\endcsname}\relax \expandafter \xdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{% \the\flf@tb\the\flf@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'.