diff options
author | Karl Berry <karl@freefriends.org> | 2012-11-13 00:16:56 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2012-11-13 00:16:56 +0000 |
commit | b847625057328d18cbaff06505599203c8382a17 (patch) | |
tree | b040c624881b1af975180256f90173d440d284d7 /Master/texmf-dist/source/latex | |
parent | f5c4d1df6475f098e051b5c8a71ce506a2c0d802 (diff) |
flowfram 1.14 (12nov12)
git-svn-id: svn://tug.org/texlive/trunk@28238 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex')
-rw-r--r-- | Master/texmf-dist/source/latex/flowfram/flowfram.dtx | 16361 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/flowfram/flowfram.ins | 20 | ||||
-rw-r--r-- | Master/texmf-dist/source/latex/flowfram/flowfram.perl | 1632 |
3 files changed, 12958 insertions, 5055 deletions
diff --git a/Master/texmf-dist/source/latex/flowfram/flowfram.dtx b/Master/texmf-dist/source/latex/flowfram/flowfram.dtx index 8a2584d9301..61890ddf0e7 100644 --- a/Master/texmf-dist/source/latex/flowfram/flowfram.dtx +++ b/Master/texmf-dist/source/latex/flowfram/flowfram.dtx @@ -1,12 +1,19 @@ %\iffalse % flowfram.dtx generated using makedtx version 0.94b (c) Nicola Talbot % Command line args: +% -macrocode "flowfram\.perl" +% -macrocode ".*\.tex" +% -setambles "flowfram\.perl=>\nopreamble\nopostamble" +% -setambles ".*\.tex=>\nopreamble\nopostamble" +% -comment "flowfram\.perl" +% -comment ".*\.tex" % -src "flowfram.sty\Z=>flowfram.sty" +% -src "(sample.*\.tex)\Z=>\1" +% -src "(flowfram\.perl)\Z=>\1" % -doc "docstub.tex" % -author "Nicola Talbot" -% -dir "source" % flowfram -% Created on 2010/1/23 11:35 +% Created on 2012/11/10 22:19 %\fi %\iffalse %<*package> @@ -29,13 +36,15 @@ %\fi % \iffalse % Doc-Source file to use with LaTeX2e -% Copyright (C) 2010 Nicola Talbot, all rights reserved. +% Copyright (C) 2012 Nicola Talbot, all rights reserved. % \fi % \iffalse %<*driver> -\documentclass{ltxdoc} +\documentclass[widecs]{nlctdoc} +\addtolength{\marginparwidth}{10pt} +\addtolength{\oddsidemargin}{20pt} -\CheckSum{9520} +\CheckSum{12608} \PageIndex \usepackage{url} @@ -47,12 +56,13 @@ pdftitle={Documented Source Code for flowfram.sty}]{hyperref} \newglossary[slg]{secondary}{sgi}{sgo}{Glossary} \renewcommand{\acronymtype}{secondary} +\doxitem{Option}{option}{package options} +\doxitem{Counter}{counter}{flowfram counters} + \MakeShortVerb" \DeleteShortVerb| -\newcommand{\sty}[1]{\textsf{#1}} -\newcommand{\env}[1]{\textsf{#1}} - +\iffalse \renewcommand{\usage}[1]{\textit{\hyperpage{#1}}} \renewcommand{\main}[1]{\hyperpage{#1}} \newcommand{\see}[2]{\emph{see} #1} @@ -60,6 +70,7 @@ pdftitle={Documented Source Code for flowfram.sty}]{hyperref} \def\index@prologue{\section*{Index} \addcontentsline{toc}{section}{Index}} \makeatother +\fi \newglossaryentry{typeblock}{name=typeblock,description={The @@ -132,9 +143,9 @@ IDN}]{idl}{IDL}{identification label} \end{document} %</driver> %\fi -%\title{Documented Source Code for flowfram.sty v1.13} +%\title{Documented Source Code for flowfram.sty v1.14} %\author{Nicola L. C. Talbot} -%\date{23rd January 2010} +%\date{2012-11-10} %\maketitle % %This is the documented source code for the flowfram package. @@ -144,7 +155,8 @@ IDN}]{idl}{IDL}{identification label} % %\printglossary[type=secondary] % -%\StopEventually{\PrintIndex} +%\StopEventually{\clearpage\phantomsection +%\addcontentsline{toc}{section}{Index}\PrintIndex} % % %\section{The Code} @@ -157,14 +169,24 @@ IDN}]{idl}{IDL}{identification label} % Declare package, and identify it as a \LaTeXe\ package. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{flowfram}[2010/01/23 v1.13] +\ProvidesPackage{flowfram}[2012/11/10 v1.14 (NLCT)] % \end{macrocode} % Load packages needed by this package % \begin{macrocode} \RequirePackage{ifthen} -\RequirePackage{keyval} +% \end{macrocode} +%\changes{1.14}{2012-11-10}{now loading xkeyval instead of keyval} +% \begin{macrocode} +\RequirePackage{xkeyval} \RequirePackage{graphics} \RequirePackage{afterpage} +% \end{macrocode} +%\changes{1.14}{2012-11-10}{now loading xfor and etoolbox} +% \begin{macrocode} +\RequirePackage{xfor} +\RequirePackage{etoolbox} +% \end{macrocode} +% \begin{macrocode} \@ifundefined{@ldc@l@r}{\RequirePackage{color}}{} % \end{macrocode} % The colour of the \gls{bbox} borders when the draft @@ -201,9 +223,9 @@ IDN}]{idl}{IDL}{identification label} % Set all draft settings. % \begin{macrocode} \newcommand*{\@ffdraft}{% -\showtypeblocktrue -\showmarginstrue -\showframebboxtrue + \showtypeblocktrue + \showmarginstrue + \showframebboxtrue } % \end{macrocode} %\end{macro} @@ -211,9 +233,9 @@ IDN}]{idl}{IDL}{identification label} % Unset all draft settings. % \begin{macrocode} \newcommand*{\@ffnodraft}{% -\showtypeblockfalse -\showmarginsfalse -\showframebboxfalse + \showtypeblockfalse + \showmarginsfalse + \showframebboxfalse } % \end{macrocode} %\end{macro} @@ -221,10 +243,13 @@ IDN}]{idl}{IDL}{identification label} % Draw \gls{bbox}. % \begin{macrocode} \newcommand*{\@fr@meifdraft}[3][\setffdraftcolor]{% -\def\ff@backcol{{none}}% -\@ifundefined{color}{\frame{#2}}{#1\frame{#2}}% -\ifthenelse{\equal{#3}{}}{}{% -\makebox[0pt][l]{\hskip\fflabelsep\fflabelfont{[#3]}}}}% + \def\ff@backcol{{none}}% + \@ifundefined{color}{\frame{#2}}{#1\frame{#2}}% + \ifthenelse{\equal{#3}{}}{}% + {% + \makebox[0pt][l]{\hskip\fflabelsep\fflabelfont{[#3]}}% + }% +}% % \end{macrocode} %\end{macro} % Colour setting commands, do nothing by default: @@ -241,82 +266,284 @@ IDN}]{idl}{IDL}{identification label} \newcommand*{\@ffbackground}[1]{#1} % \end{macrocode} %\end{macro} -% Now declare the options. If draft, switch to draft definitions. +% Now declare the options. +%\begin{option}{draft} +% If draft, switch to draft definitions. % \begin{macrocode} -\DeclareOption{draft}{\@ffdraft} +\DeclareOptionX{draft}{\@ffdraft} % \end{macrocode} +%\end{option} +%\begin{option}{final} % If not draft, reset commands so that no \glspl{bbox} % are drawn. % \begin{macrocode} -\DeclareOption{final}{\@ffnodraft} +\DeclareOptionX{final}{\@ffnodraft} +% \end{macrocode} +%\end{option} +% Set the default to \pkgopt{final}: +% \begin{macrocode} +\@ffnodraft % \end{macrocode} -%\begin{macro}{\if@ttb@rotate} +% +%\begin{option}{verbose} +%\changes{1.14}{2012-11-10}{new} +% Verbose mode is primarily for debug messages. +% \begin{macrocode} +\define@choicekey{flowfram.sty}% + {verbose}[\val\nr]% + {true,false}[true]% + {% + \ifcase\nr\relax + \renewcommand*{\flf@doifverbose}[1]{##1}% + \renewcommand*{\flf@message}[1]{\PackageInfo{flowfram}{##1}}% + \or + \renewcommand*{\flf@doifverbose}[1]{}% + \renewcommand*{\flf@message}[1]{}% + \fi + } +% \end{macrocode} +%\end{option} +%\begin{macro}{\flf@message} +% Messaging system (to help debugging): +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newcommand*{\flf@message}[1]{% + \flf@doifverbose + {% + \PackageInfo{flowfram}{##1}% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\flf@doifverbose} +%\changes{1.14}{2012-11-10}{new} +% Initialise: +% \begin{macrocode} +\newcommand*{\flf@doifverbose}[1]{} +% \end{macrocode} +%\end{macro} +% +%\begin{option}{rotate} % Allow provision to prevent rotation in the thumbtabs. % If no rotation, thumbtab text will be stacked vertically. % This will also affect whether or not to rotate \glspl{frame}. +%\changes{1.14}{2012-11-10}{changed to boolean key} % \begin{macrocode} -\newif\if@ttb@rotate +\define@boolkey{flowfram.sty}[@ttb@]{rotate}[true]{} \@ttb@rotatetrue -\DeclareOption{rotate}{\@ttb@rotatetrue} -\DeclareOption{norotate}{\@ttb@rotatefalse} % \end{macrocode} -%\end{macro} +%\end{option} +%\begin{option}{norotate} +% Provide \pkgopt{norotate} option for backward compatibility +% \begin{macrocode} +\DeclareOptionX{norotate}{\@ttb@rotatefalse} +% \end{macrocode} +%\end{option} %\begin{macro}{\rotateframe} % Define command that will only rotate box if rotate option % set. % \begin{macrocode} -\newcommand{\rotateframe}[2]{\if@ttb@rotate -\rotatebox{#1}{#2}% -\else -#2\relax -\fi} +\newcommand{\rotateframe}[2]{% + \if@ttb@rotate + \rotatebox{#1}{#2}% + \else + #2% + \fi +} % \end{macrocode} %\end{macro} % Should the thumbtabs include number, title, both or % neither? +%\begin{macro}{\if@ttb@num} % \begin{macrocode} \newif\if@ttb@num -\newif\if@ttb@title \@ttb@numfalse +% \end{macrocode} +%\end{macro} +%\begin{macro}{\if@ttb@title} +% \begin{macrocode} +\newif\if@ttb@title \@ttb@titletrue -\DeclareOption{ttbtitle}{\@ttb@titletrue} -\DeclareOption{ttbnotitle}{\@ttb@titlefalse} -\DeclareOption{ttbnum}{\@ttb@numtrue} -\DeclareOption{ttbnonum}{\@ttb@numfalse} % \end{macrocode} -% If color option specified, set up the default colours +%\begin{option}{thumbtabs} +%\changes{1.14}{2012-11-10}{new} +% The \pkgopt{thumbtabs} option replaces the \pkgopt{ttbtitle}, +% \pkgopt{ttbnotitle}, \pkgopt{ttbnum} and \pkgopt{ttbnonum} +% options. +% \begin{macrocode} +\define@choicekey{flowfram.sty}% + {thumbtabs}[\val\nr]% + {title,number,both,none}[title]% + {% + \ifcase\nr\relax +% \end{macrocode} +% Thumbtabs to only include title +% \begin{macrocode} + \@ttb@numfalse + \@ttb@titletrue + \or +% \end{macrocode} +% Thumbtabs to only include number +% \begin{macrocode} + \@ttb@numtrue + \@ttb@titlefalse + \or +% \end{macrocode} +% Thumbtabs to include title and number +% \begin{macrocode} + \@ttb@numtrue + \@ttb@titletrue + \or +% \end{macrocode} +% Thumbtabs don't have title or number +% \begin{macrocode} + \@ttb@numfalse + \@ttb@titlefalse + \fi + } +% \end{macrocode} +%\end{option} +% Provide old options for backward compatibility: +%\begin{option}{ttbtitle} +% \begin{macrocode} +\DeclareOptionX{ttbtitle}{\@ttb@titletrue} +% \end{macrocode} +%\end{option} +%\begin{option}{ttbnotitle} +% \begin{macrocode} +\DeclareOptionX{ttbnotitle}{\@ttb@titlefalse} +% \end{macrocode} +%\end{option} +%\begin{option}{ttbnum} +% \begin{macrocode} +\DeclareOptionX{ttbnum}{\@ttb@numtrue} +% \end{macrocode} +%\end{option} +%\begin{option}{ttbnonum} +% \begin{macrocode} +\DeclareOptionX{ttbnonum}{\@ttb@numfalse} +% \end{macrocode} +%\end{option} +% +%\begin{option}{pages} +%\changes{1.14}{2012-11-10}{new} +% Determine whether the pages key when defining frames refers to the +% page number as given by \ics{c@page} or the absolute +% page number as given by \ics{c@absolutepage}. +% \begin{macrocode} +\define@choicekey{flowfram.sty}{pages}[\val\nr]% + {relative,absolute}% + {% + \ifcase\nr\relax +% \end{macrocode} +% Relative (use \cs{c@page}): +% \begin{macrocode} + \renewcommand*{\@ff@pages@countreg}{\c@page}% + \or +% \end{macrocode} +% Absolute (use \cs{c@absolutepage}): +% \begin{macrocode} + \renewcommand*{\@ff@pages@countreg}{\c@absolutepage}% + \fi + } +% \end{macrocode} +%\end{option} +%\begin{macro}{\@ff@pages@countreg} +%\changes{1.14}{2012-11-10}{new} +% The default is relative (for backwards compatibility). +% \begin{macrocode} +\newcommand*{\@ff@pages@countreg}{\c@page} +% \end{macrocode} +%\end{macro} +%\begin{counter}{absolutepage} +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newcounter{absolutepage} +% \end{macrocode} +%\end{counter} +% +%\begin{option}{color} +%\changes{1.14}{2012-11-10}{changed to boolean option} +% If \pkgopt[true]{color} option specified, set up the default colours % for the borders and text for all \gls{frame} types. Note that % the colour name has to be grouped within the definition -% of "\flowframecol" and "\flowframetextcol". This +% of \ics{flowframecol} and \ics{flowframetextcol}. This % was done so that you could do, for example, % "\renewcommand{\flowframecol}{[rgb]{1,1,0}}" so that % you can specify the colour model as well. -% The commands "\@s@tffcol" and "\@s@tfftextcol" +% The commands \ics{@s@tffcol} and \ics{@s@tfftextcol} % switch to the border and text colour, respectively. They -% both assume that "\ff@col" has been set to the +% both assume that \ics{ff@col} has been set to the % relevant colour before use. % \begin{macrocode} -\DeclareOption{color}{% -\def\flowframecol{{black}}\def\flowframetextcol{{black}} -\renewcommand*\@s@tffcol{\ifthenelse{\equal{\ff@col}{}}{}{% -\expandafter\color\ff@col}} -\renewcommand*\@s@tfftextcol{\ifthenelse{\equal{\ff@txtcol}{}}{}{% -\expandafter\color\ff@txtcol}} -\renewcommand*{\@ffbackground}[1]{% -\ifthenelse{\equal{\ff@backcol}{{none}}}{% -#1}{{\fboxsep=0pt\expandafter\colorbox\ff@backcol{#1}}}} +\define@choicekey{flowfram.sty}{color}[\val\nr]{true,false}[true]{% + \ifcase\nr\relax +% \end{macrocode} +% Option set to true: +% \begin{macrocode} + \@ff@enablecolor + \or +% \end{macrocode} +% Option set to false, ensure that the colour changing +% commands do nothing: +% \begin{macrocode} + \@ff@disablecolor + \fi } % \end{macrocode} -% If nocolor is specified, ensure that the colour changing -% commands do nothing. +%\end{option} +% Provide \pkgopt{nocolor} option for backward compatibility: % \begin{macrocode} -\DeclareOption{nocolor}{% -\def\flowframetextcol{}% -\def\flowframecol{}% -\renewcommand{\@s@tffcol}{}\renewcommand{\@s@tfftextcol}{} -\renewcommand{\@ffbackground}[1]{#1} +\DeclareOptionX{nocolor}{% + \@ff@disablecolor } % \end{macrocode} +%\begin{macro}{\@ff@enablecolor} +%\changes{1.14}{2012-11-10}{new} +% Enable colour commands. +% \begin{macrocode} +\newcommand*{\@ff@enablecolor}{% + \def\flowframecol{{black}}% + \def\flowframetextcol{{black}}% + \renewcommand*\@s@tffcol{% + \ifthenelse{\equal{\ff@col}{}}% + {}% + {% + \expandafter\color\ff@col}% + }% + \renewcommand*\@s@tfftextcol{% + \ifthenelse{\equal{\ff@txtcol}{}}% + {}% + {% + \expandafter\color\ff@txtcol + }% + }% + \renewcommand*{\@ffbackground}[1]{% + \ifthenelse{\equal{\ff@backcol}{{none}}}% + {% + ##1% + }% + {% + {\fboxsep=0pt\expandafter\colorbox\ff@backcol{##1}}% + }% + }% +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\@ff@disablecolor} +%\changes{1.14}{2012-11-10}{new} +% Disable colour commands. +% \begin{macrocode} +\newcommand*{\@ff@disablecolor}{% + \def\flowframetextcol{}% + \def\flowframecol{}% + \renewcommand{\@s@tffcol}{}\renewcommand{\@s@tfftextcol}{}% + \renewcommand{\@ffbackground}[1]{##1}% +} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\iflefttorightcolumns} % Determine whether to define the Ncolumn style frames from left % to right or from right to left. @@ -327,82 +554,131 @@ IDN}]{idl}{IDL}{identification label} % \end{macrocode} %\end{macro} % Define options that set the direction: +%\begin{option}{LR} % \begin{macrocode} -\DeclareOption{LR}{\lefttorightcolumnstrue} -\DeclareOption{RL}{\lefttorightcolumnsfalse} +\DeclareOptionX{LR}{\lefttorightcolumnstrue} % \end{macrocode} -% Check to see if the document class has the draft option -% set. The easiest way to do this is to check the length -% of "\overfullrule" (the marker that indicates overfull -% hboxes). -% \begin{macrocode} -\ifdim\overfullrule=0pt -\ExecuteOptions{final} -\else -\ExecuteOptions{draft} -\fi +%\end{option} +%\begin{option}{RL} +% \begin{macrocode} +\DeclareOptionX{RL}{\lefttorightcolumnsfalse} % \end{macrocode} -% If the "\normalcolor" command is something other than -% "\relax", then implement -% the color option as the default, otherwise implement the -% nocolor option as the default. +%\end{option} +% If the \ics{normalcolor} command is something other than +% \cs{relax}, then implement +% the \pkgopt[true]{color} option as the default, otherwise implement the +% \pkgopt[false]{color} option as the default. % \begin{macrocode} \ifx\normalcolor\relax -\ExecuteOptions{nocolor} + \@ff@disablecolor \else -\ExecuteOptions{color} + \@ff@enablecolor \fi % \end{macrocode} % Now the defaults have all been set, the package options % specified by the user can be processed: % \begin{macrocode} -\ProcessOptions +\ProcessOptionsX % \end{macrocode} -% If color option has been specified, but no color +% If \pkgopt[true]{color} option has been specified, but no color % package has been loaded yet, load color.sty % \begin{macrocode} \ifx\normalcolor\relax -\ifthenelse{\equal{\flowframetextcol}{}}{}{% -\RequirePackage{color}} + \ifthenelse{\equal{\flowframetextcol}{}}% + {}% + {% + \RequirePackage{color}% + } \fi % \end{macrocode} +% +% \begin{macrocode} +\@ifundefined{chapter}{}% +{% +% \end{macrocode} +%\begin{macro}{\chapterfirstpagestyle} % User may want a non standard style for the first page of % each chapter, so modify chapter commands to take this into -% account.\DescribeMacro{\chapterfirstpagestyle} +% account. +% \begin{macrocode} + \newcommand*{\chapterfirstpagestyle}{plain}% +% \end{macrocode} +%\end{macro} +% +% \begin{macrocode} + \let\@ff@OLD@chapter\@chapter + \let\@ff@OLD@schapter\@schapter + \renewcommand{\@chapter}{% + \thispagestyle{\chapterfirstpagestyle}% + \@ff@OLD@chapter + }% + \renewcommand{\@schapter}{% + \thispagestyle{\chapterfirstpagestyle}% + \@ff@OLD@schapter + }% +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\ffprechapterhook} +%\changes{1.14}{2012-11-10}{new} +% Hook at start of chapter (before page break issued) +% \begin{macrocode} + \newcommand*{\ffprechapterhook}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\chapter} +% Modify \cs{chapter} so the hook is called at the start: +% \begin{macrocode} + \let\@ff@OLD@ch@pter\chapter + \renewcommand{\chapter}{% + \ffprechapterhook + \@ff@OLD@ch@pter + } +% \end{macrocode} +%\end{macro} +% +% End of test if \cs{chapter} defined: % \begin{macrocode} -\@ifundefined{chapter}{}{% -\newcommand*{\chapterfirstpagestyle}{plain} -\let\@ff@OLD@chapter\@chapter -\let\@ff@OLD@schapter\@schapter -\renewcommand{\@chapter}{% -\thispagestyle{\chapterfirstpagestyle}\@ff@OLD@chapter} -\renewcommand{\@schapter}{% -\thispagestyle{\chapterfirstpagestyle}\@ff@OLD@schapter} } % \end{macrocode} +% +%\begin{counter}{maxflow} % Now get on with the package. First we need to set up % a register to store the number of \glspl{flow} that have been defined: % \begin{macrocode} \newcounter{maxflow} \c@maxflow=0\relax % \end{macrocode} +%\end{counter} +% +%\begin{counter}{thisframe} % Next define a counter to keep track of the \gls{idn} of the current % \gls{flow}. % \begin{macrocode} \newcounter{thisframe} \c@thisframe=0\relax -\@ifpackageloaded{hyperref}{% -\def\theHthisframe{\thepage.\arabic{thisframe}}}{} +\@ifpackageloaded{hyperref} +{% + \def\theHthisframe{\thepage.\arabic{thisframe}}% +}% +{} % \end{macrocode} +%\end{counter} %\begin{macro}{\labelflowidn} %\changes{1.11}{2008/06/27}{new} % Define a command to label the current \gls{flow} so that its % \gls{idn} can be referenced: % \begin{macrocode} \newcommand*{\labelflowidn}[1]{% -{\def\@currentlabel{\thethisframe}\label{#1}}} + {% + \def\@currentlabel{\thethisframe}% + \label{#1}% + }% +} % \end{macrocode} %\end{macro} +%\begin{counter}{displayedframe} % Define a counter to store the current frame index for the current % page. This will be the same as the \gls{idn} if all \glspl{flow} % are displayed on the current page, but may be different to the @@ -411,28 +687,41 @@ IDN}]{idl}{IDL}{identification label} % \begin{macrocode} \newcounter{displayedframe} \c@displayedframe=0 -\@ifpackageloaded{hyperref}{% -\def\theHdisplayedframe{\thepage.\arabic{displayedframe}}}{} +\@ifpackageloaded{hyperref}% +{% + \def\theHdisplayedframe{\thepage.\arabic{displayedframe}}% +}% +{} % \end{macrocode} +%\end{counter} +% %\begin{macro}{\labelflow} %\changes{1.11}{2008/06/27}{new} % Define a command to label the current \gls{flow} so that its % displayed index can be referenced: % \begin{macrocode} \newcommand*{\labelflow}[1]{% -{\def\@currentlabel{\thedisplayedframe}\label{#1}}} + {% + \def\@currentlabel{\thedisplayedframe}% + \label{#1}% + }% +} % \end{macrocode} %\end{macro} +%\begin{counter}{maxstatic} % Define a counter to store the total number of \glspl{static}: % \begin{macrocode} \newcounter{maxstatic} \c@maxstatic=0\relax % \end{macrocode} +%\end{counter} +%\begin{counter}{maxdynamic} % Define a counter to store the total number of \glspl{dynamic}: % \begin{macrocode} \newcounter{maxdynamic} \c@maxdynamic=0\relax % \end{macrocode} +%\end{counter} % Define some temporary variables % \begin{macrocode} \newcount\@colN @@ -475,8 +764,11 @@ IDN}]{idl}{IDL}{identification label} %\DescribeMacro{\flowframeshowlayout} % \begin{macrocode} \newcommand*{\flowframeshowlayout}{% -\finishthispage -{\@ffdraft\mbox{}\finishthispage\clearpage}} + \finishthispage + {% + \@ffdraft\mbox{}\finishthispage\clearpage + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\framebreak} @@ -487,41 +779,78 @@ IDN}]{idl}{IDL}{identification label} % Provides an optional argument that is passed to % "\pagebreak". Make sure it is grouped to localise % the change in "\parfillskip" and "\parskip". +%\changes{1.14}{2012-11-10}{made change to switch global} % \begin{macrocode} \newif\ifusedframebreak \newcommand{\framebreak}[1][4]{% -\usedframebreaktrue -{\parfillskip=0pt\pagebreak[#1]\parskip=0pt\par\noindent}} + \global\usedframebreaktrue + {% + \parfillskip=0pt\pagebreak[#1]\parskip=0pt\par\noindent + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\finishthispage} -% The commands "\newpage" and -% "\pagebreak" can be used to move on to the next +% The commands \ics{newpage} and +% \ics{pagebreak} can be used to move on to the next % \gls{flow}, but to finish the entire page, use -% "\finishthispage". +% "\finishthispage". This is (loosely) based on the code for +% \ics{clearpage}. (\cs{@dbltopnum} not required as we can't have +% column-spanning floats.) +%\changes{1.14}{2012-11-10}{change \cs{c@page} to +%\cs{@ff@pages@countreg}} % \begin{macrocode} \newcommand{\finishthispage}{% -\@colN=\c@thisframe -\newpage -\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax -\@ff@chckifthispg{\c@page}{\@colN}% -\if@notthiscol\else -\mbox{}\newpage% -\fi -}} + \ifvmode + \@colN=\c@thisframe\relax + \count@=\c@absolutepage\relax + \ifdim \pagetotal<\topskip + \hbox{}% + \fi + \newpage \write \m@ne {}\vbox {}\penalty -\@Mi +% \end{macrocode} +% If that was the last \gls{flow} on the page, then we're done, +% otherwise iterate through the remaining \glspl{flow}. +% \begin{macrocode} + \ifnum\count@=\c@absolutepage\relax + \whiledo{\@colN<\c@maxflow \OR \@colN=\c@maxflow}% + {% + \@ff@chckifthispg{\@ff@pages@countreg}{\@colN}% + \if@notthiscol + \else + \c@thisframe=\@colN\relax + \hbox{}\newpage + \fi + \advance\@colN by 1\relax + }% + \fi + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\cleardoublepage} % Modify the definition of "\cleardoublepage". This may % or may not be defined so use "\def". % \begin{macrocode} -\def\cleardoublepage{\finishthispage -\if@twoside -\ifodd\c@page -\else -\hbox{}\finishthispage -\fi -\fi} +\def\cleardoublepage{% + \clearpage + \if@twoside + \ifodd\c@page + \else + \hbox{}% + \clearpage + \fi + \fi +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\newpage} +% Modify the definition of \cs{newpage} so that it sets the +% "usedframebreak" flag. +%\changes{1.14}{2012-11-10}{Modified definition of \cs{newpage}} +% \begin{macrocode} +\preto\newpage{\global\usedframebreaktrue} % \end{macrocode} %\end{macro} % Disable "@twocolumn" flag, as it makes no sense. @@ -538,9 +867,17 @@ IDN}]{idl}{IDL}{identification label} % need the effect to be global. % \begin{macrocode} \newcommand{\globalreversemargin}{% -\global\@mparbottom\z@\global\@reversemargintrue} + \global\@mparbottom\z@ + \global\@reversemargintrue +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\globalnormalmargin} +% \begin{macrocode} \newcommand{\globalnormalmargin}{% -\global\@mparbottom\z@\global\@reversemarginfalse} + \global\@mparbottom\z@\global + \@reversemarginfalse +} % \end{macrocode} %\end{macro} %\begin{macro}{\@getmarginpos} @@ -553,21 +890,27 @@ IDN}]{idl}{IDL}{identification label} % is finished, the setting is stored in "\ff@margin". % \begin{macrocode} \newcommand{\@getmarginpos}[1]{% -\ifthenelse{\equal{#1}{inner}}{% -\if@twoside -\ifodd\c@page\def\ff@margin{left}\else\def\ff@margin{right}\fi -\else -\def\ff@margin{left}% -\fi -}{% -\ifthenelse{\equal{#1}{outer}}{% -\if@twoside -\ifodd\c@page\def\ff@margin{right}\else\def\ff@margin{left}\fi -\else -\def\ff@margin{right}% -\fi -}{% -\def\ff@margin{#1}}}% + \ifthenelse{\equal{#1}{inner}}% + {% + \if@twoside + \ifodd\c@page\def\ff@margin{left}\else\def\ff@margin{right}\fi + \else + \def\ff@margin{left}% + \fi + }% + {% + \ifthenelse{\equal{#1}{outer}}% + {% + \if@twoside + \ifodd\c@page\def\ff@margin{right}\else\def\ff@margin{left}\fi + \else + \def\ff@margin{right}% + \fi + }% + {% + \def\ff@margin{#1}% + }% + }% } % \end{macrocode} %\end{macro} @@ -575,10 +918,13 @@ IDN}]{idl}{IDL}{identification label} % Set the margin for current \gls{flow}. % \begin{macrocode} \newcommand{\setmargin}{% -\@getmarginpos{% -\csname @ff@margin@\romannumeral\c@thisframe\endcsname}% -\ifthenelse{\equal{\ff@margin}{left}}% -{\globalreversemargin}{\globalnormalmargin}% + \@getmarginpos + {% + \csname @ff@margin@\romannumeral\c@thisframe\endcsname + }% + \ifthenelse{\equal{\ff@margin}{left}}% + {\globalreversemargin}% + {\globalnormalmargin}% } % \end{macrocode} %\end{macro} @@ -610,10 +956,10 @@ IDN}]{idl}{IDL}{identification label} %\begin{macro}{\@n@wflowframe} % \begin{macrocode} \newcommand{\@n@wflowframe}{% -\global\advance\c@maxflow by 1\relax -\expandafter\global\expandafter -\newif\csname ifcolumnframe\romannumeral\c@maxflow\endcsname -\@ifstar\@snewflowframe\@newflowframe + \global\advance\c@maxflow by 1\relax + \expandafter\global\expandafter + \newif\csname ifcolumnframe\romannumeral\c@maxflow\endcsname + \@ifstar\@snewflowframe\@newflowframe } % \end{macrocode} %\end{macro} @@ -621,9 +967,10 @@ IDN}]{idl}{IDL}{identification label} % Starred version sets boolean flag to indicate a border % \begin{macrocode} \newcommand{\@snewflowframe}{% -\expandafter\global\expandafter -\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iftrue -\@@newflowframe} + \expandafter\global\expandafter + \let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iftrue + \@@newflowframe +} % \end{macrocode} %\end{macro} %\begin{macro}{\@newflowframe} @@ -631,9 +978,10 @@ IDN}]{idl}{IDL}{identification label} % no border. % \begin{macrocode} \newcommand{\@newflowframe}{% -\expandafter\global\expandafter -\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iffalse -\@@newflowframe} + \expandafter\global\expandafter + \let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iffalse + \@@newflowframe +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@newflowframe} @@ -642,69 +990,90 @@ IDN}]{idl}{IDL}{identification label} % can override this. % \begin{macrocode} \newcommand{\@@newflowframe}[5][all]{% -\expandafter\global\expandafter -\newbox\csname column\romannumeral\c@maxflow\endcsname -\expandafter\global\expandafter -\newlength\csname colwidth\romannumeral\c@maxflow\endcsname -\expandafter\global\expandafter -\newlength\csname colheight\romannumeral\c@maxflow\endcsname -\expandafter\global\expandafter -\newlength\csname col@\romannumeral\c@maxflow @posx\endcsname -\expandafter\global\expandafter -\newlength\csname col@\romannumeral\c@maxflow @posy\endcsname -\expandafter\global\expandafter -\setlength\csname colwidth\romannumeral\c@maxflow\endcsname{#2} -\expandafter\global\expandafter -\setlength\csname colheight\romannumeral\c@maxflow\endcsname{#3} -\expandafter\global\expandafter -\setlength\csname col@\romannumeral\c@maxflow @posx\endcsname{#4} -\expandafter\global\expandafter -\setlength\csname col@\romannumeral\c@maxflow @posy\endcsname{#5} -\expandafter\global\expandafter -\newlength\csname col@\romannumeral\c@maxflow @evenx\endcsname -\expandafter\global\expandafter -\newlength\csname col@\romannumeral\c@maxflow @eveny\endcsname -\expandafter\global\expandafter -\setlength\csname col@\romannumeral\c@maxflow @evenx\endcsname{#4} -\expandafter\global\expandafter -\setlength\csname col@\romannumeral\c@maxflow @eveny\endcsname{#5} -\expandafter -\gdef\csname @ff@frametype@\romannumeral\c@maxflow\endcsname{fbox}% -\expandafter -\gdef\csname @ff@col@\romannumeral\c@maxflow\endcsname{\flowframecol} -\expandafter -\gdef\csname @ff@txtcol@\romannumeral\c@maxflow\endcsname{% -\flowframetextcol} -\expandafter -\gdef\csname @ff@backcol@\romannumeral\c@maxflow\endcsname{{none}} -\expandafter -\gdef\csname @ff@pages@\romannumeral\c@maxflow\endcsname{#1} -\expandafter -\gdef\csname @ff@offset@\romannumeral\c@maxflow\endcsname{compute} -\expandafter -\gdef\csname @ff@angle@\romannumeral\c@maxflow\endcsname{0}% -\expandafter -\gdef\csname @ff@margin@\romannumeral\c@maxflow\endcsname{right} -\ifnum\c@thisframe=0\relax -\ifthenelse{\equal{#1}{all}\TE@or\equal{#1}{odd}}{% -\c@thisframe=\c@maxflow -\global\setlength{\hsize}{#2}% -\global\usedframebreaktrue -}{\ifthenelse{\equal{#1}{even}\TE@or\equal{#1}{none}}{}{% -\def\ff@pages{#1}% -\@for\@ff@pp:=\ff@pages\do{% -\def\@ff@numstart{0}\def\@ff@numend{0}% -\@ff@getrange{\@ff@pp}% -\ifnum\@ff@numstart=0\def\@ff@numstart{1}\fi -\ifnum\@ff@numstart=1\relax -\c@thisframe=\c@maxflow -\global\setlength{\hsize}{#2}% -\global\usedframebreaktrue -\fi -}}}% -\fi -\@ifnextchar[{\@s@tflowframeid{\c@maxflow}}{% -\@s@tflowframeid{\c@maxflow}[\number\c@maxflow]}} + \expandafter\global\expandafter + \newbox\csname column\romannumeral\c@maxflow\endcsname + \expandafter\global\expandafter + \newlength\csname colwidth\romannumeral\c@maxflow\endcsname + \expandafter\global\expandafter + \newlength\csname colheight\romannumeral\c@maxflow\endcsname + \expandafter\global\expandafter + \newlength\csname col@\romannumeral\c@maxflow @posx\endcsname + \expandafter\global\expandafter + \newlength\csname col@\romannumeral\c@maxflow @posy\endcsname + \expandafter\global\expandafter + \setlength\csname colwidth\romannumeral\c@maxflow\endcsname{#2} + \expandafter\global\expandafter + \setlength\csname colheight\romannumeral\c@maxflow\endcsname{#3} + \expandafter\global\expandafter + \setlength\csname col@\romannumeral\c@maxflow @posx\endcsname{#4} + \expandafter\global\expandafter + \setlength\csname col@\romannumeral\c@maxflow @posy\endcsname{#5} + \expandafter\global\expandafter + \newlength\csname col@\romannumeral\c@maxflow @evenx\endcsname + \expandafter\global\expandafter + \newlength\csname col@\romannumeral\c@maxflow @eveny\endcsname + \expandafter\global\expandafter + \setlength\csname col@\romannumeral\c@maxflow @evenx\endcsname{#4} + \expandafter\global\expandafter + \setlength\csname col@\romannumeral\c@maxflow @eveny\endcsname{#5} + \expandafter + \gdef\csname @ff@frametype@\romannumeral\c@maxflow\endcsname{fbox}% + \expandafter + \gdef\csname @ff@col@\romannumeral\c@maxflow\endcsname{\flowframecol} + \expandafter + \gdef\csname @ff@txtcol@\romannumeral\c@maxflow\endcsname{% + \flowframetextcol + } + \expandafter + \gdef\csname @ff@backcol@\romannumeral\c@maxflow\endcsname{{none}} + \expandafter + \gdef\csname @ff@pages@\romannumeral\c@maxflow\endcsname{#1}% +% \end{macrocode} +% Page exclusion list: +%\changes{1.14}{2012-11-10}{added page exclusion list} +% \begin{macrocode} + \expandafter + \gdef\csname @ff@xpages@\romannumeral\c@maxflow\endcsname{}% + \expandafter + \gdef\csname @ff@offset@\romannumeral\c@maxflow\endcsname{compute} + \expandafter + \gdef\csname @ff@angle@\romannumeral\c@maxflow\endcsname{0}% + \expandafter + \gdef\csname @ff@margin@\romannumeral\c@maxflow\endcsname{right} + \ifnum\c@thisframe=0\relax + \ifthenelse{\equal{#1}{all}\TE@or\equal{#1}{odd}}% + {% + \c@thisframe=\c@maxflow + \global\setlength{\hsize}{#2}% + \global\usedframebreaktrue + }% + {% + \ifthenelse{\equal{#1}{even}\TE@or\equal{#1}{none}}% + {}% + {% + \def\ff@pages{#1}% + \@for\@ff@pp:=\ff@pages\do + {% + \def\@ff@numstart{0}\def\@ff@numend{0}% + \@ff@getrange{\@ff@pp}% + \ifnum\@ff@numstart=0\relax + \def\@ff@numstart{1}% + \fi + \ifnum\@ff@numstart=1\relax + \c@thisframe=\c@maxflow + \global\setlength{\hsize}{#2}% + \global\usedframebreaktrue + \fi + }% + }% + }% + \fi + \@ifnextchar[% + {\@s@tflowframeid{\c@maxflow}}% + {% + \@s@tflowframeid{\c@maxflow}[\number\c@maxflow]% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@s@tflowframeid} @@ -713,10 +1082,10 @@ IDN}]{idl}{IDL}{identification label} % the \gls{flow} number. % \begin{macrocode} \def\@s@tflowframeid#1[#2]{% -\edef\ff@label{#2}% -\@ff@checkuniqueidl{#1}{\ff@label}% -\expandafter -\xdef\csname @col@id@\romannumeral#1\endcsname{\ff@label}% + \edef\ff@label{#2}% + \@ff@checkuniqueidl{#1}{\ff@label}% + \expandafter + \xdef\csname @col@id@\romannumeral#1\endcsname{\ff@label}% } % \end{macrocode} %\end{macro} @@ -724,18 +1093,33 @@ IDN}]{idl}{IDL}{identification label} % Check \gls{idl} "#2" for \gls{flow} "#1" is unique % \begin{macrocode} \newcommand*{\@ff@checkuniqueidl}[2]{% -{\@colN=0\relax -\whiledo{\@colN<\c@maxflow}{% -\advance\@colN by 1\relax -\ifnum\@colN=#1\relax -\else -\ifthenelse{\equal{#2}{% -\csname @col@id@\romannumeral\@colN\endcsname}}{% -\PackageError{flowfram}{Flow frame IDL '#2' already defined}{% -You can't assign this label, as it is already defined -for flow frame \number\@colN}}{}% -\fi -}}} + {% + \@colN=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \ifnum\@colN=#1\relax + \else + \ifthenelse + {% + \equal{#2}% + {% + \csname @col@id@\romannumeral\@colN\endcsname + }% + }% + {% + \PackageError{flowfram}% + {Flow frame IDL '#2' already defined}% + {% + You can't assign this label, as it is already defined + for flow frame \number\@colN + }% + }% + {}% + \fi + }% + }% +} % \end{macrocode} %\end{macro} % @@ -746,7 +1130,8 @@ for flow frame \number\@colN}}{}% % \gls{idn}. % \begin{macrocode} \newcommand*{\getflowlabel}[1]{% -\csname @col@id@\romannumeral#1\endcsname} + \csname @col@id@\romannumeral#1\endcsname +} % \end{macrocode} %\end{macro} % @@ -758,7 +1143,9 @@ for flow frame \number\@colN}}{}% % sequence. % \begin{macrocode} \newcommand*{\getflowid}[2]{% -\@flowframeid{#2}\edef#1{\number\ff@id}} + \@flowframeid{#2}% + \edef#1{\number\ff@id}% +} % \end{macrocode} %\end{macro} % @@ -769,16 +1156,29 @@ for flow frame \number\@colN}}{}% % rather than their \gls{idl}. % The \gls{idn} stored in "\ff@id". % \begin{macrocode} -\newcommand*{\@flowframeid}[1]{\@colN=0\relax -\ff@id=0\relax -\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax -\ifthenelse{% -\equal{#1}{\csname @col@id@\romannumeral\@colN\endcsname}}{% -\ff@id=\@colN\relax -% break out of loop -\@colN=\c@maxflow}{}}% -\ifnum\ff@id=0\relax -\PackageError{flowfram}{Can't find flow frame id '#1'}{}\fi} +\newcommand*{\@flowframeid}[1]{% + \@colN=0\relax + \ff@id=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \ifthenelse + {% + \equal{#1}{\csname @col@id@\romannumeral\@colN\endcsname}% + }% + {% + \ff@id=\@colN\relax +% \end{macrocode} +% Break out of loop +% \begin{macrocode} + \@colN=\c@maxflow + }% + {}% + }% + \ifnum\ff@id=0\relax + \PackageError{flowfram}{Can't find flow frame id '#1'}{}% + \fi +} % \end{macrocode} %\end{macro} % Set up the keys for use with "\setflowframe", @@ -786,63 +1186,117 @@ for flow frame \number\@colN}}{}% % % Frame width is stored in "\ff@width". % \begin{macrocode} -\define@key{flowframe}{width}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'width' key}{}}{}% -\def\ff@width{#1}} +\define@key{flowframe}{width}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'width' key}{}% + }% + {}% + \def\ff@width{#1}% +} % \end{macrocode} % Frame height is stored in "\ff@height". % \begin{macrocode} -\define@key{flowframe}{height}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'height' key}{}}{}% -\def\ff@height{#1}} +\define@key{flowframe}{height}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'height' key}{}% + }% + {}% + \def\ff@height{#1}% +} % \end{macrocode} % Frame $x$ co-ordinate (odd and even pages) is stored % in "\ff@x". % \begin{macrocode} -\define@key{flowframe}{x}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'x' key}{}}{}% -\def\ff@x{#1}} +\define@key{flowframe}{x}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'x' key}{}% + }% + {}% + \def\ff@x{#1}% +} % \end{macrocode} % Frame $y$ co-ordinate (odd and even pages) is stored % in "\ff@y". % \begin{macrocode} -\define@key{flowframe}{y}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'y' key}{}}{}% -\def\ff@y{#1}} +\define@key{flowframe}{y}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'y' key}{}% + }% + {}% + \def\ff@y{#1}% +} % \end{macrocode} % Frame $x$ co-ordinate (even pages only) is stored % in "\ff@evenx". % \begin{macrocode} -\define@key{flowframe}{evenx}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'evenx' key}{}}{}% -\def\ff@evenx{#1}} +\define@key{flowframe}{evenx}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'evenx' key}{}% + }% + {}% + \def\ff@evenx{#1}% +} % \end{macrocode} % Frame $y$ co-ordinate (even pages only) is stored in % "\ff@eveny". % \begin{macrocode} -\define@key{flowframe}{eveny}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'eveny' key}{}}{}% -\def\ff@eveny{#1}} +\define@key{flowframe}{eveny}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'eveny' key}{}% + }% + {}% + \def\ff@eveny{#1}% +} % \end{macrocode} % Frame $x$ co-ordinate (odd pages only if twoside implemented) % is stored in "\ff@oddx". % \begin{macrocode} -\define@key{flowframe}{oddx}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'oddx' key}{}}{}% -\def\ff@oddx{#1}} +\define@key{flowframe}{oddx}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'oddx' key}{}% + }% + {}% + \def\ff@oddx{#1}% +} % \end{macrocode} % Frame $y$ co-ordinate (odd pages only if twoside implemented) % is stored in "\ff@oddy". % \begin{macrocode} -\define@key{flowframe}{oddy}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'oddy' key}{}}{}% -\def\ff@oddy{#1}} +\define@key{flowframe}{oddy}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'oddy' key}{}% + }% + {}% + \def\ff@oddy{#1}% +} % \end{macrocode} % New \gls{idl} for \gls{frame} is stored in "\ff@label". % \begin{macrocode} -\define@key{flowframe}{label}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'label' key}{}}{}% -\def\ff@label{#1}} +\define@key{flowframe}{label}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'label' key}{}% + }% + {}% + \def\ff@label{#1}% +} % \end{macrocode} % Frame border. If "none", define "\ff@frame" as "false", % otherwise define "\ff@frame" as "true". If "plain", define @@ -850,26 +1304,58 @@ for flow frame \number\@colN}}{}% % the specified type, which should be the name of a % \gls{fcmd} without the preceding backslash. % \begin{macrocode} -\define@key{flowframe}{border}[plain]{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'border' key - use -'none' for no border}{}}{}% -\ifthenelse{\equal{#1}{none}}{% -\def\ff@frame{false}}{\def\ff@frame{true}% -\ifthenelse{\equal{#1}{plain}}{\def\ff@frametype{fbox}}{% -\def\ff@frametype{#1}}}} +\define@key{flowframe}{border}[plain]% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}% + {% + Missing value for 'border' key - use + 'none' for no border% + }% + {}% + }% + {}% + \ifthenelse{\equal{#1}{none}}% + {% + \def\ff@frame{false}% + }% + {% + \def\ff@frame{true}% + \ifthenelse{\equal{#1}{plain}}% + {% + \def\ff@frametype{fbox}% + }% + {% + \def\ff@frametype{#1}% + }% + }% +} % \end{macrocode} % Frame's border colour. (This may not work for non-standard % \glspl{fcmd}.) % \begin{macrocode} -\define@key{flowframe}{bordercolor}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'bordercolor' key}{}}{}% -\def\ff@col{#1}} +\define@key{flowframe}{bordercolor}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'bordercolor' key}{}% + }% + {}% + \def\ff@col{#1}% +} % \end{macrocode} % Frame's text colour. % \begin{macrocode} -\define@key{flowframe}{textcolor}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'textcolor' key}{}}{}% -\def\ff@txtcol{#1}} +\define@key{flowframe}{textcolor}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'textcolor' key}{}% + }% + {}% + \def\ff@txtcol{#1}% +} % \end{macrocode} % The background colour of the \gls{frame}. Note this only covers % the region of the \gls{bbox}, not any extra space between @@ -877,25 +1363,55 @@ for flow frame \number\@colN}}{}% % colour to go right up to the border, you will need to % define your own customised border. % \begin{macrocode} -\define@key{flowframe}{backcolor}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'backcolor' key}{}}{}% -\def\ff@backcol{#1}} +\define@key{flowframe}{backcolor}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'backcolor' key}{}% + }% + {}% + \def\ff@backcol{#1}% +} % \end{macrocode} % \Gls{pglist} for which the \gls{frame} should appear. % \begin{macrocode} -\define@key{flowframe}{pages}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'pages' key}{}}{}% -\def\ff@pages{#1}} +\define@key{flowframe}{pages}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'pages' key}{}% + }% + {}% + \def\ff@pages{#1}% +} +% \end{macrocode} +% Exclusion list: +% \begin{macrocode} +\define@key{flowframe}{excludepages}% +{% + \def\ff@xpages{#1}% +} % \end{macrocode} % The border takes up extra space, which needs to be % adjusted. This can be done for standard border types, % but non-standard borders may require some help. % \begin{macrocode} -\define@key{flowframe}{offset}{\def\ff@offset{#1}% -\ifthenelse{\equal{#1}{}}{\PackageError{flowframe}{% -Invalid value for key 'offset'}{% -'offset' can either be 'compute' (to compute it according -to certain pre-defined rules) or a length}}{}} +\define@key{flowframe}{offset}% +{% + \def\ff@offset{#1}% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowframe}% + {% + Invalid value for key 'offset'% + }% + {% + 'offset' can either be 'compute' (to compute it according + to certain pre-defined rules) or a length% + }% + }% + {}% +} % \end{macrocode} % Angle to rotate \gls{flow}: % \begin{macrocode} @@ -904,37 +1420,48 @@ to certain pre-defined rules) or a length}}{}} % \end{macrocode} % This key is only for \glspl{flow}: % \begin{macrocode} -\define@key{flowframe}{margin}{% -\ifthenelse{\equal{#1}{left} \or \equal{#1}{right} -\or \equal{#1}{inner} \or \equal{#1}{outer}}{% -\def\ff@margin{#1}}{\PackageError{flowfram}{invalid value of -'margin' key}{Key 'margin' can only take the values -'left' or 'right'}}} +\define@choicekey{flowframe}{margin}{left,right,inner,outer}% +{% + \def\ff@margin{#1}% +} % \end{macrocode} % This key is only for \glspl{static}: % \begin{macrocode} -\define@key{flowframe}{clear}[true]{% -\ifthenelse{\equal{#1}{true}\or\equal{#1}{false}}{% -\def\ff@clear{#1}}{\PackageError{flowfram}{Key 'clear' is -boolean}{You can only specify the values 'true' or 'false'}}} +\define@choicekey{flowframe}{clear}{true,false}[true]{% + \def\ff@clear{#1}% +} % \end{macrocode} % This key is only for \glspl{dynamic}: % \begin{macrocode} -\define@key{flowframe}{style}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'style' key}{}}{}% -\ifthenelse{\equal{#1}{none}}{\def\ff@style{relax}}{\def\ff@style{#1}}} +\define@key{flowframe}{style}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'style' key}{}% + }% + {}% + \ifthenelse{\equal{#1}{none}}% + {% + \def\ff@style{relax}% + }% + {% + \def\ff@style{#1}% + }% +} % \end{macrocode} % This key is only for \glspl{static} and \glspl{dynamic}. % \begin{macrocode} -\define@key{flowframe}{shape}{\def\ff@shape{#1}% +\define@key{flowframe}{shape}% +{% + \def\ff@shape{#1}% } % \end{macrocode} % This key is only for \glspl{static} and \glspl{dynamic}. % \begin{macrocode} -\define@key{flowframe}{valign}{\ifthenelse{\equal{#1}{c} \or -\equal{#1}{t} \or \equal{#1}{b}}{\def\ff@valign{#1}}{% -\PackageError{flowfram}{Invalid value for 'valign' key}{You -may only specify 'c', 't' or 'b'}}} +\define@choicekey{flowframe}{valign}{c,t,b}% +{% + \def\ff@valign{#1}% +} % \end{macrocode} %\begin{macro}{\setallflowframes} % Provide a command to change the settings for all flow @@ -942,8 +1469,13 @@ may only specify 'c', 't' or 'b'}}} % and sets each one in turn. % \begin{macrocode} \newcommand*{\setallflowframes}[1]{% -\@colN=0\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax -\@@setflowframe{\@colN}{#1}}} + \@colN=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \@@setflowframe{\@colN}{#1}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\setflowframe} @@ -959,9 +1491,11 @@ may only specify 'c', 't' or 'b'}}} % and applies the setting for that numbered \gls{flow}. % \begin{macrocode} \newcommand{\@ssetflowframe}[2]{% -\@for\@ff@id:=#1\do{% -\@flowframeid{\@ff@id}% -\@@setflowframe{\ff@id}{#2}}} + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \@@setflowframe{\ff@id}{#2}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@setflowframe} @@ -972,28 +1506,48 @@ may only specify 'c', 't' or 'b'}}} % that number ranges do not lie out of bounds. % \begin{macrocode} \newcommand*{\@setflowframe}[2]{% -\ifthenelse{\equal{#1}{all}}{% -\setallflowframes{#2}}{% -\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{% -\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}% -\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{% -\@@setflowframe{\@colN}{#2}% -\advance\@colN by 2\relax}% -}{% -\@for\@ff@id:=#1\do{% -\def\@ff@numstart{0}\def\@ff@numend{10000}% -\@ff@getrange{\@ff@id}% -\ifnum\@ff@numstart=0\relax - \def\@ff@numstart{1}% -\fi -\ifnum\@ff@numend>\c@maxflow\relax - \def\@ff@numend{\c@maxflow}% -\fi -\@colN=\@ff@numstart\relax -\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{% -\@@setflowframe{\@colN}{#2}% -\advance\@colN by 1\relax -}}}}} + \ifthenelse{\equal{#1}{all}}% + {% + \setallflowframes{#2}% + }% + {% + \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}% + {% + \ifthenelse{\equal{#1}{odd}}% + {% + \@colN=1\relax + }% + {% + \@colN=2\relax + }% + \whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}% + {% + \@@setflowframe{\@colN}{#2}% + \advance\@colN by 2\relax + }% + }% + {% + \@for\@ff@id:=#1\do + {% + \def\@ff@numstart{0}% + \def\@ff@numend{10000}% + \@ff@getrange{\@ff@id}% + \ifnum\@ff@numstart=0\relax + \def\@ff@numstart{1}% + \fi + \ifnum\@ff@numend>\c@maxflow\relax + \def\@ff@numend{\c@maxflow}% + \fi + \@colN=\@ff@numstart\relax + \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% + {% + \@@setflowframe{\@colN}{#2}% + \advance\@colN by 1\relax + }% + }% + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@setflowframe} @@ -1003,100 +1557,211 @@ may only specify 'c', 't' or 'b'}}} %\changes{1.11}{2008/06/27}{removed unwanted spaces} % \begin{macrocode} \newcommand*{\@@setflowframe}[2]{% -\def\ff@frame{}\def\ff@width{}\def\ff@height{}\def\ff@margin{}% -\def\ff@x{}\def\ff@y{}\def\ff@frametype{}\def\ff@col{}% -\def\ff@valign{}\def\ff@style{}% -\def\ff@txtcol{}\def\ff@clear{}\def\ff@offset{}\def\ff@pages{}% -\def\ff@label{}\def\ff@backcol{}\def\ff@evenx{}\def\ff@eveny{}% -\def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}\def\ff@shape{\empty}% -\setkeys{flowframe}{#2}% -\ifthenelse{\equal{\ff@frame}{}}{}{% -\setboolean{columnframe\romannumeral#1}{\ff@frame}}% -\ifthenelse{\equal{\ff@width}{}}{}{% -\expandafter\setlength\csname colwidth\romannumeral#1\endcsname -{\ff@width}}% -\ifthenelse{\equal{\ff@height}{}}{}{% -\expandafter\setlength\csname colheight\romannumeral#1\endcsname -{\ff@height}}% -\ifthenelse{\equal{\ff@x}{}}{}{% -\expandafter\setlength\csname col@\romannumeral#1@posx\endcsname -{\ff@x}% -\expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname -{\ff@x}} -\ifthenelse{\equal{\ff@y}{}}{}{% -\expandafter\setlength\csname col@\romannumeral#1@posy\endcsname -{\ff@y}% -\expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname -{\ff@y}}% -\ifthenelse{\equal{\ff@evenx}{}}{}{% -\expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname -{\ff@evenx}}% -\ifthenelse{\equal{\ff@eveny}{}}{}{% -\expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname -{\ff@eveny}}% -\ifthenelse{\equal{\ff@oddx}{}}{}{% -\expandafter\setlength\csname col@\romannumeral#1@posx\endcsname -{\ff@oddx}}% -\ifthenelse{\equal{\ff@oddy}{}}{}{% -\expandafter\setlength\csname col@\romannumeral#1@posy\endcsname -{\ff@oddy}}% -\ifthenelse{\equal{\ff@label}{}}{}{% -\@s@tflowframeid{#1}[\ff@label]}% -\ifthenelse{\equal{\ff@frametype}{}}{}{% -\expandafter\edef\csname @ff@frametype@\romannumeral#1\endcsname -{\ff@frametype}}% -\ifthenelse{\equal{\ff@col}{}}{}{% -\expandafter\@setframecol\ff@col\end{#1}{col}{ff}}% -\ifthenelse{\equal{\ff@txtcol}{}}{}{% -\expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{ff}}% -\ifthenelse{\equal{\ff@backcol}{}}{}{% -\expandafter\@setframecol\ff@backcol\end{#1}{backcol}{ff}}% -\ifthenelse{\equal{\ff@margin}{}}{}{% -\expandafter\xdef\csname @ff@margin@\romannumeral#1\endcsname -{\ff@margin}}% -\ifthenelse{\equal{\ff@pages}{}}{}{% -\expandafter\xdef\csname @ff@pages@\romannumeral#1\endcsname -{\ff@pages}}% -\ifthenelse{\equal{\ff@offset}{}}{}{% -\expandafter\xdef\csname @ff@offset@\romannumeral#1\endcsname -{\ff@offset}}% -\ifthenelse{\equal{\ff@angle}{}}{}{% -\expandafter\xdef\csname @ff@angle@\romannumeral#1\endcsname -{\ff@angle}}% -\ifthenelse{\equal{\ff@clear}{}}{}{% -\PackageError{flowfram}% -{Key 'clear' not available for flow frames}{}}% -\ifthenelse{\equal{\ff@style}{}}{}{% -\PackageError{flowfram}% -{Key 'style' not available for flow frames}{}}% -\if\ff@shape\empty -\else -\PackageError{flowfram}% -{Key 'shape' not available for flow frames}{}% -\fi -\ifthenelse{\equal{\ff@valign}{}}{}{% -\PackageError{flowfram}% -{Key 'valign' not available for flow frames}{}}% + \def\ff@frame{}\def\ff@width{}\def\ff@height{}\def\ff@margin{}% + \def\ff@x{}\def\ff@y{}\def\ff@frametype{}\def\ff@col{}% + \def\ff@valign{}\def\ff@style{}% + \def\ff@txtcol{}\def\ff@clear{}\def\ff@offset{}\def\ff@pages{}% + \def\ff@label{}\def\ff@backcol{}\def\ff@evenx{}\def\ff@eveny{}% + \def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}% + \let\ff@xpages\undefined + \let\ff@shape\undefined + \setkeys{flowframe}{#2}% + \ifdefempty{\ff@frame}{}% + {% + \setboolean{columnframe\romannumeral#1}{\ff@frame}% + }% + \ifdefempty{\ff@width}{}% + {% + \expandafter + \setlength\csname colwidth\romannumeral#1\endcsname + {\ff@width}% + }% + \ifdefempty{\ff@height}{}% + {% + \expandafter + \setlength\csname colheight\romannumeral#1\endcsname + {\ff@height}% + }% + \ifdefempty{\ff@x}{}% + {% + \expandafter + \setlength\csname col@\romannumeral#1@posx\endcsname + {\ff@x}% + \expandafter + \setlength\csname col@\romannumeral#1@evenx\endcsname + {\ff@x}% + } + \ifdefempty{\ff@y}{}% + {% + \expandafter + \setlength\csname col@\romannumeral#1@posy\endcsname + {\ff@y}% + \expandafter + \setlength\csname col@\romannumeral#1@eveny\endcsname + {\ff@y}% + }% + \ifdefempty{\ff@evenx}{}% + {% + \expandafter + \setlength\csname col@\romannumeral#1@evenx\endcsname + {\ff@evenx}% + }% + \ifdefempty{\ff@eveny}{}% + {% + \expandafter + \setlength\csname col@\romannumeral#1@eveny\endcsname + {\ff@eveny}% + }% + \ifdefempty{\ff@oddx}{}% + {% + \expandafter + \setlength\csname col@\romannumeral#1@posx\endcsname + {\ff@oddx}% + }% + \ifdefempty{\ff@oddy}{}% + {% + \expandafter + \setlength\csname col@\romannumeral#1@posy\endcsname + {\ff@oddy}% + }% + \ifdefempty{\ff@label}{}% + {% + \@s@tflowframeid{#1}[\ff@label]% + }% + \ifdefempty{\ff@frametype}{}% + {% + \expandafter + \edef\csname @ff@frametype@\romannumeral#1\endcsname{% + \ff@frametype}% + }% + \ifdefempty{\ff@col}{}% + {% + \expandafter\@setframecol\ff@col\end{#1}{col}{ff}% + }% + \ifdefempty{\ff@txtcol}{}% + {% + \expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{ff}% + }% + \ifdefempty{\ff@backcol}{}% + {% + \expandafter\@setframecol\ff@backcol\end{#1}{backcol}{ff}% + }% + \ifdefempty{\ff@margin}{}% + {% + \expandafter + \xdef\csname @ff@margin@\romannumeral#1\endcsname{% + \ff@margin}% + }% + \ifdefempty{\ff@pages}{}% + {% + \flowsetpagelist{#1}{\ff@pages}% + }% + \ifundef{\ff@xpages}{}% + {% + \flowsetexclusion{#1}{\ff@xpages}% + }% + \ifdefempty{\ff@offset}{}% + {% + \expandafter + \xdef\csname @ff@offset@\romannumeral#1\endcsname{% + \ff@offset}% + }% + \ifdefempty{\ff@angle}{}% + {% + \expandafter + \xdef\csname @ff@angle@\romannumeral#1\endcsname{% + \ff@angle}% + }% + \ifdefempty{\ff@clear}{}% + {% + \PackageError{flowfram}% + {Key 'clear' not available for flow frames}{}% + }% + \ifdefempty{\ff@style}{}% + {% + \PackageError{flowfram}% + {Key 'style' not available for flow frames}{}% + }% + \ifundef{\ff@shape}{}% + {% + \PackageError{flowfram}% + {Key 'shape' not available for flow frames}{}% + }% + \ifdefempty{\ff@valign}{}% + {% + \PackageError{flowfram}% + {Key 'valign' not available for flow frames}{}% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\flowsetpagelist} +% Sets the page list for the \gls{flow} given by "#1" (the +% \gls{idn}). +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newcommand*{\flowsetpagelist}[2]{% + \expandafter + \xdef\csname @ff@pages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting page range for flow frame + \number#1\space\space to "#2"}% } % \end{macrocode} %\end{macro} +%\begin{macro}{\flowsetexclusion} +% Sets the exclusion list for the \gls{flow} given by "#1" (the +% \gls{idn}). +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newcommand*{\flowsetexclusion}[2]{% + \expandafter + \xdef\csname @ff@xpages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting exclusion for flow frame + \number#1\space\space to "#2"}% +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\flowaddexclusion} +% Adds to the exclusion list for the \gls{flow} given by "#1" (the +% \gls{idn}). +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newcommand*{\flowaddexclusion}[2]{% + \ifcsempty{@ff@xpages@\romannumeral#1} + {% + \expandafter + \xdef\csname @ff@xpages@\romannumeral#1\endcsname{#2}% + }% + {% + \expandafter + \xdef\csname @ff@xpages@\romannumeral#1\endcsname{% + \csname @ff@xpages@\romannumeral#1\endcsname,#2}% + }% + \flf@message{Setting exclusion for flow frame + \number#1\space\space to + "\csname @ff@xpages@\romannumeral#1\endcsname"}% +} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\ffswapoddeven} % Swap odd and even offsets for a given \gls{flow}. Do the main stuff for % a given \gls{flow} \gls{idn}. % \begin{macrocode} \newcommand*{\@@flowframeswapcoords}[1]{% -\setlength{\@ff@tmp@x}% -{\csname col@\romannumeral#1@evenx\endcsname} -\expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname -{\csname col@\romannumeral#1@posx\endcsname}% -\expandafter\setlength\csname col@\romannumeral#1@posx\endcsname -{\@ff@tmp@x}% -\setlength{\@ff@tmp@y}% -{\csname col@\romannumeral#1@eveny\endcsname} -\expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname -{\csname col@\romannumeral#1@posy\endcsname}% -\expandafter\setlength\csname col@\romannumeral#1@posy\endcsname -{\@ff@tmp@y}% + \setlength{\@ff@tmp@x}% + {\csname col@\romannumeral#1@evenx\endcsname} + \expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname + {\csname col@\romannumeral#1@posx\endcsname}% + \expandafter\setlength\csname col@\romannumeral#1@posx\endcsname + {\@ff@tmp@x}% + \setlength{\@ff@tmp@y}% + {\csname col@\romannumeral#1@eveny\endcsname} + \expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname + {\csname col@\romannumeral#1@posy\endcsname}% + \expandafter\setlength\csname col@\romannumeral#1@posy\endcsname + {\@ff@tmp@y}% } % \end{macrocode} %\end{macro} @@ -1104,47 +1769,67 @@ may only specify 'c', 't' or 'b'}}} % Allow user to specify \gls{flow} either by \gls{idn} or \gls{idl}: % \begin{macrocode} \newcommand*{\ffswapoddeven}{% -\@ifstar\@sflowframeswapcoords\@flowframeswapcoords} + \@ifstar\@sflowframeswapcoords\@flowframeswapcoords +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sflowframeswapcoords} % Starred form % \begin{macrocode} \newcommand*{\@sflowframeswapcoords}[1]{% -\@for\@ff@id:=#1\do{% -\@flowframeid{\@ff@id}% -\@@flowframeswapcoords{\ff@id}}} + \@for\@ff@id:=#1\do + {% + \@flowframeid{\@ff@id}% + \@@flowframeswapcoords{\ff@id}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@flowframeswapcoords} % Unstarred form: % \begin{macrocode} \newcommand*{\@flowframeswapcoords}[1]{% -\ifthenelse{\equal{#1}{all}}{% -\ff@id=0\relax -\whiledo{\ff@id<\c@maxflow}{\advance\ff@id by 1\relax -\@@flowframeswapcoords{\ff@id}}% -}{% -\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{% -\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}% -\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{% -\@@flowframeswapcoords{\@colN}% -\advance\@colN by 2\relax}% -}{% -\@for\@ff@id:=#1\do{% -\def\@ff@numstart{0}\def\@ff@numend{10000}% -\@ff@getrange{\@ff@id}% -\ifnum\@ff@numstart=0\relax - \def\@ff@numstart{1}% -\fi -\ifnum\@ff@numend>\c@maxflow - \def\@ff@numend{\c@maxflow}% -\fi -\@colN=\@ff@numstart -\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{% -\@@flowframeswapcoords{\@colN}% -\advance\@colN by 1\relax -}}}}} + \ifthenelse{\equal{#1}{all}}% + {% + \ff@id=0\relax + \whiledo{\ff@id<\c@maxflow}% + {% + \advance\ff@id by 1\relax + \@@flowframeswapcoords{\ff@id}% + }% + }% + {% + \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}% + {% + \ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}% + \whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}% + {% + \@@flowframeswapcoords{\@colN}% + \advance\@colN by 2\relax + }% + }% + {% + \@for\@ff@id:=#1\do + {% + \def\@ff@numstart{0}% + \def\@ff@numend{100000}% + \@ff@getrange{\@ff@id}% + \ifnum\@ff@numstart=0\relax + \def\@ff@numstart{1}% + \fi + \ifnum\@ff@numend>\c@maxflow + \def\@ff@numend{\c@maxflow}% + \fi + \@colN=\@ff@numstart + \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% + {% + \@@flowframeswapcoords{\@colN}% + \advance\@colN by 1\relax + }% + }% + }% + }% +} % \end{macrocode} %\end{macro} % @@ -1154,37 +1839,43 @@ may only specify 'c', 't' or 'b'}}} %\begin{macro}{\flowframex} % \begin{macrocode} \newcommand*{\flowframex}[1]{% -\csname col@\romannumeral#1@posx\endcsname} + \csname col@\romannumeral#1@posx\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\flowframey} % \begin{macrocode} \newcommand*{\flowframey}[1]{% -\csname col@\romannumeral#1@posy\endcsname} + \csname col@\romannumeral#1@posy\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\flowframeevenx} % \begin{macrocode} \newcommand*{\flowframeevenx}[1]{% -\csname col@\romannumeral#1@evenx\endcsname} + \csname col@\romannumeral#1@evenx\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\flowframeeveny} % \begin{macrocode} \newcommand*{\flowframeeveny}[1]{% -\csname col@\romannumeral#1@eveny\endcsname} + \csname col@\romannumeral#1@eveny\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\flowframewidth} % \begin{macrocode} \newcommand{\flowframewidth}[1]{% -\csname colwidth\romannumeral#1\endcsname} + \csname colwidth\romannumeral#1\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\flowframeheight} % \begin{macrocode} \newcommand*{\flowframeheight}[1]{% -\csname colheight\romannumeral#1\endcsname} + \csname colheight\romannumeral#1\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\@setframecol} @@ -1200,15 +1891,17 @@ may only specify 'c', 't' or 'b'}}} % A colour model has been specified. % \begin{macrocode} \def\@@setframecol[#1]#2\end#3#4#5{% -\expandafter\edef\csname @#5@#4@\romannumeral#3\endcsname{% -[#1]{#2}}} + \expandafter\edef\csname @#5@#4@\romannumeral#3\endcsname{% + [#1]{#2}}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@setfr@mecol} % A colour model has not been specified. % \begin{macrocode} \def\@@setfr@mecol#1\end#2#3#4{% -\expandafter\edef\csname @#4@#3@\romannumeral#2\endcsname{{#1}}} + \expandafter\edef\csname @#4@#3@\romannumeral#2\endcsname{{#1}}% +} % \end{macrocode} %\end{macro} % @@ -1228,9 +1921,9 @@ may only specify 'c', 't' or 'b'}}} %\begin{macro}{\@n@wstaticframe} % \begin{macrocode} \newcommand*{\@n@wstaticframe}{% -\global\advance\c@maxstatic by 1\relax -\newboolean{staticframe\romannumeral\c@maxstatic}% -\@ifstar\@snewstaticframe\@newstaticframe + \global\advance\c@maxstatic by 1\relax + \newboolean{staticframe\romannumeral\c@maxstatic}% + \@ifstar\@snewstaticframe\@newstaticframe } % \end{macrocode} %\end{macro} @@ -1238,98 +1931,118 @@ may only specify 'c', 't' or 'b'}}} % Starred version (has a border): % \begin{macrocode} \newcommand{\@snewstaticframe}{% -\setboolean{staticframe\romannumeral\c@maxstatic}{true}% -\@@newstaticframe} + \setboolean{staticframe\romannumeral\c@maxstatic}{true}% + \@@newstaticframe +} % \end{macrocode} %\end{macro} %\begin{macro}{\@newstaticframe} % Unstarred version (no border): % \begin{macrocode} \newcommand{\@newstaticframe}{% -\setboolean{staticframe\romannumeral\c@maxstatic}{false}% -\@@newstaticframe} + \setboolean{staticframe\romannumeral\c@maxstatic}{false}% + \@@newstaticframe +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@newstaticframe} % Now set up the \gls{static}: % \begin{macrocode} \newcommand*{\@@newstaticframe}[5][all]{% -\expandafter -\newbox\csname @staticframe@\romannumeral\c@maxstatic\endcsname -\expandafter -\newlength\csname @sf@\romannumeral\c@maxstatic @posx\endcsname -\expandafter -\newlength\csname @sf@\romannumeral\c@maxstatic @posy\endcsname -\expandafter\setlength -\csname @sf@\romannumeral\c@maxstatic @posx\endcsname{#4}% -\expandafter\setlength -\csname @sf@\romannumeral\c@maxstatic @posy\endcsname{#5}% -\expandafter\newlength -\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname -\expandafter\newlength -\csname @sf@\romannumeral\c@maxstatic @eveny\endcsname -\expandafter\setlength -\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{#4}% -\expandafter\setlength -\csname @sf@\romannumeral\c@maxstatic @eveny\endcsname{#5}% -{\@ff@tmp@x=#2\relax -\@ff@tmp@y=#3\relax -\expandafter -\xdef\csname @sf@dim@\romannumeral\c@maxstatic\endcsname{% -[c][\the\@ff@tmp@y][c]{\the\@ff@tmp@x}}}% -\expandafter -\def\csname @sf@col@\romannumeral\c@maxstatic\endcsname{% -\flowframecol}% -\expandafter -\def\csname @sf@txtcol@\romannumeral\c@maxstatic\endcsname{% -\flowframetextcol}% -\expandafter -\def\csname @sf@backcol@\romannumeral\c@maxstatic\endcsname{% -{none}}% -\expandafter -\xdef\csname @sf@pages@\romannumeral\c@maxstatic\endcsname{#1}% -\expandafter -\gdef\csname @sf@offset@\romannumeral\c@maxstatic\endcsname{% -compute}% -\expandafter -\gdef\csname @sf@angle@\romannumeral\c@maxstatic\endcsname{0}% -\expandafter -\gdef\csname @sf@shape@\romannumeral\c@maxstatic\endcsname{\relax}% -\expandafter -\def\csname @sf@frametype@\romannumeral\c@maxstatic\endcsname{% -fbox}% -\newboolean{@sf@clear@\romannumeral\c@maxstatic}% -\setboolean{@sf@clear@\romannumeral\c@maxstatic}{false} -\@ifnextchar[{\@s@tstaticframeid{\c@maxstatic}}% -{\@s@tstaticframeid{\c@maxstatic}[\number\c@maxstatic]}} + \expandafter + \newbox\csname @staticframe@\romannumeral\c@maxstatic\endcsname + \expandafter + \newlength\csname @sf@\romannumeral\c@maxstatic @posx\endcsname + \expandafter + \newlength\csname @sf@\romannumeral\c@maxstatic @posy\endcsname + \expandafter\setlength + \csname @sf@\romannumeral\c@maxstatic @posx\endcsname{#4}% + \expandafter\setlength + \csname @sf@\romannumeral\c@maxstatic @posy\endcsname{#5}% + \expandafter\newlength + \csname @sf@\romannumeral\c@maxstatic @evenx\endcsname + \expandafter\newlength + \csname @sf@\romannumeral\c@maxstatic @eveny\endcsname + \expandafter\setlength + \csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{#4}% + \expandafter\setlength + \csname @sf@\romannumeral\c@maxstatic @eveny\endcsname{#5}% + {\@ff@tmp@x=#2\relax + \@ff@tmp@y=#3\relax + \expandafter + \xdef\csname @sf@dim@\romannumeral\c@maxstatic\endcsname{% + [c][\the\@ff@tmp@y][c]{\the\@ff@tmp@x}}}% + \expandafter + \def\csname @sf@col@\romannumeral\c@maxstatic\endcsname{% + \flowframecol}% + \expandafter + \def\csname @sf@txtcol@\romannumeral\c@maxstatic\endcsname{% + \flowframetextcol}% + \expandafter + \def\csname @sf@backcol@\romannumeral\c@maxstatic\endcsname{% + {none}}% + \expandafter + \xdef\csname @sf@pages@\romannumeral\c@maxstatic\endcsname{#1}% +% \end{macrocode} +% Page exclusion list: +%\changes{1.14}{2012-11-10}{added page exclusion list} +% \begin{macrocode} + \expandafter + \gdef\csname @sf@xpages@\romannumeral\c@maxflow\endcsname{}% + \expandafter + \gdef\csname @sf@offset@\romannumeral\c@maxstatic\endcsname{% + compute}% + \expandafter + \gdef\csname @sf@angle@\romannumeral\c@maxstatic\endcsname{0}% + \expandafter + \gdef\csname @sf@shape@\romannumeral\c@maxstatic\endcsname{\relax}% + \expandafter + \def\csname @sf@frametype@\romannumeral\c@maxstatic\endcsname{% + fbox}% + \newboolean{@sf@clear@\romannumeral\c@maxstatic}% + \setboolean{@sf@clear@\romannumeral\c@maxstatic}{false} + \@ifnextchar[{\@s@tstaticframeid{\c@maxstatic}}% + {\@s@tstaticframeid{\c@maxstatic}[\number\c@maxstatic]}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@s@tstaticframeid} % Set the label for the \gls{static}: % \begin{macrocode} \def\@s@tstaticframeid#1[#2]{% -\edef\ff@label{#2}% -\@sf@checkuniqueidl{#1}{\ff@label}% -\expandafter -\xdef\csname @sf@id@\romannumeral#1\endcsname{\ff@label}} + \edef\ff@label{#2}% + \@sf@checkuniqueidl{#1}{\ff@label}% + \expandafter + \xdef\csname @sf@id@\romannumeral#1\endcsname{\ff@label}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sf@checkuniqueidl} % Check \gls{idl} "#2" for \gls{static} "#1" is unique % \begin{macrocode} \newcommand*{\@sf@checkuniqueidl}[2]{% -\@colN=0\relax -\whiledo{\@colN<\c@maxstatic}{% -\advance\@colN by 1\relax -\ifnum\@colN=#1\relax -\else -\ifthenelse{% -\equal{#2}{\csname @sf@id@\romannumeral\@colN\endcsname}}{% -\PackageError{flowfram}{Static frame IDL '#2' already defined}{% -You can't assign this label, as it is already defined -for static frame \number\@colN}}{}% -\fi -}} + \@colN=0\relax + \whiledo{\@colN<\c@maxstatic}% + {% + \advance\@colN by 1\relax + \ifnum\@colN=#1\relax + \else + \ifthenelse + {% + \equal{#2}{\csname @sf@id@\romannumeral\@colN\endcsname}% + }% + {% + \PackageError{flowfram}% + {Static frame IDL '#2' already defined}% + {% + You can't assign this label, as it is already defined + for static frame \number\@colN + }% + }% + {}% + \fi + }% +} % \end{macrocode} %\end{macro} % @@ -1340,7 +2053,8 @@ for static frame \number\@colN}}{}% % \gls{idn}. % \begin{macrocode} \newcommand*{\getstaticlabel}[1]{% -\csname @sf@id@\romannumeral#1\endcsname} + \csname @sf@id@\romannumeral#1\endcsname +} % \end{macrocode} %\end{macro} % @@ -1352,7 +2066,8 @@ for static frame \number\@colN}}{}% % sequence. % \begin{macrocode} \newcommand*{\getstaticid}[2]{% -\@staticframeid{#2}\edef#1{\number\ff@id}} + \@staticframeid{#2}\edef#1{\number\ff@id}% +} % \end{macrocode} %\end{macro} % @@ -1362,16 +2077,30 @@ for static frame \number\@colN}}{}% % so if there are a lot of \glspl{static}, it may take a while. % The \gls{idn} stored in "\ff@id". % \begin{macrocode} -\newcommand*{\@staticframeid}[1]{\@colN=0\relax -\ff@id=0\relax -\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax -\ifthenelse{% -\equal{#1}{\csname @sf@id@\romannumeral\@colN\endcsname}}{% -\ff@id=\@colN\relax -% break out of loop -\@colN=\c@maxstatic}{}}% -\ifnum\ff@id=0\PackageError{flowfram}{Can't find static frame -id '#1'}{}\fi} +\newcommand*{\@staticframeid}[1]{% + \@colN=0\relax + \ff@id=0\relax + \whiledo{\@colN<\c@maxstatic}% + {% + \advance\@colN by 1\relax + \ifthenelse + {% + \equal{#1}{\csname @sf@id@\romannumeral\@colN\endcsname}% + }% + {% + \ff@id=\@colN\relax +% \end{macrocode} +% Break out of loop +% \begin{macrocode} + \@colN=\c@maxstatic + }% + {}% + }% + \ifnum\ff@id=0\relax + \PackageError{flowfram}% + {Can't find static frame id '#1'}{}% + \fi +} % \end{macrocode} %\end{macro} % @@ -1380,40 +2109,50 @@ id '#1'}{}\fi} %\begin{macro}{\staticframex} % \begin{macrocode} \newcommand*{\staticframex}[1]{% -\csname @sf@\romannumeral#1@posx\endcsname} + \csname @sf@\romannumeral#1@posx\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\staticframey} % \begin{macrocode} \newcommand*{\staticframey}[1]{% -\csname @sf@\romannumeral#1@posy\endcsname} + \csname @sf@\romannumeral#1@posy\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\staticframeevenx} % \begin{macrocode} \newcommand*{\staticframeevenx}[1]{% -\csname @sf@\romannumeral#1@evenx\endcsname} + \csname @sf@\romannumeral#1@evenx\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\staticframeeveny} % \begin{macrocode} \newcommand*{\staticframeeveny}[1]{% -\csname @sf@\romannumeral#1@eveny\endcsname} + \csname @sf@\romannumeral#1@eveny\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\setallstaticframes} % Modify the settings for all the \glspl{static}: % \begin{macrocode} \newcommand*{\setallstaticframes}[1]{% -\@colN=0\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax -\@@setstaticframe{\@colN}{#1}}} + \@colN=0\relax + \whiledo{\@colN<\c@maxstatic}% + {% + \advance\@colN by 1\relax + \@@setstaticframe{\@colN}{#1}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\setstaticframe} % Modify the settings for the specified \glspl{static}: % \begin{macrocode} \newcommand*{\setstaticframe}{% -\@ifstar\@ssetstaticframe\@setstaticframe} + \@ifstar\@ssetstaticframe\@setstaticframe +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ssetstaticframe} @@ -1421,9 +2160,12 @@ id '#1'}{}\fi} % list of labels. % \begin{macrocode} \newcommand*{\@ssetstaticframe}[2]{% -\@for\@ff@id:=#1\do{% -\@staticframeid{\@ff@id}% -\@@setstaticframe{\ff@id}{#2}}} + \@for\@ff@id:=#1\do + {% + \@staticframeid{\@ff@id}% + \@@setstaticframe{\ff@id}{#2}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@setstaticframe} @@ -1432,28 +2174,42 @@ id '#1'}{}\fi} % Ensures that number ranges do not lie out of bounds. % \begin{macrocode} \newcommand*{\@setstaticframe}[2]{% -\ifthenelse{\equal{#1}{all}}{% -\setallstaticframes{#2}}{% -\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{% -\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}% -\whiledo{\@colN<\c@maxstatic\TE@or\@colN=\c@maxstatic}{% -\@@setstaticframe{\@colN}{#2}% -\advance\@colN by 2\relax}% -}{% -\@for\@ff@id:=#1\do{% -\def\@ff@numstart{0}\def\@ff@numend{10000}% -\@ff@getrange{\@ff@id}% -\ifnum\@ff@numstart=0\relax - \def\@ff@numstart{1}% -\fi -\ifnum\@ff@numend>\c@maxstatic\relax - \def\@ff@numend{\c@maxstatic}% -\fi -\@colN=\@ff@numstart\relax -\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{% -\@@setstaticframe{\@colN}{#2}% -\advance\@colN by 1\relax -}}}}} + \ifthenelse{\equal{#1}{all}}% + {% + \setallstaticframes{#2}% + }% + {% + \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}% + {% + \ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}% + \whiledo{\@colN<\c@maxstatic\TE@or\@colN=\c@maxstatic}% + {% + \@@setstaticframe{\@colN}{#2}% + \advance\@colN by 2\relax + }% + }% + {% + \@for\@ff@id:=#1\do + {% + \def\@ff@numstart{0}% + \def\@ff@numend{10000}% + \@ff@getrange{\@ff@id}% + \ifnum\@ff@numstart=0\relax + \def\@ff@numstart{1}% + \fi + \ifnum\@ff@numend>\c@maxstatic\relax + \def\@ff@numend{\c@maxstatic}% + \fi + \@colN=\@ff@numstart\relax + \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% + {% + \@@setstaticframe{\@colN}{#2}% + \advance\@colN by 1\relax + }% + }% + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@setstaticframe} @@ -1461,85 +2217,127 @@ id '#1'}{}\fi} % is given by the first argument. % \begin{macrocode} \newcommand*{\@@setstaticframe}[2]{% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname -\def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}\def\ff@angle{}% -\edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}% -\def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}% -\def\ff@backcol{}\def\ff@shape{0}% -\def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}% -\def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}% -\def\ff@oddx{}\def\ff@oddy{}% -\setkeys{flowframe}{#2}% -\ifthenelse{\equal{\ff@frame}{}}{}{% -\setboolean{staticframe\romannumeral#1}{\ff@frame}}% -\ifthenelse{\equal{\ff@x}{}}{}{% -\expandafter\global -\expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname -{\ff@x}% -\expandafter\global -\expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname -{\ff@x}}% -\ifthenelse{\equal{\ff@y}{}}{}{% -\expandafter\global -\expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname -{\ff@y}% -\expandafter\global -\expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname -{\ff@y}}% -\ifthenelse{\equal{\ff@evenx}{}}{}{% -\expandafter\global -\expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname -{\ff@evenx}}% -\ifthenelse{\equal{\ff@eveny}{}}{}{% -\expandafter\global -\expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname -{\ff@eveny}}% -\ifthenelse{\equal{\ff@oddx}{}}{}{% -\expandafter\global -\expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname -{\ff@oddx}}% -\ifthenelse{\equal{\ff@oddy}{}}{}{% -\expandafter\global -\expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname -{\ff@oddy}}% -\expandafter -\xdef\csname @sf@dim@\romannumeral#1\endcsname{% -[c][\ff@height][\ff@valign]{\ff@width}}% -\ifthenelse{\equal{\ff@frametype}{}}{}{% -\expandafter -\xdef\csname @sf@frametype@\romannumeral#1\endcsname{% -\ff@frametype}}% -\ifthenelse{\equal{\ff@label}{}}{}{% -\@s@tstaticframeid{#1}[\ff@label]} -\ifthenelse{\equal{\ff@col}{}}{}{% -\expandafter\@setframecol\ff@col\end{#1}{col}{sf}}% -\ifthenelse{\equal{\ff@txtcol}{}}{}{% -\expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{sf}}% -\ifthenelse{\equal{\ff@backcol}{}}{}{% -\expandafter\@setframecol\ff@backcol\end{#1}{backcol}{sf}}% -\ifthenelse{\equal{\ff@offset}{}}{}{% -\expandafter -\xdef\csname @sf@offset@\romannumeral#1\endcsname{\ff@offset}}% -\ifthenelse{\equal{\ff@angle}{}}{}{% -\expandafter -\xdef\csname @sf@angle@\romannumeral#1\endcsname{\ff@angle}}% -\if0\ff@shape -\else -\expandafter\global\expandafter -\let\csname @sf@shape@\romannumeral#1\endcsname\ff@shape -\fi -\ifthenelse{\equal{\ff@pages}{}}{}{% -\expandafter -\xdef\csname @sf@pages@\romannumeral#1\endcsname{\ff@pages}}% -\ifthenelse{\equal{\ff@clear}{}}{}{% -\setboolean{@sf@clear@\romannumeral#1}{\ff@clear}}% -\ifthenelse{\equal{\ff@margin}{}}{}{% -\PackageError{flowfram}{Key 'margin' not available for -static frames}{Static frames don't have marginal notes}}% -\ifthenelse{\equal{\ff@style}{}}{}{% -\PackageError{flowfram}{Key 'style' not available for -static frames}{}}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname + \def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}\def\ff@angle{}% + \edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}% + \def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}% + \def\ff@backcol{}% + \def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}% + \def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}% + \def\ff@oddx{}\def\ff@oddy{}% + \let\ff@shape\undefined + \let\ff@xpages\undefined + \setkeys{flowframe}{#2}% + \ifdefempty{\ff@frame}{}% + {% + \setboolean{staticframe\romannumeral#1}{\ff@frame}% + }% + \ifdefempty{\ff@x}{}% + {% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral#1@posx\endcsname + {\ff@x}% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral#1@evenx\endcsname + {\ff@x}% + }% + \ifdefempty{\ff@y}{}% + {% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral#1@posy\endcsname + {\ff@y}% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral#1@eveny\endcsname + {\ff@y}% + }% + \ifdefempty{\ff@evenx}{}% + {% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral#1@evenx\endcsname + {\ff@evenx}% + }% + \ifdefempty{\ff@eveny}{}% + {% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral#1@eveny\endcsname + {\ff@eveny}% + }% + \ifdefempty{\ff@oddx}{}% + {% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral#1@posx\endcsname + {\ff@oddx}% + }% + \ifdefempty{\ff@oddy}{}% + {% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral#1@posy\endcsname + {\ff@oddy}% + }% + \expandafter + \xdef\csname @sf@dim@\romannumeral#1\endcsname{% + [c][\ff@height][\ff@valign]{\ff@width}}% + \ifdefempty{\ff@frametype}{}% + {% + \expandafter + \xdef\csname @sf@frametype@\romannumeral#1\endcsname{% + \ff@frametype}% + }% + \ifdefempty{\ff@label}{}% + {% + \@s@tstaticframeid{#1}[\ff@label]% + } + \ifdefempty{\ff@col}{}% + {% + \expandafter\@setframecol\ff@col\end{#1}{col}{sf}% + }% + \ifdefempty{\ff@txtcol}{}% + {% + \expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{sf}% + }% + \ifdefempty{\ff@backcol}{}% + {% + \expandafter\@setframecol\ff@backcol\end{#1}{backcol}{sf}% + }% + \ifdefempty{\ff@offset}{}% + {% + \expandafter + \xdef\csname @sf@offset@\romannumeral#1\endcsname{\ff@offset}% + }% + \ifdefempty{\ff@angle}{}% + {% + \expandafter + \xdef\csname @sf@angle@\romannumeral#1\endcsname{\ff@angle}% + }% + \ifundef{\ff@shape}{}% + {% + \expandafter\global\expandafter + \let\csname @sf@shape@\romannumeral#1\endcsname\ff@shape + }% + \ifdefempty{\ff@pages}{}% + {% + \staticsetpagelist{#1}{\ff@pages}% + }% + \ifundef{\ff@xpages}{}% + {% + \staticsetexclusion{#1}{\ff@xpages}% + }% + \ifdefempty{\ff@clear}{}% + {% + \setboolean{@sf@clear@\romannumeral#1}{\ff@clear}% + }% + \ifdefempty{\ff@margin}{}% + {% + \PackageError{flowfram}% + {Key 'margin' not available for static frames}% + {Static frames don't have marginal notes}% + }% + \ifdefempty{\ff@style}{}% + {% + \PackageError{flowfram}% + {Key 'style' not available for static frames}{}% + }% } % \end{macrocode} %\end{macro} @@ -1556,9 +2354,13 @@ static frames}{}}% % break. % \begin{macrocode} \let\FLForgpar\par -\newcommand{\ffpshpar}{\edef\flf@next{\hangafter=\the\hangafter -\hangindent=\the\hangindent}\FLForgpar\flf@next -\edef\flf@next{\prevgraf=\the\prevgraf}\@ff@parshape\indent\mbox{}\flf@next} +\newcommand{\ffpshpar}{% + \edef\flf@next{\hangafter=\the\hangafter + \hangindent=\the\hangindent}% + \FLForgpar\flf@next + \edef\flf@next{\prevgraf=\the\prevgraf}% + \@ff@parshape\indent\mbox{}\flf@next +} % \end{macrocode} %\end{macro} % @@ -1571,62 +2373,80 @@ static frames}{}}% %\begin{macro}{\@ff@sectionhead} % \begin{macrocode} \newcommand*{\@ff@sectionhead}[1]{% -\def\ff@sechead{#1}% -\ffpshpar -\@ifstar{\@s@ff@heading}{\@dblarg\@ff@heading}} + \def\ff@sechead{#1}% + \ffpshpar + \@ifstar{\@s@ff@heading}{\@dblarg\@ff@heading}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@s@ff@heading} % \begin{macrocode} \def\@s@ff@heading#1{% -\@ifundefined{@ff@old\ff@sechead}{\PackageError{flowfram}{Unknown -heading command '\ff@sechead'}{}}{% -\begingroup -\edef\flf@next{\hangafter=\the\hangafter -\hangindent=\the\hangindent}\FLForgpar\flf@next -\let\par=\FLForgpar -\edef\flf@next{\prevgraf=\the\prevgraf}% -\csname @ff@old\ff@sechead\endcsname*{\@ff@parshape\flf@next -#1}% -\xdef\flf@next{\@ff@parshape -\prevgraf=\the\prevgraf}% -\endgroup -}% -\mbox{}\flf@next\let\flf@next\undefined} + \@ifundefined{@ff@old\ff@sechead}% + {% + \PackageError{flowfram}% + {Unknown heading command '\ff@sechead'}{}% + }% + {% + \begingroup + \edef\flf@next{\hangafter=\the\hangafter + \hangindent=\the\hangindent}% + \FLForgpar\flf@next + \let\par=\FLForgpar + \edef\flf@next{\prevgraf=\the\prevgraf}% + \csname @ff@old\ff@sechead\endcsname*{% + \@ff@parshape\flf@next #1}% + \xdef\flf@next{% + \@ff@parshape + \prevgraf=\the\prevgraf}% + \endgroup + }% + \mbox{}\flf@next + \let\flf@next\undefined +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@heading} % \begin{macrocode} \def\@ff@heading[#1]#2{% -\@ifundefined{@ff@old\ff@sechead}{\PackageError{flowfram}{Unknown -heading command '\ff@sechead'}{}}{% -\begingroup -\edef\flf@next{\hangafter=\the\hangafter -\hangindent=\the\hangindent}\FLForgpar\flf@next -\let\par=\FLForgpar -\edef\flf@next{\prevgraf=\the\prevgraf}% -\csname @ff@old\ff@sechead\endcsname[#1]{\@ff@parshape\flf@next -#2}% -\xdef\flf@next{\@ff@parshape -\prevgraf=\the\prevgraf}% -\endgroup}% -\mbox{}\flf@next\let\flf@next\undefined} + \@ifundefined{@ff@old\ff@sechead}% + {% + \PackageError{flowfram}% + {Unknown heading command '\ff@sechead'}{}% + }% + {% + \begingroup + \edef\flf@next{% + \hangafter=\the\hangafter + \hangindent=\the\hangindent}% + \FLForgpar\flf@next + \let\par=\FLForgpar + \edef\flf@next{\prevgraf=\the\prevgraf}% + \csname @ff@old\ff@sechead\endcsname[#1]{% + \@ff@parshape\flf@next #2}% + \xdef\flf@next{\@ff@parshape + \prevgraf=\the\prevgraf}% + \endgroup + }% + \mbox{}\flf@next + \let\flf@next\undefined +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@setsecthead} % Define command to switch to adjusted section headings: % \begin{macrocode} \newcommand*{\@ff@setsecthead}{% -\let\@ff@oldsection=\section -\let\@ff@oldsubsection=\subsection -\let\@ff@oldsubsubsection=\subsubsection -\let\@ff@oldparagraph=\paragraph -\let\@ff@oldsubparagraph=\subparagraph -\def\section{\@ff@sectionhead{section}}% -\def\subsection{\@ff@sectionhead{subsection}}% -\def\subsubsection{\@ff@sectionhead{subsubsection}}% -\def\paragraph{\@ff@sectionhead{paragraph}}% -\def\subparagraph{\@ff@sectionhead{subparagraph}}% + \let\@ff@oldsection=\section + \let\@ff@oldsubsection=\subsection + \let\@ff@oldsubsubsection=\subsubsection + \let\@ff@oldparagraph=\paragraph + \let\@ff@oldsubparagraph=\subparagraph + \def\section{\@ff@sectionhead{section}}% + \def\subsection{\@ff@sectionhead{subsection}}% + \def\subsubsection{\@ff@sectionhead{subsubsection}}% + \def\paragraph{\@ff@sectionhead{paragraph}}% + \def\subparagraph{\@ff@sectionhead{subparagraph}}% } % \end{macrocode} %\end{macro} @@ -1634,36 +2454,51 @@ heading command '\ff@sechead'}{}}{% % Determine what shape command is being used: % \begin{macrocode} \def\@ff@getshape#1#2\relax{% -\ifx#1\parshape -\def\ff@shape{1}% -\else -\ifx#1\shapepar -\def\ff@shape{2}% -\else -\ifx#1\relax -\def\ff@shape{0}% -\else -\PackageError{flowfram}{Unknown shape \string#1}{}% -\def\ff@shape{2}% -\fi -\fi -\fi} + \ifdefequal{#1}{\parshape}% + {% + \def\ff@shape{1}% + }% + {% + \ifdefequal{#1}{\shapepar}% + {% + \def\ff@shape{2}% + }% + {% + \ifx#1\relax + \def\ff@shape{0}% + \else + \PackageError{flowfram}{Unknown shape \string#1}{}% + \def\ff@shape{2}% + \fi + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@disablesec} % Disable sectioning commands % \begin{macrocode} \newcommand*{\@ff@disablesec}{% -\def\section{\PackageError{flowfram}{You can't have -sectioning commands within a \string\shapepar}{}}% -\def\subsection{\PackageError{flowfram}{You can't have -sectioning commands within a \string\shapepar}{}}% -\def\subsubsection{\PackageError{flowfram}{You can't have -sectioning commands within a \string\shapepar}{}}% -\def\paragraph{\PackageError{flowfram}{You can't have -sectioning commands within a \string\shapepar}{}}% -\def\subparagraph{\PackageError{flowfram}{You can't have -sectioning commands within a \string\shapepar}{}}% + \def\section{% + \PackageError{flowfram}% + {You can't have sectioning commands within a \string\shapepar}{}% + }% + \def\subsection{% + \PackageError{flowfram}% + {You can't have sectioning commands within a \string\shapepar}{}% + }% + \def\subsubsection{% + \PackageError{flowfram}% + {You can't have sectioning commands within a \string\shapepar}{}% + }% + \def\paragraph{% + \PackageError{flowfram}% + {You can't have sectioning commands within a \string\shapepar}{}% + }% + \def\subparagraph{% + \PackageError{flowfram}% + {You can't have sectioning commands within a \string\shapepar}{}% + }% } % \end{macrocode} %\end{macro} @@ -1674,77 +2509,98 @@ sectioning commands within a \string\shapepar}{}}% % \begin{macrocode} \newbox\staticframe \newenvironment{staticcontents}[1]{% -\let\continueonframe=\@staticcontinueonframe -\@beginstaticcontents{#1}% -}{% -\@endstaticcontents -\ignorespaces} + \let\continueonframe=\@staticcontinueonframe + \@beginstaticcontents{#1}% +}% +{% + \@endstaticcontents + \ignorespaces +} % \end{macrocode} %\end{environment} %\begin{environment}{staticcontents*} % Set the contents of the \gls{static} given by its \gls{idl}. % Syntax: "\begin{staticcontents*}"\marg{label}. % \begin{macrocode} -\newenvironment{staticcontents*}[1]{\@staticframeid{#1}% -\let\continueonframe=\@staticscontinueonframe -\@beginstaticcontents{\ff@id}% -}{% -\@endstaticcontents -\ignorespaces} +\newenvironment{staticcontents*}[1]{% + \@staticframeid{#1}% + \let\continueonframe=\@staticscontinueonframe + \@beginstaticcontents{\ff@id}% +}% +{% + \@endstaticcontents + \ignorespaces +} % \end{macrocode} %\end{environment} % % Begin staticcontents stuff. % \begin{macrocode} \newcommand{\@beginstaticcontents}[1]{% -\@ifundefined{@staticframe@\romannumeral#1}{% -\PackageError{flowfram}{Static frame '#1' not defined}{}}{}% -\expandafter\let\expandafter\@ff@parshape\csname @sf@shape@\romannumeral#1\endcsname -\expandafter\@ff@getshape\@ff@parshape\relax -\ifcase\ff@shape -% no shape -\edef\@sf@mpg{% -\noexpand -\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname -\noexpand\begingroup -\noexpand\let\noexpand\FLForgpar=\noexpand\par -}% -\or -% \parshape -\edef\@sf@mpg{% -\noexpand -\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname -\@ff@parshape -\noexpand\begingroup -\noexpand\let\noexpand\FLForgpar=\noexpand\par -\noexpand\let\noexpand\par=\noexpand\ffpshpar -\noexpand\@ff@setsecthead -}% -\or -% \shapepar -\edef\@sf@mpg{% -\noexpand -\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname -\noexpand\begingroup -\noexpand\@ff@disablesec -\noexpand\@ff@parshape -}% -\fi -\edef\@sf@thisframe{\csname @staticframe@\romannumeral#1\endcsname}% -\begin{lrbox}{\staticframe}% -\edef\ff@txtcol{\csname @sf@txtcol@\romannumeral#1\endcsname}% -\@s@tfftextcol\noindent -\@sf@mpg -\setlength\parindent\sdfparindent + \@ifundefined{@staticframe@\romannumeral#1}% + {% + \PackageError{flowfram}{Static frame '#1' not defined}{}% + }% + {}% + \expandafter\let\expandafter\@ff@parshape\csname @sf@shape@\romannumeral#1\endcsname + \expandafter\@ff@getshape\@ff@parshape\relax + \ifcase\ff@shape +% \end{macrocode} +% no shape: +% \begin{macrocode} + \edef\@sf@mpg{% + \noexpand + \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname + \noexpand\begingroup + \noexpand\let\noexpand\FLForgpar=\noexpand\par + }% + \or +% \end{macrocode} +% \ics{parshape}: +% \begin{macrocode} + \edef\@sf@mpg{% + \noexpand + \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname + \@ff@parshape + \noexpand\begingroup + \noexpand\let\noexpand\FLForgpar=\noexpand\par + \noexpand\let\noexpand\par=\noexpand\ffpshpar + \noexpand\@ff@setsecthead + }% + \or +% \end{macrocode} +% \ics{shapepar}: +% \begin{macrocode} + \edef\@sf@mpg{% + \noexpand + \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname + \noexpand\begingroup + \noexpand\@ff@disablesec + \noexpand\@ff@parshape + }% + \fi + \edef\@sf@thisframe{\csname @staticframe@\romannumeral#1\endcsname}% + \begin{lrbox}{\staticframe}% + \edef\ff@txtcol{\csname @sf@txtcol@\romannumeral#1\endcsname}% + \@s@tfftextcol\noindent + \@sf@mpg + \setlength\parindent\sdfparindent } % \end{macrocode} % End staticcontents stuff % \begin{macrocode} \newcommand*{\@endstaticcontents}{% -\ifnum\ff@shape=2\par -\else\FLForgpar\fi\endgroup\end{minipage}\end{lrbox}% -\expandafter\global\expandafter\sbox\@sf@thisframe{% -\usebox\staticframe}} + \ifnum\ff@shape=2\relax + \par + \else + \FLForgpar + \fi + \endgroup + \end{minipage}% + \end{lrbox}% + \expandafter\global\expandafter + \sbox\@sf@thisframe{\usebox\staticframe}% +} % \end{macrocode} % %\begin{macro}{\setstaticcontents} @@ -1752,21 +2608,77 @@ sectioning commands within a \string\shapepar}{}}% % Syntax: \cs{setstaticcontents}\marg{idn}\marg{text}. % \begin{macrocode} \newcommand{\setstaticcontents}{% -\@ifstar\@sstaticconts\@staticconts} + \@ifstar\@sstaticconts\@staticconts +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sstaticconts} % Starred version: \gls{static} identified by label. % \begin{macrocode} -\newcommand{\@sstaticconts}[2]{\begin{staticcontents*}{#1}% -#2\end{staticcontents*}} +\newcommand{\@sstaticconts}[2]{% + \begin{staticcontents*}{#1}% + #2% + \end{staticcontents*}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@staticconts} % Unstarred version: \gls{static} identified by \gls{idn}. % \begin{macrocode} -\newcommand{\@staticconts}[2]{\begin{staticcontents}{#1}% -#2\end{staticcontents}} +\newcommand{\@staticconts}[2]{% + \begin{staticcontents}{#1}% + #2% + \end{staticcontents}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\staticsetpagelist} +% Sets the page list for the \gls{static} given by "#1" (the +% \gls{idn}). +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newcommand*{\staticsetpagelist}[2]{% + \expandafter + \xdef\csname @sf@pages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting page range for static frame + \number#1\space\space to "#2"}% +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\staticsetexclusion} +% Sets the exclusion list for the \gls{static} given by "#1" (the +% \gls{idn}). +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newcommand*{\staticsetexclusion}[2]{% + \expandafter + \xdef\csname @sf@xpages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting exclusion for static frame + \number#1\space\space to "#2"}% +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\staticaddexclusion} +% Adds to the exclusion list for the \gls{static} given by "#1" (the +% \gls{idn}). +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newcommand*{\staticaddexclusion}[2]{% + \ifcsempty{@sf@xpages@\romannumeral#1} + {% + \expandafter + \xdef\csname @sf@xpages@\romannumeral#1\endcsname{#2}% + }% + {% + \expandafter + \xdef\csname @sf@xpages@\romannumeral#1\endcsname{% + \csname @sf@xpages@\romannumeral#1\endcsname,#2}% + }% + \flf@message{Setting exclusion for static frame + \number#1\space\space to + "\csname @sf@xpages@\romannumeral#1\endcsname"}% +} % \end{macrocode} %\end{macro} % @@ -1775,18 +2687,18 @@ sectioning commands within a \string\shapepar}{}}% % a given \gls{static} \gls{idn}. % \begin{macrocode} \newcommand*{\@@staticframeswapcoords}[1]{% -\setlength{\@ff@tmp@x}% -{\csname @sf@\romannumeral#1@evenx\endcsname} -\expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname -{\csname @sf@\romannumeral#1@posx\endcsname}% -\expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname -{\@ff@tmp@x}% -\setlength{\@ff@tmp@y}% -{\csname @sf@\romannumeral#1@eveny\endcsname} -\expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname -{\csname @sf@\romannumeral#1@posy\endcsname}% -\expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname -{\@ff@tmp@y}% + \setlength{\@ff@tmp@x}% + {\csname @sf@\romannumeral#1@evenx\endcsname} + \expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname + {\csname @sf@\romannumeral#1@posx\endcsname}% + \expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname + {\@ff@tmp@x}% + \setlength{\@ff@tmp@y}% + {\csname @sf@\romannumeral#1@eveny\endcsname} + \expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname + {\csname @sf@\romannumeral#1@posy\endcsname}% + \expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname + {\@ff@tmp@y}% } % \end{macrocode} %\end{macro} @@ -1794,47 +2706,66 @@ sectioning commands within a \string\shapepar}{}}% % Allow user to specify \gls{flow} either by \gls{idn} or \gls{idl}: % \begin{macrocode} \newcommand*{\sfswapoddeven}{% -\@ifstar\@sstaticframeswapcoords\@staticframeswapcoords} + \@ifstar\@sstaticframeswapcoords\@staticframeswapcoords +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sstaticframeswapcoords} % Starred form % \begin{macrocode} \newcommand*{\@sstaticframeswapcoords}[1]{% -\@for\@ff@id:=#1\do{% -\@staticframeid{\@ff@id}% -\@@staticframeswapcoords{\ff@id}}} + \@for\@ff@id:=#1\do + {% + \@staticframeid{\@ff@id}% + \@@staticframeswapcoords{\ff@id}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@staticframeswapcoords} % Unstarred form: % \begin{macrocode} \newcommand*{\@staticframeswapcoords}[1]{% -\ifthenelse{\equal{#1}{all}}{% -\ff@id=0\relax -\whiledo{\ff@id<\c@maxflow}{\advance\ff@id by 1\relax -\@@staticframeswapcoords{\ff@id}}% -}{% -\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{% -\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}% -\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{% -\@@staticframeswapcoords{\@colN}% -\advance\@colN by 2\relax}% -}{% -\@for\@ff@id:=#1\do{% -\def\@ff@numstart{0}\def\@ff@numend{10000}% -\@ff@getrange{\@ff@id}% -\ifnum\@ff@numstart=0\relax - \def\@ff@numstart{1}% -\fi -\ifnum\@ff@numend>\c@maxflow - \def\@ff@numend{\c@maxflow}% -\fi -\@colN=\@ff@numstart -\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{% -\@@staticframeswapcoords{\@colN}% -\advance\@colN by 1\relax -}}}}} + \ifthenelse{\equal{#1}{all}}% + {% + \ff@id=0\relax + \whiledo{\ff@id<\c@maxflow}% + {% + \advance\ff@id by 1\relax + \@@staticframeswapcoords{\ff@id}% + }% + }% + {% + \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}% + {% + \ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}% + \whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}% + {% + \@@staticframeswapcoords{\@colN}% + \advance\@colN by 2\relax + }% + }% + {% + \@for\@ff@id:=#1\do + {% + \def\@ff@numstart{0}\def\@ff@numend{100000}% + \@ff@getrange{\@ff@id}% + \ifnum\@ff@numstart=0\relax + \def\@ff@numstart{1}% + \fi + \ifnum\@ff@numend>\c@maxflow + \def\@ff@numend{\c@maxflow}% + \fi + \@colN=\@ff@numstart + \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% + {% + \@@staticframeswapcoords{\@colN}% + \advance\@colN by 1\relax + }% + }% + }% + }% +} % \end{macrocode} %\end{macro} % @@ -1847,11 +2778,12 @@ sectioning commands within a \string\shapepar}{}}% % \cs{newdynamicframe}\oarg{pages}\marg{width}\marg{height}\marg{x}\marg{y}\oarg{label} % \begin{macrocode} \newcommand*{\newdynamicframe}{% -\@n@wdynamicframe} + \@n@wdynamicframe +} \newcommand*{\@n@wdynamicframe}{% -\global\advance\c@maxdynamic by 1\relax -\newboolean{dynamicframe\romannumeral\c@maxdynamic} -\@ifstar\@snewdynamicframe\@newdynamicframe + \global\advance\c@maxdynamic by 1\relax + \newboolean{dynamicframe\romannumeral\c@maxdynamic} + \@ifstar\@snewdynamicframe\@newdynamicframe } % \end{macrocode} %\end{macro} @@ -1859,99 +2791,125 @@ sectioning commands within a \string\shapepar}{}}% % Starred version: has a border. % \begin{macrocode} \newcommand*{\@snewdynamicframe}{% -\setboolean{dynamicframe\romannumeral\c@maxdynamic}{true}% -\@@newdynamicframe} + \setboolean{dynamicframe\romannumeral\c@maxdynamic}{true}% + \@@newdynamicframe +} % \end{macrocode} %\end{macro} %\begin{macro}{\@newdynamicframe} % Unstarred version: no border. % \begin{macrocode} \newcommand*{\@newdynamicframe}{% -\setboolean{dynamicframe\romannumeral\c@maxdynamic}{false}% -\@@newdynamicframe} + \setboolean{dynamicframe\romannumeral\c@maxdynamic}{false}% + \@@newdynamicframe +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@newdynamicframe} % Create new \gls{dynamic}: % \begin{macrocode} \newcommand*{\@@newdynamicframe}[5][all]{% -\expandafter -\gdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{}% -\expandafter -\newlength\csname @df@\romannumeral\c@maxdynamic @posx\endcsname -\expandafter -\newlength\csname @df@\romannumeral\c@maxdynamic @posy\endcsname -\expandafter\setlength -\csname @df@\romannumeral\c@maxdynamic @posx\endcsname{#4}% -\expandafter\setlength -\csname @df@\romannumeral\c@maxdynamic @posy\endcsname{#5}% -\expandafter\newlength -\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname -\expandafter\newlength -\csname @df@\romannumeral\c@maxdynamic @eveny\endcsname -\expandafter\setlength -\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname{#4}% -\expandafter\setlength -\csname @df@\romannumeral\c@maxdynamic @eveny\endcsname{#5}% -{\@ff@tmp@x=#2\relax -\@ff@tmp@y=#3\relax -\expandafter -\xdef\csname @df@dim@\romannumeral\c@maxdynamic\endcsname{% -[c][\the\@ff@tmp@y][t]{\the\@ff@tmp@x}}}% -\expandafter -\gdef\csname @df@col@\romannumeral\c@maxdynamic\endcsname{% -\flowframecol}% -\expandafter -\gdef\csname @df@txtcol@\romannumeral\c@maxdynamic\endcsname{% -\flowframetextcol}% -\expandafter -\gdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname{% -{none}}% -\expandafter -\gdef\csname @df@pages@\romannumeral\c@maxdynamic\endcsname{#1}% -\expandafter -\gdef\csname @df@frametype@\romannumeral\c@maxdynamic\endcsname{% -fbox}% -\expandafter -\gdef\csname @df@style@\romannumeral\c@maxdynamic\endcsname{relax}% -\expandafter -\gdef\csname @df@offset@\romannumeral\c@maxdynamic\endcsname{compute}% -\expandafter -\gdef\csname @df@angle@\romannumeral\c@maxdynamic\endcsname{0}% -\expandafter -\gdef\csname @df@shape@\romannumeral\c@maxdynamic\endcsname{\relax}% -\newboolean{@df@clear@\romannumeral\c@maxdynamic}% -\setboolean{@df@clear@\romannumeral\c@maxdynamic}{false}% -\@ifnextchar[{\@s@tdynamicframeid{\c@maxdynamic}}% -{\@s@tdynamicframeid{\c@maxdynamic}[\number\c@maxdynamic]}} + \expandafter + \gdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{}% + \expandafter + \newlength\csname @df@\romannumeral\c@maxdynamic @posx\endcsname + \expandafter + \newlength\csname @df@\romannumeral\c@maxdynamic @posy\endcsname + \expandafter\setlength + \csname @df@\romannumeral\c@maxdynamic @posx\endcsname{#4}% + \expandafter\setlength + \csname @df@\romannumeral\c@maxdynamic @posy\endcsname{#5}% + \expandafter\newlength + \csname @df@\romannumeral\c@maxdynamic @evenx\endcsname + \expandafter\newlength + \csname @df@\romannumeral\c@maxdynamic @eveny\endcsname + \expandafter\setlength + \csname @df@\romannumeral\c@maxdynamic @evenx\endcsname{#4}% + \expandafter\setlength + \csname @df@\romannumeral\c@maxdynamic @eveny\endcsname{#5}% + {% + \@ff@tmp@x=#2\relax + \@ff@tmp@y=#3\relax + \expandafter + \xdef\csname @df@dim@\romannumeral\c@maxdynamic\endcsname{% + [c][\the\@ff@tmp@y][t]{\the\@ff@tmp@x}% + }% + }% + \expandafter + \gdef\csname @df@col@\romannumeral\c@maxdynamic\endcsname{% + \flowframecol + }% + \expandafter + \gdef\csname @df@txtcol@\romannumeral\c@maxdynamic\endcsname{% + \flowframetextcol + }% + \expandafter + \gdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname{% + {none}}% + \expandafter + \gdef\csname @df@pages@\romannumeral\c@maxdynamic\endcsname{#1}% +% \end{macrocode} +% Page exclusion list: +%\changes{1.14}{2012-11-10}{added page exclusion list} +% \begin{macrocode} + \expandafter + \gdef\csname @df@xpages@\romannumeral\c@maxflow\endcsname{}% + \expandafter + \gdef\csname @df@frametype@\romannumeral\c@maxdynamic\endcsname{% + fbox}% + \expandafter + \gdef\csname @df@style@\romannumeral\c@maxdynamic\endcsname{relax}% + \expandafter + \gdef\csname @df@offset@\romannumeral\c@maxdynamic\endcsname{compute}% + \expandafter + \gdef\csname @df@angle@\romannumeral\c@maxdynamic\endcsname{0}% + \expandafter + \gdef\csname @df@shape@\romannumeral\c@maxdynamic\endcsname{\relax}% + \newboolean{@df@clear@\romannumeral\c@maxdynamic}% + \setboolean{@df@clear@\romannumeral\c@maxdynamic}{false}% + \@ifnextchar[{\@s@tdynamicframeid{\c@maxdynamic}}% + {\@s@tdynamicframeid{\c@maxdynamic}[\number\c@maxdynamic]}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@s@tdynamicframeid} % Set the label for the given \gls{dynamic}: % \begin{macrocode} \def\@s@tdynamicframeid#1[#2]{% -\edef\ff@label{#2}% -\@df@checkuniqueidl{#1}{\ff@label}% -\expandafter -\xdef\csname @df@id@\romannumeral#1\endcsname{\ff@label}} + \edef\ff@label{#2}% + \@df@checkuniqueidl{#1}{\ff@label}% + \expandafter + \xdef\csname @df@id@\romannumeral#1\endcsname{\ff@label}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@df@checkuniqueidl} % Check \gls{idl} "#2" for \gls{static} "#1" is unique % \begin{macrocode} \newcommand*{\@df@checkuniqueidl}[2]{% -\@colN=0\relax -\whiledo{\@colN<\c@maxdynamic}{% -\advance\@colN by 1\relax -\ifnum\@colN=#1\relax -\else -\ifthenelse{\equal{#2}% -{\csname @df@id@\romannumeral\@colN\endcsname}}{% -\PackageError{flowfram}{Dynamic frame IDL '#2' already defined}{% -You can't assign this label, as it is already defined -for dynamic frame \number\@colN}}{}% -\fi -}} + \@colN=0\relax + \whiledo{\@colN<\c@maxdynamic}% + {% + \advance\@colN by 1\relax + \ifnum\@colN=#1\relax + \else + \ifthenelse + {% + \equal{#2}% + {\csname @df@id@\romannumeral\@colN\endcsname}% + }% + {% + \PackageError{flowfram}% + {Dynamic frame IDL '#2' already defined}% + {% + You can't assign this label, as it is already defined + for dynamic frame \number\@colN + }% + }% + {}% + \fi + }% +} % \end{macrocode} %\end{macro} % @@ -1962,7 +2920,8 @@ for dynamic frame \number\@colN}}{}% % \gls{idn}. % \begin{macrocode} \newcommand*{\getdynamiclabel}[1]{% -\csname @df@id@\romannumeral#1\endcsname} + \csname @df@id@\romannumeral#1\endcsname +} % \end{macrocode} %\end{macro} % @@ -1974,7 +2933,8 @@ for dynamic frame \number\@colN}}{}% % sequence. % \begin{macrocode} \newcommand*{\getdynamicid}[2]{% -\@dynamicframeid{#2}\edef#1{\number\ff@id}} + \@dynamicframeid{#2}\edef#1{\number\ff@id}% +} % \end{macrocode} %\end{macro} % @@ -1982,16 +2942,30 @@ for dynamic frame \number\@colN}}{}% % Determine the \gls{idn} of the \gls{dynamic} from its label. % The \gls{idn} is stored in "\ff@id". % \begin{macrocode} -\newcommand*{\@dynamicframeid}[1]{\@colN=0\relax -\ff@id=0\relax -\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax -\ifthenelse{% -\equal{#1}{\csname @df@id@\romannumeral\@colN\endcsname}}{% -\ff@id=\@colN\relax -% break out of loop -\@colN=\c@maxdynamic}{}}% -\ifnum\ff@id=0\PackageError{flowfram}{Can't find dynamic frame -id '#1'}{}\fi} +\newcommand*{\@dynamicframeid}[1]{% + \@colN=0\relax + \ff@id=0\relax + \whiledo{\@colN<\c@maxdynamic}% + {% + \advance\@colN by 1\relax + \ifthenelse + {% + \equal{#1}{\csname @df@id@\romannumeral\@colN\endcsname}% + }% + {% + \ff@id=\@colN\relax +% \end{macrocode} +% Break out of loop +% \begin{macrocode} + \@colN=\c@maxdynamic + }% + {}% + }% + \ifnum\ff@id=0\relax + \PackageError{flowfram}% + {Can't find dynamic frame id '#1'}{}% + \fi +} % \end{macrocode} %\end{macro} % @@ -2002,9 +2976,14 @@ id '#1'}{}\fi} % is given by \meta{idl}. The \gls{idn} is stored in "\ff@id". % \begin{macrocode} \newcommand*{\@getframeid}[2]{% -\@ifdefined{@#1frameid}{\csname @#1frameid\endcsname{#2}}{% -\PackageError{flowfram}{Unknown frame type `#1'}{Frame types can -be one of: flow, static or dynamic}}} + \@ifdefined{@#1frameid}% + {\csname @#1frameid\endcsname{#2}}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {Frame types can be one of: flow, static or dynamic}% + }% +} % \end{macrocode} %\end{macro} % @@ -2013,40 +2992,50 @@ be one of: flow, static or dynamic}}} %\begin{macro}{\dynamicframex} % \begin{macrocode} \newcommand*{\dynamicframex}[1]{% -\csname @df@\romannumeral#1@posx\endcsname} + \csname @df@\romannumeral#1@posx\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\dynamicframey} % \begin{macrocode} \newcommand*{\dynamicframey}[1]{% -\csname @df@\romannumeral#1@posy\endcsname} + \csname @df@\romannumeral#1@posy\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\dynamicframeevenx} % \begin{macrocode} \newcommand*{\dynamicframeevenx}[1]{% -\csname @df@\romannumeral#1@evenx\endcsname} + \csname @df@\romannumeral#1@evenx\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\dynamicframeeveny} % \begin{macrocode} \newcommand*{\dynamicframeeveny}[1]{% -\csname @df@\romannumeral#1@eveny\endcsname} + \csname @df@\romannumeral#1@eveny\endcsname +} % \end{macrocode} %\end{macro} %\begin{macro}{\setalldynamicframes} % Change the settings for all the \glspl{dynamic}: % \begin{macrocode} \newcommand*{\setalldynamicframes}[1]{% -\@colN=0\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax -\@@setdynamicframe{\@colN}{#1}}} + \@colN=0\relax + \whiledo{\@colN<\c@maxdynamic}% + {% + \advance\@colN by 1\relax + \@@setdynamicframe{\@colN}{#1}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\setdynamicframe} % Change the settings for specified \glspl{dynamic}: % \begin{macrocode} \newcommand*{\setdynamicframe}{% -\@ifstar\@ssetdynamicframe\@setdynamicframe} + \@ifstar\@ssetdynamicframe\@setdynamicframe +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ssetdynamicframe} @@ -2054,9 +3043,11 @@ be one of: flow, static or dynamic}}} % of labels. % \begin{macrocode} \newcommand*{\@ssetdynamicframe}[2]{% -\@for\@ff@id:=#1\do{% -\@dynamicframeid{\@ff@id}% -\@@setdynamicframe{\ff@id}{#2}}} + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \@@setdynamicframe{\ff@id}{#2}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@setdynamicframe} @@ -2065,28 +3056,43 @@ be one of: flow, static or dynamic}}} % If necessary, modify number ranges to ensure they are valid. % \begin{macrocode} \newcommand*{\@setdynamicframe}[2]{% -\ifthenelse{\equal{#1}{all}}{% -\setalldynamicframes{#2}}{% -\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{% -\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}% -\whiledo{\@colN<\c@maxdynamic\TE@or\@colN=\c@maxdynamic}{% -\@@setdynamicframe{\@colN}{#2}% -\advance\@colN by 2\relax}% -}{% -\@for\@ff@id:=#1\do{% -\def\@ff@numstart{0}\def\@ff@numend{10000}% -\@ff@getrange{\@ff@id}% -\ifnum\@ff@numstart=0\relax - \def\@ff@numstart{1}% -\fi -\ifnum\@ff@numend>\c@maxdynamic\relax - \def\@ff@numend{\c@maxdynamic}% -\fi -\@colN=\@ff@numstart\relax -\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{% -\@@setdynamicframe{\@colN}{#2}% -\advance\@colN by 1\relax -}}}}} + \ifthenelse{\equal{#1}{all}}% + {% + \setalldynamicframes{#2}% + }% + {% + \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}% + {% + \ifthenelse{\equal{#1}{odd}}% + {\@colN=1}% + {\@colN=2}% + \whiledo{\@colN<\c@maxdynamic\TE@or\@colN=\c@maxdynamic}% + {% + \@@setdynamicframe{\@colN}{#2}% + \advance\@colN by 2\relax + }% + }% + {% + \@for\@ff@id:=#1\do{% + \def\@ff@numstart{0}% + \def\@ff@numend{10000}% + \@ff@getrange{\@ff@id}% + \ifnum\@ff@numstart=0\relax + \def\@ff@numstart{1}% + \fi + \ifnum\@ff@numend>\c@maxdynamic\relax + \def\@ff@numend{\c@maxdynamic}% + \fi + \@colN=\@ff@numstart\relax + \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% + {% + \@@setdynamicframe{\@colN}{#2}% + \advance\@colN by 1\relax + }% + }% + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@setdynamicframe} @@ -2095,101 +3101,222 @@ be one of: flow, static or dynamic}}} %\changes{1.11}{2008/06/27}{fixed bug in clear key} % \begin{macrocode} \newcommand*{\@@setdynamicframe}[2]{% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname -\def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}% -\edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}% -\def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}\def\ff@backcol{}% -\def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}% -\def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}% -\def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}\def\ff@shape{0}% -\setkeys{flowframe}{#2}% -\ifthenelse{\equal{\ff@frame}{}}{}{% -\setboolean{dynamicframe\romannumeral#1}{\ff@frame}}% -\ifthenelse{\equal{\ff@x}{}}{}{% -\expandafter\global\expandafter\setlength -\csname @df@\romannumeral#1@posx\endcsname{\ff@x}% -\expandafter\global\expandafter\setlength -\csname @df@\romannumeral#1@evenx\endcsname{\ff@x}}% -\ifthenelse{\equal{\ff@y}{}}{}{% -\expandafter\global\expandafter\setlength -\csname @df@\romannumeral#1@posy\endcsname{\ff@y}% -\expandafter\global\expandafter\setlength -\csname @df@\romannumeral#1@eveny\endcsname{\ff@y}}% -\ifthenelse{\equal{\ff@evenx}{}}{}{% -\expandafter\global\expandafter\setlength -\csname @df@\romannumeral#1@evenx\endcsname{\ff@evenx}}% -\ifthenelse{\equal{\ff@eveny}{}}{}{% -\expandafter\global\expandafter\setlength -\csname @df@\romannumeral#1@eveny\endcsname{\ff@eveny}}% -\ifthenelse{\equal{\ff@oddx}{}}{}{% -\expandafter\global\expandafter\setlength -\csname @df@\romannumeral#1@posx\endcsname{\ff@oddx}}% -\ifthenelse{\equal{\ff@oddy}{}}{}{% -\expandafter\global\expandafter\setlength -\csname @df@\romannumeral#1@posy\endcsname{\ff@oddy}}% -\expandafter\xdef\csname @df@dim@\romannumeral#1\endcsname{% -[c][\ff@height][\ff@valign]{\ff@width}}% -\ifthenelse{\equal{\ff@label}{}}{}{% -\@s@tdynamicframeid{#1}[\ff@label]}% -\ifthenelse{\equal{\ff@frametype}{}}{}{% -\expandafter -\xdef\csname @df@frametype@\romannumeral#1\endcsname{% -\ff@frametype}}% -\ifthenelse{\equal{\ff@col}{}}{}{% -\expandafter\@setframecol\ff@col\end{#1}{col}{df}}% -\ifthenelse{\equal{\ff@txtcol}{}}{}{% -\expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{df}}% -\ifthenelse{\equal{\ff@backcol}{}}{}{% -\expandafter\@setframecol\ff@backcol\end{#1}{backcol}{df}}% -\ifthenelse{\equal{\ff@offset}{}}{}{% -\expandafter -\xdef\csname @df@offset@\romannumeral#1\endcsname{\ff@offset}}% -\ifthenelse{\equal{\ff@angle}{}}{}{% -\expandafter -\xdef\csname @df@angle@\romannumeral#1\endcsname{\ff@angle}}% -\if0\ff@shape -\else -\expandafter\global\expandafter -\let\csname @df@shape@\romannumeral#1\endcsname\ff@shape -\fi -\ifthenelse{\equal{\ff@pages}{}}{}{% -\expandafter\xdef\csname @df@pages@\romannumeral#1\endcsname{% -\ff@pages}}% -\ifthenelse{\equal{\ff@style}{}}{}{% -\@ifundefined{\ff@style}{\PackageError{flowfram}% -{Unknown style '\ff@style'}{The command \expandafter -\string\csname\ff@style\endcsname\space has not been defined}}{% -\expandafter -\xdef\csname @df@style@\romannumeral#1\endcsname{\ff@style}}}% -\ifthenelse{\equal{\ff@clear}{}}{}{% -\setboolean{@df@clear@\romannumeral#1}{\ff@clear}% -}% -\ifthenelse{\equal{\ff@margin}{}}{}{% -\PackageError{flowfram}{Key 'margin' not available for dynamic -frames}{dynamic frames don't have marginal notes}}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname + \def\ff@frame{}\edef\ff@width{\the\@ff@tmp@x}% + \edef\ff@height{\the\@ff@tmp@y}\def\ff@style{}\def\ff@frametype{}% + \def\ff@x{}\def\ff@y{}\def\ff@col{}\def\ff@txtcol{}\def\ff@backcol{}% + \def\ff@clear{}\def\ff@margin{}\def\ff@offset{}\def\ff@pages{}% + \def\ff@label{}\def\ff@evenx{}\def\ff@eveny{}% + \def\ff@oddx{}\def\ff@oddy{}\def\ff@angle{}% + \let\ff@shape\undefined + \let\ff@xpages\undefined + \setkeys{flowframe}{#2}% + \ifdefempty{\ff@frame}% + {}% + {% + \setboolean{dynamicframe\romannumeral#1}{\ff@frame}% + }% + \ifdefempty{\ff@x}% + {}% + {% + \expandafter\global\expandafter\setlength + \csname @df@\romannumeral#1@posx\endcsname{\ff@x}% + \expandafter\global\expandafter\setlength + \csname @df@\romannumeral#1@evenx\endcsname{\ff@x}% + }% + \ifdefempty{\ff@y}% + {}% + {% + \expandafter\global\expandafter\setlength + \csname @df@\romannumeral#1@posy\endcsname{\ff@y}% + \expandafter\global\expandafter\setlength + \csname @df@\romannumeral#1@eveny\endcsname{\ff@y}% + }% + \ifdefempty{\ff@evenx}% + {}% + {% + \expandafter\global\expandafter\setlength + \csname @df@\romannumeral#1@evenx\endcsname{\ff@evenx}% + }% + \ifdefempty{\ff@eveny}% + {}% + {% + \expandafter\global\expandafter\setlength + \csname @df@\romannumeral#1@eveny\endcsname{\ff@eveny}% + }% + \ifdefempty{\ff@oddx}% + {}% + {% + \expandafter\global\expandafter\setlength + \csname @df@\romannumeral#1@posx\endcsname{\ff@oddx}% + }% + \ifdefempty{\ff@oddy}% + {}% + {% + \expandafter\global\expandafter\setlength + \csname @df@\romannumeral#1@posy\endcsname{\ff@oddy}% + }% + \expandafter\xdef\csname @df@dim@\romannumeral#1\endcsname{% + [c][\ff@height][\ff@valign]{\ff@width}% + }% + \ifdefempty{\ff@label}% + {}% + {% + \@s@tdynamicframeid{#1}[\ff@label]% + }% + \ifdefempty{\ff@frametype}% + {}% + {% + \expandafter + \xdef\csname @df@frametype@\romannumeral#1\endcsname{% + \ff@frametype + }% + }% + \ifdefempty{\ff@col}% + {}% + {% + \expandafter\@setframecol\ff@col\end{#1}{col}{df}% + }% + \ifdefempty{\ff@txtcol}% + {}% + {% + \expandafter\@setframecol\ff@txtcol\end{#1}{txtcol}{df}% + }% + \ifdefempty{\ff@backcol}% + {}% + {% + \expandafter\@setframecol\ff@backcol\end{#1}{backcol}{df}% + }% + \ifdefempty{\ff@offset}% + {}% + {% + \expandafter + \xdef\csname @df@offset@\romannumeral#1\endcsname{\ff@offset}% + }% + \ifdefempty{\ff@angle}% + {}% + {% + \expandafter + \xdef\csname @df@angle@\romannumeral#1\endcsname{\ff@angle}% + }% + \ifundef{\ff@shape}{}% + {% + \expandafter\global\expandafter + \let\csname @df@shape@\romannumeral#1\endcsname\ff@shape + }% + \ifdefempty{\ff@pages}% + {}% + {% + \dynamicsetpagelist{#1}{\ff@pages}% + }% + \ifundef{\ff@xpages}{}% + {% + \dynamicsetexclusion{#1}{\ff@xpages}% + }% + \ifdefempty{\ff@style}% + {}% + {% + \ifcsundef{\ff@style}% + {% + \PackageError{flowfram}% + {Unknown style '\ff@style'}% + {% + The command \expandafter\@gobble\string\\\ff@style + \space has not been defined% + }% + }% + {% + \expandafter + \xdef\csname @df@style@\romannumeral#1\endcsname{\ff@style}% + }% + }% + \ifdefempty{\ff@clear}% + {}% + {% + \setboolean{@df@clear@\romannumeral#1}{\ff@clear}% + }% + \ifdefempty{\ff@margin}% + {}% + {% + \PackageError{flowfram}% + {% + Key 'margin' not available for dynamic frames% + }% + {dynamic frames don't have marginal notes}% + }% } % \end{macrocode} %\end{macro} +% +%\begin{macro}{\dynamicsetpagelist} +% Sets the page list for the \gls{dynamic} given by "#1" (the +% \gls{idn}). +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newcommand*{\dynamicsetpagelist}[2]{% + \expandafter + \xdef\csname @df@pages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting page range for dynamic frame + \number#1\space\space to "#2"}% +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\dynamicsetexclusion} +% Sets the exclusion list for the \gls{dynamic} given by "#1" (the +% \gls{idn}). +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newcommand*{\dynamicsetexclusion}[2]{% + \expandafter + \xdef\csname @df@xpages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting exclusion for dynamic frame + \number#1\space\space to "#2"}% +} +% \end{macrocode} +%\end{macro} +%\begin{macro}{\dynamicaddexclusion} +% Adds to the exclusion list for the \gls{dynamic} given by "#1" (the +% \gls{idn}). +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newcommand*{\dynamicaddexclusion}[2]{% + \ifcsempty{@df@xpages@\romannumeral#1} + {% + \expandafter + \xdef\csname @df@xpages@\romannumeral#1\endcsname{#2}% + }% + {% + \expandafter + \xdef\csname @df@xpages@\romannumeral#1\endcsname{% + \csname @df@xpages@\romannumeral#1\endcsname,#2}% + }% + \flf@message{Setting exclusion for dynamic frame + \number#1\space\space to + "\csname @df@xpages@\romannumeral#1\endcsname"}% +} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\@@dynamicframeswapcoords} -% Swap odd and even offsets for a given \gls{static}. Do the main stuff for -% a given \gls{static} \gls{idn}. +% Swap odd and even offsets for a given \gls{dynamic}. Do the main stuff for +% a given \gls{dynamic} \gls{idn}. % \begin{macrocode} \newcommand*{\@@dynamicframeswapcoords}[1]{% -\setlength{\@ff@tmp@x}% -{\csname @df@\romannumeral#1@evenx\endcsname}% -\expandafter\setlength -\csname @df@\romannumeral#1@evenx\endcsname -{\csname @df@\romannumeral#1@posx\endcsname}% -\expandafter\setlength -\csname @df@\romannumeral#1@posx\endcsname{\@ff@tmp@x}% -\setlength{\@ff@tmp@y}% -{\csname @df@\romannumeral#1@eveny\endcsname}% -\expandafter\setlength -\csname @df@\romannumeral#1@eveny\endcsname -{\csname @df@\romannumeral#1@posy\endcsname}% -\expandafter\setlength\csname @df@\romannumeral#1@posy\endcsname -{\@ff@tmp@y}% + \setlength{\@ff@tmp@x}% + {\csname @df@\romannumeral#1@evenx\endcsname}% + \expandafter\setlength + \csname @df@\romannumeral#1@evenx\endcsname + {\csname @df@\romannumeral#1@posx\endcsname}% + \expandafter\setlength + \csname @df@\romannumeral#1@posx\endcsname{\@ff@tmp@x}% + \setlength{\@ff@tmp@y}% + {\csname @df@\romannumeral#1@eveny\endcsname}% + \expandafter\setlength + \csname @df@\romannumeral#1@eveny\endcsname + {\csname @df@\romannumeral#1@posy\endcsname}% + \expandafter\setlength\csname @df@\romannumeral#1@posy\endcsname + {\@ff@tmp@y}% } % \end{macrocode} %\end{macro} @@ -2204,40 +3331,58 @@ frames}{dynamic frames don't have marginal notes}}% % Starred form % \begin{macrocode} \newcommand*{\@sdynamicframeswapcoords}[1]{% -\@for\@ff@id:=#1\do{% -\@dynamicframeid{\@ff@id}% -\@@dynamicframeswapcoords{\ff@id}}} + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \@@dynamicframeswapcoords{\ff@id}}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@dynamicframeswapcoords} % Unstarred form: % \begin{macrocode} \newcommand*{\@dynamicframeswapcoords}[1]{% -\ifthenelse{\equal{#1}{all}}{% -\ff@id=0\relax -\whiledo{\ff@id<\c@maxflow}{\advance\ff@id by 1\relax -\@@dynamicframeswapcoords{\ff@id}}% -}{% -\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{% -\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}% -\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{% -\@@dynamicframeswapcoords{\@colN}% -\advance\@colN by 2\relax}% -}{% -\@for\@ff@id:=#1\do{% -\def\@ff@numstart{0}\def\@ff@numend{10000}% -\@ff@getrange{\@ff@id}% -\ifnum\@ff@numstart=0\relax - \def\@ff@numstart{1}% -\fi -\ifnum\@ff@numend>\c@maxflow - \def\@ff@numend{\c@maxflow}% -\fi -\@colN=\@ff@numstart -\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{% -\@@dynamicframeswapcoords{\@colN}% -\advance\@colN by 1\relax -}}}}} + \ifthenelse{\equal{#1}{all}}% + {% + \ff@id=0\relax + \whiledo{\ff@id<\c@maxflow}% + {% + \advance\ff@id by 1\relax + \@@dynamicframeswapcoords{\ff@id}% + }% + }% + {% + \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}% + {% + \ifthenelse{\equal{#1}{odd}}% + {\@colN=1}% + {\@colN=2}% + \whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}% + {% + \@@dynamicframeswapcoords{\@colN}% + \advance\@colN by 2\relax + }% + }% + {% + \@for\@ff@id:=#1\do{% + \def\@ff@numstart{0}% + \def\@ff@numend{10000}% + \@ff@getrange{\@ff@id}% + \ifnum\@ff@numstart=0\relax + \def\@ff@numstart{1}% + \fi + \ifnum\@ff@numend>\c@maxflow + \def\@ff@numend{\c@maxflow}% + \fi + \@colN=\@ff@numstart + \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% + {% + \@@dynamicframeswapcoords{\@colN}% + \advance\@colN by 1\relax + }% + }% + }% + }% +} % \end{macrocode} %\end{macro} % Set the contents of a \gls{dynamic}. @@ -2250,9 +3395,9 @@ frames}{dynamic frames don't have marginal notes}}% % (where \meta{rn} is the \meta{idn} as a roman numeral.) % \begin{macrocode} \newenvironment{dynamiccontents}[1]{% -\def\@flf@{dynamiccontents}% -\xdynamiccontents{#1}}{% -\endxdynamiccontents + \def\@flf@{dynamiccontents}% + \xdynamiccontents{#1}}{% + \endxdynamiccontents } % \end{macrocode} %\end{environment} @@ -2263,34 +3408,35 @@ frames}{dynamic frames don't have marginal notes}}% % Start of the environment (unstarred): % \begin{macrocode} \def\xdynamiccontents#1{% -\def\@flf@idn{#1}% -\@dynamictok{}\@flf@get@body + \def\@flf@idn{#1}% + \@dynamictok{}\@flf@get@body } % \end{macrocode} % Get the body of the environment: % \begin{macrocode} \long\def\@flf@get@body#1\end{% -\@flf@checkcontinued#1\continueonframe\@nil -\ifdfcontinued - \expandafter\flf@ta\expandafter{\@flf@tmpa}% - \edef\@flf@tmp{\the\@dynamictok\the\flf@ta}% - \@dynamictok\expandafter{\@flf@tmp}% -\else - \@dynamictok\expandafter{\the\@dynamictok#1}% -\fi -\@flf@find@end} + \@flf@checkcontinued#1\continueonframe\@nil + \ifdfcontinued + \expandafter\flf@ta\expandafter{\@flf@tmpa}% + \edef\@flf@tmp{\the\@dynamictok\the\flf@ta}% + \@dynamictok\expandafter{\@flf@tmp}% + \else + \@dynamictok\expandafter{\the\@dynamictok#1}% + \fi + \@flf@find@end +} % \end{macrocode} % Check if \cs{continueonframe} has been used. % \begin{macrocode} \newif\ifdfcontinued \long\def\@flf@checkcontinued#1\continueonframe#2\@nil{% -\long\def\@flf@tmpa{#1}\long\def\@flf@tmpb{#2}% -\ifx\@flf@tmpb\@lempty - \dfcontinuedfalse -\else - \dfcontinuedtrue - \flf@getcontargs#2\@ff@text\@ff@nextid\@ff@rest -\fi + \long\def\@flf@tmpa{#1}\long\def\@flf@tmpb{#2}% + \ifx\@flf@tmpb\@lempty + \dfcontinuedfalse + \else + \dfcontinuedtrue + \flf@getcontargs#2\@ff@text\@ff@nextid\@ff@rest + \fi } % \end{macrocode} % Long equivalent of \cs{@empty}: @@ -2304,65 +3450,70 @@ frames}{dynamic frames don't have marginal notes}}% % store in the sixth argument (which should be a control sequence). % \begin{macrocode} \def\flf@getcontargs{% -\@ifnextchar[{\@flf@getcontargs}{\@flf@getcontargs[]}} + \@ifnextchar[{\@flf@getcontargs}{\@flf@getcontargs[]}% +} % \end{macrocode} % \begin{macrocode} \long\def\@flf@getcontargs[#1]#2#3\continueonframe#4#5#6{% -\def#4{#1}\def#5{#2}\def#6{#3}% + \def#4{#1}\def#5{#2}\def#6{#3}% } % \end{macrocode} % Find the end of the environment: % \begin{macrocode} \def\@flf@find@end#1{% -\def\@tempa{#1}% -\global\let\flf@next=\relax -\ifdfcontinued - \@dynamictok\expandafter - {\the\@dynamictok\ffcontinuedtextlayout}% - \protected@edef\@tmpa{\the\@dynamictok{\@ff@text}}% - \@dynamictok\expandafter{\@tmpa}% - \toks@\expandafter{\@ff@rest}% - \edef\flf@next{\noexpand\@flf@get@body\noexpand\end{#1}% - \noexpand\begin{#1}{\@ff@nextid}\noexpand\par - \noexpand\noindent\noexpand\ignorespaces - \the\toks@\noexpand\end{#1}}% -\else - \ifx\@tempa\@flf@ - \let\flf@next=\@flf@endxdynamiccontents - \else + \def\@tempa{#1}% + \global\let\flf@next=\relax + \ifdfcontinued \@dynamictok\expandafter - {\the\@dynamictok\end{#1}}% - \let\flf@next=\@flf@get@body + {\the\@dynamictok\ffcontinuedtextlayout}% + \protected@edef\@tmpa{\the\@dynamictok{\@ff@text}}% + \@dynamictok\expandafter{\@tmpa}% + \toks@\expandafter{\@ff@rest}% + \edef\flf@next{\noexpand\@flf@get@body\noexpand\end{#1}% + \noexpand\begin{#1}{\@ff@nextid}\noexpand\par + \noexpand\noindent\noexpand\ignorespaces + \the\toks@\noexpand\end{#1}}% + \else + \ifx\@tempa\@flf@ + \let\flf@next=\@flf@endxdynamiccontents + \else + \@dynamictok\expandafter + {\the\@dynamictok\end{#1}}% + \let\flf@next=\@flf@get@body + \fi \fi -\fi -\flf@next + \flf@next } % \end{macrocode} % End of the environment: % \begin{macrocode} \let\endxdynamiccontents\relax \def\@flf@endxdynamiccontents{% -\ifnum\@flf@idn>\c@maxdynamic - \PackageError{flowfram}{Dynamic frame \number\@flf@idn\ does not exist}{% - You have specified dynamic frame number \number\@flf@idn, but there are - only \number\c@maxdynamic\space dynamic frames currently defined}% -\else - \expandafter - \xdef\csname @dynamicframe@\romannumeral\@flf@idn\endcsname{% - \the\@dynamictok}% - \expandafter -\fi -\expandafter\end\expandafter{\@flf@}% + \ifnum\@flf@idn>\c@maxdynamic + \PackageError{flowfram}% + {Dynamic frame \number\@flf@idn\ does not exist}% + {% + You have specified dynamic frame number \number\@flf@idn, + but there are only \number\c@maxdynamic\space dynamic + frames currently defined% + }% + \else + \expandafter + \xdef\csname @dynamicframe@\romannumeral\@flf@idn\endcsname{% + \the\@dynamictok}% + \expandafter + \fi + \expandafter\end\expandafter{\@flf@}% } % \end{macrocode} %\begin{environment}{dynamiccontents*} % Starred version % \begin{macrocode} \newenvironment{dynamiccontents*}[1]{% -\def\@flf@{dynamiccontents*}% -\@dynamicframeid{#1}% -\xdynamiccontents{\ff@id}}{% -\enddynamiccontents + \def\@flf@{dynamiccontents*}% + \@dynamicframeid{#1}% + \xdynamiccontents{\ff@id}}{% + \enddynamiccontents } % \end{macrocode} %\end{environment} @@ -2370,28 +3521,34 @@ frames}{dynamic frames don't have marginal notes}}% %\begin{macro}{\setdynamiccontents} % \begin{macrocode} \newcommand{\setdynamiccontents}{% -\@ifstar\@ssetdynamiccontents\@setdynamiccontents} + \@ifstar\@ssetdynamiccontents\@setdynamiccontents +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ssetdynamiccontents} % Starred version: identify \gls{dynamic} by its \gls{idl}: % \begin{macrocode} \newcommand{\@ssetdynamiccontents}[2]{% -\@dynamicframeid{#1}\@setdynamiccontents{\ff@id}{#2}} + \@dynamicframeid{#1}\@setdynamiccontents{\ff@id}{#2}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@setdynamiccontents} % Unstarred version: identify \gls{dynamic} by its \gls{idn}: % \begin{macrocode} \newcommand{\@setdynamiccontents}[2]{% -\ifnum#1>\c@maxdynamic -\PackageError{flowfram}{Dynamic frame \number#1\ does not exist}{% -You have specified dynamic frame number \number#1, but there are -only \number\c@maxdynamic\space dynamic frames currently defined}% -\else -\expandafter -\gdef\csname @dynamicframe@\romannumeral#1\endcsname{#2}% -\fi} + \ifnum#1>\c@maxdynamic + \PackageError{flowfram}% + {Dynamic frame \number#1\ does not exist}% + {% + You have specified dynamic frame number \number#1, but there are + only \number\c@maxdynamic\space dynamic frames currently defined% + }% + \else + \expandafter + \gdef\csname @dynamicframe@\romannumeral#1\endcsname{#2}% + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\appenddynamiccontents} @@ -2399,7 +3556,8 @@ only \number\c@maxdynamic\space dynamic frames currently defined}% % see if starred or unstarred version is being used. % \begin{macrocode} \newcommand{\appenddynamiccontents}{% -\@ifstar\@sappenddynamic\@appenddynamic} + \@ifstar\@sappenddynamic\@appenddynamic +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sappenddynamic} @@ -2407,31 +3565,38 @@ only \number\c@maxdynamic\space dynamic frames currently defined}% % the unstarred version. % \begin{macrocode} \newcommand{\@sappenddynamic}[2]{% -\@dynamicframeid{#1}\@appenddynamic{\ff@id}{#2}} + \@dynamicframeid{#1}\@appenddynamic{\ff@id}{#2}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@appenddynamic} % Unstarred version. % \begin{macrocode} \newcommand{\@appenddynamic}[2]{% -\ifnum#1>\c@maxdynamic - \PackageError{flowfram}{Dynamic frame \number#1 does not exist}{% - You have specified dynamic frame number \number#1, - but there are only - \number\c@maxdynamic\space dynamic frames currently defined}% -\else - \expandafter\@ff@addtolist - \csname @dynamicframe@\romannumeral#1\endcsname\entry{#2}% -\fi} + \ifnum#1>\c@maxdynamic + \PackageError{flowfram}% + {Dynamic frame \number#1 does not exist}% + {% + You have specified dynamic frame number \number#1, + but there are only + \number\c@maxdynamic\space dynamic frames currently defined% + }% + \else + \expandafter\@ff@addtolist + \csname @dynamicframe@\romannumeral#1\endcsname\entry{#2}% + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@addtolist} % Append "#2" onto the end of "#1". % \begin{macrocode} \newtoks\flf@ta \newtoks\flf@tb -\long\def\@ff@addtolist#1\entry#2{\flf@ta={{#2}}% -\flf@tb=\expandafter{#1}% -\xdef#1{\the\flf@tb\the\flf@ta}} +\long\def\@ff@addtolist#1\entry#2{% + \flf@ta={{#2}}% + \flf@tb=\expandafter{#1}% + \xdef#1{\the\flf@tb\the\flf@ta}% +} % \end{macrocode} %\end{macro} % @@ -2444,11 +3609,17 @@ only \number\c@maxdynamic\space dynamic frames currently defined}% % the environment is used, \marg{id} refers to the \gls{idl}, otherwise % it refers to the \gls{idn} of the new frame. % \begin{macrocode} -\newcommand{\continueonframe}{\PackageError{flowfram}{Can't continue -to new frame: not in static or dynamic frame}{% -\string\continueonframe\space may only -be used inside `staticcontents' or `dynamiccontents' environments -(of their starred versions)}} +\newcommand{\continueonframe}{% + \PackageError{flowfram}% + {% + Can't continue to new frame: not in static or dynamic frame% + }% + {% + \string\continueonframe\space may only + be used inside `staticcontents' or `dynamiccontents' + environments (or their starred versions)% + }% +} % \end{macrocode} %\end{macro} % \cs{@scontinueonframe} and \cs{@continueonframe} are set @@ -2458,23 +3629,27 @@ be used inside `staticcontents' or `dynamiccontents' environments % Static starred version uses \gls{idl} % \begin{macrocode} \newcommand*{\@staticscontinueonframe}[2][]{% -\ffcontinuedtextlayout{#1}% -\end{staticcontents*}% -\begin{staticcontents*}{#2}\par\noindent\ignorespaces} + \ffcontinuedtextlayout{#1}% + \end{staticcontents*}% + \begin{staticcontents*}{#2}\par\noindent\ignorespaces +} % \end{macrocode} % Static unstarred version uses \gls{idn} % \begin{macrocode} \newcommand*{\@staticcontinueonframe}[2][]{% -\ffcontinuedtextlayout{#1}% -\end{staticcontents}% -\begin{staticcontents}{#2}\par\noindent\ignorespaces} + \ffcontinuedtextlayout{#1}% + \end{staticcontents}% + \begin{staticcontents}{#2}\par\noindent\ignorespaces +} % \end{macrocode} % %\begin{macro}{\ffcontinuedtextlayout} %Displays the continued text used by \cs{continueonframe}. % \begin{macrocode} \newcommand{\ffcontinuedtextlayout}[1]{% -\parfillskip=0pt\par\hfill\ffcontinuedtextfont{#1}} + \parfillskip=0pt\par\hfill + \ffcontinuedtextfont{#1}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\ffcontinuedtextfont} @@ -2495,18 +3670,20 @@ be used inside `staticcontents' or `dynamiccontents' environments % First the odd pages. % \begin{macrocode} \newcommand*{\computeleftedgeodd}[1]{% -\setlength{#1}{-1in}% -\addtolength{#1}{-\hoffset}% -\addtolength{#1}{-\oddsidemargin}} + \setlength{#1}{-1in}% + \addtolength{#1}{-\hoffset}% + \addtolength{#1}{-\oddsidemargin}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\computeleftedgeeven} % Now for the even pages % \begin{macrocode} \newcommand*{\computeleftedgeeven}[1]{% -\setlength{#1}{-1in}% -\addtolength{#1}{-\hoffset}% -\addtolength{#1}{-\evensidemargin}} + \setlength{#1}{-1in}% + \addtolength{#1}{-\hoffset}% + \addtolength{#1}{-\evensidemargin}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\computetopedge} @@ -2514,12 +3691,13 @@ be used inside `staticcontents' or `dynamiccontents' environments % the \gls{typeblock}. % \begin{macrocode} \newcommand*{\computetopedge}[1]{% -\setlength{#1}{\textheight}% -\addtolength{#1}{\headheight}% -\addtolength{#1}{\headsep}% -\addtolength{#1}{1in}% -\addtolength{#1}{\voffset}% -\addtolength{#1}{\topmargin}} + \setlength{#1}{\textheight}% + \addtolength{#1}{\headheight}% + \addtolength{#1}{\headsep}% + \addtolength{#1}{1in}% + \addtolength{#1}{\voffset}% + \addtolength{#1}{\topmargin}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\computebottomedge} @@ -2527,8 +3705,9 @@ be used inside `staticcontents' or `dynamiccontents' environments % of the \gls{typeblock}. % \begin{macrocode} \newcommand*{\computebottomedge}[1]{% -\computetopedge{#1}% -\addtolength{#1}{-\paperheight}} + \computetopedge{#1}% + \addtolength{#1}{-\paperheight}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\computerightedgeodd} @@ -2537,16 +3716,18 @@ be used inside `staticcontents' or `dynamiccontents' environments % and even pages. First the odd pages. % \begin{macrocode} \newcommand*{\computerightedgeodd}[1]{% -\computeleftedgeodd{#1}% -\addtolength{#1}{\paperwidth}} + \computeleftedgeodd{#1}% + \addtolength{#1}{\paperwidth}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\computerightedgeeven} % Now for the even pages. % \begin{macrocode} \newcommand*{\computerightedgeeven}[1]{% -\computeleftedgeeven{#1}% -\addtolength{#1}{\paperwidth}} + \computeleftedgeeven{#1}% + \addtolength{#1}{\paperwidth}% +} % \end{macrocode} %\end{macro} % Compute the minimum area surrounding the listed \glspl{flow}. @@ -2565,84 +3746,91 @@ be used inside `staticcontents' or `dynamiccontents' environments % version identifies frame by \gls{idn}. % \begin{macrocode} \newcommand*{\computeflowframearea}{% -\@ifstar\@scomputeffarea\@computeffarea} + \@ifstar\@scomputeffarea\@computeffarea +} % \end{macrocode} %\end{macro} %\begin{macro}{\@scomputeffarea} % Starred version. % \begin{macrocode} \newcommand*{\@scomputeffarea}[1]{% -\setlength{\ffareax}{\paperwidth}% -\setlength{\ffareay}{\paperheight}% -\setlength{\@ff@tmp@x}{0pt}% -\setlength{\@ff@tmp@y}{0pt}% -\@for\@ff@id:=#1\do{\@flowframeid{\@ff@id}% -%\ff@id is the IDN -\ifnum\ffareax>\flowframex{\ff@id}% -\setlength{\ffareax}{\flowframex{\ff@id}}% -\fi -\ifnum\ffareay>\flowframey{\ff@id}% -\setlength{\ffareay}{\flowframey{\ff@id}}% -\fi -\setlength{\@ff@offset}{\flowframex{\ff@id}}% -\addtolength{@ff@offset}{\flowframewidth{\ff@id}}% -\ifnum\@ff@tmp@x<\@ff@offset -\setlength{\@ff@tmp@x}{\@ff@offset}% -\fi -\setlength{\@ff@offset}{\flowframey{\ff@id}}% -\addtolength{@ff@offset}{\flowframeheight{\ff@id}}% -\ifnum\@ff@tmp@y<\@ff@offset -\setlength{\@ff@tmp@y}{\@ff@offset}% -\fi -}% -\setlength{\ffareawidth}{\@ff@tmp@x}% -\addtolength{\ffareawidth}{-\ffareax}% -\setlength{\ffareaheight}{\@ff@tmp@y}% -\addtolength{\ffareaheight}{-\ffareay}} + \setlength{\ffareax}{\paperwidth}% + \setlength{\ffareay}{\paperheight}% + \setlength{\@ff@tmp@x}{0pt}% + \setlength{\@ff@tmp@y}{0pt}% + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% +% \end{macrocode} +%\cs{ff@id} is the IDN +% \begin{macrocode} + \ifnum\ffareax>\flowframex{\ff@id}% + \setlength{\ffareax}{\flowframex{\ff@id}}% + \fi + \ifnum\ffareay>\flowframey{\ff@id}% + \setlength{\ffareay}{\flowframey{\ff@id}}% + \fi + \setlength{\@ff@offset}{\flowframex{\ff@id}}% + \addtolength{@ff@offset}{\flowframewidth{\ff@id}}% + \ifnum\@ff@tmp@x<\@ff@offset + \setlength{\@ff@tmp@x}{\@ff@offset}% + \fi + \setlength{\@ff@offset}{\flowframey{\ff@id}}% + \addtolength{@ff@offset}{\flowframeheight{\ff@id}}% + \ifnum\@ff@tmp@y<\@ff@offset + \setlength{\@ff@tmp@y}{\@ff@offset}% + \fi + }% + \setlength{\ffareawidth}{\@ff@tmp@x}% + \addtolength{\ffareawidth}{-\ffareax}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \addtolength{\ffareaheight}{-\ffareay}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@computeffarea} % Unstarred version. % \begin{macrocode} \newcommand*{\@computeffarea}[1]{% -\setlength{\ffareax}{\paperwidth}% -\setlength{\ffareay}{\paperheight}% -\setlength{\@ff@tmp@x}{0pt}% -\setlength{\@ff@tmp@y}{0pt}% -\@for\@ff@id:=#1\do{% -\ff@id=\@ff@id\relax -\setlength{\@ff@offset}{\flowframex{\ff@id}}% -\ifdim\ffareax>\@ff@offset -\setlength{\ffareax}{\@ff@offset}% -\fi -\setlength{\@ff@offset}{\flowframey{\ff@id}}% -\ifdim\ffareay>\@ff@offset -\setlength{\ffareay}{\@ff@offset}% -\fi -\setlength{\@ff@offset}{\flowframex{\ff@id}}% -\addtolength{\@ff@offset}{\flowframewidth{\ff@id}}% -\ifdim\@ff@tmp@x<\@ff@offset -\setlength{\@ff@tmp@x}{\@ff@offset}% -\fi -\setlength{\@ff@offset}{\flowframey{\ff@id}}% -\addtolength{\@ff@offset}{\flowframeheight{\ff@id}}% -\ifdim\@ff@tmp@y<\@ff@offset -\setlength{\@ff@tmp@y}{\@ff@offset}% -\fi -}% -\setlength{\ffareawidth}{\@ff@tmp@x}% -\addtolength{\ffareawidth}{-\ffareax}% -\setlength{\ffareaheight}{\@ff@tmp@y}% -\addtolength{\ffareaheight}{-\ffareay}} + \setlength{\ffareax}{\paperwidth}% + \setlength{\ffareay}{\paperheight}% + \setlength{\@ff@tmp@x}{0pt}% + \setlength{\@ff@tmp@y}{0pt}% + \@for\@ff@id:=#1\do{% + \ff@id=\@ff@id\relax + \setlength{\@ff@offset}{\flowframex{\ff@id}}% + \ifdim\ffareax>\@ff@offset + \setlength{\ffareax}{\@ff@offset}% + \fi + \setlength{\@ff@offset}{\flowframey{\ff@id}}% + \ifdim\ffareay>\@ff@offset + \setlength{\ffareay}{\@ff@offset}% + \fi + \setlength{\@ff@offset}{\flowframex{\ff@id}}% + \addtolength{\@ff@offset}{\flowframewidth{\ff@id}}% + \ifdim\@ff@tmp@x<\@ff@offset + \setlength{\@ff@tmp@x}{\@ff@offset}% + \fi + \setlength{\@ff@offset}{\flowframey{\ff@id}}% + \addtolength{\@ff@offset}{\flowframeheight{\ff@id}}% + \ifdim\@ff@tmp@y<\@ff@offset + \setlength{\@ff@tmp@y}{\@ff@offset}% + \fi + }% + \setlength{\ffareawidth}{\@ff@tmp@x}% + \addtolength{\ffareawidth}{-\ffareax}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \addtolength{\ffareaheight}{-\ffareay}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@swaplen} % Swap the values of two lengths % \begin{macrocode} \newcommand*{\@ff@swaplen}[2]{% -\setlength{\@ff@tmp@x}{#1}% -\setlength{#1}{#2}% -\setlength{#2}{\@ff@tmp@x}} + \setlength{\@ff@tmp@x}{#1}% + \setlength{#1}{#2}% + \setlength{#2}{\@ff@tmp@x}% +} % \end{macrocode} %\end{macro} % @@ -2654,59 +3842,83 @@ be used inside `staticcontents' or `dynamiccontents' environments % "\ffareax", "\ffareay", "\ffareawidth" and "\ffareaheight". % \begin{macrocode} \newcommand*{\@ff@getdim}[2]{% -\ifnum#2<1\relax - \PackageError{flowfram}{Frame IDNs start from 1}{% - You have specified a frame IDN of '\number#2'}% -\fi -\ifcase#1\relax - \PackageError{flowfram}{Unknown frame ID type '#1'}{% - Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)}% -\or - \ifnum#2>\c@maxflow\relax - \PackageError{flowfram}{Invalid flow frame IDN '\number#2'}{% - Flow frame IDNs go from 1 to \number\c@maxflow}% - \else - \setlength{\ffareax}{\flowframex{#2}}% - \setlength{\ffareay}{\flowframey{#2}}% - \setlength{\ffareaevenx}{\flowframeevenx{#2}}% - \setlength{\ffareaeveny}{\flowframeeveny{#2}}% - \setlength{\ffareawidth}{\flowframewidth{#2}}% - \setlength{\ffareaheight}{\flowframeheight{#2}}% - \fi -\or - \ifnum#2>\c@maxstatic\relax - \PackageError{flowfram}{Invalid static frame IDN '\number#2'}{% - Static frame IDNs go from 1 to \number\c@maxstatic}% - \else - \setlength{\ffareax}{\staticframex{#2}}% - \setlength{\ffareay}{\staticframey{#2}}% - \setlength{\ffareaevenx}{\staticframeevenx{#2}}% - \setlength{\ffareaeveny}{\staticframeeveny{#2}}% - \expandafter\expandafter\expandafter - \@ff@getstaticpos - \csname @sf@dim@\romannumeral#2\endcsname - \setlength{\ffareawidth}{\@ff@tmp@x}% - \setlength{\ffareaheight}{\@ff@tmp@y}% - \fi -\or - \ifnum#2>\c@maxdynamic\relax - \PackageError{flowfram}{Invalid dynamic frame IDN '\number#2'}{% - Dynamic frame IDNs go from 1 to \number\c@maxdynamic}% + \ifnum#2<1\relax + \PackageError{flowfram}% + {Frame IDNs start from 1}% + {% + You have specified a frame IDN of '\number#2'% + }% + \fi + \ifcase#1\relax + \PackageError{flowfram}% + {Unknown frame ID type '#1'}% + {% + Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)% + }% + \or +% \end{macrocode} +% Flow frame +% \begin{macrocode} + \ifnum#2>\c@maxflow\relax + \PackageError{flowfram}{Invalid flow frame IDN '\number#2'}{% + Flow frame IDNs go from 1 to \number\c@maxflow}% + \else + \setlength{\ffareax}{\flowframex{#2}}% + \setlength{\ffareay}{\flowframey{#2}}% + \setlength{\ffareaevenx}{\flowframeevenx{#2}}% + \setlength{\ffareaeveny}{\flowframeeveny{#2}}% + \setlength{\ffareawidth}{\flowframewidth{#2}}% + \setlength{\ffareaheight}{\flowframeheight{#2}}% + \fi + \or +% \end{macrocode} +% Static frame +% \begin{macrocode} + \ifnum#2>\c@maxstatic\relax + \PackageError{flowfram}% + {Invalid static frame IDN '\number#2'}% + {% + Static frame IDNs go from 1 to \number\c@maxstatic + }% + \else + \setlength{\ffareax}{\staticframex{#2}}% + \setlength{\ffareay}{\staticframey{#2}}% + \setlength{\ffareaevenx}{\staticframeevenx{#2}}% + \setlength{\ffareaeveny}{\staticframeeveny{#2}}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos + \csname @sf@dim@\romannumeral#2\endcsname + \setlength{\ffareawidth}{\@ff@tmp@x}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \fi + \or +% \end{macrocode} +% Dynamic frame +% \begin{macrocode} + \ifnum#2>\c@maxdynamic\relax + \PackageError{flowfram}% + {Invalid dynamic frame IDN '\number#2'}% + {% + Dynamic frame IDNs go from 1 to \number\c@maxdynamic + }% + \else + \setlength{\ffareax}{\dynamicframex{#2}}% + \setlength{\ffareay}{\dynamicframey{#2}}% + \setlength{\ffareaevenx}{\dynamicframeevenx{#2}}% + \setlength{\ffareaeveny}{\dynamicframeeveny{#2}}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos + \csname @df@dim@\romannumeral#2\endcsname + \setlength{\ffareawidth}{\@ff@tmp@x}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \fi \else - \setlength{\ffareax}{\dynamicframex{#2}}% - \setlength{\ffareay}{\dynamicframey{#2}}% - \setlength{\ffareaevenx}{\dynamicframeevenx{#2}}% - \setlength{\ffareaeveny}{\dynamicframeeveny{#2}}% - \expandafter\expandafter\expandafter - \@ff@getstaticpos - \csname @df@dim@\romannumeral#2\endcsname - \setlength{\ffareawidth}{\@ff@tmp@x}% - \setlength{\ffareaheight}{\@ff@tmp@y}% - \fi -\else - \PackageError{flowfram}{Unknown frame ID type '#1'}{% - Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)}% -\fi + \PackageError{flowfram}% + {Unknown frame ID type '#1'}% + {% + Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)% + }% + \fi } % \end{macrocode} %\end{macro} @@ -2720,53 +3932,80 @@ be used inside `staticcontents' or `dynamiccontents' environments % "\ffareax", "\ffareay", "\ffareawidth" and "\ffareaheight". % \begin{macrocode} \newcommand*{\@ff@getevendim}[2]{% -\ifnum#2<1\relax - \PackageError{flowfram}{Frame IDNs start from 1}{% - You have specified a frame IDN of '\number#2'}% -\fi -\ifcase#1\relax - \PackageError{flowfram}{Unknown frame ID type '#1'}{% - Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)} -\or - \ifnum#2>\c@maxflow - \PackageError{flowfram}{Invalid flow frame IDN '\number#2'}{% - Flow frame IDNs go from 1 to \number\c@maxflow}% - \else - \setlength{\ffareax}{\flowframeevenx{#2}}% - \setlength{\ffareay}{\flowframeeveny{#2}}% - \setlength{\ffareawidth}{\flowframewidth{#2}}% - \setlength{\ffareaheight}{\flowframeheight{#2}}% - \fi -\or - \ifnum#2>\c@maxstatic\relax - \PackageError{flowfram}{Invalid static frame IDN '\number#2'}{% - Static frame IDNs go from 1 to \number\c@maxstatic}% - \else - \setlength{\ffareax}{\staticframeevenx{#2}}% - \setlength{\ffareay}{\staticframeeveny{#2}}% - \expandafter\expandafter\expandafter - \@ff@getstaticpos - \csname @sf@dim@\romannumeral#2\endcsname - \setlength{\ffareawidth}{\@ff@tmp@x}% - \setlength{\ffareaheight}{\@ff@tmp@y}% - \fi -\or - \ifnum#2>\c@maxdynamic\relax - \PackageError{flowfram}{Invalid dynamic frame IDN '\number#2'}{% - Dynamic frame IDNs go from 1 to \number\c@maxdynamic}% + \ifnum#2<1\relax + \PackageError{flowfram}% + {Frame IDNs start from 1}% + {% + You have specified a frame IDN of '\number#2'% + }% + \fi + \ifcase#1\relax + \PackageError{flowfram}% + {Unknown frame ID type '#1'}% + {% + Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)% + } + \or +% \end{macrocode} +% Flow frame +% \begin{macrocode} + \ifnum#2>\c@maxflow + \PackageError{flowfram}% + {Invalid flow frame IDN '\number#2'}% + {% + Flow frame IDNs go from 1 to \number\c@maxflow + }% + \else + \setlength{\ffareax}{\flowframeevenx{#2}}% + \setlength{\ffareay}{\flowframeeveny{#2}}% + \setlength{\ffareawidth}{\flowframewidth{#2}}% + \setlength{\ffareaheight}{\flowframeheight{#2}}% + \fi + \or +% \end{macrocode} +% Static frame +% \begin{macrocode} + \ifnum#2>\c@maxstatic\relax + \PackageError{flowfram}% + {Invalid static frame IDN '\number#2'}% + {% + Static frame IDNs go from 1 to \number\c@maxstatic + }% + \else + \setlength{\ffareax}{\staticframeevenx{#2}}% + \setlength{\ffareay}{\staticframeeveny{#2}}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos + \csname @sf@dim@\romannumeral#2\endcsname + \setlength{\ffareawidth}{\@ff@tmp@x}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \fi + \or +% \end{macrocode} +% Dynamic frame +% \begin{macrocode} + \ifnum#2>\c@maxdynamic\relax + \PackageError{flowfram}% + {Invalid dynamic frame IDN '\number#2'}% + {% + Dynamic frame IDNs go from 1 to \number\c@maxdynamic + }% + \else + \setlength{\ffareax}{\dynamicframeevenx{#2}}% + \setlength{\ffareay}{\dynamicframeeveny{#2}}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos + \csname @df@dim@\romannumeral#2\endcsname + \setlength{\ffareawidth}{\@ff@tmp@x}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \fi \else - \setlength{\ffareax}{\dynamicframeevenx{#2}}% - \setlength{\ffareay}{\dynamicframeeveny{#2}}% - \expandafter\expandafter\expandafter - \@ff@getstaticpos - \csname @df@dim@\romannumeral#2\endcsname - \setlength{\ffareawidth}{\@ff@tmp@x}% - \setlength{\ffareaheight}{\@ff@tmp@y}% + \PackageError{flowfram}% + {Unknown frame ID type '#1'}% + {% + Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)% + }% \fi -\else - \PackageError{flowfram}{Unknown frame ID type '#1'}{% - Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)} -\fi } % \end{macrocode} %\end{macro} @@ -2776,14 +4015,16 @@ be used inside `staticcontents' or `dynamiccontents' environments % frames: % \begin{macrocode} \newcommand*{\getstaticbounds}{% -\@ifstar\@sgetstaticbounds\@getstaticbounds} + \@ifstar\@sgetstaticbounds\@getstaticbounds +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sgetstaticbounds} % Starred version (specify by \gls{idl}): % \begin{macrocode} \newcommand*{\@sgetstaticbounds}[1]{% -\@staticframeid{#1}\@getstaticbounds{\ff@id}} + \@staticframeid{#1}\@getstaticbounds{\ff@id}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@getstaticbounds} @@ -2800,14 +4041,16 @@ be used inside `staticcontents' or `dynamiccontents' environments % Even pages % \begin{macrocode} \newcommand*{\getstaticevenbounds}{% -\@ifstar\@sgetstaticevenbounds\@getstaticevenbounds} + \@ifstar\@sgetstaticevenbounds\@getstaticevenbounds +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sgetstaticevenbounds} % Starred version (specify by \gls{idl}): % \begin{macrocode} \newcommand*{\@sgetstaticevenbounds}[1]{% -\@staticframeid{#1}\@getstaticevenbounds{\ff@id}} + \@staticframeid{#1}\@getstaticevenbounds{\ff@id}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@getstaticevenbounds} @@ -2822,14 +4065,16 @@ be used inside `staticcontents' or `dynamiccontents' environments % Next flow frames: % \begin{macrocode} \newcommand*{\getflowbounds}{% -\@ifstar\@sgetflowbounds\@getflowbounds} + \@ifstar\@sgetflowbounds\@getflowbounds +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sgetflowbounds} % Starred version (specify by \gls{idl}): % \begin{macrocode} \newcommand*{\@sgetflowbounds}[1]{% -\@flowframeid{#1}\@getflowbounds{\ff@id}} + \@flowframeid{#1}\@getflowbounds{\ff@id}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@getflowbounds} @@ -2845,7 +4090,8 @@ be used inside `staticcontents' or `dynamiccontents' environments % Even pages: % \begin{macrocode} \newcommand*{\getflowevenbounds}{% -\@ifstar\@sgetflowevenbounds\@getflowevenbounds} + \@ifstar\@sgetflowevenbounds\@getflowevenbounds +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sgetflowevenbounds} @@ -2853,7 +4099,8 @@ be used inside `staticcontents' or `dynamiccontents' environments % Starred version (specify by \gls{idl}): % \begin{macrocode} \newcommand*{\@sgetflowevenbounds}[1]{% -\@flowframeid{#1}\@getflowevenbounds{\ff@id}} + \@flowframeid{#1}\@getflowevenbounds{\ff@id}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@getflowevenbounds} @@ -2868,14 +4115,16 @@ be used inside `staticcontents' or `dynamiccontents' environments % Next dynamic frames: % \begin{macrocode} \newcommand*{\getdynamicbounds}{% -\@ifstar\@sgetdynamicbounds\@getdynamicbounds} + \@ifstar\@sgetdynamicbounds\@getdynamicbounds +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sgetdynamicbounds} % Starred version (specify by \gls{idl}): % \begin{macrocode} \newcommand*{\@sgetdynamicbounds}[1]{% -\@dynamicframeid{#1}\@getdynamicbounds{\ff@id}} + \@dynamicframeid{#1}\@getdynamicbounds{\ff@id}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@getdynamicbounds} @@ -2889,14 +4138,16 @@ be used inside `staticcontents' or `dynamiccontents' environments % Even pages: % \begin{macrocode} \newcommand*{\getdynamicevenbounds}{% -\@ifstar\@sgetdynamicevenbounds\@getdynamicevenbounds} + \@ifstar\@sgetdynamicevenbounds\@getdynamicevenbounds +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sgetdynamicevenbounds} % Starred version (specify by \gls{idl}): % \begin{macrocode} \newcommand*{\@sgetdynamicevenbounds}[1]{% -\@dynamicframeid{#1}\@getdynamicevenbounds{\ff@id}} + \@dynamicframeid{#1}\@getdynamicevenbounds{\ff@id}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@getdynamicevenbounds} @@ -2943,25 +4194,28 @@ be used inside `staticcontents' or `dynamiccontents' environments % spans the page break. % \begin{macrocode} \newcommand*{\checkifframeabove}{% -\@ifstar\@scheckifframeabove\@checkifframeabove} + \@ifstar\@scheckifframeabove\@checkifframeabove +} % \end{macrocode} % Starred version: % \begin{macrocode} \newcommand*{\@scheckifframeabove}[4]{% -\ifodd\c@page - \@soddcheckifframeabove{#1}{#2}{#3}{#4}% -\else - \@sevencheckifframeabove{#1}{#2}{#3}{#4}% -\fi} + \ifodd\c@page + \@soddcheckifframeabove{#1}{#2}{#3}{#4}% + \else + \@sevencheckifframeabove{#1}{#2}{#3}{#4}% + \fi +} % \end{macrocode} % Unstarred version: % \begin{macrocode} \newcommand*{\@checkifframeabove}[4]{% -\ifodd\c@page - \@oddcheckifframeabove{#1}{#2}{#3}{#4}% -\else - \@evencheckifframeabove{#1}{#2}{#3}{#4}% -\fi} + \ifodd\c@page + \@oddcheckifframeabove{#1}{#2}{#3}{#4}% + \else + \@evencheckifframeabove{#1}{#2}{#3}{#4}% + \fi +} % \end{macrocode} %\end{macro} % @@ -2976,46 +4230,73 @@ be used inside `staticcontents' or `dynamiccontents' environments % second frame if they overlap. % \begin{macrocode} \newcommand*{\oddcheckifframeabove}{% -\@ifstar\@soddcheckifframeabove\@oddcheckifframeabove} + \@ifstar\@soddcheckifframeabove\@oddcheckifframeabove +} % \end{macrocode} % The starred version % \begin{macrocode} \newcommand*{\@soddcheckifframeabove}[4]{% -\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1bounds\endcsname{#2}% -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3bounds\endcsname{#4}% -\advance\ffareay by \ffareaheight\relax -\expandafter\ifdim\@ff@check>\ffareay - \FLFabovetrue -\else - \FLFabovefalse -\fi + \@ifundefined{@sget#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or flow% + }% + }% + {}% + \csname @sget#1bounds\endcsname{#2}% + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@sget#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or flow% + }% + }% + {}% + \csname @sget#3bounds\endcsname{#4}% + \advance\ffareay by \ffareaheight\relax + \expandafter\ifdim\@ff@check>\ffareay + \FLFabovetrue + \else + \FLFabovefalse + \fi } % \end{macrocode} % The unstarred version % \begin{macrocode} \newcommand*{\@oddcheckifframeabove}[4]{% -\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1bounds\endcsname{#2}% -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3bounds\endcsname{#4}% -\advance\ffareay by \ffareaheight\relax -\expandafter\ifdim\@ff@check>\ffareay - \FLFabovetrue -\else - \FLFabovefalse -\fi + \@ifundefined{@get#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1bounds\endcsname{#2}% + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@get#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3bounds\endcsname{#4}% + \advance\ffareay by \ffareaheight\relax + \expandafter\ifdim\@ff@check>\ffareay + \FLFabovetrue + \else + \FLFabovefalse + \fi } % \end{macrocode} %\end{macro} @@ -3035,25 +4316,28 @@ flow}}{}% % spans the page break. % \begin{macrocode} \newcommand*{\checkifframebelow}{% -\@ifstar\@scheckifframebelow\@checkifframebelow} + \@ifstar\@scheckifframebelow\@checkifframebelow +} % \end{macrocode} % Starred version: % \begin{macrocode} \newcommand*{\@scheckifframebelow}[4]{% -\ifodd\c@page - \@soddcheckifframebelow{#1}{#2}{#3}{#4}% -\else - \@sevencheckifframebelow{#1}{#2}{#3}{#4}% -\fi} + \ifodd\c@page + \@soddcheckifframebelow{#1}{#2}{#3}{#4}% + \else + \@sevencheckifframebelow{#1}{#2}{#3}{#4}% + \fi +} % \end{macrocode} % Unstarred version: % \begin{macrocode} \newcommand*{\@checkifframebelow}[4]{% -\ifodd\c@page - \@oddcheckifframebelow{#1}{#2}{#3}{#4}% -\else - \@evencheckifframebelow{#1}{#2}{#3}{#4}% -\fi} + \ifodd\c@page + \@oddcheckifframebelow{#1}{#2}{#3}{#4}% + \else + \@evencheckifframebelow{#1}{#2}{#3}{#4}% + \fi +} % \end{macrocode} %\end{macro} % @@ -3069,46 +4353,75 @@ flow}}{}% % second frame if they overlap. % \begin{macrocode} \newcommand*{\oddcheckifframebelow}{% -\@ifstar\@soddcheckifframebelow\@oddcheckifframebelow} + \@ifstar\@soddcheckifframebelow\@oddcheckifframebelow +} % \end{macrocode} % The starred version % \begin{macrocode} \newcommand*{\@soddcheckifframebelow}[4]{% -\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1bounds\endcsname{#2}% -\advance\ffareay by \ffareaheight\relax -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3bounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareay - \FLFbelowtrue -\else - \FLFbelowfalse -\fi + \@ifundefined{@sget#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1bounds\endcsname{#2}% + \advance\ffareay by \ffareaheight\relax + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@sget#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3bounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareay + \FLFbelowtrue + \else + \FLFbelowfalse + \fi } % \end{macrocode} % The unstarred version % \begin{macrocode} \newcommand*{\@oddcheckifframebelow}[4]{% -\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1bounds\endcsname{#2}% -\advance\ffareay by \ffareaheight\relax -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3bounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareay - \FLFbelowtrue -\else - \FLFbelowfalse -\fi + \@ifundefined{@get#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1bounds\endcsname{#2}% + \advance\ffareay by \ffareaheight\relax + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@get#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3bounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareay + \FLFbelowtrue + \else + \FLFbelowfalse + \fi } % \end{macrocode} %\end{macro} @@ -3128,25 +4441,28 @@ flow}}{}% % spans the page break. % \begin{macrocode} \newcommand*{\checkifframeleft}{% -\@ifstar\@scheckifframeleft\@checkifframeleft} + \@ifstar\@scheckifframeleft\@checkifframeleft +} % \end{macrocode} % Starred version: % \begin{macrocode} \newcommand*{\@scheckifframeleft}[4]{% -\ifodd\c@page - \@soddcheckifframeleft{#1}{#2}{#3}{#4}% -\else - \@sevencheckifframeleft{#1}{#2}{#3}{#4}% -\fi} + \ifodd\c@page + \@soddcheckifframeleft{#1}{#2}{#3}{#4}% + \else + \@sevencheckifframeleft{#1}{#2}{#3}{#4}% + \fi +} % \end{macrocode} % Unstarred version: % \begin{macrocode} \newcommand*{\@checkifframeleft}[4]{% -\ifodd\c@page - \@oddcheckifframeleft{#1}{#2}{#3}{#4}% -\else - \@evencheckifframeleft{#1}{#2}{#3}{#4}% -\fi} + \ifodd\c@page + \@oddcheckifframeleft{#1}{#2}{#3}{#4}% + \else + \@evencheckifframeleft{#1}{#2}{#3}{#4}% + \fi +} % \end{macrocode} %\end{macro} % @@ -3162,46 +4478,75 @@ flow}}{}% % left of the second frame if they overlap. % \begin{macrocode} \newcommand*{\oddcheckifframeleft}{% -\@ifstar\@soddcheckifframeleft\@oddcheckifframeleft} + \@ifstar\@soddcheckifframeleft\@oddcheckifframeleft +} % \end{macrocode} % The starred version % \begin{macrocode} \newcommand*{\@soddcheckifframeleft}[4]{% -\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1bounds\endcsname{#2}% -\advance\ffareax by \ffareawidth\relax -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3bounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareax - \FLFlefttrue -\else - \FLFleftfalse -\fi + \@ifundefined{@sget#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1bounds\endcsname{#2}% + \advance\ffareax by \ffareawidth\relax + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@sget#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3bounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareax + \FLFlefttrue + \else + \FLFleftfalse + \fi } % \end{macrocode} % The unstarred version % \begin{macrocode} \newcommand*{\@oddcheckifframeleft}[4]{% -\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1bounds\endcsname{#2}% -\advance\ffareax by \ffareawidth\relax -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3bounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareax - \FLFlefttrue -\else - \FLFleftfalse -\fi + \@ifundefined{@get#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1bounds\endcsname{#2}% + \advance\ffareax by \ffareawidth\relax + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@get#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3bounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareax + \FLFlefttrue + \else + \FLFleftfalse + \fi } % \end{macrocode} %\end{macro} @@ -3221,25 +4566,28 @@ flow}}{}% % spans the page break. % \begin{macrocode} \newcommand*{\checkifframeright}{% -\@ifstar\@scheckifframeright\@checkifframeright} + \@ifstar\@scheckifframeright\@checkifframeright +} % \end{macrocode} % Starred version: % \begin{macrocode} \newcommand*{\@scheckifframeright}[4]{% -\ifodd\c@page - \@soddcheckifframeright{#1}{#2}{#3}{#4}% -\else - \@sevencheckifframeright{#1}{#2}{#3}{#4}% -\fi} + \ifodd\c@page + \@soddcheckifframeright{#1}{#2}{#3}{#4}% + \else + \@sevencheckifframeright{#1}{#2}{#3}{#4}% + \fi +} % \end{macrocode} % Unstarred version: % \begin{macrocode} \newcommand*{\@checkifframeright}[4]{% -\ifodd\c@page - \@oddcheckifframeright{#1}{#2}{#3}{#4}% -\else - \@evencheckifframeright{#1}{#2}{#3}{#4}% -\fi} + \ifodd\c@page + \@oddcheckifframeright{#1}{#2}{#3}{#4}% + \else + \@evencheckifframeright{#1}{#2}{#3}{#4}% + \fi +} % \end{macrocode} %\end{macro} % @@ -3255,46 +4603,75 @@ flow}}{}% % right of the second frame if they overlap. % \begin{macrocode} \newcommand*{\oddcheckifframeright}{% -\@ifstar\@soddcheckifframeright\@oddcheckifframeright} + \@ifstar\@soddcheckifframeright\@oddcheckifframeright +} % \end{macrocode} % The starred version % \begin{macrocode} \newcommand*{\@soddcheckifframeright}[4]{% -\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1bounds\endcsname{#2}% -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3bounds\endcsname{#4}% -\advance\ffareax by \ffareawidth\relax -\expandafter\ifdim\@ff@check>\ffareax - \FLFrighttrue -\else - \FLFrightfalse -\fi + \@ifundefined{@sget#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1bounds\endcsname{#2}% + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@sget#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3bounds\endcsname{#4}% + \advance\ffareax by \ffareawidth\relax + \expandafter\ifdim\@ff@check>\ffareax + \FLFrighttrue + \else + \FLFrightfalse + \fi } % \end{macrocode} % The unstarred version % \begin{macrocode} \newcommand*{\@oddcheckifframeright}[4]{% -\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1bounds\endcsname{#2}% -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3bounds\endcsname{#4}% -\advance\ffareax by \ffareawidth\relax -\expandafter\ifdim\@ff@check>\ffareax - \FLFrighttrue -\else - \FLFrightfalse -\fi + \@ifundefined{@get#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1bounds\endcsname{#2}% + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@get#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3bounds\endcsname{#4}% + \advance\ffareax by \ffareawidth\relax + \expandafter\ifdim\@ff@check>\ffareax + \FLFrighttrue + \else + \FLFrightfalse + \fi } % \end{macrocode} %\end{macro} @@ -3311,46 +4688,75 @@ flow}}{}% % second frame if they overlap. % \begin{macrocode} \newcommand*{\evencheckifframeabove}{% -\@ifstar\@sevencheckifframeabove\@evencheckifframeabove} + \@ifstar\@sevencheckifframeabove\@evencheckifframeabove +} % \end{macrocode} % The starred version % \begin{macrocode} \newcommand*{\@sevencheckifframeabove}[4]{% -\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1evenbounds\endcsname{#2}% -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3evenbounds\endcsname{#4}% -\advance\ffareay by \ffareaheight\relax -\expandafter\ifdim\@ff@check>\ffareay - \FLFabovetrue -\else - \FLFabovefalse -\fi + \@ifundefined{@sget#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1evenbounds\endcsname{#2}% + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@sget#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3evenbounds\endcsname{#4}% + \advance\ffareay by \ffareaheight\relax + \expandafter\ifdim\@ff@check>\ffareay + \FLFabovetrue + \else + \FLFabovefalse + \fi } % \end{macrocode} % The unstarred version % \begin{macrocode} \newcommand*{\@evencheckifframeabove}[4]{% -\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1evenbounds\endcsname{#2}% -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3evenbounds\endcsname{#4}% -\advance\ffareay by \ffareaheight\relax -\expandafter\ifdim\@ff@check>\ffareay - \FLFabovetrue -\else - \FLFabovefalse -\fi + \@ifundefined{@get#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1evenbounds\endcsname{#2}% + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@get#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3evenbounds\endcsname{#4}% + \advance\ffareay by \ffareaheight\relax + \expandafter\ifdim\@ff@check>\ffareay + \FLFabovetrue + \else + \FLFabovefalse + \fi } % \end{macrocode} %\end{macro} @@ -3366,46 +4772,74 @@ flow}}{}% % second frame if they overlap. % \begin{macrocode} \newcommand*{\evencheckifframebelow}{% -\@ifstar\@sevencheckifframebelow\@evencheckifframebelow} + \@ifstar\@sevencheckifframebelow\@evencheckifframebelow +} % \end{macrocode} % The starred version % \begin{macrocode} \newcommand*{\@sevencheckifframebelow}[4]{% -\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1evenbounds\endcsname{#2}% -\advance\ffareay by \ffareaheight\relax -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3evenbounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareay - \FLFbelowtrue -\else - \FLFbelowfalse -\fi + \@ifundefined{@sget#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1evenbounds\endcsname{#2}% + \advance\ffareay by \ffareaheight\relax + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@sget#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3evenbounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareay + \FLFbelowtrue + \else + \FLFbelowfalse + \fi } % \end{macrocode} % The unstarred version % \begin{macrocode} \newcommand*{\@evencheckifframebelow}[4]{% -\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1evenbounds\endcsname{#2}% -\advance\ffareay by \ffareaheight\relax -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3evenbounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareay - \FLFbelowtrue -\else - \FLFbelowfalse -\fi + \@ifundefined{@get#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }{}% + \csname @get#1evenbounds\endcsname{#2}% + \advance\ffareay by \ffareaheight\relax + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@get#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3evenbounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareay + \FLFbelowtrue + \else + \FLFbelowfalse + \fi } % \end{macrocode} %\end{macro} @@ -3421,46 +4855,75 @@ flow}}{}% % left of the second frame if they overlap. % \begin{macrocode} \newcommand*{\evencheckifframeleft}{% -\@ifstar\@sevencheckifframeleft\@evencheckifframeleft} + \@ifstar\@sevencheckifframeleft\@evencheckifframeleft +} % \end{macrocode} % The starred version % \begin{macrocode} \newcommand*{\@sevencheckifframeleft}[4]{% -\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1evenbounds\endcsname{#2}% -\advance\ffareax by \ffareawidth\relax -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3evenbounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareax - \FLFlefttrue -\else - \FLFleftfalse -\fi + \@ifundefined{@sget#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1evenbounds\endcsname{#2}% + \advance\ffareax by \ffareawidth\relax + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@sget#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3evenbounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareax + \FLFlefttrue + \else + \FLFleftfalse + \fi } % \end{macrocode} % The unstarred version % \begin{macrocode} \newcommand*{\@evencheckifframeleft}[4]{% -\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1evenbounds\endcsname{#2}% -\advance\ffareax by \ffareawidth\relax -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3evenbounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareax - \FLFlefttrue -\else - \FLFleftfalse -\fi + \@ifundefined{@get#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1evenbounds\endcsname{#2}% + \advance\ffareax by \ffareawidth\relax + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@get#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3evenbounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareax + \FLFlefttrue + \else + \FLFleftfalse + \fi } % \end{macrocode} %\end{macro} @@ -3476,46 +4939,75 @@ flow}}{}% % right of the second frame if they overlap. % \begin{macrocode} \newcommand*{\evencheckifframeright}{% -\@ifstar\@sevencheckifframeright\@evencheckifframeright} + \@ifstar\@sevencheckifframeright\@evencheckifframeright +} % \end{macrocode} % The starred version % \begin{macrocode} \newcommand*{\@sevencheckifframeright}[4]{% -\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1evenbounds\endcsname{#2}% -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3evenbounds\endcsname{#4}% -\advance\ffareax by \ffareawidth\relax -\expandafter\ifdim\@ff@check>\ffareax - \FLFrighttrue -\else - \FLFrightfalse -\fi + \@ifundefined{@sget#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1evenbounds\endcsname{#2}% + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@sget#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3evenbounds\endcsname{#4}% + \advance\ffareax by \ffareawidth\relax + \expandafter\ifdim\@ff@check>\ffareax + \FLFrighttrue + \else + \FLFrightfalse + \fi } % \end{macrocode} % The unstarred version % \begin{macrocode} \newcommand*{\@evencheckifframeright}[4]{% -\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1evenbounds\endcsname{#2}% -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3evenbounds\endcsname{#4}% -\advance\ffareax by \ffareawidth\relax -\expandafter\ifdim\@ff@check>\ffareax - \FLFrighttrue -\else - \FLFrightfalse -\fi + \@ifundefined{@get#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1evenbounds\endcsname{#2}% + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@get#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3evenbounds\endcsname{#4}% + \advance\ffareax by \ffareawidth\relax + \expandafter\ifdim\@ff@check>\ffareax + \FLFrighttrue + \else + \FLFrightfalse + \fi } % \end{macrocode} %\end{macro} @@ -3586,90 +5078,91 @@ flow}}{}% % version and to the \gls{idl} for the starred version. % \begin{macrocode} \DeclareRobustCommand*{\relativeframelocation}{% -\@ifstar\@srelativeframelocation\@relativeframelocation} + \@ifstar\@srelativeframelocation\@relativeframelocation +} % \end{macrocode} % Starred version: % \begin{macrocode} \newcommand*{\@srelativeframelocation}[4]{% -\@scheckifframeabove{#1}{#2}{#3}{#4}% -\@scheckifframebelow{#1}{#2}{#3}{#4}% -\@scheckifframeleft{#1}{#2}{#3}{#4}% -\@scheckifframeright{#1}{#2}{#3}{#4}% -\ifFLFabove - \ifFLFleft - \FFaboveleft - \else - \ifFLFright - \FFaboveright - \else - \FFabove - \fi - \fi -\else - \ifFLFbelow + \@scheckifframeabove{#1}{#2}{#3}{#4}% + \@scheckifframebelow{#1}{#2}{#3}{#4}% + \@scheckifframeleft{#1}{#2}{#3}{#4}% + \@scheckifframeright{#1}{#2}{#3}{#4}% + \ifFLFabove \ifFLFleft - \FFbelowleft + \FFaboveleft \else \ifFLFright - \FFbelowright + \FFaboveright \else - \FFbelow + \FFabove \fi \fi \else - \ifFLFleft - \FFleft + \ifFLFbelow + \ifFLFleft + \FFbelowleft + \else + \ifFLFright + \FFbelowright + \else + \FFbelow + \fi + \fi \else - \ifFLFright - \FFright + \ifFLFleft + \FFleft \else - \FFoverlap - \fi - \fi + \ifFLFright + \FFright + \else + \FFoverlap + \fi + \fi + \fi \fi -\fi } % \end{macrocode} % Unstarred version: % \begin{macrocode} \newcommand*{\@relativeframelocation}[4]{% -\@checkifframeabove{#1}{#2}{#3}{#4}% -\@checkifframebelow{#1}{#2}{#3}{#4}% -\@checkifframeleft{#1}{#2}{#3}{#4}% -\@checkifframeright{#1}{#2}{#3}{#4}% -\ifFLFabove - \ifFLFleft - \FFaboveleft - \else - \ifFLFright - \FFaboveright - \else - \FFabove - \fi - \fi -\else - \ifFLFbelow + \@checkifframeabove{#1}{#2}{#3}{#4}% + \@checkifframebelow{#1}{#2}{#3}{#4}% + \@checkifframeleft{#1}{#2}{#3}{#4}% + \@checkifframeright{#1}{#2}{#3}{#4}% + \ifFLFabove \ifFLFleft - \FFbelowleft + \FFaboveleft \else \ifFLFright - \FFbelowright + \FFaboveright \else - \FFbelow + \FFabove \fi \fi \else - \ifFLFleft - \FFleft + \ifFLFbelow + \ifFLFleft + \FFbelowleft + \else + \ifFLFright + \FFbelowright + \else + \FFbelow + \fi + \fi \else - \ifFLFright - \FFright + \ifFLFleft + \FFleft \else - \FFoverlap - \fi - \fi + \ifFLFright + \FFright + \else + \FFoverlap + \fi + \fi + \fi \fi -\fi } % \end{macrocode} %\end{macro} @@ -3677,58 +5170,70 @@ flow}}{}% % Short cut commands for \glspl{frame} of the same type. %\begin{macro}{\reldynamicloc} %\changes{1.11}{2008/06/27}{new} +%\changes{1.14}{2012-11-10}{removed unwanted spaces} %\cs{reldynamicloc}\marg{id1}\marg{id2} % \begin{macrocode} \DeclareRobustCommand*{\reldynamicloc}{% -\@ifstar\@sreldynamicloc\@reldynamicloc} + \@ifstar\@sreldynamicloc\@reldynamicloc +} % \end{macrocode} % Starred version: % \begin{macrocode} -\newcommand*{\@sreldynamicloc}[2]{ -\@srelativeframelocation{dynamic}{#1}{dynamic}{#2}} +\newcommand*{\@sreldynamicloc}[2]{% + \@srelativeframelocation{dynamic}{#1}{dynamic}{#2}% +} % \end{macrocode} % Unstarred version: % \begin{macrocode} -\newcommand*{\@reldynamicloc}[2]{ -\@relativeframelocation{dynamic}{#1}{dynamic}{#2}} +\newcommand*{\@reldynamicloc}[2]{% + \@relativeframelocation{dynamic}{#1}{dynamic}{#2}% +} % \end{macrocode} %\end{macro} % %\begin{macro}{\relstaticloc} %\changes{1.11}{2008/06/27}{new} +%\changes{1.14}{2012-11-10}{removed unwanted spaces} %\cs{relstaticloc}\marg{id1}\marg{id2} % \begin{macrocode} \DeclareRobustCommand*{\relstaticloc}{% -\@ifstar\@srelstaticloc\@relstaticloc} + \@ifstar\@srelstaticloc\@relstaticloc +} % \end{macrocode} % Starred version: % \begin{macrocode} -\newcommand*{\@srelstaticloc}[2]{ -\@srelativeframelocation{static}{#1}{static}{#2}} +\newcommand*{\@srelstaticloc}[2]{% + \@srelativeframelocation{static}{#1}{static}{#2}% +} % \end{macrocode} % Unstarred version: % \begin{macrocode} -\newcommand*{\@relstaticloc}[2]{ -\@relativeframelocation{static}{#1}{static}{#2}} +\newcommand*{\@relstaticloc}[2]{% + \@relativeframelocation{static}{#1}{static}{#2}% +} % \end{macrocode} %\end{macro} % %\begin{macro}{\relflowloc} %\changes{1.11}{2008/06/27}{new} +%\changes{1.14}{2012-11-10}{removed unwanted spaces} %\cs{relflowloc}\marg{id1}\marg{id2} % \begin{macrocode} \DeclareRobustCommand*{\relflowloc}{% -\@ifstar\@srelflowloc\@relflowloc} + \@ifstar\@srelflowloc\@relflowloc +} % \end{macrocode} % Starred version: % \begin{macrocode} -\newcommand*{\@srelflowloc}[2]{ -\@srelativeframelocation{flow}{#1}{flow}{#2}} +\newcommand*{\@srelflowloc}[2]{% + \@srelativeframelocation{flow}{#1}{flow}{#2}% +} % \end{macrocode} % Unstarred version: % \begin{macrocode} -\newcommand*{\@relflowloc}[2]{ -\@relativeframelocation{flow}{#1}{flow}{#2}} +\newcommand*{\@relflowloc}[2]{% + \@relativeframelocation{flow}{#1}{flow}{#2}% +} % \end{macrocode} %\end{macro} % @@ -3739,10 +5244,14 @@ flow}}{}% % Having another \gls{flow} as the initial frame is not % a good idea, and may have unexpected results. % \begin{macrocode} -\newcommand*{\setinitialframe}[1]{\c@thisframe=#1% -\global\usedframebreaktrue -\global\setlength{\hsize}{% -\csname colwidth\romannumeral\c@thisframe\endcsname}} +\newcommand*{\setinitialframe}[1]{% + \c@thisframe=#1% + \global\usedframebreaktrue + \global\setlength{\hsize} + {% + \csname colwidth\romannumeral\c@thisframe\endcsname + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\setframes} @@ -3751,79 +5260,86 @@ flow}}{}% \newif\if@setfr@mes \@setfr@mesfalse \newcommand*{\setframes}{% -\ifnum\c@thisframe=0\relax -\PackageWarning{flowfram}{Can't find a flow frame on page 1. -\MessageBreak -Attempting to find the first page with a flow frame}% -\@nxtcol=1\relax -\c@curpg=1\relax -\@g@tnextcol{\@nxtcol}% -% \end{macrocode} -% shipout pages without flow frames -% \begin{macrocode} -\advance\c@curpg by -1\relax - \whiledo{\c@curpg>0}{\advance\c@curpg by -1\relax - \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% -\@outputpage}% -\c@thisframe=\@nxtcol -\fi -\@setcol{\c@thisframe}\relax -\@setfr@mestrue -\edef\ff@txtcol{% -\csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}% -\@s@tfftextcol + \ifnum\c@thisframe=0\relax + \PackageWarning{flowfram}% + {Can't find a flow frame on page 1. + \MessageBreak + Attempting to find the first page with a flow frame% + }% + \@nxtcol=1\relax + \c@curpg=1\relax + \@g@tnextcol{\@nxtcol}% +% \end{macrocode} +% Shipout pages without flow frames. +% \begin{macrocode} + \advance\c@curpg by -1\relax + \whiledo{\c@curpg>0}% + {% + \advance\c@curpg by -1\relax + \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% + \@outputpage + }% + \c@thisframe=\@nxtcol + \fi + \@setcol{\c@thisframe}\relax + \@setfr@mestrue + \edef\ff@txtcol{% + \csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}% + \@s@tfftextcol } % \end{macrocode} %\end{macro} %\begin{macro}{\emulatetwocolumn} % Emulate original "\twocolumn" declaration. -% This is provided for backward compatibilty, and +% This is provided for backward compatibility, and % may be removed in later versions. % \begin{macrocode} \newcommand{\emulatetwocolumn}[1][]{% -\finishthispage -\setallflowframes{pages=none}% -\settoheight{\@ff@staticH}{#1}% -\settodepth{\@ff@tmp@y}{#1}% -\addtolength{\@ff@staticH}{\@ff@tmp@y}% -\ifdim\@ff@staticH>0pt\relax -\twocolumnStop[\c@page]{\@ff@staticH}% -\c@thisframe=\c@maxflow -\advance\c@thisframe by -1\relax -\@twocolumn[>\c@page]% -\setstaticcontents{\c@maxstatic}{#1}% -\else -\@twocolumn -\c@thisframe=\c@maxflow -\advance\c@thisframe by -1\relax -\fi -\@setcol{\c@thisframe}\relax + \finishthispage + \setallflowframes{pages=none}% + \settoheight{\@ff@staticH}{#1}% + \settodepth{\@ff@tmp@y}{#1}% + \addtolength{\@ff@staticH}{\@ff@tmp@y}% + \ifdim\@ff@staticH>0pt\relax + \twocolumnStop[\@ff@pages@countreg]{\@ff@staticH}% + \c@thisframe=\c@maxflow + \advance\c@thisframe by -1\relax + \@twocolumn[>\@ff@pages@countreg]% + \setstaticcontents{\c@maxstatic}{#1}% + \else + \@twocolumn + \c@thisframe=\c@maxflow + \advance\c@thisframe by -1\relax + \fi + \@setcol{\c@thisframe}% + \relax } % \end{macrocode} %\end{macro} %\begin{macro}{\emulateonecolumn} % Emulate original "\onecolumn" declaration. -% This is provided for backward compatibilty, and +% This is provided for backward compatibility, and % may be removed in later versions. % \begin{macrocode} \newcommand{\emulateonecolumn}[1][]{% -\finishthispage -\setallflowframes{pages=none}% -\settoheight{\@ff@staticH}{#1}% -\settodepth{\@ff@tmp@y}{#1}% -\addtolength{\@ff@staticH}{\@ff@tmp@y}% -\ifdim\@ff@staticH>0pt\relax -\onecolumnStop[\c@page]{\@ff@staticH}% -\c@thisframe=\c@maxflow -\advance\c@thisframe by -1\relax -\@onecolumn[>\c@page]% -\setstaticcontents{\c@maxstatic}{#1}% -\else -\@twocolumn -\c@thisframe=\c@maxflow -\advance\c@thisframe by -1\relax -\fi -\@setcol{\c@thisframe}\relax + \finishthispage + \setallflowframes{pages=none}% + \settoheight{\@ff@staticH}{#1}% + \settodepth{\@ff@tmp@y}{#1}% + \addtolength{\@ff@staticH}{\@ff@tmp@y}% + \ifdim\@ff@staticH>0pt\relax + \onecolumnStop[\@ff@pages@countreg]{\@ff@staticH}% + \c@thisframe=\c@maxflow + \advance\c@thisframe by -1\relax + \@onecolumn[>\@ff@pages@countreg]% + \setstaticcontents{\c@maxstatic}{#1}% + \else + \@twocolumn + \c@thisframe=\c@maxflow + \advance\c@thisframe by -1\relax + \fi + \@setcol{\c@thisframe}% + \relax } % \end{macrocode} %\end{macro} @@ -3831,85 +5347,120 @@ Attempting to find the first page with a flow frame}% % the size of the \gls{typeblock}, and initialise the frames. % \begin{macrocode} \AtBeginDocument{% -\ifnum\c@maxflow=0\relax -\PackageWarning{flowfram}{No flow frames, adding one}% -\@onecolumn -\fi -\setframes -\renewcommand{\onecolumn}[1][]{\PackageWarning{flowfram}{% -Ignoring \string\onecolumn\space found in document environment. -Frames must be defined in the preamble}#1}% -\renewcommand{\twocolumn}[1][]{\PackageWarning{flowfram}{% -Ignoring \string\twocolumn\space found in document environment. -Frames must be defined in the preamble}#1}% + \c@absolutepage=1\relax + \ifnum\c@maxflow=0\relax + \PackageWarning{flowfram}{No flow frames, adding one}% + \@onecolumn + \fi + \setframes + \renewcommand{\onecolumn}[1][]{% + \PackageWarning{flowfram}% + {% + Ignoring \string\onecolumn\space found in document environment. + Frames must be defined in the preamble% + }% + #1% + }% + \renewcommand{\twocolumn}[1][]{% + \PackageWarning{flowfram}% + {% + Ignoring \string\twocolumn\space found in document environment. + Frames must be defined in the preamble}% + #1% + }% } % \end{macrocode} -% If the document finishes before the last frame on the last -% page, need to finish off to ensure the final page is -% shipped out, otherwise the text on the last page will be lost. -% \begin{macrocode} -%\AtEndDocument{\finishthispage} -% \end{macrocode} +% %\subsection{Output Routine} +% +%\begin{macro}{\fftolerance} +% The \styfmt{flowfram} package does a check to see if text has +% flowed between frames of different widths, which will cause a +% discrepancy in the line widths of the paragraph spanning the break. +% Before version~1.14, the output routine just checked if the widths +% were different, but this means that warning messages will be +% generated even if there's only a tiny difference that can be +% caused by rounding errors (for example, if the frames were created +% using jpgfdraw). So add a tolerance and only complain if the +% difference exceeds this value. +%\changes{1.14}{2012-11-10}{new} +% \begin{macrocode} +\newlength\fftolerance +\setlength\fftolerance{2pt} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\@setcol} % Set up the output box so it has the correct dimensions for % specified \gls{flow}. This is used by the output routine. %\changes{1.11}{2008/06/27}{added displayedframe increment} +%\changes{1.14}{2012-11-10}{changed check to use tolerance rather +%than testing if hsize and columnwidth are equal} % \begin{macrocode} \newcommand{\@setcol}[1]{% -\ifnum\c@maxflow<#1\relax - \PackageError{flowfram}{Can't set frame '\number#1', doesn't - exist}{}% -\else - \expandafter\global\expandafter\columnwidth - \csname colwidth\romannumeral#1\endcsname - \ifdim\hsize=\columnwidth + \ifnum\c@maxflow<#1\relax + \PackageError{flowfram}% + {Can't set frame '\number#1', doesn't exist}{}% \else - \ifusedframebreak - \else - \PackageWarning{flowfram}{Moving to flow frame of unequal - width,\MessageBreak use of \string\framebreak\space advised, - or text might not appear correctly}% + \flf@message{Switching to flow frame \number#1\space on page + \number\@ff@pages@countreg}% + \expandafter\global\expandafter\columnwidth + \csname colwidth\romannumeral#1\endcsname + \dimen@\columnwidth + \advance\dimen@ by -\hsize\relax + \ifdim\dimen@<0pt\relax + \dimen@=-\dimen@ \fi + \ifdim\dimen@>\fftolerance + \ifusedframebreak + \else + \PackageWarning{flowfram}% + {Moving to flow frame of unequal + width,\MessageBreak use of \string\framebreak\space advised, + or text might not appear correctly (difference = + \the\dimen@, tolerance = \the\fftolerance)}% + \fi + \fi + \global\usedframebreakfalse + \global\hsize\columnwidth + \expandafter\global + \expandafter\vsize\csname colheight\romannumeral#1\endcsname + \global\@colht\vsize + \global\@colroom\@colht + \global\linewidth\columnwidth + \setmargin \fi - \global\usedframebreakfalse - \global\hsize\columnwidth - \expandafter\global - \expandafter\vsize\csname colheight\romannumeral#1\endcsname - \global\@colht\vsize - \global\@colroom\@colht - \global\linewidth\columnwidth - \setmargin -\fi -\stepcounter{displayedframe}% + \stepcounter{displayedframe}% } % \end{macrocode} %\end{macro} % Modify the output routine so that it uses "\vsize" % instead of "\textheight". % \begin{macrocode} -\output={\let\par\@@par -\ifnum\outputpenalty <-\@M - \@specialoutput -\else - \@makecol - \@opcol \@startcolumn - \@whilesw \if@fcolmade \fi {\@opcol \@startcolumn }% -\fi -\ifnum\outputpenalty>-\@Miv - \ifdim\@colroom<1.5\baselineskip - \ifdim\@colroom<\vsize - \@latex@warning@no@line{Text page \thepage \space - contains only floats}\@emptycol +\output={% + \let\par\@@par + \ifnum\outputpenalty <-\@M + \@specialoutput + \else + \@makecol + \@opcol \@startcolumn + \@whilesw \if@fcolmade \fi {\@opcol \@startcolumn }% + \fi + \ifnum\outputpenalty>-\@Miv + \ifdim\@colroom<1.5\baselineskip + \ifdim\@colroom<\vsize + \@latex@warning@no@line{Text page \thepage \space + contains only floats}% + \@emptycol + \else + \global\vsize\@colroom + \fi \else \global\vsize\@colroom \fi \else - \global\vsize\@colroom + \global\vsize\maxdimen \fi -\else - \global\vsize\maxdimen -\fi } % \end{macrocode} %\begin{macro}{\@doclearpage} @@ -3917,41 +5468,48 @@ Frames must be defined in the preamble}#1}% % with "\vsize", and only use the twocolumn stuff. % \begin{macrocode} \def\@doclearpage{% -\ifvoid\footins - \setbox\@tempboxa\vsplit\@cclv to\z@ - \unvbox\@tempboxa - \setbox\@tempboxa\box\@cclv - \xdef\@deferlist{\@toplist\@botlist\@deferlist}% -\global\let\@toplist\@empty -\global\let\@botlist\@empty -\global\@colroom\@colht - \ifx\@currlist\@empty - \else - \@latexerr{Float(s) lost}\@ehb - \global\let\@currlist\@empty - \fi - \@makefcolumn - \@deferlist - \@whilesw \if@fcolmade \fi {\@opcol - \@makefcolumn - \@deferlist}% -\if@firstcolumn + \ifvoid\footins + \setbox\@tempboxa\vsplit\@cclv to\z@ + \unvbox\@tempboxa + \setbox\@tempboxa\box\@cclv + \xdef\@deferlist{\@toplist\@botlist\@deferlist}% + \global\let\@toplist\@empty + \global\let\@botlist\@empty + \global\@colroom\@colht + \ifx\@currlist\@empty + \else + \@latexerr{Float(s) lost}\@ehb + \global\let\@currlist\@empty + \fi + \@makefcolumn\@deferlist + \@whilesw \if@fcolmade \fi + {% + \@opcol + \@makefcolumn\@deferlist + }% + \if@firstcolumn \xdef\@dbldeferlist{\@dbltoplist\@dbldeferlist}% -\global\let\@dbltoplist\@empty -\global\@colht\vsize -\begingroup - \@dblfloatplacement - \@makefcolumn - \@dbldeferlist - \@whilesw \if@fcolmade \fi {\@outputpage -\@makefcolumn\@dbldeferlist}% -\endgroup -\else - \vbox{}\clearpage -\fi -\else - \setbox\@cclv\vbox{\box\@cclv\vfil}% -\@makecol\@opcol\clearpage\fi} + \global\let\@dbltoplist\@empty + \global\@colht\vsize + \begingroup + \@dblfloatplacement + \@makefcolumn\@dbldeferlist + \@whilesw \if@fcolmade \fi + {% + \@outputpage + \@makefcolumn\@dbldeferlist + }% + \endgroup + \else + \vbox{}% + \clearpage + \fi + \else + \setbox\@cclv\vbox{\box\@cclv\vfil}% + \@makecol\@opcol + \clearpage + \fi +} % \end{macrocode} %\end{macro} % Modify "\@outputpage" slightly. Add provision for @@ -3961,21 +5519,27 @@ Frames must be defined in the preamble}#1}% % First define macro to do the header. This will be % modified if it is turned into a \gls{dynamic}. % \begin{macrocode} -\newcommand{\@dothehead}{\vbox to \headheight{% -\color@hbox\normalcolor\hbox to \textwidth{% -\@thehead}\color@endbox}} +\newcommand{\@dothehead}{% + \vbox to \headheight + {% + \color@hbox\normalcolor\hbox to \textwidth{\@thehead}% + \color@endbox + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@dothefoot} % Same again for the footer. % \begin{macrocode} \newcommand{\@dothefoot}{% -\color@hbox\normalcolor\hbox to \textwidth{% -\@thefoot}\color@endbox} + \color@hbox\normalcolor\hbox to \textwidth{\@thefoot}% + \color@endbox +} \newcommand{\@dodynamicthehead}{} \newcommand{\@dodynamicthefoot}{} % \end{macrocode} %\end{macro} +% %\begin{macro}{\@outputpage} % Now for the modified version of "\@outputpage". The % page style stuff has been moved to "\@outputdblcol" @@ -3983,33 +5547,43 @@ Frames must be defined in the preamble}#1}% % before the \glspl{dynamic} are put on the page. % \begin{macrocode} \def\@outputpage{% -\begingroup - \let\protect\noexpand - \@resetactivechars - \global\let\@@if@newlist\if@newlist - \global\@newlistfalse\@parboxrestore - \shipout\vbox{\set@typeset@protect - \aftergroup - \endgroup - \aftergroup - \set@typeset@protect - \reset@font\normalsize\normalsfcodes - \let\label\@gobble - \let\index\@gobble - \let\glossary\@gobble - \baselineskip\z@skip - \lineskip\z@skip - \lineskiplimit\z@ - \vskip\topmargin\moveright\@themargin - \vbox{% - \vskip\headheight - \vskip\headsep - \box\@outputbox - }}% - \global\let\if@newlist\@@if@newlist - \stepcounter{page}% - \setcounter{displayedframe}{0}% - \let\firstmark\botmark} + \begingroup + \let\protect\noexpand + \@resetactivechars + \global\let\@@if@newlist\if@newlist + \global\@newlistfalse\@parboxrestore + \shipout\vbox + {% + \set@typeset@protect + \aftergroup + \endgroup + \aftergroup + \set@typeset@protect + \reset@font\normalsize\normalsfcodes + \let\label\@gobble + \let\index\@gobble + \let\glossary\@gobble + \baselineskip\z@skip + \lineskip\z@skip + \lineskiplimit\z@ + \vskip\topmargin\moveright\@themargin + \vbox + {% + \vskip\headheight + \vskip\headsep + \box\@outputbox + }% + }% + \global\let\if@newlist\@@if@newlist + \stepcounter{page}% +% \end{macrocode} +% Also increment absolutepage counter. +%\changes{1.14}{2012-11-10}{added absolutepage increment} +% \begin{macrocode} + \stepcounter{absolutepage}% + \setcounter{displayedframe}{0}% + \let\firstmark\botmark +} % \end{macrocode} %\end{macro} %\begin{macro}{\makedfheaderfooter} @@ -4020,25 +5594,29 @@ Frames must be defined in the preamble}#1}% % footer is given the \gls{idl} "footer". % \begin{macrocode} \newcommand*{\makedfheaderfooter}{% +% \end{macrocode} % create dynamic frames at the standard location -\setlength{\@ff@tmp@y}{\textheight}% -\addtolength{\@ff@tmp@y}{\headsep}% -\newdynamicframe{\textwidth}{\headheight}{0pt}{\@ff@tmp@y}[header]% -\newdynamicframe{\textwidth}{\headheight}{0pt}{-\footskip}[footer]% -\renewcommand{\@dothehead}{}% -\renewcommand{\@dothefoot}{}% -\renewcommand{\@dodynamicthehead}{% -\@dynamicframeid{header}% -\expandafter -\def\csname @dynamicframe@\romannumeral\ff@id\endcsname{% -\vfill\@thehead\vfill}% -}% -\renewcommand{\@dodynamicthefoot}{% -\@dynamicframeid{footer}% -\expandafter -\def\csname @dynamicframe@\romannumeral\ff@id\endcsname{% -\vfill\@thefoot\vfill}% -}% +% \begin{macrocode} + \setlength{\@ff@tmp@y}{\textheight}% + \addtolength{\@ff@tmp@y}{\headsep}% + \newdynamicframe{\textwidth}{\headheight}{0pt}{\@ff@tmp@y}[header]% + \newdynamicframe{\textwidth}{\headheight}{0pt}{-\footskip}[footer]% + \renewcommand{\@dothehead}{}% + \renewcommand{\@dothefoot}{}% + \renewcommand{\@dodynamicthehead}{% + \@dynamicframeid{header}% + \expandafter + \def\csname @dynamicframe@\romannumeral\ff@id\endcsname{% + \vfill\@thehead\vfill + }% + }% + \renewcommand{\@dodynamicthefoot}{% + \@dynamicframeid{footer}% + \expandafter + \def\csname @dynamicframe@\romannumeral\ff@id\endcsname{% + \vfill\@thefoot\vfill + }% + }% } % \end{macrocode} %\end{macro} @@ -4052,11 +5630,17 @@ Frames must be defined in the preamble}#1}% % as the text colour for the \gls{flow} to which they belong. % \begin{macrocode} \newcommand{\footnotecolor}{% -\@ifundefined{@ff@txtcol@\romannumeral\c@thisframe}{% -\normalcolor}{% -\edef\ff@txtcol{% -\csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}% -\@s@tfftextcol}} + \@ifundefined{@ff@txtcol@\romannumeral\c@thisframe}% + {% + \normalcolor + }% + {% + \edef\ff@txtcol{% + \csname @ff@txtcol@\romannumeral\c@thisframe\endcsname + }% + \@s@tfftextcol + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@makecol} @@ -4064,41 +5648,46 @@ Frames must be defined in the preamble}#1}% % footnote rule are in the colour for that frame. % \begin{macrocode} \renewcommand{\@makecol}{% -\ifvoid\footins - \setbox\@outputbox\box\@cclv -\else - \setbox\@outputbox\vbox{% -\boxmaxdepth\@maxdepth\@tempdima\dp\@cclv - \unvbox\@cclv - \vskip\skip\footins - \color@begingroup - \footnotecolor - \footnoterule - \unvbox\footins - \color@endgroup -}\fi -\xdef\@freelist{\@freelist \@midlist }% -\global\let\@midlist\@empty -\@combinefloats -\ifvbox\@kludgeins - \@makespecialcolbox -\else - \setbox\@outputbox\vbox to\@colht{% -\@texttop\dimen@\dp\@outputbox - \unvbox \@outputbox - \vskip -\dimen@\@textbottom -}\fi -\global\maxdepth\@maxdepth} + \ifvoid\footins + \setbox\@outputbox\box\@cclv + \else + \setbox\@outputbox\vbox + {% + \boxmaxdepth\@maxdepth\@tempdima\dp\@cclv + \unvbox\@cclv + \vskip\skip\footins + \color@begingroup + \footnotecolor + \footnoterule + \unvbox\footins + \color@endgroup + }% + \fi + \xdef\@freelist{\@freelist\@midlist}% + \global\let\@midlist\@empty + \@combinefloats + \ifvbox\@kludgeins + \@makespecialcolbox + \else + \setbox\@outputbox\vbox to\@colht{% + \@texttop\dimen@\dp\@outputbox + \unvbox \@outputbox + \vskip -\dimen@\@textbottom + }% + \fi + \global\maxdepth\@maxdepth +} % \end{macrocode} %\end{macro} %\begin{macro}{\@opcol} % Modify "\@opcol", as "\if@twocolumn" is now % irrelevant. % \begin{macrocode} -\def\@opcol{\@outputdblcol -\global\@mparbottom\z@ -\global\@textfloatsheight\z@ -\@floatplacement +\def\@opcol{% + \@outputdblcol + \global\@mparbottom\z@ + \global\@textfloatsheight\z@ + \@floatplacement } % \end{macrocode} %\end{macro} @@ -4110,34 +5699,103 @@ Frames must be defined in the preamble}#1}% % \begin{macrocode} \newif\if@ff@moreframes \newcommand*{\@ff@checkifmoreframes}{% -\@ff@moreframesfalse -\@colN=\c@thisframe -\whiledo{\@colN<\c@maxflow}{% -\advance\@colN by 1\relax -\edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}% -\@ff@checkpages{\ff@pages}% -}% -\if@ff@moreframes -\else -\@ff@tmpN=\c@page -\advance\@ff@tmpN by 1\relax -\@colN=0\relax -\whiledo{\@colN<\c@thisframe}{% -\advance\@colN by 1\relax -\edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}% -\@ff@checkpages[\@ff@tmpN]{\ff@pages}% -}% -\fi + \@ff@moreframesfalse + \@colN=\c@thisframe + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax +% \end{macrocode} +% Skip if this page is in this frame's exclusion list. +%\changes{1.14}{2012-11-10}{added check for exclusion list} +% \begin{macrocode} + \edef\ff@xpages{\csname @ff@xpages@\romannumeral\@colN\endcsname}% + \@for\@ff@pp:=\ff@xpages\do + {% + \ifnum0\@ff@pp=\@ff@pages@countreg\relax + \@endfortrue + \fi + }% + \if@endfor +% \end{macrocode} +% If for loop was terminated prematurely, then this page is in this +% frame's exclusion list. +% \begin{macrocode} + \else + \edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}% + \@ff@checkpages{\ff@pages}% +% \end{macrocode} +% If found a frame, break out of loop. +% \begin{macrocode} + \if@ff@moreframes + \@colN=\c@maxflow\relax + \fi + \fi + }% + \if@ff@moreframes + \else +% \end{macrocode} +%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with +%\cs{@ff@pages@countreg}} +% \begin{macrocode} + \@ff@tmpN=\@ff@pages@countreg +% \end{macrocode} +% Look ahead up to a maximum of 4 pages. +% \begin{macrocode} + \count@=0\relax + \loop + \advance\@ff@tmpN by 1\relax + \@colN=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax +% \end{macrocode} +% Skip if page is in this frame's exclusion list. +% \begin{macrocode} + \edef\ff@xpages{\csname @ff@xpages@\romannumeral\@colN\endcsname}% + \@for\@ff@pp:=\ff@xpages\do + {% + \ifnum0\@ff@pp=\@ff@tmpN\relax + \@endfortrue + \fi + }% + \if@endfor +% \end{macrocode} +% If for loop was terminated prematurely, then page is in this +% frame's exclusion list. +% \begin{macrocode} + \else + \edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}% + \@ff@checkpages[\@ff@tmpN]{\ff@pages}% +% \end{macrocode} +% If found a frame, break out of loop. +% \begin{macrocode} + \if@ff@moreframes + \@colN=\c@maxflow\relax + \fi + \fi + }% + \if@ff@moreframes + \count@=4\relax + \else + \advance\count@ by 1\relax + \fi + \ifnum\count@<4 + \repeat + \fi } % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@checkpages} % Check to see if the current page lies in the \gls{pglist} % given by "#1". +%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with +%\cs{@ff@pages@countreg}} % \begin{macrocode} -\newcommand*{\@ff@checkpages}[2][\c@page]{% -\@for\@ff@pp:=#2\do{% -\@ff@checkthispage{#1}{\@ff@pp}}} +\newcommand*{\@ff@checkpages}[2][\@ff@pages@countreg]{% + \@for\@ff@pp:=#2\do{% + \@ff@checkthispage{#1}{\@ff@pp}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@checkthispage} @@ -4149,10 +5807,18 @@ Frames must be defined in the preamble}#1}% % ignore it. % \begin{macrocode} \newcommand*{\@ff@checkthispage}[2]{% -\ifthenelse{\equal{#2}{all}\or\equal{#2}{even}\or\equal{#2}{odd}}{% -\@ff@moreframestrue}{% -\ifthenelse{\equal{#2}{none}}{}{% -\@ff@checknumrange{#1}{#2}}}} + \ifthenelse{\equal{#2}{all}\or\equal{#2}{even}\or\equal{#2}{odd}}% + {% + \@ff@moreframestrue + }% + {% + \ifthenelse{\equal{#2}{none}}% + {}% + {% + \@ff@checknumrange{#1}{#2}% + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@checknumrange} @@ -4164,15 +5830,16 @@ Frames must be defined in the preamble}#1}% % there are still more \glspl{flow} available. % \begin{macrocode} \newcommand*{\@ff@checknumrange}[2]{% -\def\@ff@numstart{0}\def\@ff@numend{10000}% -\@ff@getrange{#2}% -\ifnum\@ff@numend>#1\relax -\@ff@moreframestrue -\else -\ifnum\@ff@numend=#1\relax -\@ff@moreframestrue -\fi -\fi + \def\@ff@numstart{0}% + \def\@ff@numend{100000}% + \@ff@getrange{#2}% + \ifnum\@ff@numend>#1\relax + \@ff@moreframestrue + \else + \ifnum\@ff@numend=#1\relax + \@ff@moreframestrue + \fi + \fi } % \end{macrocode} %\end{macro} @@ -4194,7 +5861,8 @@ Frames must be defined in the preamble}#1}% % ">25", it will do, e.g.\ "\@ff@@getrange>25-\relax". % \begin{macrocode} \newcommand*{\@ff@getrange}[1]{% -\expandafter\@ff@@getrange#1-\relax\end} + \expandafter\@ff@@getrange#1-\relax\end +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@@getrange} @@ -4203,15 +5871,15 @@ Frames must be defined in the preamble}#1}% % is either a single value, or a close ended range. % \begin{macrocode} \def\@ff@@getrange#1#2\end{% -\ifx#1<\relax - \@ff@getrangeless#1#2\end -\else - \ifx#1>\relax - \@ff@getrangegreater#1#2\end + \ifx#1<\relax + \@ff@getrangeless#1#2\end \else - \@@ff@getrange#1#2\end + \ifx#1>\relax + \@ff@getrangegreater#1#2\end + \else + \@@ff@getrange#1#2\end + \fi \fi -\fi } % \end{macrocode} %\end{macro} @@ -4220,21 +5888,23 @@ Frames must be defined in the preamble}#1}% % upper bound. A minimum value of "0" is assumed. % \begin{macrocode} \def\@ff@getrangeless<#1-\relax\end{% -\c@ffrangenum=#1\relax -\advance\c@ffrangenum by -1\relax -\def\@ff@numstart{0}% -\edef\@ff@numend{\number\c@ffrangenum}} + \c@ffrangenum=#1\relax + \advance\c@ffrangenum by -1\relax + \def\@ff@numstart{0}% + \edef\@ff@numend{\number\c@ffrangenum}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@getrangegreater} % Get the values for an open ended range with a lower -% bound. A maximum value of "10000" is assumed. +% bound. A maximum value of "100000" is assumed. % \begin{macrocode} \def\@ff@getrangegreater>#1-\relax\end{% -\c@ffrangenum=#1\relax -\advance\c@ffrangenum by 1\relax -\edef\@ff@numstart{\number\c@ffrangenum}% -\def\@ff@numend{10000}} + \c@ffrangenum=#1\relax + \advance\c@ffrangenum by 1\relax + \edef\@ff@numstart{\number\c@ffrangenum}% + \def\@ff@numend{100000}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@ff@getrange} @@ -4243,12 +5913,13 @@ Frames must be defined in the preamble}#1}% % value, otherwise it is a range. % \begin{macrocode} \def\@@ff@getrange#1-#2\end{% -\ifx\relax#2\relax -\def\@ff@numstart{#1}\def\@ff@numend{#1}% -\else -\def\@ff@numstart{#1}% -\@@@ff@getrange#2\end -\fi + \ifx\relax#2\relax + \def\@ff@numstart{#1}% + \def\@ff@numend{#1}% + \else + \def\@ff@numstart{#1}% + \@@@ff@getrange#2\end + \fi } % \end{macrocode} %\end{macro} @@ -4256,9 +5927,2377 @@ Frames must be defined in the preamble}#1}% % Extract the end value from the closed range. % \begin{macrocode} \def\@@@ff@getrange#1-\relax\end{% -\def\@ff@numend{#1}} + \def\@ff@numend{#1}% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@ff@output@adjustframes} +%\changes{1.14}{2012-11-10}{new} +% Provide a hook to adjust frame settings in the output routine. +% \begin{macrocode} +\newcommand*{\@ff@output@adjustframes}{} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\flowswitchonnext} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed flow frames from the next page onwards +% \begin{macrocode} +\newcommand*{\flowswitchonnext}{% + \@ifstar\@sflowswitchonnext\@flowswitchonnext +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sflowswitchonnext} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sflowswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@flowswitchonnext} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@flowswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\flowswitchonnextodd} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed flow frames from the next odd page onwards +% \begin{macrocode} +\newcommand*{\flowswitchonnextodd}{% + \@ifstar\@sflowswitchonnextodd\@flowswitchonnextodd +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sflowswitchonnextodd} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sflowswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi +% \end{macrocode} +% Is this frame already switched on for the next page? +% \begin{macrocode} + \@ff@chckifthispg{\count@}{\ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@flowswitchonnextodd} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@flowswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi +% \end{macrocode} +% Is this frame already switched on for the next page? +% \begin{macrocode} + \@ff@chckifthispg{\count@}{\@ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\flowswitchoffnext} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed flow frames from the next page onwards +% \begin{macrocode} +\newcommand*{\flowswitchoffnext}{% + \@ifstar\@sflowswitchoffnext\@flowswitchoffnext +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sflowswitchoffnext} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sflowswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@flowswitchoffnext} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@flowswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\flowswitchoffnextodd} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed flow frames from the next odd page onwards +% \begin{macrocode} +\newcommand*{\flowswitchoffnextodd}{% + \@ifstar\@sflowswitchoffnextodd\@flowswitchoffnextodd +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sflowswitchoffnextodd} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sflowswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \if@notthiscol +% \end{macrocode} +% It's off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is off on this page, so set to +% none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@ff@chckifthispg{\count@}{\ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page as well, so set to none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% Not off on the next page, so set to next page only. +% \begin{macrocode} + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else +% \end{macrocode} +% It's not off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is not off on this page, so set to +% this page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@ff@chckifthispg{\count@}{\ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page but not off on this page. So set to just this +% page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% Not off on the next page as well, so set to this page and next page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi +% \end{macrocode} +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}{\@ff@nextpages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@flowswitchoffnextodd} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@flowswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% It's off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is off on this page, so set to +% none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@ff@chckifthispg{\count@}{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page as well, so set to none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% Not off on the next page, so set to next page only. +% \begin{macrocode} + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else +% \end{macrocode} +% It's not off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is not off on this page, so set to +% this page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@ff@chckifthispg{\count@}{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page but not off on this page. So set to just this +% page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% Not off on the next page as well, so set to this page and next page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi +% \end{macrocode} +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@nextpages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\flowswitchonnextonly} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed flow frames for just the next page +% \begin{macrocode} +\newcommand*{\flowswitchonnextonly}{% + \@ifstar\@sflowswitchonnextonly\@flowswitchonnextonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sflowswitchonnextonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sflowswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol +% \end{macrocode} +% Not, it isn't, so just set to the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}{\number\count@}% + }% + \else +% \end{macrocode} +% Yes, it is, so set to this page and the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@flowswitchonnextonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@flowswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol +% \end{macrocode} +% Not, it isn't, so just set to the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}{\number\count@}% + }% + \else +% \end{macrocode} +% Yes, it is, so set to this page and the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\flowswitchonnextoddonly} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed flow frames for just the next odd page +% \begin{macrocode} +\newcommand*{\flowswitchonnextoddonly}{% + \@ifstar\@sflowswitchonnextoddonly\@flowswitchonnextoddonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sflowswitchonnextoddonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sflowswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \if@notthiscol +% \end{macrocode} +% No, it isn't. If this is an odd page, is it on or off on the next +% page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. So this frame isn't on this page, but is it on or +% off on the next page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@ff@chckifthispg{\count@}{\ff@id}% + \if@notthiscol +% \end{macrocode} +% It's not switched on either on this (odd) page or the next (even) page. So +% the page list should be just the next odd page after this one. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else +% \end{macrocode} +% It's not switched on for this (odd) page but it is for the next (even) page. So +% the page list should be the next even and odd pages after this +% page. +% \begin{macrocode} + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else +% \end{macrocode} +% No, it's even. So it's not on this (even) page, but needs to be on +% for the following (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is on this page. If this is an odd page, is it on or off on +% the next page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. Is the frame on or off for the next (even) page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@ff@chckifthispg{\count@}{\ff@id}% + \if@notthiscol +% \end{macrocode} +% Frame is off. So the frame is switched on for this (odd) page but +% is off for the next (even) page. So the page list needs to be this +% (odd) page and the following odd page, skipping the even page in +% between. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else +% \end{macrocode} +% Frame is on. So the frame is switched on for this (odd) page and +% the next (even) page. So the page list needs to be this +% (odd) page, the next even page and the following odd page. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is switched on for this page and this page is even. So the +% page list needs to be this (even) page and the next (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi +% \end{macrocode} +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@flowswitchonnextoddonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@flowswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% No, it isn't. If this is an odd page, is it on or off on the next +% page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. So this frame isn't on this page, but is it on or +% off on the next page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@ff@chckifthispg{\count@}{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% It's not switched on either on this (odd) page or the next (even) page. So +% the page list should be just the next odd page after this one. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else +% \end{macrocode} +% It's not switched on for this (odd) page but it is for the next (even) page. So +% the page list should be the next even and odd pages after this +% page. +% \begin{macrocode} + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else +% \end{macrocode} +% No, it's even. So it's not on this (even) page, but needs to be on +% for the following (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is on this page. If this is an odd page, is it on or off on +% the next page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. Is the frame on or off for the next (even) page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@ff@chckifthispg{\count@}{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% Frame is off. So the frame is switched on for this (odd) page but +% is off for the next (even) page. So the page list needs to be this +% (odd) page and the following odd page, skipping the even page in +% between. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else +% \end{macrocode} +% Frame is on. So the frame is switched on for this (odd) page and +% the next (even) page. So the page list needs to be this +% (odd) page, the next even page and the following odd page. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is switched on for this page and this page is even. So the +% page list needs to be this (even) page and the next (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi +% \end{macrocode} +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +% +%\begin{macro}{\flowswitchoffnextonly} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed flow frames for just the next page +% \begin{macrocode} +\newcommand*{\flowswitchoffnextonly}{% + \@ifstar\@sflowswitchoffnextonly\@flowswitchoffnextonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sflowswitchoffnextonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sflowswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@flowswitchoffnextonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@flowswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\flowswitchoffnextoddonly} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed flow frames for just the next odd page +% \begin{macrocode} +\newcommand*{\flowswitchoffnextoddonly}{% + \@ifstar\@sflowswitchoffnextoddonly\@flowswitchoffnextoddonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sflowswitchoffnextoddonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sflowswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@flowswitchoffnextoddonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@flowswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\dynamicswitchonnext} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed dynamic frames from the next page onwards +% \begin{macrocode} +\newcommand*{\dynamicswitchonnext}{% + \@ifstar\@sdynamicswitchonnext\@dynamicswitchonnext +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sdynamicswitchonnext} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sdynamicswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@dynamicswitchonnext} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@dynamicswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\dynamicswitchonnextodd} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed dynamic frames from the next odd page onwards +% \begin{macrocode} +\newcommand*{\dynamicswitchonnextodd}{% + \@ifstar\@sdynamicswitchonnextodd\@dynamicswitchonnextodd +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sdynamicswitchonnextodd} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sdynamicswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi +% \end{macrocode} +% Is this frame already switched on for the next page? +% \begin{macrocode} + \@df@chckifthispg[\count@]{\ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@dynamicswitchonnextodd} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@dynamicswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi +% \end{macrocode} +% Is this frame already switched on for the next page? +% \begin{macrocode} + \@df@chckifthispg[\count@]{\@ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\dynamicswitchoffnext} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed dynamic frames from the next page onwards +% \begin{macrocode} +\newcommand*{\dynamicswitchoffnext}{% + \@ifstar\@sdynamicswitchoffnext\@dynamicswitchoffnext +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sdynamicswitchoffnext} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sdynamicswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@dynamicswitchoffnext} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@dynamicswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\dynamicswitchoffnextodd} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed dynamic frames from the next odd page onwards +% \begin{macrocode} +\newcommand*{\dynamicswitchoffnextodd}{% + \@ifstar\@sdynamicswitchoffnextodd\@dynamicswitchoffnextodd +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sdynamicswitchoffnextodd} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sdynamicswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% It's off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is off on this page, so set to +% none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@df@chckifthispg[\count@]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page as well, so set to none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% Not off on the next page, so set to next page only. +% \begin{macrocode} + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else +% \end{macrocode} +% It's not off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is not off on this page, so set to +% this page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@df@chckifthispg[\count@]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page but not off on this page. So set to just this +% page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% Not off on the next page as well, so set to this page and next page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi +% \end{macrocode} +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@nextpages}% + }% + }% +} % \end{macrocode} %\end{macro} +% +%\begin{macro}{\@dynamicswitchoffnextodd} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@dynamicswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% It's off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is off on this page, so set to +% none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@df@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page as well, so set to none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% Not off on the next page, so set to next page only. +% \begin{macrocode} + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else +% \end{macrocode} +% It's not off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is not off on this page, so set to +% this page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@df@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page but not off on this page. So set to just this +% page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% Not off on the next page as well, so set to this page and next page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi +% \end{macrocode} +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@nextpages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\dynamicswitchonnextonly} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed dynamic frames for just the next page +% \begin{macrocode} +\newcommand*{\dynamicswitchonnextonly}{% + \@ifstar\@sdynamicswitchonnextonly\@dynamicswitchonnextonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sdynamicswitchonnextonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sdynamicswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol +% \end{macrocode} +% Not, it isn't, so just set to the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}{\number\count@}% + }% + \else +% \end{macrocode} +% Yes, it is, so set to this page and the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@dynamicswitchonnextonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@dynamicswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol +% \end{macrocode} +% Not, it isn't, so just set to the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}{\number\count@}% + }% + \else +% \end{macrocode} +% Yes, it is, so set to this page and the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\dynamicswitchonnextoddonly} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed dynamic frames for just the next odd page +% \begin{macrocode} +\newcommand*{\dynamicswitchonnextoddonly}{% + \@ifstar\@sdynamicswitchonnextoddonly\@dynamicswitchonnextoddonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sdynamicswitchonnextoddonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sdynamicswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% No, it isn't. If this is an odd page, is it on or off on the next +% page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. So this frame isn't on this page, but is it on or +% off on the next page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@df@chckifthispg[\count@]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% It's not switched on either on this (odd) page or the next (even) page. So +% the page list should be just the next odd page after this one. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else +% \end{macrocode} +% It's not switched on for this (odd) page but it is for the next (even) page. So +% the page list should be the next even and odd pages after this +% page. +% \begin{macrocode} + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else +% \end{macrocode} +% No, it's even. So it's not on this (even) page, but needs to be on +% for the following (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is on this page. If this is an odd page, is it on or off on +% the next page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. Is the frame on or off for the next (even) page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@df@chckifthispg[\count@]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% Frame is off. So the frame is switched on for this (odd) page but +% is off for the next (even) page. So the page list needs to be this +% (odd) page and the following odd page, skipping the even page in +% between. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else +% \end{macrocode} +% Frame is on. So the frame is switched on for this (odd) page and +% the next (even) page. So the page list needs to be this +% (odd) page, the next even page and the following odd page. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is switched on for this page and this page is even. So the +% page list needs to be this (even) page and the next (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@dynamicswitchonnextoddonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@dynamicswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% No, it isn't. If this is an odd page, is it on or off on the next +% page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. So this frame isn't on this page, but is it on or +% off on the next page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@df@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% It's not switched on either on this (odd) page or the next (even) page. So +% the page list should be just the next odd page after this one. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else +% \end{macrocode} +% It's not switched on for this (odd) page but it is for the next (even) page. So +% the page list should be the next even and odd pages after this +% page. +% \begin{macrocode} + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else +% \end{macrocode} +% No, it's even. So it's not on this (even) page, but needs to be on +% for the following (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is on this page. If this is an odd page, is it on or off on +% the next page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. Is the frame on or off for the next (even) page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@df@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% Frame is off. So the frame is switched on for this (odd) page but +% is off for the next (even) page. So the page list needs to be this +% (odd) page and the following odd page, skipping the even page in +% between. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else +% \end{macrocode} +% Frame is on. So the frame is switched on for this (odd) page and +% the next (even) page. So the page list needs to be this +% (odd) page, the next even page and the following odd page. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is switched on for this page and this page is even. So the +% page list needs to be this (even) page and the next (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi +% \end{macrocode} +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +% +%\begin{macro}{\dynamicswitchoffnextonly} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed dynamic frames for just the next page +% \begin{macrocode} +\newcommand*{\dynamicswitchoffnextonly}{% + \@ifstar\@sdynamicswitchoffnextonly\@dynamicswitchoffnextonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sdynamicswitchoffnextonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sdynamicswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@dynamicswitchoffnextonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@dynamicswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\dynamicswitchoffnextoddonly} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed dynamic frames for just the next odd page +% \begin{macrocode} +\newcommand*{\dynamicswitchoffnextoddonly}{% + \@ifstar\@sdynamicswitchoffnextoddonly\@dynamicswitchoffnextoddonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sdynamicswitchoffnextoddonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sdynamicswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@dynamicswitchoffnextoddonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@dynamicswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\staticswitchonnext} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed static frames from the next page onwards +% \begin{macrocode} +\newcommand*{\staticswitchonnext}{% + \@ifstar\@sstaticswitchonnext\@staticswitchonnext +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sstaticswitchonnext} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sstaticswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@staticswitchonnext} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@staticswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\staticswitchonnextodd} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed static frames from the next odd page onwards +% \begin{macrocode} +\newcommand*{\staticswitchonnextodd}{% + \@ifstar\@sstaticswitchonnextodd\@staticswitchonnextodd +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sstaticswitchonnextodd} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sstaticswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi +% \end{macrocode} +% Is this frame already switched on for the next page? +% \begin{macrocode} + \@sf@chckifthispg[\count@]{\ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@staticswitchonnextodd} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@staticswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi +% \end{macrocode} +% Is this frame already switched on for the next page? +% \begin{macrocode} + \@sf@chckifthispg[\count@]{\@ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\staticswitchoffnext} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed static frames from the next page onwards +% \begin{macrocode} +\newcommand*{\staticswitchoffnext}{% + \@ifstar\@sstaticswitchoffnext\@staticswitchoffnext +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sstaticswitchoffnext} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sstaticswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@staticswitchoffnext} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@staticswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\staticswitchoffnextodd} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed static frames from the next odd page onwards +% \begin{macrocode} +\newcommand*{\staticswitchoffnextodd}{% + \@ifstar\@sstaticswitchoffnextodd\@staticswitchoffnextodd +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sstaticswitchoffnextodd} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sstaticswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% It's off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is off on this page, so set to +% none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@sf@chckifthispg[\count@]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page as well, so set to none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% Not off on the next page, so set to next page only. +% \begin{macrocode} + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else +% \end{macrocode} +% It's not off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is not off on this page, so set to +% this page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@sf@chckifthispg[\count@]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page but not off on this page. So set to just this +% page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% Not off on the next page as well, so set to this page and next page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi +% \end{macrocode} +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}{\@ff@nextpages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@staticswitchoffnextodd} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@staticswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already off on this page? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% It's off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is off on this page, so set to +% none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@sf@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page as well, so set to none. +% \begin{macrocode} + \def\@ff@nextpages{none}% + \else +% \end{macrocode} +% Not off on the next page, so set to next page only. +% \begin{macrocode} + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else +% \end{macrocode} +% It's not off on this page. Is it on or off on the next page, if this +% page is odd? First, is this page odd? +% \begin{macrocode} + \ifnum\@ff@pages@countreg=\count@\relax +% \end{macrocode} +% This page is even and the frame is not off on this page, so set to +% this page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% This page is odd. Is the frame on or off on the next page? +% \begin{macrocode} + \@sf@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% Off on the next page but not off on this page. So set to just this +% page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else +% \end{macrocode} +% Not off on the next page as well, so set to this page and next page. +% \begin{macrocode} + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi +% \end{macrocode} +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@nextpages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\staticswitchonnextonly} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed static frames for just the next page +% \begin{macrocode} +\newcommand*{\staticswitchonnextonly}{% + \@ifstar\@sstaticswitchonnextonly\@staticswitchonnextonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sstaticswitchonnextonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sstaticswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol +% \end{macrocode} +% Not, it isn't, so just set to the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}{\number\count@}% + }% + \else +% \end{macrocode} +% Yes, it is, so set to this page and the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@staticswitchonnextonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@staticswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol +% \end{macrocode} +% Not, it isn't, so just set to the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}{\number\count@}% + }% + \else +% \end{macrocode} +% Yes, it is, so set to this page and the next page: +% \begin{macrocode} + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\staticswitchonnextoddonly} +%\changes{1.14}{2012-11-10}{new} +% Switch on the listed static frames for just the next odd page +% \begin{macrocode} +\newcommand*{\staticswitchonnextoddonly}{% + \@ifstar\@sstaticswitchonnextoddonly\@staticswitchonnextoddonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sstaticswitchonnextoddonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sstaticswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% No, it isn't. If this is an odd page, is it on or off on the next +% page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. So this frame isn't on this page, but is it on or +% off on the next page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@sf@chckifthispg[\count@]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% It's not switched on either on this (odd) page or the next (even) page. So +% the page list should be just the next odd page after this one. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else +% \end{macrocode} +% It's not switched on for this (odd) page but it is for the next (even) page. So +% the page list should be the next even and odd pages after this +% page. +% \begin{macrocode} + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else +% \end{macrocode} +% No, it's even. So it's not on this (even) page, but needs to be on +% for the following (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is on this page. If this is an odd page, is it on or off on +% the next page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. Is the frame on or off for the next (even) page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@sf@chckifthispg[\count@]{\ff@id}% + \if@notthiscol +% \end{macrocode} +% Frame is off. So the frame is switched on for this (odd) page but +% is off for the next (even) page. So the page list needs to be this +% (odd) page and the following odd page, skipping the even page in +% between. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else +% \end{macrocode} +% Frame is on. So the frame is switched on for this (odd) page and +% the next (even) page. So the page list needs to be this +% (odd) page, the next even page and the following odd page. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is switched on for this page and this page is even. So the +% page list needs to be this (even) page and the next (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi +% \end{macrocode} +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@staticswitchonnextoddonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@staticswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% +% \end{macrocode} +% Is this frame already on? +% \begin{macrocode} + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% No, it isn't. If this is an odd page, is it on or off on the next +% page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. So this frame isn't on this page, but is it on or +% off on the next page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@sf@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% It's not switched on either on this (odd) page or the next (even) page. So +% the page list should be just the next odd page after this one. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else +% \end{macrocode} +% It's not switched on for this (odd) page but it is for the next (even) page. So +% the page list should be the next even and odd pages after this +% page. +% \begin{macrocode} + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else +% \end{macrocode} +% No, it's even. So it's not on this (even) page, but needs to be on +% for the following (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is on this page. If this is an odd page, is it on or off on +% the next page? First, is this an odd page? +% \begin{macrocode} + \ifodd\@ff@pages@countreg +% \end{macrocode} +% Yes, it's odd. Is the frame on or off for the next (even) page? +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@sf@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol +% \end{macrocode} +% Frame is off. So the frame is switched on for this (odd) page but +% is off for the next (even) page. So the page list needs to be this +% (odd) page and the following odd page, skipping the even page in +% between. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else +% \end{macrocode} +% Frame is on. So the frame is switched on for this (odd) page and +% the next (even) page. So the page list needs to be this +% (odd) page, the next even page and the following odd page. +% \begin{macrocode} + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else +% \end{macrocode} +% Frame is switched on for this page and this page is even. So the +% page list needs to be this (even) page and the next (odd) page. +% \begin{macrocode} + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi +% \end{macrocode} +% \begin{macrocode} + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +% +%\begin{macro}{\staticswitchoffnextonly} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed static frames for just the next page +% \begin{macrocode} +\newcommand*{\staticswitchoffnextonly}{% + \@ifstar\@sstaticswitchoffnextonly\@staticswitchoffnextonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sstaticswitchoffnextonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sstaticswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@staticswitchoffnextonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@staticswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\staticswitchoffnextoddonly} +%\changes{1.14}{2012-11-10}{new} +% Switch off the listed static frames for just the next odd page +% \begin{macrocode} +\newcommand*{\staticswitchoffnextoddonly}{% + \@ifstar\@sstaticswitchoffnextoddonly\@staticswitchoffnextoddonly +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@sstaticswitchoffnextoddonly} +% The starred version uses \glspl{idl}. +% \begin{macrocode} +\newcommand{\@sstaticswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\@staticswitchoffnextoddonly} +% The unstarred version uses \glspl{idn}. +% \begin{macrocode} +\newcommand{\@staticswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +% \end{macrocode} +%\end{macro} +% +%\begin{macro}{\ffaddtoadjustframeshook} +%\changes{1.14}{2012-11-10}{new} +% Add stuff to the output hook. +% \begin{macrocode} +\newcommand*{\ffaddtoadjustframeshook}[1]{% + \@ff@addtolist\@ff@output@adjustframes\entry{#1}% +} +% \end{macrocode} +%\end{macro} +% %\begin{macro}{\@g@tnextcol} % Find the next \gls{flow}. If there are no more flow % frames, define a new one the size of the \gls{typeblock}. @@ -4268,30 +8307,70 @@ Frames must be defined in the preamble}#1}% \newif\if@ff@nwpg \newcount\c@curpg \newcommand*{\@g@tnextcol}[1]{% -\@ff@checkifmoreframes -\if@ff@moreframes -\else +% \end{macrocode} +% Do any frame adjustments +% \begin{macrocode} + \@ff@output@adjustframes +% \end{macrocode} +% Now clear the hook +% \begin{macrocode} + \global\let\@ff@output@adjustframes\@empty +% \end{macrocode} +% Now check for any more frames. +% \begin{macrocode} + \@ff@checkifmoreframes + \if@ff@moreframes + \else +% \end{macrocode} % No more frames, add new frame -\PackageWarning{flowfram}{Run out of flows frames, -adding new one}% -\@onecolumn -#1=\c@maxflow -\fi -\@notthiscoltrue -\@ff@nwpgfalse -\@colN=#1\relax -\c@curpg=\c@page -\loop -\ifnum\@colN=\c@maxflow - \@colN=1\@ff@nwpgtrue - \advance\c@curpg by 1\relax -\else - \advance\@colN by 1\relax -\fi -\@ff@chckifthispg{\c@curpg}{\@colN}% -\if@notthiscol -\repeat -#1=\@colN +% \begin{macrocode} + \PackageWarning{flowfram}% + {Run out of flows frames on page \number\@ff@pages@countreg, adding new one}% + \flf@doifverbose + {% + \def\flf@messinfo{Here's the list of flow frames:}% + \count@=0\relax + \loop + \advance\count@ by 1\relax + \expandafter\toks@\expandafter{\flf@messinfo\MessageBreak}% + \edef\flf@messinfo{\the\toks@ + \number\count@. + Pages: \csname @ff@pages@\romannumeral\count@\endcsname. + Exclusions: \csname @ff@xpages@\romannumeral\count@\endcsname. + }% + \ifnum\count@<\c@maxflow + \repeat + \PackageInfo{flowfram}{\flf@messinfo\@gobbletwo}% + }% + \@onecolumn + #1=\c@maxflow + \fi + \@notthiscoltrue + \@ff@nwpgfalse + \@colN=#1\relax +% \end{macrocode} +%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with +%\cs{@ff@pages@countreg}} +% \begin{macrocode} + \c@curpg=\@ff@pages@countreg + \loop + \ifnum\@colN=\c@maxflow +% \end{macrocode} +% Reached the end of the page. Try the next one. +% \begin{macrocode} + \@colN=1\relax + \@ff@nwpgtrue + \advance\c@curpg by 1\relax + \else +% \end{macrocode} +% Move on to the next flow frame on this page. +% \begin{macrocode} + \advance\@colN by 1\relax + \fi + \@ff@chckifthispg{\c@curpg}{\@colN}% + \if@notthiscol + \repeat + #1=\@colN\relax } % \end{macrocode} %\end{macro} @@ -4302,9 +8381,21 @@ adding new one}% % First set up some variables. % \begin{macrocode} \newcommand*{\@ff@chckifthispg}[2]{% -\@notthiscoltrue -\edef\ff@pages{\csname @ff@pages@\romannumeral#2\endcsname}% -\@@ff@chckifthispg{#1}% + \@notthiscolfalse + \edef\ff@xpages{\csname @ff@xpages@\romannumeral#2\endcsname}% + \@for\@ff@pp:=\ff@xpages\do + {% + \ifnum0\@ff@pp=#1\relax + \@notthiscoltrue + \@endfortrue + \fi + }% + \if@notthiscol + \else + \@notthiscoltrue + \edef\ff@pages{\csname @ff@pages@\romannumeral#2\endcsname}% + \@@ff@chckifthispg{#1}% + \fi } % \end{macrocode} %\end{macro} @@ -4312,42 +8403,73 @@ adding new one}% % Now go ahead and check. % \begin{macrocode} \newcommand*{\@@ff@chckifthispg}[1]{% -\ifthenelse{\equal{\ff@pages}{none}}{}{% -\ifthenelse{\equal{\ff@pages}{all}}{\@notthiscolfalse}{% -\ifthenelse{\equal{\ff@pages}{odd}}{% -\ifodd#1\@notthiscolfalse\fi}{% -\ifthenelse{\equal{\ff@pages}{even}}{% -\ifodd#1\else\@notthiscolfalse\fi}{% + \ifthenelse{\equal{\ff@pages}{none}}% + {}% + {% + \ifthenelse{\equal{\ff@pages}{all}}% + {% + \@notthiscolfalse + }% + {% + \ifthenelse{\equal{\ff@pages}{odd}}% + {% + \ifodd#1\@notthiscolfalse\fi + }% + {% + \ifthenelse{\equal{\ff@pages}{even}}% + {% + \ifodd#1\else\@notthiscolfalse\fi + }% + {% +% \end{macrocode} % check through list of page numbers -\@for\@ff@pp:=\ff@pages\do{% -\def\@ff@numstart{0}\def\@ff@numend{0}% -\@ff@getrange{\@ff@pp}% -\ifthenelse{#1<\@ff@numstart \or #1>\@ff@numend}{}{% -\@notthiscolfalse}% -}% -}}}}% +% \begin{macrocode} + \@for\@ff@pp:=\ff@pages\do{% + \def\@ff@numstart{0}% + \def\@ff@numend{0}% + \@ff@getrange{\@ff@pp}% + \ifthenelse{#1<\@ff@numstart \or #1>\@ff@numend}% + {}% + {% + \@notthiscolfalse + }% + }% + }% + }% + }% + }% } % \end{macrocode} %\end{macro} %\begin{macro}{\@sf@chckifthispg} % Checks to see if \gls{static} "#1" is defined on the -% current page. +% current page (or the page given by the optional argument). +%\changes{1.14}{2012-11-10}{added optional argument} % \begin{macrocode} -\newcommand*{\@sf@chckifthispg}[1]{% -\@notthiscoltrue -\edef\ff@pages{\csname @sf@pages@\romannumeral#1\endcsname}% -\@@ff@chckifthispg{\c@page}% +\newcommand*{\@sf@chckifthispg}[2][\@ff@pages@countreg]{% + \@notthiscoltrue + \edef\ff@pages{\csname @sf@pages@\romannumeral#2\endcsname}% +% \end{macrocode} +%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with +%\cs{@ff@pages@countreg}} +% \begin{macrocode} + \@@ff@chckifthispg{#1}% } % \end{macrocode} %\end{macro} %\begin{macro}{\@df@chckifthispg} % Checks to see if \gls{dynamic} "#1" is defined on the -% current page. +% current page (or the page given by the optional argument). +%\changes{1.14}{2012-11-10}{added optional argument} +% \begin{macrocode} +\newcommand*{\@df@chckifthispg}[2][\@ff@pages@countreg]{% + \@notthiscoltrue + \edef\ff@pages{\csname @df@pages@\romannumeral#2\endcsname}% +% \end{macrocode} +%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with +%\cs{@ff@pages@countreg}} % \begin{macrocode} -\newcommand*{\@df@chckifthispg}[1]{% -\@notthiscoltrue -\edef\ff@pages{\csname @df@pages@\romannumeral#1\endcsname}% -\@@ff@chckifthispg{\c@page}% + \@@ff@chckifthispg{#1}% } % \end{macrocode} %\end{macro} @@ -4357,8 +8479,9 @@ adding new one}% % all the \glspl{flow} have been filled for that page. % \begin{macrocode} \newcommand*{\@setcolbox}[1]{% -\expandafter\global\expandafter\setbox -\csname column\romannumeral#1\endcsname\box\@outputbox + \flf@message{Setting contents of box for flow frame \number#1}% + \expandafter\global\expandafter\setbox + \csname column\romannumeral#1\endcsname\box\@outputbox } % \end{macrocode} %\end{macro} @@ -4367,36 +8490,81 @@ adding new one}% % has one. % \begin{macrocode} \newcommand*{\@docolbox}[1]{% -\edef\ff@frametype{% -\csname @ff@frametype@\romannumeral#1\endcsname}% -\edef\ff@col{\csname @ff@col@\romannumeral#1\endcsname}% -\edef\ff@txtcol{\csname @ff@txtcol@\romannumeral#1\endcsname}% -\edef\ff@backcol{\csname @ff@backcol@\romannumeral#1\endcsname}% -\@ff@setoffset{#1}% -\rotateframe{\csname @ff@angle@\romannumeral#1\endcsname}{% -\ifthenelse{\boolean{columnframe\romannumeral#1}}{% -\@ff@fbox{\csname colwidth\romannumeral#1\endcsname}% -{\csname colheight\romannumeral#1\endcsname}{% -\expandafter\box\csname column\romannumeral#1\endcsname}{% -\csname\ff@frametype\endcsname}% -}{% -\@ff@box{\csname colwidth\romannumeral#1\endcsname}% -{\csname colheight\romannumeral#1\endcsname}{% -\expandafter\box\csname column\romannumeral#1\endcsname}% -}}} + \flf@message{Doing flow frame \number#1\space + (page \number\@ff@pages@countreg)}% + \edef\ff@frametype{% + \csname @ff@frametype@\romannumeral#1\endcsname}% +% \end{macrocode} +% Frame colour +% \begin{macrocode} + \edef\ff@col{\csname @ff@col@\romannumeral#1\endcsname}% +% \end{macrocode} +% Text colour +% \begin{macrocode} + \edef\ff@txtcol{\csname @ff@txtcol@\romannumeral#1\endcsname}% +% \end{macrocode} +% Background colour +% \begin{macrocode} + \edef\ff@backcol{\csname @ff@backcol@\romannumeral#1\endcsname}% +% \end{macrocode} +% Compute offset for this frame +% \begin{macrocode} + \@ff@setoffset{#1}% +% \end{macrocode} +% Rotate frame if required +% \begin{macrocode} + \rotateframe{\csname @ff@angle@\romannumeral#1\endcsname}% + {% +% \end{macrocode} +% Check if frame has a border +% \begin{macrocode} + \ifthenelse{\boolean{columnframe\romannumeral#1}}% + {% +% \end{macrocode} +% Put the required border around the frame +% \begin{macrocode} + \@ff@fbox + {\csname colwidth\romannumeral#1\endcsname}% + {\csname colheight\romannumeral#1\endcsname}% + {% + \expandafter\box\csname column\romannumeral#1\endcsname + }% + {% + \csname\ff@frametype\endcsname + }% + }% + {% +% \end{macrocode} +% Do the frame without a border +% \begin{macrocode} + \@ff@box + {\csname colwidth\romannumeral#1\endcsname}% + {\csname colheight\romannumeral#1\endcsname}% + {% + \expandafter\box\csname column\romannumeral#1\endcsname + }% + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@docolbbox} % Do the \gls{bbox} for given \gls{flow}. % \begin{macrocode} \newcommand*{\@docolbbox}[1]{% -\@ff@setoffset{#1}% -\def\ff@col{}\def\ff@txtcol{}% -\@fr@meifdraft{% -\@ff@box{\csname colwidth\romannumeral#1\endcsname}% -{\csname colheight\romannumeral#1\endcsname}{% -\expandafter\box\csname column\romannumeral#1\endcsname}}% -{F:\number#1;\csname @col@id@\romannumeral#1\endcsname}} + \@ff@setoffset{#1}% + \def\ff@col{}\def\ff@txtcol{}% + \@fr@meifdraft + {% + \@ff@box + {\csname colwidth\romannumeral#1\endcsname}% + {\csname colheight\romannumeral#1\endcsname}% + {% + \expandafter\box\csname column\romannumeral#1\endcsname + }% + }% + {F:\number#1;\csname @col@id@\romannumeral#1\endcsname}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@fbox} @@ -4404,18 +8572,29 @@ adding new one}% % height "#2", and frame making command % specified by "#4". % \begin{macrocode} -\newcommand{\@ff@fbox}[4]{{% -\fboxsep=\flowframesep\fboxrule=\flowframerule\@s@tffcol -\kern\@ff@offset -#4{\@ff@box{#1}{#2}{#3}}}} +\newcommand{\@ff@fbox}[4]{% + {% + \fboxsep=\flowframesep + \fboxrule=\flowframerule + \@s@tffcol + \kern\@ff@offset + #4{\@ff@box{#1}{#2}{#3}}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@box} % Put the \TeX\ box "#3" of width "#1" and height "#2" on % the page. % \begin{macrocode} -\newcommand{\@ff@box}[3]{{\@ffbackground{\vbox to#2 -{\hb@xt@ #1{\hss{\@s@tfftextcol #3}\hss}\vss\kern\z@}}}} +\newcommand{\@ff@box}[3]{% + {% + \@ffbackground + {% + \vbox to#2 {\hb@xt@ #1{\hss{\@s@tfftextcol #3}\hss}\vss\kern\z@}% + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@putcolbox} @@ -4425,29 +8604,56 @@ adding new one}% % location. % \begin{macrocode} \newcommand*{\@putcolbox}[1]{% -\@ff@chckifthispg{\c@page}{#1}% -\if@notthiscol -\else -\@killglue -\if@twoside -\ifodd\c@page -\expandafter\raise\csname col@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname col@\romannumeral#1@posx\endcsname -\@docolbox{#1}\hss}% -\else -\expandafter\raise\csname col@\romannumeral#1@eveny\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname col@\romannumeral#1@evenx\endcsname -\@docolbox{#1}\hss}% -\fi -\else -\expandafter\raise\csname col@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname col@\romannumeral#1@posx\endcsname -\@docolbox{#1}\hss}% -\fi -\fi +% \end{macrocode} +%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with +%\cs{@ff@pages@countreg}} +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{#1}% +% \end{macrocode} +%\changes{1.14}{2012-11-10}{added check for non-void box} +% \begin{macrocode} + \if@notthiscol + \expandafter\ifvoid\csname column\romannumeral#1\endcsname + \else + \PackageWarning{flowfram}{Box \number#1\space is not void. + Dumping. This page: \number\@ff@pages@countreg. + Page list: "\csname @ff@pages@\romannumeral#1\endcsname". + Exclusion list: "\csname @ff@xpages@\romannumeral#1\endcsname". + (Maybe the page list was changed after this frame was + selected or maybe you should use package option pages=absolute)}% + \@notthiscolfalse + \fi + \fi + \if@notthiscol + \flf@message{Flow frame \number#1\space is not required on page + \number\@ff@pages@countreg}% + \else + \@killglue + \if@twoside + \ifodd\c@page + \expandafter\raise\csname col@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@posx\endcsname + \@docolbox{#1}\hss + }% + \else + \expandafter\raise\csname col@\romannumeral#1@eveny\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@evenx\endcsname + \@docolbox{#1}\hss + }% + \fi + \else + \expandafter\raise\csname col@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@posx\endcsname + \@docolbox{#1}\hss + }% + \fi + \fi } % \end{macrocode} %\end{macro} @@ -4455,29 +8661,38 @@ adding new one}% % Same for \gls{flow} \gls{bbox}: % \begin{macrocode} \newcommand*{\@putcolbbox}[1]{% -\@ff@chckifthispg{\c@page}{#1}% -\if@notthiscol -\else -\@killglue -\if@twoside -\ifodd\c@page -\expandafter\raise\csname col@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname col@\romannumeral#1@posx\endcsname -\@docolbbox{#1}\hss}% -\else -\expandafter\raise\csname col@\romannumeral#1@eveny\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname col@\romannumeral#1@evenx\endcsname -\@docolbbox{#1}\hss}% -\fi -\else -\expandafter\raise\csname col@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname col@\romannumeral#1@posx\endcsname -\@docolbbox{#1}\hss}% -\fi -\fi +% \end{macrocode} +%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with \cs{@ff@pages@countreg}} +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{#1}% + \if@notthiscol + \else + \@killglue + \if@twoside + \ifodd\c@page + \expandafter\raise\csname col@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@posx\endcsname + \@docolbbox{#1}\hss + }% + \else + \expandafter\raise\csname col@\romannumeral#1@eveny\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@evenx\endcsname + \@docolbbox{#1}\hss + }% + \fi + \else + \expandafter\raise\csname col@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@posx\endcsname + \@docolbbox{#1}\hss + }% + \fi + \fi } % \end{macrocode} %\end{macro} @@ -4491,9 +8706,9 @@ adding new one}% % Compute offset for "\doublebox": % \begin{macrocode} \newcommand*{\@ff@s@t@doubleboxoffset}{% -\setlength{\@ff@offset}{-\flowframesep}% -\addtolength{\@ff@offset}{-3.75\flowframerule}% -\addtolength{\@ff@offset}{-.5pt}% + \setlength{\@ff@offset}{-\flowframesep}% + \addtolength{\@ff@offset}{-3.75\flowframerule}% + \addtolength{\@ff@offset}{-.5pt}% } % \end{macrocode} %\end{macro} @@ -4501,8 +8716,8 @@ adding new one}% % Compute offset for "\ovalbox": % \begin{macrocode} \newcommand*{\@ff@s@t@ovalboxoffset}{% -\@ff@offset=-\fontdimen 8\tenln\relax -\advance\@ff@offset by -\flowframesep\relax + \@ff@offset=-\fontdimen 8\tenln\relax + \advance\@ff@offset by -\flowframesep\relax } % \end{macrocode} %\end{macro} @@ -4510,8 +8725,8 @@ adding new one}% % Compute offset for "\ovalbox": % \begin{macrocode} \newcommand*{\@ff@s@t@Ovalboxoffset}{% -\@ff@offset=-\fontdimen 8\tenlnw\relax -\advance\@ff@offset by -\flowframesep\relax + \@ff@offset=-\fontdimen 8\tenlnw\relax + \advance\@ff@offset by -\flowframesep\relax } % \end{macrocode} %\end{macro} @@ -4519,8 +8734,8 @@ adding new one}% % Compute default offset: % \begin{macrocode} \newcommand*{\@ff@s@t@defaultoffset}{% -\@ff@offset=-\flowframesep\relax -\addtolength{\@ff@offset}{-\flowframerule}% + \@ff@offset=-\flowframesep\relax + \addtolength{\@ff@offset}{-\flowframerule}% } % \end{macrocode} %\end{macro} @@ -4529,29 +8744,49 @@ adding new one}% % in "\ff@offset". % \begin{macrocode} \newcommand*{\@ff@setoffset}[1]{% -\ifthenelse{\equal{\csname @ff@offset@\romannumeral#1\endcsname}% -{compute}}{% -\ifthenelse{\boolean{columnframe\romannumeral#1}}{% -\ifthenelse{% -\equal{\csname @ff@frametype@\romannumeral#1\endcsname}% -{doublebox}}{% -\@ff@s@t@doubleboxoffset -}{% -\ifthenelse{% -\equal{\csname @ff@frametype@\romannumeral#1\endcsname}% -{ovalbox}}{% -\@ff@s@t@ovalboxoffset -}{% -\ifthenelse{% -\equal{\csname @ff@frametype@\romannumeral#1\endcsname}% -{Ovalbox}}{% -\@ff@s@t@Ovalboxoffset}{% -\@ff@s@t@defaultoffset -}}}% -}{}% -}{% -\setlength{\@ff@offset}% -{\csname @ff@offset@\romannumeral#1\endcsname}}% + \ifthenelse + {\equal{\csname @ff@offset@\romannumeral#1\endcsname}{compute}}% + {% + \ifthenelse{\boolean{columnframe\romannumeral#1}}% + {% + \ifthenelse + {% + \equal{\csname @ff@frametype@\romannumeral#1\endcsname}% + {doublebox}% + }% + {% + \@ff@s@t@doubleboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @ff@frametype@\romannumeral#1\endcsname}% + {ovalbox}% + }% + {% + \@ff@s@t@ovalboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @ff@frametype@\romannumeral#1\endcsname}% + {Ovalbox}% + }% + {% + \@ff@s@t@Ovalboxoffset + }% + {% + \@ff@s@t@defaultoffset + }% + }% + }% + }% + {}% + }% + {% + \setlength{\@ff@offset}% + {\csname @ff@offset@\romannumeral#1\endcsname}% + }% } % \end{macrocode} %\end{macro} @@ -4560,31 +8795,52 @@ adding new one}% % in "\ff@offset". % \begin{macrocode} \newcommand*{\@sf@setoffset}[1]{% -\ifthenelse{% -\equal{\csname @sf@offset@\romannumeral#1\endcsname}% -{compute}}{% -\ifthenelse{\boolean{staticframe\romannumeral#1}}{% -\ifthenelse{% -\equal{\csname @sf@frametype@\romannumeral#1\endcsname}% -{doublebox}}{% -\@ff@s@t@doubleboxoffset -}{% -\ifthenelse{% -\equal{\csname @sf@frametype@\romannumeral#1\endcsname}% -{ovalbox}}{% -\@ff@s@t@ovalboxoffset -}{% -\ifthenelse{% -\equal{\csname @sf@frametype@\romannumeral#1\endcsname}% -{Ovalbox}}{% -\@ff@s@t@Ovalboxoffset -}{% -\@ff@s@t@defaultoffset -}}}% -}{}% -}{% -\setlength{\@ff@offset}% -{\csname @sf@offset@\romannumeral#1\endcsname}}% + \ifthenelse + {% + \equal{\csname @sf@offset@\romannumeral#1\endcsname}% + {compute}% + }% + {% + \ifthenelse{\boolean{staticframe\romannumeral#1}}% + {% + \ifthenelse + {% + \equal{\csname @sf@frametype@\romannumeral#1\endcsname}% + {doublebox}% + }% + {% + \@ff@s@t@doubleboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @sf@frametype@\romannumeral#1\endcsname}% + {ovalbox}% + }% + {% + \@ff@s@t@ovalboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @sf@frametype@\romannumeral#1\endcsname}% + {Ovalbox}% + }% + {% + \@ff@s@t@Ovalboxoffset + }% + {% + \@ff@s@t@defaultoffset + }% + }% + }% + }% + {}% + }% + {% + \setlength{\@ff@offset}% + {\csname @sf@offset@\romannumeral#1\endcsname}% + }% } % \end{macrocode} %\end{macro} @@ -4593,31 +8849,53 @@ adding new one}% % in "\ff@offset". % \begin{macrocode} \newcommand*{\@df@setoffset}[1]{% -\ifthenelse{% -\equal{\csname @df@offset@\romannumeral#1\endcsname}% -{compute}}{% -\setlength{\@ff@offset}{0pt}% -\ifthenelse{\boolean{dynamicframe\romannumeral#1}}{% -\ifthenelse{% -\equal{\csname @df@frametype@\romannumeral#1\endcsname}% -{doublebox}}{% -\@ff@s@t@doubleboxoffset -}{% -\ifthenelse{% -\equal{\csname @df@frametype@\romannumeral#1\endcsname}% -{ovalbox}}{% -\@ff@s@t@ovalboxoffset -}{% -\ifthenelse{% -\equal{\csname @df@frametype@\romannumeral#1\endcsname}% -{Ovalbox}}{% -\@ff@s@t@Ovalboxoffset}{% -\@ff@s@t@defaultoffset -}}}% -}{}% -}{% -\setlength{\@ff@offset}% -{\csname @df@offset@\romannumeral#1\endcsname}}% + \ifthenelse + {% + \equal{\csname @df@offset@\romannumeral#1\endcsname}% + {compute}% + }% + {% + \setlength{\@ff@offset}{0pt}% + \ifthenelse{\boolean{dynamicframe\romannumeral#1}}% + {% + \ifthenelse + {% + \equal{\csname @df@frametype@\romannumeral#1\endcsname}% + {doublebox}% + }% + {% + \@ff@s@t@doubleboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @df@frametype@\romannumeral#1\endcsname}% + {ovalbox}% + }% + {% + \@ff@s@t@ovalboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @df@frametype@\romannumeral#1\endcsname}% + {Ovalbox}% + }% + {% + \@ff@s@t@Ovalboxoffset + }% + {% + \@ff@s@t@defaultoffset + }% + }% + }% + }% + {}% + }% + {% + \setlength{\@ff@offset}% + {\csname @df@offset@\romannumeral#1\endcsname}% + }% } % \end{macrocode} %\end{macro} @@ -4625,44 +8903,56 @@ adding new one}% % Draw box representing the margin for \gls{flow} "#1". % \begin{macrocode} \newcommand*{\@putmarginbox}[1]{% -\@ff@chckifthispg{\c@page}{#1}% -\if@notthiscol -\else -\@killglue -\if@twoside -\ifodd\c@page -\edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}% -\edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}% -\else -\edef\ff@x{\csname col@\romannumeral#1@evenx\endcsname}% -\edef\ff@y{\csname col@\romannumeral#1@eveny\endcsname}% -\fi -\else -\edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}% -\edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}% -\fi -\setlength{\@ff@tmp@x}{\ff@x}% -\setlength{\@ff@tmp@y}{\ff@y}% -\@getmarginpos{\csname @ff@margin@\romannumeral#1\endcsname}% -\ifthenelse{\equal{\ff@margin}{left}}{% -\addtolength{\@ff@tmp@x}{-\marginparwidth}% -\addtolength{\@ff@tmp@x}{-\marginparsep}% -\ifthenelse{\boolean{columnframe\romannumeral#1}}{% -}{}% -}{% -\addtolength{\@ff@tmp@x}% -{\csname colwidth\romannumeral#1\endcsname}% -\addtolength{\@ff@tmp@x}{\marginparsep}% -\ifthenelse{\boolean{columnframe\romannumeral#1}}{% -}{}% -}% -\raise\@ff@tmp@y -\hb@xt@\z@{% -\expandafter\kern\@ff@tmp@x -\@fr@meifdraft{\@ff@box{\marginparwidth}% -{\csname colheight\romannumeral#1\endcsname}{}}% -{M:\number#1}\hss}\fi -\ignorespaces} +% \end{macrocode} +%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with +%\cs{@ff@pages@countreg}} +% \begin{macrocode} + \@ff@chckifthispg{\@ff@pages@countreg}{#1}% + \if@notthiscol + \else + \@killglue + \if@twoside + \ifodd\c@page + \edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}% + \edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}% + \else + \edef\ff@x{\csname col@\romannumeral#1@evenx\endcsname}% + \edef\ff@y{\csname col@\romannumeral#1@eveny\endcsname}% + \fi + \else + \edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}% + \edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}% + \fi + \setlength{\@ff@tmp@x}{\ff@x}% + \setlength{\@ff@tmp@y}{\ff@y}% + \@getmarginpos{\csname @ff@margin@\romannumeral#1\endcsname}% + \ifthenelse{\equal{\ff@margin}{left}}% + {% + \addtolength{\@ff@tmp@x}{-\marginparwidth}% + \addtolength{\@ff@tmp@x}{-\marginparsep}% + \ifthenelse{\boolean{columnframe\romannumeral#1}}% + {}% + {}% + }% + {% + \addtolength{\@ff@tmp@x}% + {\csname colwidth\romannumeral#1\endcsname}% + \addtolength{\@ff@tmp@x}{\marginparsep}% + \ifthenelse{\boolean{columnframe\romannumeral#1}}% + {}% + {}% + }% + \raise\@ff@tmp@y + \hb@xt@\z@ + {% + \expandafter\kern\@ff@tmp@x + \@fr@meifdraft{\@ff@box{\marginparwidth}% + {\csname colheight\romannumeral#1\endcsname}{}}% + {M:\number#1}\hss + }% + \fi + \ignorespaces +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@drawmargins} @@ -4670,11 +8960,12 @@ adding new one}% % on the current page. % \begin{macrocode} \newcommand*{\@ff@drawmargins}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxflow}{% -\advance\@colN by 1\relax -\makebox[0pt][l]{\@putmarginbox{\@colN}}% -}% + \@colN=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \makebox[0pt][l]{\@putmarginbox{\@colN}}% + }% } % \end{macrocode} %\end{macro} @@ -4682,45 +8973,63 @@ adding new one}% % Extract the width and height for static or \gls{dynamic} % specified in the form \oarg{c}\oarg{height}\oarg{valign}\marg{width} % \begin{macrocode} -\def\@ff@getstaticpos[#1][#2][#3]#4{\@ff@tmp@x=#4\relax -\@ff@tmp@y=#2\relax -\def\ff@valign{#3}} +\def\@ff@getstaticpos[#1][#2][#3]#4{% + \@ff@tmp@x=#4\relax + \@ff@tmp@y=#2\relax + \def\ff@valign{#3}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@dostaticbox} % Display the savebox associated with \gls{static} "#1" % \begin{macrocode} \newcommand*{\@dostaticbox}[1]{% -\edef\ff@frametype{% -\csname @sf@frametype@\romannumeral#1\endcsname}% -\edef\ff@col{\csname @sf@col@\romannumeral#1\endcsname}% -\edef\ff@backcol{\csname @sf@backcol@\romannumeral#1\endcsname}% -\@sf@setoffset{#1}% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname -\rotateframe{\csname @sf@angle@\romannumeral#1\endcsname}{% -\ifthenelse{\boolean{staticframe\romannumeral#1}}{% -\@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}{% -\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname} -{\csname\ff@frametype\endcsname}% -}{% -\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% -{\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname}% -}}} + \edef\ff@frametype{% + \csname @sf@frametype@\romannumeral#1\endcsname + }% + \edef\ff@col{\csname @sf@col@\romannumeral#1\endcsname}% + \edef\ff@backcol{\csname @sf@backcol@\romannumeral#1\endcsname}% + \@sf@setoffset{#1}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname + \rotateframe + {\csname @sf@angle@\romannumeral#1\endcsname}% + {% + \ifthenelse{\boolean{staticframe\romannumeral#1}}% + {% + \@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}% + {% + \expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname + } + {\csname\ff@frametype\endcsname}% + }% + {% + \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% + {% + \expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname + }% + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@dostaticbbox} % Now for the \gls{bbox}: % \begin{macrocode} \newcommand*{\@dostaticbbox}[1]{% -\edef\ff@col{}% -\@sf@setoffset{#1}% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname -\@fr@meifdraft{% -\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% -{\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname}% -}{S:\number#1;\csname @sf@id@\romannumeral#1\endcsname}} + \edef\ff@col{}% + \@sf@setoffset{#1}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname + \@fr@meifdraft + {% + \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% + {% + \expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname + }% + }% + {S:\number#1;\csname @sf@id@\romannumeral#1\endcsname}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@putstaticbox} @@ -4728,56 +9037,75 @@ adding new one}% % associated border. % \begin{macrocode} \newcommand*{\@putstaticbox}[1]{% -\@sf@chckifthispg{#1}% -\if@notthiscol\else -\@killglue -\if@twoside -\ifodd\c@page -\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname -\@dostaticbox{#1}\hss}% -\else -\expandafter\raise\csname @sf@\romannumeral#1@eveny\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @sf@\romannumeral#1@evenx\endcsname -\@dostaticbox{#1}\hss}% -\fi -\else -\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname -\@dostaticbox{#1}\hss}% + \@sf@chckifthispg{#1}% + \if@notthiscol + \else + \@killglue + \if@twoside + \ifodd\c@page + \expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname + \@dostaticbox{#1}\hss + }% + \else + \expandafter\raise\csname @sf@\romannumeral#1@eveny\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @sf@\romannumeral#1@evenx\endcsname + \@dostaticbox{#1}\hss + }% + \fi + \else + \expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname + \@dostaticbox{#1}\hss + }% + \fi \fi -\fi} +} % \end{macrocode} %\end{macro} %\begin{macro}{\@putstaticbbox} % Now for the \gls{bbox}: % \begin{macrocode} \newcommand*{\@putstaticbbox}[1]{% -\@sf@chckifthispg{#1}% -\if@notthiscol\else -\@killglue -\if@twoside -\ifodd\c@page -\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname -\@dostaticbbox{#1}\hss}\ignorespaces -\else -\expandafter\raise\csname @sf@\romannumeral#1@eveny\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @sf@\romannumeral#1@evenx\endcsname -\@dostaticbbox{#1}\hss}\ignorespaces -\fi -\else -\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname -\@dostaticbbox{#1}\hss}\ignorespaces -\fi -\fi} + \@sf@chckifthispg{#1}% + \if@notthiscol + \else + \@killglue + \if@twoside + \ifodd\c@page + \expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname + \@dostaticbbox{#1}\hss + }% + \ignorespaces + \else + \expandafter\raise\csname @sf@\romannumeral#1@eveny\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @sf@\romannumeral#1@evenx\endcsname + \@dostaticbbox{#1}\hss + }% + \ignorespaces + \fi + \else + \expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname + \@dostaticbbox{#1}\hss + }% + \ignorespaces + \fi + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\@resetst@tics} @@ -4785,11 +9113,27 @@ adding new one}% % the "clear" option set. % \begin{macrocode} \newcommand*{\@resetst@tics}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax -\ifthenelse{\boolean{@sf@clear@\romannumeral\@colN}}{% -\global\sbox{% -\csname @staticframe@\romannumeral\@colN\endcsname}{}}{}}} + \@colN=0\relax + \whiledo{\@colN<\c@maxstatic}% + {% + \advance\@colN by 1\relax +% \end{macrocode} +% Has the clear flag been set? +% \begin{macrocode} + \ifthenelse{\boolean{@sf@clear@\romannumeral\@colN}}% + {% +% \end{macrocode} +% Set the contents of the box to empty +% \begin{macrocode} + \global\sbox + {% + \csname @staticframe@\romannumeral\@colN\endcsname + }% + {}% + }% + {}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@resetdyn@mics} @@ -4797,11 +9141,18 @@ adding new one}% % set. % \begin{macrocode} \newcommand*{\@resetdyn@mics}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax -\ifthenelse{\boolean{@df@clear@\romannumeral\@colN}}{% -\expandafter\global\expandafter -\gdef\csname @dynamicframe@\romannumeral\@colN\endcsname{}}{}}} + \@colN=0\relax + \whiledo{\@colN<\c@maxdynamic}% + {% + \advance\@colN by 1\relax + \ifthenelse{\boolean{@df@clear@\romannumeral\@colN}}% + {% + \expandafter\global\expandafter + \gdef\csname @dynamicframe@\romannumeral\@colN\endcsname{}% + }% + {}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@dodfparbox} @@ -4809,37 +9160,51 @@ adding new one}% % "\ff@contents", style given by "\ff@style"): % \begin{macrocode} \newcommand*{\@dodfparbox}[1]{% -\expandafter\let\expandafter -\@ff@parshape\csname @df@shape@\romannumeral#1\endcsname -\expandafter\@ff@getshape\@ff@parshape\relax -\ifcase\ff@shape + \expandafter\let\expandafter + \@ff@parshape\csname @df@shape@\romannumeral#1\endcsname + \expandafter\@ff@getshape\@ff@parshape\relax + \ifcase\ff@shape +% \end{macrocode} % no shape -\expandafter\expandafter\expandafter -\parbox\csname @df@dim@\romannumeral#1\endcsname -{% -\setlength\parindent\sdfparindent -\csname\ff@style\endcsname{\ff@contents}}% -\or -% \parshape -\expandafter\expandafter\expandafter -\parbox\csname @df@dim@\romannumeral#1\endcsname -{% -\setlength\parindent\sdfparindent -\csname\ff@style\endcsname{{% -\let\oldpar=\par -\let\par=\ffpshpar -\@ff@setsecthead -\@ff@parshape -\ff@contents\oldpar}}}% -\or -% \shapepar -\expandafter\expandafter\expandafter -\parbox\csname @df@dim@\romannumeral#1\endcsname -{% -\setlength\parindent\sdfparindent -\csname\ff@style\endcsname{{\@ff@disablesec\@ff@parshape -\ff@contents\par}}}% -\fi +% \begin{macrocode} + \expandafter\expandafter\expandafter + \parbox\csname @df@dim@\romannumeral#1\endcsname + {% + \setlength\parindent\sdfparindent + \csname\ff@style\endcsname{\ff@contents}% + }% + \or +% \end{macrocode} +% \ics{parshape} +% \begin{macrocode} + \expandafter\expandafter\expandafter + \parbox\csname @df@dim@\romannumeral#1\endcsname + {% + \setlength\parindent\sdfparindent + \csname\ff@style\endcsname + {{% + \let\oldpar=\par + \let\par=\ffpshpar + \@ff@setsecthead + \@ff@parshape + \ff@contents\oldpar + }}% + }% + \or +% \end{macrocode} +% \ics{shapepar} +% \begin{macrocode} + \expandafter\expandafter\expandafter + \parbox\csname @df@dim@\romannumeral#1\endcsname + {% + \setlength\parindent\sdfparindent + \csname\ff@style\endcsname + {{% + \@ff@disablesec\@ff@parshape + \ff@contents\par + }}% + }% + \fi } % \end{macrocode} %\end{macro} @@ -4847,109 +9212,144 @@ adding new one}% % Typeset the dynamic box with its associated border. % \begin{macrocode} \newcommand*{\@dodynamicbox}[1]{% -\edef\ff@frametype{% -\csname @df@frametype@\romannumeral#1\endcsname}% -\edef\ff@col{\csname @df@col@\romannumeral#1\endcsname}% -\edef\ff@txtcol{\csname @df@txtcol@\romannumeral#1\endcsname}% -\edef\ff@backcol{\csname @df@backcol@\romannumeral#1\endcsname}% -\edef\ff@style{\csname @df@style@\romannumeral#1\endcsname}% -\def\ff@contents{\csname @dynamicframe@\romannumeral#1\endcsname}% -\@df@setoffset{#1}% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname -\rotateframe{\csname @df@angle@\romannumeral#1\endcsname}{% -\ifthenelse{\boolean{dynamicframe\romannumeral#1}}{% -\@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}% -{\@dodfparbox{#1}}% -{\csname\ff@frametype\endcsname}% -}{% -\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}{% -\@dodfparbox{#1}}% -}}} + \edef\ff@frametype{% + \csname @df@frametype@\romannumeral#1\endcsname + }% + \edef\ff@col{\csname @df@col@\romannumeral#1\endcsname}% + \edef\ff@txtcol{\csname @df@txtcol@\romannumeral#1\endcsname}% + \edef\ff@backcol{\csname @df@backcol@\romannumeral#1\endcsname}% + \edef\ff@style{\csname @df@style@\romannumeral#1\endcsname}% + \def\ff@contents{\csname @dynamicframe@\romannumeral#1\endcsname}% + \@df@setoffset{#1}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname + \rotateframe{\csname @df@angle@\romannumeral#1\endcsname}% + {% + \ifthenelse{\boolean{dynamicframe\romannumeral#1}}% + {% + \@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}% + {\@dodfparbox{#1}}% + {\csname\ff@frametype\endcsname}% + }% + {% + \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% + {% + \@dodfparbox{#1}% + }% + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@dodynamicbbox} % Now for the \gls{bbox}: % \begin{macrocode} \newcommand*{\@dodynamicbbox}[1]{% -\edef\ff@col{}% -\@df@setoffset{#1}% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname -\@fr@meifdraft{% -\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}{% -\expandafter\expandafter\expandafter -\parbox\csname @df@dim@\romannumeral#1\endcsname -{}}% -}{D:\number#1;\csname @df@id@\romannumeral#1\endcsname}} + \edef\ff@col{}% + \@df@setoffset{#1}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname + \@fr@meifdraft + {% + \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% + {% + \expandafter\expandafter\expandafter + \parbox\csname @df@dim@\romannumeral#1\endcsname + {}% + }% + }% + {D:\number#1;\csname @df@id@\romannumeral#1\endcsname}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@putdynamicbox} % Put the \gls{dynamic} "#1" at its given position % \begin{macrocode} \newcommand*{\@putdynamicbox}[1]{% -\@df@chckifthispg{#1}% -\if@notthiscol\else -\@killglue -\if@twoside -\ifodd\c@page -\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname -\@dodynamicbox{#1}\hss}\ignorespaces -\else -\expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname -\@dodynamicbox{#1}\hss}\ignorespaces -\fi -\else -\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname -\@dodynamicbox{#1}\hss}\ignorespaces -\fi -\fi} + \@df@chckifthispg{#1}% + \if@notthiscol + \else + \@killglue + \if@twoside + \ifodd\c@page + \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname + \@dodynamicbox{#1}\hss + }% + \ignorespaces + \else + \expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname + \@dodynamicbox{#1}\hss + }% + \ignorespaces + \fi + \else + \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname + \@dodynamicbox{#1}\hss + }% + \ignorespaces + \fi + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\@putdynamicbbox} % Bounding box: % \begin{macrocode} \newcommand*{\@putdynamicbbox}[1]{% -\@df@chckifthispg{#1}% -\if@notthiscol\else -\@killglue -\if@twoside -\ifodd\c@page -\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname -\@dodynamicbbox{#1}\hss}\ignorespaces -\else -\expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname -\@dodynamicbbox{#1}\hss}\ignorespaces -\fi -\else -\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname -\@dodynamicbbox{#1}\hss}\ignorespaces -\fi -\fi} + \@df@chckifthispg{#1}% + \if@notthiscol + \else + \@killglue + \if@twoside + \ifodd\c@page + \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname + \@dodynamicbbox{#1}\hss + }% + \ignorespaces + \else + \expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname + \@dodynamicbbox{#1}\hss + }% + \ignorespaces + \fi + \else + \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname + \@dodynamicbbox{#1}\hss + }% + \ignorespaces + \fi + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@doheader} % Do standard header in the standard place. % \begin{macrocode} \newcommand*{\@@doheader}{% -\setlength\@ff@tmp@y{\textheight}% -\addtolength{\@ff@tmp@y}{\headsep}% -\def\ff@col{}% -\def\ff@txtcol{}% -\def\ff@backcol{{none}}% -\@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothehead}}% + \setlength\@ff@tmp@y{\textheight}% + \addtolength{\@ff@tmp@y}{\headsep}% + \def\ff@col{}% + \def\ff@txtcol{}% + \def\ff@backcol{{none}}% + \@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothehead}}% } % \end{macrocode} %\end{macro} @@ -4957,11 +9357,11 @@ adding new one}% % Do standard footer in the standard place. % \begin{macrocode} \newcommand*{\@@dofooter}{% -\setlength\@ff@tmp@y{-\footskip}% -\def\ff@col{}% -\def\ff@txtcol{}% -\def\ff@backcol{{none}}% -\@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothefoot}}% + \setlength\@ff@tmp@y{-\footskip}% + \def\ff@col{}% + \def\ff@txtcol{}% + \def\ff@backcol{{none}}% + \@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothefoot}}% } % \end{macrocode} %\end{macro} @@ -4969,22 +9369,34 @@ adding new one}% % This is a modified version of the way the picture environment % works: % \begin{macrocode} -\newcommand{\@s@tfr@mes}[1]{{\@picht\textheight -\setbox\@picbox\hb@xt@ \textwidth -\bgroup \hbox \bgroup #1\relax -\egroup -\hss \egroup -\ht\@picbox\@picht \dp\@picbox -\z@ \mbox{\box \@picbox}}} +\newcommand{\@s@tfr@mes}[1]{% + {% + \@picht\textheight + \setbox\@picbox\hb@xt@ \textwidth + \bgroup + \hbox + \bgroup + #1\relax + \egroup + \hss + \egroup + \ht\@picbox\@picht + \dp\@picbox\z@ + \mbox{\box\@picbox}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@doallflowframes} % Puts all the \glspl{flow} defined on the current page % \begin{macrocode} \newcommand*{\@ff@doallflowframes}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax -\@putcolbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \@putcolbox{\@colN}% + }% } % \end{macrocode} %\end{macro} @@ -4992,9 +9404,12 @@ adding new one}% % Flow frame \glspl{bbox}: % \begin{macrocode} \newcommand*{\@ff@doallflowframesbbox}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax -\@putcolbbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \@putcolbbox{\@colN}% + }% } % \end{macrocode} %\end{macro} @@ -5002,9 +9417,12 @@ adding new one}% % Puts all \glspl{static} defined on the current page % \begin{macrocode} \newcommand*{\@ff@doallstatics}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax -\@putstaticbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxstatic}% + {% + \advance\@colN by 1\relax + \@putstaticbox{\@colN}% + }% } % \end{macrocode} %\end{macro} @@ -5012,9 +9430,12 @@ adding new one}% % Static frame \glspl{bbox}: % \begin{macrocode} \newcommand*{\@ff@doallstaticsbbox}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax -\@putstaticbbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxstatic}% + {% + \advance\@colN by 1\relax + \@putstaticbbox{\@colN}% + }% } % \end{macrocode} %\end{macro} @@ -5022,9 +9443,12 @@ adding new one}% % Puts all the \glspl{dynamic} defined on the current page % \begin{macrocode} \newcommand*{\@ff@doalldynamics}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax -\@putdynamicbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxdynamic}% + {% + \advance\@colN by 1\relax + \@putdynamicbox{\@colN}% + }% } % \end{macrocode} %\end{macro} @@ -5032,9 +9456,12 @@ adding new one}% % Dynamic frame \glspl{bbox}: % \begin{macrocode} \newcommand*{\@ff@doalldynamicsbbox}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax -\@putdynamicbbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxdynamic}% + {% + \advance\@colN by 1\relax + \@putdynamicbbox{\@colN}% + }% } % \end{macrocode} %\end{macro} @@ -5042,8 +9469,15 @@ adding new one}% % Draw \gls{typeblock} frame if draft. % \begin{macrocode} \newcommand*{\@ff@dotypeblock}{% -\makebox[0pt][l]{\@fr@meifdraft[\setffdrafttypeblockcolor]{% -\vbox to \textheight{\hbox to \textwidth{}}}{}}} + \makebox[0pt][l]% + {% + \@fr@meifdraft[\setffdrafttypeblockcolor]% + {% + \vbox to \textheight{\hbox to \textwidth{}}% + }% + {}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ff@do@allframes} @@ -5051,36 +9485,40 @@ adding new one}% % \begin{macrocode} \newlength\ffevenoffset \newcommand*{\@ff@do@allframes}{% -\ffevenoffset=0pt\relax -\if@twoside - \ifodd\c@page - \else - \ffevenoffset=-\oddsidemargin\relax - \advance\ffevenoffset by \evensidemargin\relax - \kern\ffevenoffset\relax + \ffevenoffset=0pt\relax + \if@twoside + \ifodd\c@page + \else + \ffevenoffset=-\oddsidemargin\relax + \advance\ffevenoffset by \evensidemargin\relax + \kern\ffevenoffset\relax + \fi \fi -\fi -\setlength{\@ff@tmp@x}{\textwidth}% -\advance\@ff@tmp@x by -\ffevenoffset\relax -\makebox[\@ff@tmp@x][l]{% -\@s@tfr@mes{% -\@ff@doallstatics -\@@doheader -\@@dofooter -\@ff@doallflowframes -\@ff@doalldynamics -\ifshowtypeblock - \@ff@dotypeblock -\fi -\ifshowframebbox - \@ff@doallstaticsbbox - \@ff@doallflowframesbbox - \@ff@doalldynamicsbbox -\fi -\ifshowmargins - \@ff@drawmargins -\fi -}}} + \setlength{\@ff@tmp@x}{\textwidth}% + \advance\@ff@tmp@x by -\ffevenoffset\relax + \makebox[\@ff@tmp@x][l]% + {% + \@s@tfr@mes + {% + \@ff@doallstatics + \@@doheader + \@@dofooter + \@ff@doallflowframes + \@ff@doalldynamics + \ifshowtypeblock + \@ff@dotypeblock + \fi + \ifshowframebbox + \@ff@doallstaticsbbox + \@ff@doallflowframesbbox + \@ff@doalldynamicsbbox + \fi + \ifshowmargins + \@ff@drawmargins + \fi + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@outputdblcol} @@ -5094,53 +9532,71 @@ adding new one}% % \begin{macrocode} \newcount\@nxtcol \def\@outputdblcol{% -\@nxtcol=\c@thisframe -\c@curpg=\c@page -\@g@tnextcol{\@nxtcol}% -\if@ff@nwpg % next flow frame starts on new page - \global\@firstcolumntrue - \@setcolbox\c@thisframe - \if@specialpage - \global\@specialpagefalse - \@nameuse{ps@\@specialstyle}\relax - \fi - \if@twoside - \ifodd\count\z@ + \@nxtcol=\c@thisframe +% \end{macrocode} +%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with +%\cs{@ff@pages@countreg}} +% \begin{macrocode} + \c@curpg=\@ff@pages@countreg + \@g@tnextcol{\@nxtcol}% + \if@ff@nwpg +% \end{macrocode} +% Next flow frame starts on new page. +% \begin{macrocode} + \global\@firstcolumntrue + \@setcolbox\c@thisframe + \if@specialpage + \global\@specialpagefalse + \@nameuse{ps@\@specialstyle}\relax + \fi + \if@twoside + \ifodd\count\z@ + \let\@thehead\@oddhead + \let\@thefoot\@oddfoot + \else + \let\@thehead\@evenhead + \let\@thefoot\@evenfoot + \fi + \else \let\@thehead\@oddhead \let\@thefoot\@oddfoot - \else - \let\@thehead\@evenhead - \let\@thefoot\@evenfoot \fi + \@begindvi + \@dodynamicthehead\@dodynamicthefoot + \vbadness=\@M + \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% + \@combinedblfloats + \@outputpage +% \end{macrocode} +% Shipout pages without flow frames. +%\changes{1.14}{2012-11-10}{replaced \cs{c@page} with +%\cs{@ff@pages@countreg}} +% \begin{macrocode} + \advance\c@curpg by -\@ff@pages@countreg\relax + \whiledo{\c@curpg>0}% + {% + \advance\c@curpg by -1\relax + \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% + \@outputpage + } + \begingroup + \@dblfloatplacement + \@startdblcolumn + \@whilesw \if@fcolmade \fi + {\@outputpage \@startdblcolumn }% + \endgroup + \@resetst@tics + \@resetdyn@mics \else - \let\@thehead\@oddhead - \let\@thefoot\@oddfoot - \fi - \@begindvi - \@dodynamicthehead\@dodynamicthefoot - \vbadness=\@M - \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% - \@combinedblfloats - \@outputpage -%shipout pages without flow frames -\advance\c@curpg by -\c@page\relax - \whiledo{\c@curpg>0}{\advance\c@curpg by -1\relax - \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% -\@outputpage} - \begingroup - \@dblfloatplacement - \@startdblcolumn - \@whilesw \if@fcolmade \fi - {\@outputpage \@startdblcolumn }\endgroup - \@resetst@tics - \@resetdyn@mics -\else % still on same page, save contents of box255 - \global\@firstcolumnfalse - \@setcolbox\c@thisframe -\fi -\global\c@thisframe=\@nxtcol -\@setcol{\c@thisframe}\relax -\global\@colht\vsize +% \end{macrocode} +% Still on same page, save contents of box255 +% \begin{macrocode} + \global\@firstcolumnfalse + \@setcolbox\c@thisframe + \fi + \global\c@thisframe=\@nxtcol + \@setcol{\c@thisframe}\relax + \global\@colht\vsize } % \end{macrocode} %\end{macro} @@ -5153,7 +9609,8 @@ adding new one}% \global\@dbltoproom\dbltopfraction\@colht\@textmin \@colht\advance\@textmin -\@dbltoproom \@fpmin\dblfloatpagefraction\vsize - \@fptop \@dblfptop \@fpsep \@dblfpsep \@fpbot \@dblfpbot} + \@fptop \@dblfptop \@fpsep \@dblfpsep \@fpbot \@dblfpbot +} % \end{macrocode} %\end{macro} % @@ -5205,7 +9662,8 @@ adding new one}% %\begin{macro}{\@onecolumn} % \begin{macrocode} \newcommand*{\@onecolumn}[1][all]{% -\@onecolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}} + \@onecolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}% +} % \end{macrocode} %\end{macro} % Need a length to store the height of @@ -5235,9 +9693,12 @@ adding new one}% %\begin{macro}{\@onecolumninarea} % \begin{macrocode} \newcommand*{\@onecolumninarea}[5][all]{% -\setlength{\columnheight}{#3}% -\ifffvadjust\adjustheight{\columnheight}\fi% -\@n@wflowframe[#1]{#2}{\columnheight}{#4}{#5}} + \setlength{\columnheight}{#3}% + \ifffvadjust + \adjustheight{\columnheight}% + \fi + \@n@wflowframe[#1]{#2}{\columnheight}{#4}{#5}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\twocolumn} @@ -5257,7 +9718,8 @@ adding new one}% %\begin{macro}{\@twocolumn} % \begin{macrocode} \newcommand*{\@twocolumn}[1][all]{% -\@twocolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}} + \@twocolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\twocolumninarea} @@ -5274,7 +9736,9 @@ adding new one}% % \begin{macrocode} \newcommand*{\@twocolumninarea}[5][all]{% \setlength{\columnheight}{#3}% - \ifffvadjust\adjustheight{\columnheight}\fi% + \ifffvadjust + \adjustheight{\columnheight}% + \fi \setlength{\columnwidth}{#2}% \addtolength{\columnwidth}{-\columnsep}% \divide\columnwidth by 2\relax @@ -5303,7 +9767,8 @@ adding new one}% % \cs{Ncolumn}\oarg{pages}\marg{n}. % \begin{macrocode} \newcommand*{\Ncolumn}[2][all]{% -\Ncolumninarea[#1]{#2}{\textwidth}{\textheight}{0pt}{0pt}} + \Ncolumninarea[#1]{#2}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\Ncolumn} % \end{macrocode} %\end{macro} @@ -5314,24 +9779,32 @@ adding new one}% % \cs{Ncolumninarea}\oarg{pages}\marg{n}\marg{w}\marg{h}\marg{x}\marg{y}. % \begin{macrocode} \newcommand*{\Ncolumninarea}[6][all]{% -\ifnum#2>2\relax - \@Ncolumninarea[#1]{#2}{#3}{#4}{#5}{#6}% -\else - \ifcase#2\relax - \PackageError{flowfram}{% - You have requested 0 flowframes!}{% - It does not make much sense to ask to create 0 flow frames}% - \or - \onecolumninarea[#1]{#3}{#4}{#5}{#6}% - \or - \twocolumninarea[#1]{#3}{#4}{#5}{#6}% + \ifnum#2>2\relax + \@Ncolumninarea[#1]{#2}{#3}{#4}{#5}{#6}% \else - \PackageError{flowfram}{% - Can't create a negative number of flow frames!}{% - You have asked for \number#2 \space flow frames - which really doesn't make sense}% + \ifcase#2\relax + \PackageError{flowfram}% + {% + You have requested 0 flowframes!% + }% + {% + It does not make much sense to ask to create 0 flow frames% + }% + \or + \onecolumninarea[#1]{#3}{#4}{#5}{#6}% + \or + \twocolumninarea[#1]{#3}{#4}{#5}{#6}% + \else + \PackageError{flowfram}% + {% + Can't create a negative number of flow frames!% + }% + {% + You have asked for \number#2 \space flow frames + which really doesn't make sense% + }% + \fi \fi -\fi } \@onlypreamble{\Ncolumninarea} @@ -5397,7 +9870,8 @@ adding new one}% % \cs{onecolumntop}\oarg{pages}\marg{type}\marg{H} % \begin{macrocode} \newcommand*{\onecolumntop}[3][all]{% -\onecolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}} + \onecolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\onecolumntop} % \end{macrocode} %\end{macro} @@ -5406,7 +9880,8 @@ adding new one}% % Syntax: \cs{onecolumnStop}\oarg{pages}\marg{H} % \begin{macrocode} \newcommand*{\onecolumnStop}[2][all]{% -\onecolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}} + \onecolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\onecolumnDtop} @@ -5414,7 +9889,8 @@ adding new one}% % Syntax: \cs{onecolumnDtop}\oarg{pages}\marg{H} % \begin{macrocode} \newcommand*{\onecolumnDtop}[2][all]{% -\onecolumntopinarea[#1]{dynamic}{#2}{\textwidth}{\textheight}{0pt}{0pt}} + \onecolumntopinarea[#1]{dynamic}{#2}{\textwidth}{\textheight}{0pt}{0pt}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\newframe} @@ -5423,15 +9899,30 @@ adding new one}% % \cs{newframe}\oarg{pages}\marg{type}\marg{w}\marg{h}\marg{x}\marg{y}. % \begin{macrocode} \newcommand*{\newframe}[6][all]{% -\ifthenelse{\equal{#2}{flow}}{% -\@n@wflowframe[#1]{#3}{#4}{#5}{#6}% -}{% -\ifthenelse{\equal{#2}{dynamic}}{% -\@n@wdynamicframe[#1]{#3}{#4}{#5}{#6}}{% -\ifthenelse{\equal{#2}{static}}{% -\@n@wstaticframe[#1]{#3}{#4}{#5}{#6}}{% -\PackageError{flowfram}{Unknown frame type '#2'}{% -Available frame types are: 'flow', 'static' and 'dynamic'}}}}} + \ifthenelse{\equal{#2}{flow}}% + {% + \@n@wflowframe[#1]{#3}{#4}{#5}{#6}% + }% + {% + \ifthenelse{\equal{#2}{dynamic}}% + {% + \@n@wdynamicframe[#1]{#3}{#4}{#5}{#6}% + }% + {% + \ifthenelse{\equal{#2}{static}}% + {% + \@n@wstaticframe[#1]{#3}{#4}{#5}{#6}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#2'}% + {% + Available frame types are: 'flow', 'static' and 'dynamic'% + }% + }% + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\onecolumntopinarea} @@ -5442,15 +9933,17 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} \newlength\@ff@staticH \newcommand*{\onecolumntopinarea}[7][all]{% -\setlength{\@ff@staticH}{#3}% -\setlength{\@ff@tmp@y}{#5}% -\addtolength{\@ff@tmp@y}{-\@ff@staticH}% -\setlength{\columnheight}{\@ff@tmp@y}% -\addtolength{\columnheight}{-\vcolumnsep}% -\ifffvadjust\adjustheight{\columnheight}\fi% -\addtolength{\@ff@tmp@y}{#7}% -\newframe[#1]{#2}{#4}{\@ff@staticH}{#6}{\@ff@tmp@y}% -\@n@wflowframe[#1]{#4}{\columnheight}{#6}{#7}% + \setlength{\@ff@staticH}{#3}% + \setlength{\@ff@tmp@y}{#5}% + \addtolength{\@ff@tmp@y}{-\@ff@staticH}% + \setlength{\columnheight}{\@ff@tmp@y}% + \addtolength{\columnheight}{-\vcolumnsep}% + \ifffvadjust + \adjustheight{\columnheight}% + \fi + \addtolength{\@ff@tmp@y}{#7}% + \newframe[#1]{#2}{#4}{\@ff@staticH}{#6}{\@ff@tmp@y}% + \@n@wflowframe[#1]{#4}{\columnheight}{#6}{#7}% } \@onlypreamble{\onecolumntopinarea} @@ -5462,7 +9955,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % \cs{onecolumnStopinarea}\oarg{pages}\marg{H}\marg{w}\marg{h}\marg{x}\marg{y}. % \begin{macrocode} \newcommand*{\onecolumnStopinarea}[6][all]{% -\onecolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}} + \onecolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\onecolumnDtopinarea} @@ -5471,7 +9965,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % \cs{onecolumnDtopinarea}\oarg{pages}\marg{H}\marg{w}\marg{h}\marg{x}\marg{y}. % \begin{macrocode} \newcommand*{\onecolumnDtopinarea}[6][all]{% -\onecolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}} + \onecolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\twocolumntop} @@ -5484,7 +9979,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % \gls{typeblock}: % \begin{macrocode} \newcommand*{\twocolumntop}[3][all]{% -\twocolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}} + \twocolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\twocolumntop} % \end{macrocode} %\end{macro} @@ -5492,14 +9988,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Special case for \gls{static}. % \begin{macrocode} \newcommand*{\twocolumnStop}[2][all]{% -\@twocolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}} + \@twocolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\twocolumnDtop} % Special case for \gls{dynamic}. % \begin{macrocode} \newcommand*{\twocolumnDtop}[2][all]{% -\twocolumntop[#1]{dynamic}{#2}} + \twocolumntop[#1]{dynamic}{#2}% +} % \end{macrocode} %\end{macro} % @@ -5558,14 +10056,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Special case for \gls{static}. % \begin{macrocode} \newcommand*{\twocolumnStopinarea}[6][all]{% -\twocolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}} + \twocolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\twocolumnDtopinarea} % Special case for \gls{dynamic}. % \begin{macrocode} \newcommand*{\twocolumnDtopinarea}[6][all]{% -\twocolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}} + \twocolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\Ncolumntop} @@ -5576,7 +10076,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % \cs{Ncolumntop}\oarg{pages}\marg{type}\marg{n}\marg{H} % \begin{macrocode} \newcommand*{\Ncolumntop}[4][all]{% -\Ncolumntopinarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}} + \Ncolumntopinarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\Ncolumntop} % \end{macrocode} %\end{macro} @@ -5584,14 +10085,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Special case for \gls{static}. % \begin{macrocode} \newcommand*{\NcolumnStop}[3][all]{% -\Ncolumntop[#1]{static}{#2}{#3}} + \Ncolumntop[#1]{static}{#2}{#3}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\NcolumnDtop} % Special case for \gls{dynamic}. % \begin{macrocode} \newcommand*{\NcolumnDtop}[3][all]{% -\Ncolumntop[#1]{dynamic}{#2}{#3}} + \Ncolumntop[#1]{dynamic}{#2}{#3}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\Ncolumntopinarea} @@ -5599,24 +10102,32 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % number. % \begin{macrocode} \newcommand*{\Ncolumntopinarea}[8][all]{% -\ifnum#3>2\relax - \@Ncolumntopinarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}% -\else - \ifcase#3\relax - \PackageError{flowfram}{% - You have requested 0 flowframes!}{% - It does not make much sense to ask to create 0 flow frames} - \or - \onecolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% - \or - \twocolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% + \ifnum#3>2\relax + \@Ncolumntopinarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}% \else - \PackageError{flowfram}{% - Can't create a negative number of flow frames!}{% - You have asked for \number#3 \space flow frames - which really doesn't make sense}% + \ifcase#3\relax + \PackageError{flowfram}% + {% + You have requested 0 flowframes!% + }% + {% + It does not make much sense to ask to create 0 flow frames% + }% + \or + \onecolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% + \or + \twocolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% + \else + \PackageError{flowfram}% + {% + Can't create a negative number of flow frames!% + }% + {% + You have asked for \number#3 \space flow frames + which really doesn't make sense% + }% + \fi \fi -\fi } \@onlypreamble{\Ncolumntopinarea} % \end{macrocode} @@ -5644,7 +10155,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % adjust the flow frame height so that it is a multiple of % \cs{baselineskip} % \begin{macrocode} - \ifffvadjust\adjustheight{\columnheight}\fi% + \ifffvadjust + \adjustheight{\columnheight}% + \fi % \end{macrocode} % work out the widths of the flow frames % \begin{macrocode} @@ -5685,14 +10198,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Specific case for \gls{static}. % \begin{macrocode} \newcommand*{\NcolumnStopinarea}[7][all]{% -\Ncolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}{#7}} + \Ncolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}{#7}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\NcolumnDtopinarea} % Specific case for \gls{dynamic}. % \begin{macrocode} \newcommand*{\NcolumnDtopinarea}[7][all]{% -\Ncolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}{#7}} + \Ncolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}{#7}% +} % \end{macrocode} %\end{macro} % Now the same kind of thing but with the \meta{type} frame at the @@ -5704,7 +10219,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % \cs{onecolumnbottom}\oarg{pages}\marg{type}\marg{H} % \begin{macrocode} \newcommand*{\onecolumnbottom}[3][all]{% -\onecolumnbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}} + \onecolumnbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}% +} % \end{macrocode} %\end{macro} % This command may only be used in the preamble. @@ -5715,14 +10231,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Special case for \gls{static}. % \begin{macrocode} \newcommand*{\onecolumnSbottom}[2][all]{% -\onecolumnbottom[#1]{static}{#2}} + \onecolumnbottom[#1]{static}{#2}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\onecolumnDbottom} % Special case for \gls{dynamic}. % \begin{macrocode} \newcommand*{\onecolumnDbottom}[2][all]{% -\onecolumnbottom[#1]{dynamic}{#2}} + \onecolumnbottom[#1]{dynamic}{#2}% +} % \end{macrocode} %\end{macro} % @@ -5740,7 +10258,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} \setlength{\columnheight}{#5}% \addtolength{\columnheight}{-\@ff@staticH}% \addtolength{\columnheight}{-\vcolumnsep}% - \ifffvadjust\adjustheight{\columnheight}\fi% + \ifffvadjust + \adjustheight{\columnheight}% + \fi \setlength{\@ff@tmp@y}{#5}% \addtolength{\@ff@tmp@y}{-\columnheight}% \addtolength{\@ff@tmp@y}{#7}% @@ -5757,14 +10277,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Special case for \gls{static}. % \begin{macrocode} \newcommand*{\onecolumnSbottominarea}[6][all]{% -\onecolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}} + \onecolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\onecolumnDbottominarea} % Special case for \gls{dynamic}. % \begin{macrocode} \newcommand*{\onecolumnDbottominarea}[6][all]{% -\onecolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}} + \onecolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\twocolumnbottom} @@ -5775,7 +10297,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % \cs{twocolumnbottom}\oarg{pages}\marg{type}\marg{H}. % \begin{macrocode} \newcommand*{\twocolumnbottom}[3][all]{% -\twocolumnSbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}} + \twocolumnSbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\twocolumnbottom} % \end{macrocode} %\end{macro} @@ -5783,14 +10306,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Special case for \gls{static}. % \begin{macrocode} \newcommand*{\twocolumnSbottom}[2][all]{% -\twocolumnbottom[#1]{static}{#2}} + \twocolumnbottom[#1]{static}{#2}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\twocolumnDbottom} % Special case for \gls{dynamic}. % \begin{macrocode} \newcommand*{\twocolumnDbottom}[2][all]{% -\twocolumnbottom[#1]{dynamic}{#2}} + \twocolumnbottom[#1]{dynamic}{#2}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\twocolumnbottominarea} @@ -5854,14 +10379,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Special case for \gls{static}. % \begin{macrocode} \newcommand*{\twocolumnSbottominarea}[6][all]{% -\twocolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}} + \twocolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\twocolumnDbottominarea} % Special case for \gls{dynamic}. % \begin{macrocode} \newcommand*{\twocolumnDbottominarea}[6][all]{% -\twocolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}} + \twocolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}% +} % \end{macrocode} %\end{macro} % Now for an arbitrary number of parallel \glspl{flow} @@ -5873,7 +10400,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % \cs{Ncolumnbottom}\oarg{pages}\marg{type}\marg{H}. % \begin{macrocode} \newcommand*{\Ncolumnbottom}[4][all]{% -\Ncolumnbottominarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}} + \Ncolumnbottominarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\Ncolumnbottom} % \end{macrocode} %\end{macro} @@ -5881,38 +10409,44 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Special case for \gls{static}. % \begin{macrocode} \newcommand*{\NcolumnSbottom}[3][all]{% -\Ncolumnbottom[#1]{static}{#2}{#3}} + \Ncolumnbottom[#1]{static}{#2}{#3}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\NcolumnDbottom} % Special case for \gls{dynamic}. % \begin{macrocode} \newcommand*{\NcolumnDbottom}[3][all]{% -\Ncolumnbottom[#1]{dynamic}{#2}{#3}} + \Ncolumnbottom[#1]{dynamic}{#2}{#3}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\Ncolumnbottominarea} % Again check the user has requested a sensible number. % \begin{macrocode} \newcommand*{\Ncolumnbottominarea}[8][all]{% -\ifnum#3>2\relax - \@Ncolumnbottominarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}% -\else - \ifcase#3\relax - \PackageError{flowfram}{% - You have requested 0 flowframes!}{% - It does not make much sense to ask to create 0 flow frames} - \or - \onecolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% - \or - \twocolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% + \ifnum#3>2\relax + \@Ncolumnbottominarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}% \else - \PackageError{flowfram}{% - Can't create a negative number of flow frames!}{% - You have asked for \number#3 \space flow frames - which really doesn't make sense}% + \ifcase#3\relax + \PackageError{flowfram}{% + You have requested 0 flowframes!}{% + It does not make much sense to ask to create 0 flow frames} + \or + \onecolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% + \or + \twocolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% + \else + \PackageError{flowfram}% + {% + Can't create a negative number of flow frames!% + }% + {% + You have asked for \number#3 \space flow frames + which really doesn't make sense% + }% + \fi \fi -\fi } \@onlypreamble{\Ncolumnbottominarea} % \end{macrocode} @@ -5933,7 +10467,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % adjust the flow frame height so that it is a multiple of % \cs{baselineskip} % \begin{macrocode} - \ifffvadjust\adjustheight{\columnheight}\fi + \ifffvadjust + \adjustheight{\columnheight}% + \fi \newframe[#1]{#2}{#5}{\@ff@staticH}{#7}{#8}% % \end{macrocode} % work out the $y$ offset of the flow frames @@ -5982,14 +10518,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Specific case for \gls{static}. % \begin{macrocode} \newcommand*{\NcolumnSbottominarea}[1][all]{% -\Ncolumnbottominarea[#1]{static}} + \Ncolumnbottominarea[#1]{static}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\NcolumnDbottominarea} % Specific case for \gls{dynamic}. % \begin{macrocode} \newcommand*{\NcolumnDbottominarea}[1][all]{% -\Ncolumnbottominarea[#1]{dynamic}} + \Ncolumnbottominarea[#1]{dynamic}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\adjustheight} @@ -6000,10 +10538,10 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % \end{macrocode} % convert to an integer % \begin{macrocode} -\@ff@adjh=#1\relax -\divide\@ff@adjh by \baselineskip\relax -#1=\baselineskip\relax -\multiply#1 by \@ff@adjh\relax + \@ff@adjh=#1\relax + \divide\@ff@adjh by \baselineskip\relax + #1=\baselineskip\relax + \multiply#1 by \@ff@adjh\relax } % \end{macrocode} %\end{macro} @@ -6011,8 +10549,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Adjust the value of "\columnsep" so that the margins will fit between columns. % \begin{macrocode} \newcommand*{\adjustcolsep}{% -\multiply\columnsep by 2\relax -\addtolength{\columnsep}{\marginparwidth}} + \multiply\columnsep by 2\relax + \addtolength{\columnsep}{\marginparwidth}% +} % \end{macrocode} %\end{macro} % @@ -6040,7 +10579,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % frames is equal to the paper height. % \begin{macrocode} \newcommand*{\vtwotone}[1][all]{% -\def\ff@pages{#1}\@vtwotone} + \def\ff@pages{#1}% + \@vtwotone +} \newcommand*{\@vtwotone}[1][0pt]{\@@vtwotonebottom{#1}{\paperheight}} % \end{macrocode} @@ -6053,17 +10594,17 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % where the first frame starts at \meta{xoffset}. % \begin{macrocode} \newcommand*{\@@vtwotonebottom}[8]{% -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@x}{#1}% -\addtolength{\@ff@tmp@x@even}{#1}% -\@nextvband{\ff@pages}{#2}{#3}{#4}{#5}% -\@nextvband{\ff@pages}{#2}{#6}{#7}{#8}% + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@x}{#1}% + \addtolength{\@ff@tmp@x@even}{#1}% + \@nextvband{\ff@pages}{#2}{#3}{#4}{#5}% + \@nextvband{\ff@pages}{#2}{#6}{#7}{#8}% } \@onlypreamble{\vtwotone} @@ -6073,7 +10614,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Border strip along the bottom of the page % \begin{macrocode} \newcommand*{\vtwotonebottom}[1][all]{% -\def\ff@pages{#1}\@vtwotonebottom} + \def\ff@pages{#1}% + \@vtwotonebottom +} \@onlypreamble{\vtwotonebottom} @@ -6084,23 +10627,25 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Border strip along the top of the page % \begin{macrocode} \newcommand*{\vtwotonetop}[1][all]{% -\def\ff@pages{#1}\@vtwotonetop} + \def\ff@pages{#1}% + \@vtwotonetop +} \newcommand*{\@vtwotonetop}[2][0pt]{\@@vtwotonetop{#1}{#2}} \newcommand*{\@@vtwotonetop}[8]{% -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computetopedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@y}{-#2}% -\addtolength{\@ff@tmp@x}{#1}% -\addtolength{\@ff@tmp@x@even}{#1}% -\@nextvband{\ff@pages}{#2}{#3}{#4}{#5}% -\@nextvband{\ff@pages}{#2}{#6}{#7}{#8}% + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computetopedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@y}{-#2}% + \addtolength{\@ff@tmp@x}{#1}% + \addtolength{\@ff@tmp@x@even}{#1}% + \@nextvband{\ff@pages}{#2}{#3}{#4}{#5}% + \@nextvband{\ff@pages}{#2}{#6}{#7}{#8}% } % \end{macrocode} %\end{macro} @@ -6111,16 +10656,20 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % On exit, "\@ff@tmp@x" is set to the right border. % \begin{macrocode} \newcommand*{\@nextvband}[5]{% -\setlength{\@ff@staticW}{#3}% -\ifthenelse{\equal{#5}{}}{% -\newstaticframe[#1]{\@ff@staticW}{#2}{\@ff@tmp@x}{\@ff@tmp@y}}% -{\newstaticframe[#1]{\@ff@staticW}{#2}{\@ff@tmp@x}{\@ff@tmp@y}[#5]}% -\expandafter\global\expandafter\setlength - \csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{% - \@ff@tmp@x@even}% -\@setframecol#4\end{\c@maxstatic}{backcol}{sf}% -\addtolength{\@ff@tmp@x}{\@ff@staticW}% -\addtolength{\@ff@tmp@x@even}{\@ff@staticW}% + \setlength{\@ff@staticW}{#3}% + \ifthenelse{\equal{#5}{}}% + {% + \newstaticframe[#1]{\@ff@staticW}{#2}{\@ff@tmp@x}{\@ff@tmp@y}% + }% + {% + \newstaticframe[#1]{\@ff@staticW}{#2}{\@ff@tmp@x}{\@ff@tmp@y}[#5]% + }% + \expandafter\global\expandafter\setlength + \csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{% + \@ff@tmp@x@even}% + \@setframecol#4\end{\c@maxstatic}{backcol}{sf}% + \addtolength{\@ff@tmp@x}{\@ff@staticW}% + \addtolength{\@ff@tmp@x@even}{\@ff@staticW}% } % \end{macrocode} %\end{macro} @@ -6140,14 +10689,17 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % first optional argument, and look for the next. % \begin{macrocode} \newcommand*{\vNtone}[1][all]{% -\def\ff@pages{#1}\@vNtone} + \def\ff@pages{#1}% + \@vNtone +} % \end{macrocode} %\end{macro} %\begin{macro}{\@vNtone} % Got the first argument, now get the next. % \begin{macrocode} \newcommand*{\@vNtone}[2][0pt]{% -\@@vNtone{#1}{#2}{\paperheight}} + \@@vNtone{#1}{#2}{\paperheight}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@vNtone} @@ -6155,18 +10707,18 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % bottom of the page with height "#3". % \begin{macrocode} \newcommand*{\@@vNtone}[3]{% -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@x}{#1}% -\addtolength{\@ff@tmp@x@even}{#1}% -\@thisstrip=#2\relax -\setlength{\@ff@staticH}{#3}% -\@nextvNband% + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@x}{#1}% + \addtolength{\@ff@tmp@x@even}{#1}% + \@thisstrip=#2\relax + \setlength{\@ff@staticH}{#3}% + \@nextvNband } % \end{macrocode} %\end{macro} @@ -6174,20 +10726,23 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Recursively do the next strip. % \begin{macrocode} \newcommand*{\@nextvNband}{% -\ifnum\@thisstrip>0\relax - \let\flf@next\@@nextvNband -\else - \let\flf@next\relax -\fi -\advance\@thisstrip by -1\relax -\flf@next} + \ifnum\@thisstrip>0\relax + \let\flf@next\@@nextvNband + \else + \let\flf@next\relax + \fi + \advance\@thisstrip by -1\relax + \flf@next +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@nextvNband} % Do current strip, and go on to next one. % \begin{macrocode} \newcommand*{\@@nextvNband}[3]{% -\@nextvband{\ff@pages}{\@ff@staticH}{#1}{#2}{#3}\@nextvNband} + \@nextvband{\ff@pages}{\@ff@staticH}{#1}{#2}{#3}% + \@nextvNband +} \@onlypreamble{\vNtone} % \end{macrocode} @@ -6197,14 +10752,17 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % but user specifies the height. % \begin{macrocode} \newcommand*{\vNtonebottom}[1][all]{% -\def\ff@pages{#1}\@vNtonebottom} + \def\ff@pages{#1}% + \@vNtonebottom +} \@onlypreamble{\vNtonebottom} % \end{macrocode} %\end{macro} %\begin{macro}{\@vNtonebottom} % \begin{macrocode} \newcommand*{\@vNtonebottom}[3][0pt]{% -\@@vNtone{#1}{#2}{#3}} + \@@vNtone{#1}{#2}{#3}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\vNtonetop} @@ -6213,7 +10771,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % argument. % \begin{macrocode} \newcommand*{\vNtonetop}[1][all]{% -\def\ff@pages{#1}\@vNtonetop} + \def\ff@pages{#1}% + \@vNtonetop +} \@onlypreamble{\vNtonetop} % \end{macrocode} %\end{macro} @@ -6221,7 +10781,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Get next optional argument. % \begin{macrocode} \newcommand*{\@vNtonetop}[3][0pt]{% -\@@vNtonetop{#1}{#2}{#3}} + \@@vNtonetop{#1}{#2}{#3}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@vNtonetop} @@ -6229,19 +10790,19 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % recursively. % \begin{macrocode} \newcommand*{\@@vNtonetop}[3]{% -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computetopedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@y}{-#3}% -\addtolength{\@ff@tmp@x}{#1}% -\addtolength{\@ff@tmp@x@even}{#1}% -\@thisstrip=#2\relax -\setlength{\@ff@staticH}{#3}% -\@nextvNband% + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computetopedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@y}{-#3}% + \addtolength{\@ff@tmp@x}{#1}% + \addtolength{\@ff@tmp@x@even}{#1}% + \@thisstrip=#2\relax + \setlength{\@ff@staticH}{#3}% + \@nextvNband% } % \end{macrocode} %\end{macro} @@ -6250,7 +10811,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % \cs{htwotone}\oarg{pages}\oarg{y offset}\marg{H1}\marg{C1}\marg{L1}\marg{H2}\marg{C2}\marg{L2} % \begin{macrocode} \newcommand*{\htwotone}[1][all]{% -\def\ff@pages{#1}\@htwotone} + \def\ff@pages{#1}% + \@htwotone +} % \end{macrocode} %\end{macro} %\begin{macro}{\@htwotone} @@ -6263,16 +10826,16 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % strips. % \begin{macrocode} \newcommand*{\@@htwotoneleft}[8]{% -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@y}{#1}% -\@nexthband{\ff@pages}{#2}{#3}{#4}{#5}% -\@nexthband{\ff@pages}{#2}{#6}{#7}{#8}% + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@y}{#1}% + \@nexthband{\ff@pages}{#2}{#3}{#4}{#5}% + \@nexthband{\ff@pages}{#2}{#6}{#7}{#8}% } \@onlypreamble{\htwotone} @@ -6283,7 +10846,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Syntax: \cs{htwotoneleft}\oarg{pages}\oarg{y offset}\marg{width}\marg{H1}\marg{C1}\marg{L1}\marg{H2}\marg{C2}\marg{L2} % \begin{macrocode} \newcommand*{\htwotoneleft}[1][all]{% -\def\ff@pages{#1}\@htwotoneleft} + \def\ff@pages{#1}% + \@htwotoneleft +} \@onlypreamble{\htwotoneleft} % \end{macrocode} %\end{macro} @@ -6296,7 +10861,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Two tone horizontal strips along right border % \begin{macrocode} \newcommand*{\htwotoneright}[1][all]{% -\def\ff@pages{#1}\@htwotoneright} + \def\ff@pages{#1}% + \@htwotoneright +} \@onlypreamble{\htwotoneright} % \end{macrocode} %\end{macro} @@ -6308,18 +10875,18 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} %\begin{macro}{\@@htwotoneright} % \begin{macrocode} \newcommand*{\@@htwotoneright}[8]{% -\computerightedgeodd{\@ff@tmp@x}% -\if@twoside - \computerightedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@y}{#1}% -\addtolength{\@ff@tmp@x}{-#2}% -\addtolength{\@ff@tmp@x@even}{-#2}% -\@nexthband{\ff@pages}{#2}{#3}{#4}{#5}% -\@nexthband{\ff@pages}{#2}{#6}{#7}{#8}% + \computerightedgeodd{\@ff@tmp@x}% + \if@twoside + \computerightedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@y}{#1}% + \addtolength{\@ff@tmp@x}{-#2}% + \addtolength{\@ff@tmp@x@even}{-#2}% + \@nexthband{\ff@pages}{#2}{#3}{#4}{#5}% + \@nexthband{\ff@pages}{#2}{#6}{#7}{#8}% } % \end{macrocode} %\end{macro} @@ -6327,30 +10894,33 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Now for \meta{N} coloured horizontal strips % \begin{macrocode} \newcommand*{\hNtone}[1][all]{% -\def\ff@pages{#1}\@hNtone} + \def\ff@pages{#1}% + \@hNtone +} \@onlypreamble{\hNtone} % \end{macrocode} %\end{macro} %\begin{macro}{\@hNtone} % \begin{macrocode} \newcommand*{\@hNtone}[2][0pt]{% -\@@hNtone{#1}{#2}{\paperwidth}} + \@@hNtone{#1}{#2}{\paperwidth}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@hNtone} % \begin{macrocode} \newcommand*{\@@hNtone}[3]{% -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@y}{#1}% -\@thisstrip=#2\relax -\setlength{\@ff@staticW}{#3}% -\@nexthNband% + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@y}{#1}% + \@thisstrip=#2\relax + \setlength{\@ff@staticW}{#3}% + \@nexthNband } % \end{macrocode} %\end{macro} @@ -6358,46 +10928,52 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Now for the N tone strips along the left border % \begin{macrocode} \newcommand*{\hNtoneleft}[1][all]{% -\def\ff@pages{#1}\@hNtoneleft} + \def\ff@pages{#1}% + \@hNtoneleft +} \@onlypreamble{\hNtoneleft} % \end{macrocode} %\end{macro} %\begin{macro}{\@hNtoneleft} % \begin{macrocode} \newcommand*{\@hNtoneleft}[3][0pt]{% -\@@hNtone{#1}{#2}{#3}} + \@@hNtone{#1}{#2}{#3}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\hNtoneright} % Border strip along the right border % \begin{macrocode} \newcommand*{\hNtoneright}[1][all]{% -\def\ff@pages{#1}\@hNtoneright} + \def\ff@pages{#1}% + \@hNtoneright +} \@onlypreamble{\hNtoneright} % \end{macrocode} %\end{macro} %\begin{macro}{\@hNtoneright} % \begin{macrocode} \newcommand*{\@hNtoneright}[3][0pt]{% -\@@hNtoneright{#1}{#2}{#3}} + \@@hNtoneright{#1}{#2}{#3}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@hNtoneright} % \begin{macrocode} \newcommand*{\@@hNtoneright}[3]{% -\computerightedgeodd{\@ff@tmp@x}% -\if@twoside - \computerightedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@y}{#1}% -\addtolength{\@ff@tmp@x}{-#3}% -\addtolength{\@ff@tmp@x@even}{-#3}% -\@thisstrip=#2\relax -\setlength{\@ff@staticW}{#3}% -\@nexthNband% + \computerightedgeodd{\@ff@tmp@x}% + \if@twoside + \computerightedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@y}{#1}% + \addtolength{\@ff@tmp@x}{-#3}% + \addtolength{\@ff@tmp@x@even}{-#3}% + \@thisstrip=#2\relax + \setlength{\@ff@staticW}{#3}% + \@nexthNband } % \end{macrocode} %\end{macro} @@ -6408,15 +10984,19 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % On exit, "\@ff@tmp@y" is set to the top border. % \begin{macrocode} \newcommand*{\@nexthband}[5]{% -\setlength{\@ff@staticH}{#3}% -\ifthenelse{\equal{#5}{}}{% -\newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}}% -{\newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}[#5]}% -\expandafter\global\expandafter -\setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{% -\@ff@tmp@x@even}% -\@setframecol#4\end{\c@maxstatic}{backcol}{sf}% -\addtolength{\@ff@tmp@y}{\@ff@staticH}% + \setlength{\@ff@staticH}{#3}% + \ifthenelse{\equal{#5}{}}% + {% + \newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}% + }% + {% + \newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}[#5]% + }% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname + {\@ff@tmp@x@even}% + \@setframecol#4\end{\c@maxstatic}{backcol}{sf}% + \addtolength{\@ff@tmp@y}{\@ff@staticH}% } % \end{macrocode} %\end{macro} @@ -6424,19 +11004,22 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Get next horizontal strip recursively. % \begin{macrocode} \newcommand*{\@nexthNband}{% -\ifnum\@thisstrip>0\relax - \let\flf@next\@@nexthNband% -\else - \let\flf@next\relax% -\fi -\advance\@thisstrip by -1\relax -\flf@next} + \ifnum\@thisstrip>0\relax + \let\flf@next\@@nexthNband + \else + \let\flf@next\relax + \fi + \advance\@thisstrip by -1\relax + \flf@next +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@nexthNband} % \begin{macrocode} \newcommand*{\@@nexthNband}[3]{% -\@nexthband{\ff@pages}{\@ff@staticW}{#1}{#2}{#3}\@nexthNband} + \@nexthband{\ff@pages}{\@ff@staticW}{#1}{#2}{#3}% + \@nexthNband +} % \end{macrocode} %\end{macro} %\begin{macro}{\makebackgroundframe} @@ -6447,23 +11030,27 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % \cs{makebackgroundframe}\oarg{pages}\oarg{label}. % \begin{macrocode} \newcommand*{\makebackgroundframe}[1][all]{% -\ifnum\c@maxstatic>0\relax - \PackageWarning{flowfram}{Background frame is not - first static frame to be defined. All previously defined - static frames may be obscured.}% -\fi -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\newstaticframe[#1]{\paperwidth}{\paperheight}{\@ff@tmp@x}% -{\@ff@tmp@y}% -\expandafter\global\expandafter -\setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname -{\@ff@tmp@x@even}} + \ifnum\c@maxstatic>0\relax + \PackageWarning{flowfram}% + {% + Background frame is not first static frame to be + defined. All previously defined static frames may be + obscured.% + }% + \fi + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \newstaticframe[#1]{\paperwidth}{\paperheight}{\@ff@tmp@x}% + {\@ff@tmp@y}% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname + {\@ff@tmp@x@even}% +} % \end{macrocode} %\end{macro} % @@ -6507,7 +11094,8 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % Two optional arguments required. % \begin{macrocode} \newcommand*{\@insertvrule}[1][0pt]{% -\@ifnextchar[{\@@insertvrule[#1]}{\@@insertvrule[#1][0pt]}} + \@ifnextchar[{\@@insertvrule[#1]}{\@@insertvrule[#1][0pt]}% +} % \end{macrocode} %\end{macro} % Need some lengths: @@ -6524,19 +11112,55 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} % into a number to make life easier % \begin{macrocode} \def\@@insertvrule[#1][#2]#3#4#5#6{% -\ifthenelse{\equal{#3}{flow}}{% -\def\@ff@type@i{1}}{\ifthenelse{\equal{#3}{static}}{% -\def\@ff@type@i{2}}{\ifthenelse{\equal{#3}{dynamic}}{% -\def\@ff@type@i{3}}{\PackageError{flowfram}{Unknown frame -type '#3'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\ifthenelse{\equal{#5}{flow}}{% -\def\@ff@type@ii{1}}{\ifthenelse{\equal{#5}{static}}{% -\def\@ff@type@ii{2}}{\ifthenelse{\equal{#5}{dynamic}}{% -\def\@ff@type@ii{3}}{\PackageError{flowfram}{Unknown frame -type '#5'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\@@insert@vrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}% + \ifthenelse{\equal{#3}{flow}}% + {% + \def\@ff@type@i{1}% + }% + {% + \ifthenelse{\equal{#3}{static}}% + {% + \def\@ff@type@i{2}% + }% + {% + \ifthenelse{\equal{#3}{dynamic}}% + {% + \def\@ff@type@i{3}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#3'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \ifthenelse{\equal{#5}{flow}}% + {% + \def\@ff@type@ii{1}% + }% + {% + \ifthenelse{\equal{#5}{static}}% + {% + \def\@ff@type@ii{2}% + }% + {% + \ifthenelse{\equal{#5}{dynamic}}% + {% + \def\@ff@type@ii{3}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#5'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \@@insert@vrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}% } % \end{macrocode} %\end{macro} @@ -6548,60 +11172,60 @@ or 'dynamic'}}}}% %\cs{@@insert@vrule}\marg{y top}\marg{y bottom}\marg{type ID}\marg{IDN}\marg{type ID}\marg{IDN}. % \begin{macrocode} \newcommand*{\@@insert@vrule}[6]{% -\@ff@getdim{#3}{#4}% -\setlength{\@ff@left@x}{\ffareax}% -\setlength{\@ff@left@y}{\ffareay}% -\setlength{\@ff@left@width}{\ffareawidth}% -\setlength{\@ff@left@height}{\ffareaheight}% -\@ff@getdim{#5}{#6}% -\ifnum\@ff@left@x>\ffareax\relax - \@ff@swaplen{\@ff@left@x}{\ffareax}% - \@ff@swaplen{\@ff@left@y}{\ffareax}% - \@ff@swaplen{\@ff@left@evenx}{\ffareaevenx}% - \@ff@swaplen{\@ff@left@eveny}{\ffareaevenx}% - \@ff@swaplen{\@ff@left@width}{\ffareawidth}% - \@ff@swaplen{\@ff@left@height}{\ffareaheight}% -\fi -\setlength{\@ff@tmp@x}{\@ff@left@x} -\addtolength{\@ff@tmp@x}{\@ff@left@width}% -\setlength{\@ff@staticW}{\ffareax}% -\addtolength{\@ff@staticW}{-\@ff@tmp@x}% -\setlength{\@ff@staticH}{\@ff@left@y}% -\addtolength{\@ff@staticH}{\@ff@left@height}% -\setlength{\@ff@tmp@y}{\ffareay}% -\addtolength{\@ff@tmp@y}{\ffareaheight}% -\ifnum\@ff@tmp@y>\@ff@staticH - \setlength{\@ff@staticH}{\@ff@tmp@y}% -\fi -\ifnum\@ff@left@y<\ffareay\relax - \setlength{\@ff@tmp@y}{\@ff@left@y}% -\else + \@ff@getdim{#3}{#4}% + \setlength{\@ff@left@x}{\ffareax}% + \setlength{\@ff@left@y}{\ffareay}% + \setlength{\@ff@left@width}{\ffareawidth}% + \setlength{\@ff@left@height}{\ffareaheight}% + \@ff@getdim{#5}{#6}% + \ifnum\@ff@left@x>\ffareax\relax + \@ff@swaplen{\@ff@left@x}{\ffareax}% + \@ff@swaplen{\@ff@left@y}{\ffareax}% + \@ff@swaplen{\@ff@left@evenx}{\ffareaevenx}% + \@ff@swaplen{\@ff@left@eveny}{\ffareaevenx}% + \@ff@swaplen{\@ff@left@width}{\ffareawidth}% + \@ff@swaplen{\@ff@left@height}{\ffareaheight}% + \fi + \setlength{\@ff@tmp@x}{\@ff@left@x} + \addtolength{\@ff@tmp@x}{\@ff@left@width}% + \setlength{\@ff@staticW}{\ffareax}% + \addtolength{\@ff@staticW}{-\@ff@tmp@x}% + \setlength{\@ff@staticH}{\@ff@left@y}% + \addtolength{\@ff@staticH}{\@ff@left@height}% \setlength{\@ff@tmp@y}{\ffareay}% -\fi -\addtolength{\@ff@staticH}{-\@ff@tmp@y}% -\newstaticframe{\@ff@staticW}{\@ff@staticH}% -{\@ff@tmp@x}{\@ff@tmp@y}% -\addtolength{\@ff@staticH}{#1}% -\addtolength{\@ff@staticH}{#2}% -\setstaticcontents{\c@maxstatic}{% -\ffruledeclarations -\ffvrule{#2}{\ffcolumnseprule}{\@ff@staticH}}% -\ifcase#3\relax -\or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}% -\or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}% -\or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}% -\fi -\setstaticframe{\c@maxstatic}{pages=\@ff@pages}% + \addtolength{\@ff@tmp@y}{\ffareaheight}% + \ifnum\@ff@tmp@y>\@ff@staticH + \setlength{\@ff@staticH}{\@ff@tmp@y}% + \fi + \ifnum\@ff@left@y<\ffareay\relax + \setlength{\@ff@tmp@y}{\@ff@left@y}% + \else + \setlength{\@ff@tmp@y}{\ffareay}% + \fi + \addtolength{\@ff@staticH}{-\@ff@tmp@y}% + \newstaticframe{\@ff@staticW}{\@ff@staticH}% + {\@ff@tmp@x}{\@ff@tmp@y}% + \addtolength{\@ff@staticH}{#1}% + \addtolength{\@ff@staticH}{#2}% + \setstaticcontents{\c@maxstatic}{% + \ffruledeclarations + \ffvrule{#2}{\ffcolumnseprule}{\@ff@staticH}}% + \ifcase#3\relax + \or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}% + \or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}% + \or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}% + \fi + \setstaticframe{\c@maxstatic}{pages=\@ff@pages}% % \end{macrocode} -% check the difference between odd and even page co-ordinates +% Check the difference between odd and even page co-ordinates % and shift new frame in same direction. (Assumes the two % original frames stay in the same relative position.) % \begin{macrocode} -\addtolength{\@ff@tmp@x}{\@ff@left@evenx}% -\addtolength{\@ff@tmp@x}{-\@ff@left@x}% -\addtolength{\@ff@tmp@y}{\@ff@left@eveny}% -\addtolength{\@ff@tmp@y}{-\@ff@left@y}% -\setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}% + \addtolength{\@ff@tmp@x}{\@ff@left@evenx}% + \addtolength{\@ff@tmp@x}{-\@ff@left@x}% + \addtolength{\@ff@tmp@y}{\@ff@left@eveny}% + \addtolength{\@ff@tmp@y}{-\@ff@left@y}% + \setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}% } % \end{macrocode} %\end{macro} @@ -6611,40 +11235,78 @@ or 'dynamic'}}}}% % Draws the rule for \cs{insertvrule} % \begin{macrocode} \newcommand*{\ffvrule}[3]{% -\hfill \rule[-#1]{#2}{#3}\hfill\mbox{}} + \hfill \rule[-#1]{#2}{#3}\hfill\mbox{}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sinsertvrule} % Starred version. Two optional arguments required. % \begin{macrocode} \newcommand*{\@sinsertvrule}[1][0pt]{% -\@ifnextchar[{\@@sinsertvrule[#1]}{\@@sinsertvrule[#1][0pt]}} + \@ifnextchar[{\@@sinsertvrule[#1]}{\@@sinsertvrule[#1][0pt]}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@sinsertvrule} % Find out the frame types and their \gls{idn}. % \begin{macrocode} \def\@@sinsertvrule[#1][#2]#3#4#5#6{% -\ifthenelse{\equal{#3}{flow}}{% -\def\@ff@type@i{1}\@flowframeid{#4}\@ff@tmpN=\ff@id}{% -\ifthenelse{\equal{#3}{static}}{% -\def\@ff@type@i{2}\@staticframeid{#4}\@ff@tmpN=\ff@id}{% -\ifthenelse{\equal{#3}{dynamic}}{% -\def\@ff@type@i{3}\@dynamicframeid{#4}\@ff@tmpN=\ff@id}{% -\PackageError{flowfram}{Unknown frame -type '#3'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\ifthenelse{\equal{#5}{flow}}{% -\def\@ff@type@ii{1}\@flowframeid{#6}}{% -\ifthenelse{\equal{#5}{static}}{% -\def\@ff@type@ii{2}\@staticframeid{#6}}{% -\ifthenelse{\equal{#5}{dynamic}}{% -\def\@ff@type@ii{3}\@dynamicframeid{#6}}{% -\PackageError{flowfram}{Unknown frame -type '#5'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\@@insert@vrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}% -{\@ff@type@ii}{\ff@id}% + \ifthenelse{\equal{#3}{flow}}% + {% + \def\@ff@type@i{1}% + \@flowframeid{#4}% + \@ff@tmpN=\ff@id + }% + {% + \ifthenelse{\equal{#3}{static}}% + {% + \def\@ff@type@i{2}\@staticframeid{#4}\@ff@tmpN=\ff@id + }% + {% + \ifthenelse{\equal{#3}{dynamic}}% + {% + \def\@ff@type@i{3}% + \@dynamicframeid{#4}% + \@ff@tmpN=\ff@id + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#3'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \ifthenelse{\equal{#5}{flow}}% + {% + \def\@ff@type@ii{1}\@flowframeid{#6}% + }% + {% + \ifthenelse{\equal{#5}{static}}% + {% + \def\@ff@type@ii{2}% + \@staticframeid{#6}% + }% + {% + \ifthenelse{\equal{#5}{dynamic}}% + {% + \def\@ff@type@ii{3}% + \@dynamicframeid{#6}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#5'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \@@insert@vrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}% + {\@ff@type@ii}{\ff@id}% } % \end{macrocode} %\end{macro} @@ -6660,7 +11322,8 @@ or 'dynamic'}}}}% % Two optional arguments required. % \begin{macrocode} \newcommand*{\@inserthrule}[1][0pt]{% -\@ifnextchar[{\@@inserthrule[#1]}{\@@inserthrule[#1][0pt]}} + \@ifnextchar[{\@@inserthrule[#1]}{\@@inserthrule[#1][0pt]}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@inserthrule} @@ -6668,19 +11331,54 @@ or 'dynamic'}}}}% % into a number to make life easier % \begin{macrocode} \def\@@inserthrule[#1][#2]#3#4#5#6{% -\ifthenelse{\equal{#3}{flow}}{% -\def\@ff@type@i{1}}{\ifthenelse{\equal{#3}{static}}{% -\def\@ff@type@i{2}}{\ifthenelse{\equal{#3}{dynamic}}{% -\def\@ff@type@i{3}}{\PackageError{flowfram}{Unknown frame -type '#3'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\ifthenelse{\equal{#5}{flow}}{% -\def\@ff@type@ii{1}}{\ifthenelse{\equal{#5}{static}}{% -\def\@ff@type@ii{2}}{\ifthenelse{\equal{#5}{dynamic}}{% -\def\@ff@type@ii{3}}{\PackageError{flowfram}{Unknown frame -type '#5'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\@@insert@hrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}% + \ifthenelse{\equal{#3}{flow}}% + {% + \def\@ff@type@i{1}% + }% + {% + \ifthenelse{\equal{#3}{static}}% + {% + \def\@ff@type@i{2}% + }% + {% + \ifthenelse{\equal{#3}{dynamic}}% + {% + \def\@ff@type@i{3}}% + {% + \PackageError{flowfram}% + {Unknown frame type '#3'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \ifthenelse{\equal{#5}{flow}}% + {% + \def\@ff@type@ii{1}% + }% + {% + \ifthenelse{\equal{#5}{static}}% + {% + \def\@ff@type@ii{2}% + }% + {% + \ifthenelse{\equal{#5}{dynamic}}% + {% + \def\@ff@type@ii{3}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#5'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \@@insert@hrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}% } % \end{macrocode} %\end{macro} @@ -6692,53 +11390,55 @@ or 'dynamic'}}}}% %\cs{@@insert@hrule}\marg{x left}\marg{x right}\marg{type ID}\marg{IDN}\marg{type ID}\marg{IDN}. % \begin{macrocode} \newcommand*{\@@insert@hrule}[6]{% -\@ff@getdim{#3}{#4}% -\setlength{\@ff@left@x}{\ffareax}% -\setlength{\@ff@left@y}{\ffareay}% -\setlength{\@ff@left@width}{\ffareawidth}% -\setlength{\@ff@left@height}{\ffareaheight}% -\@ff@getdim{#5}{#6}% -\ifnum\@ff@left@y>\ffareay\relax - \@ff@swaplen{\@ff@left@x}{\ffareax}% - \@ff@swaplen{\@ff@left@y}{\ffareay}% - \@ff@swaplen{\@ff@left@width}{\ffareawidth}% - \@ff@swaplen{\@ff@left@height}{\ffareaheight}% -\fi -\setlength{\@ff@tmp@y}{\@ff@left@y}% -\addtolength{\@ff@tmp@y}{\@ff@left@height}% -\setlength{\@ff@staticH}{\ffareay}% -\addtolength{\@ff@staticH}{-\@ff@tmp@y}% -\setlength{\@ff@staticW}{\@ff@left@x}% -\addtolength{\@ff@staticW}{\@ff@left@width}% -\setlength{\@ff@tmp@x}{\ffareax}% -\addtolength{\@ff@tmp@x}{\ffareawidth}% -\ifnum\@ff@tmp@x>\@ff@staticW\relax - \setlength{\@ff@staticW}{\@ff@tmp@x}% -\fi -\ifnum\@ff@left@x<\ffareax\relax - \setlength{\@ff@tmp@x}{\@ff@left@x}% -\else + \@ff@getdim{#3}{#4}% + \setlength{\@ff@left@x}{\ffareax}% + \setlength{\@ff@left@y}{\ffareay}% + \setlength{\@ff@left@width}{\ffareawidth}% + \setlength{\@ff@left@height}{\ffareaheight}% + \@ff@getdim{#5}{#6}% + \ifnum\@ff@left@y>\ffareay\relax + \@ff@swaplen{\@ff@left@x}{\ffareax}% + \@ff@swaplen{\@ff@left@y}{\ffareay}% + \@ff@swaplen{\@ff@left@width}{\ffareawidth}% + \@ff@swaplen{\@ff@left@height}{\ffareaheight}% + \fi + \setlength{\@ff@tmp@y}{\@ff@left@y}% + \addtolength{\@ff@tmp@y}{\@ff@left@height}% + \setlength{\@ff@staticH}{\ffareay}% + \addtolength{\@ff@staticH}{-\@ff@tmp@y}% + \setlength{\@ff@staticW}{\@ff@left@x}% + \addtolength{\@ff@staticW}{\@ff@left@width}% \setlength{\@ff@tmp@x}{\ffareax}% -\fi -\addtolength{\@ff@staticW}{-\@ff@tmp@x}% -\newstaticframe{\@ff@staticW}{\@ff@staticH}% -{\@ff@tmp@x}{\@ff@tmp@y}% -\addtolength{\@ff@staticW}{#1}% -\addtolength{\@ff@staticW}{#2}% -\setstaticcontents{\c@maxstatic}{% -\ffruledeclarations -\ffhrule{#1}{\@ff@staticW}{\ffcolumnseprule}}% -\ifcase#3\relax -\or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}% -\or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}% -\or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}% -\fi -\setstaticframe{\c@maxstatic}{pages=\@ff@pages}% -\addtolength{\@ff@tmp@x}{\@ff@left@evenx}% -\addtolength{\@ff@tmp@x}{-\@ff@left@x}% -\addtolength{\@ff@tmp@y}{\@ff@left@eveny}% -\addtolength{\@ff@tmp@y}{-\@ff@left@y}% -\setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}% + \addtolength{\@ff@tmp@x}{\ffareawidth}% + \ifnum\@ff@tmp@x>\@ff@staticW\relax + \setlength{\@ff@staticW}{\@ff@tmp@x}% + \fi + \ifnum\@ff@left@x<\ffareax\relax + \setlength{\@ff@tmp@x}{\@ff@left@x}% + \else + \setlength{\@ff@tmp@x}{\ffareax}% + \fi + \addtolength{\@ff@staticW}{-\@ff@tmp@x}% + \newstaticframe{\@ff@staticW}{\@ff@staticH}% + {\@ff@tmp@x}{\@ff@tmp@y}% + \addtolength{\@ff@staticW}{#1}% + \addtolength{\@ff@staticW}{#2}% + \setstaticcontents{\c@maxstatic}% + {% + \ffruledeclarations + \ffhrule{#1}{\@ff@staticW}{\ffcolumnseprule}% + }% + \ifcase#3\relax + \or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}% + \or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}% + \or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}% + \fi + \setstaticframe{\c@maxstatic}{pages=\@ff@pages}% + \addtolength{\@ff@tmp@x}{\@ff@left@evenx}% + \addtolength{\@ff@tmp@x}{-\@ff@left@x}% + \addtolength{\@ff@tmp@y}{\@ff@left@eveny}% + \addtolength{\@ff@tmp@y}{-\@ff@left@y}% + \setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}% } % \end{macrocode} %\end{macro} @@ -6748,40 +11448,81 @@ or 'dynamic'}}}}% % Draws the rule for \cs{inserthrule} % \begin{macrocode} \newcommand*{\ffhrule}[3]{% -\hspace*{-#1}\rule{#2}{#3}} + \hspace*{-#1}\rule{#2}{#3}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sinserthrule} % Starred version. Two optional arguments required. % \begin{macrocode} \newcommand*{\@sinserthrule}[1][0pt]{% -\@ifnextchar[{\@@sinserthrule[#1]}{\@@sinserthrule[#1][0pt]}} + \@ifnextchar[{\@@sinserthrule[#1]}{\@@sinserthrule[#1][0pt]}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@sinserthrule} % Find out the frame types and their \gls{idn}. % \begin{macrocode} \def\@@sinserthrule[#1][#2]#3#4#5#6{% -\ifthenelse{\equal{#3}{flow}}{% -\def\@ff@type@i{1}\@flowframeid{#4}\@ff@tmpN=\ff@id}{% -\ifthenelse{\equal{#3}{static}}{% -\def\@ff@type@i{2}\@staticframeid{#4}\@ff@tmpN=\ff@id}{% -\ifthenelse{\equal{#3}{dynamic}}{% -\def\@ff@type@i{3}\@dynamicframeid{#4}\@ff@tmpN=\ff@id}{% -\PackageError{flowfram}{Unknown frame -type '#3'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\ifthenelse{\equal{#5}{flow}}{% -\def\@ff@type@ii{1}\@flowframeid{#6}}{% -\ifthenelse{\equal{#5}{static}}{% -\def\@ff@type@ii{2}\@staticframeid{#6}}{% -\ifthenelse{\equal{#5}{dynamic}}{% -\def\@ff@type@ii{3}\@dynamicframeid{#6}}{% -\PackageError{flowfram}{Unknown frame -type '#5'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\@@insert@hrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}% -{\@ff@type@ii}{\ff@id}% + \ifthenelse{\equal{#3}{flow}}% + {% + \def\@ff@type@i{1}% + \@flowframeid{#4}% + \@ff@tmpN=\ff@id + }% + {% + \ifthenelse{\equal{#3}{static}}% + {% + \def\@ff@type@i{2}% + \@staticframeid{#4}% + \@ff@tmpN=\ff@id + }% + {% + \ifthenelse{\equal{#3}{dynamic}}% + {% + \def\@ff@type@i{3}% + \@dynamicframeid{#4}% + \@ff@tmpN=\ff@id + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#3'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \ifthenelse{\equal{#5}{flow}}% + {% + \def\@ff@type@ii{1}% + \@flowframeid{#6}% + }% + {% + \ifthenelse{\equal{#5}{static}}% + {% + \def\@ff@type@ii{2}% + \@staticframeid{#6}% + }% + {% + \ifthenelse{\equal{#5}{dynamic}}% + {% + \def\@ff@type@ii{3}% + \@dynamicframeid{#6}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#5'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \@@insert@hrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}% + {\@ff@type@ii}{\ff@id}% } % \end{macrocode} %\end{macro} @@ -6797,7 +11538,8 @@ or 'dynamic'}}}}% % the unstarred form identifies the frame \gls{idn}. % \begin{macrocode} \newcommand*{\dfchaphead}{% -\@ifstar\@sdynamicchap\@dynamicchap} + \@ifstar\@sdynamicchap\@dynamicchap +} % \end{macrocode} %\end{macro} % Define style for the chapter heading. These commands @@ -6816,28 +11558,59 @@ or 'dynamic'}}}}% % Unstarred version. % \begin{macrocode} \newcommand{\@dynamicchap}[1]{% -\@ifundefined{chapter}{\PackageError{flowfram}{Chapters aren't -defined}{The document -class you are using does not define chapters}}{% -\let\@ff@OLDmakechapterhead\@makechapterhead -\let\@ff@OLDmakeschapterhead\@makeschapterhead -\renewcommand{\DFchapterstyle}[1]{\@ff@OLDmakechapterhead{##1}}% -\renewcommand{\DFschapterstyle}[1]{\@ff@OLDmakeschapterhead{##1}}% -% -\xdef\@makechapterhead##1{% -\noexpand\@setdynamiccontents{\number#1}{% -\noexpand\DFchapterstyle{##1}}}% -\xdef\@makeschapterhead##1{% -\noexpand\@setdynamiccontents{\number#1}{% -\noexpand\DFschapterstyle{##1}}}% -}} + \@ifundefined{chapter}% + {% + \PackageError{flowfram}% + {Chapters aren't defined}% + {% + The document class you are using does not + define chapters% + }% + }% + {% +% \end{macrocode} +% Store current chapter head definitions for starred and unstarred +% versions +% \begin{macrocode} + \let\@ff@OLDmakechapterhead\@makechapterhead + \let\@ff@OLDmakeschapterhead\@makeschapterhead +% \end{macrocode} +% Define user commands that can be redefined to modify the chapter +% head style (in the event that the user is using a class that +% doesn't provide an easy means to do this.) +% \begin{macrocode} + \renewcommand{\DFchapterstyle}[1]{\@ff@OLDmakechapterhead{##1}}% + \renewcommand{\DFschapterstyle}[1]{\@ff@OLDmakeschapterhead{##1}}% +% \end{macrocode} +% Redefine chapter heads so that they put their contents in the +% requested dynamic frame. First the unstarred version: +% \begin{macrocode} + \xdef\@makechapterhead##1{% + \noexpand\@setdynamiccontents{\number#1}% + {% + \noexpand\DFchapterstyle{##1}% + }% + }% +% \end{macrocode} +% Now the starred version: +% \begin{macrocode} + \xdef\@makeschapterhead##1{% + \noexpand\@setdynamiccontents{\number#1}% + {% + \noexpand\DFschapterstyle{##1}% + }% + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sdynamicchap} % Starred form. % \begin{macrocode} \newcommand{\@sdynamicchap}[1]{% -\@dynamicframeid{#1}\@dynamicchap{\ff@id}} + \@dynamicframeid{#1}% + \@dynamicchap{\ff@id}% +} % \end{macrocode} %\end{macro} % There is no facility for placing other sectional types @@ -6861,9 +11634,12 @@ class you are using does not define chapters}}{% % thumbtabs correspond to chapters, otherwise make % thumbtabs correspond to sections. % \begin{macrocode} -\@ifundefined{chapter}{% -\newcommand*{\defaultthumbtabtype}{section}}{ -\newcommand*{\defaultthumbtabtype}{chapter} +\@ifundefined{chapter}% +{% + \newcommand*{\defaultthumbtabtype}{section}% +}% +{% + \newcommand*{\defaultthumbtabtype}{chapter}% } % \end{macrocode} %\end{macro} @@ -6882,8 +11658,11 @@ class you are using does not define chapters}}{% % First check to see if there is a second optional argument. % \begin{macrocode} \newcommand*{\makethumbtabs}[2][0pt]{% -\@ifnextchar[{\@makethumbtabs[#1]{#2}}{% -\@makethumbtabs[#1]{#2}[\defaultthumbtabtype]}% + \@ifnextchar[% + {\@makethumbtabs[#1]{#2}}% + {% + \@makethumbtabs[#1]{#2}[\defaultthumbtabtype]% + }% } % \end{macrocode} %\end{macro} @@ -6893,14 +11672,30 @@ class you are using does not define chapters}}{% % and create the thumbtabs. % \begin{macrocode} \def\@makethumbtabs[#1]#2[#3]{% -\@ifundefined{#3}{\PackageError{flowfram}{% -Unknown section type '#3'}{}}{% -\renewcommand{\@ttb@type}{#3}% -\ifthenelse{\equal{#3}{chapter}}{\@makethumbchapter}{% -\ifthenelse{\equal{#3}{part}}{\@makethumbpart}{% -\@makethumbsection{#3}}}} -\@starttoc{ttb}% -\@dothumbtabs{#1}{#2}% + \@ifundefined{#3}% + {% + \PackageError{flowfram}% + {% + Unknown section type '#3'% + }% + {}% + }% + {% + \renewcommand{\@ttb@type}{#3}% + \ifthenelse{\equal{#3}{chapter}}% + {% + \@makethumbchapter + }% + {% + \ifthenelse{\equal{#3}{part}}% + {\@makethumbpart}% + {% + \@makethumbsection{#3}% + }% + }% + }% + \@starttoc{ttb}% + \@dothumbtabs{#1}{#2}% } % \end{macrocode} %\end{macro} @@ -6909,14 +11704,15 @@ Unknown section type '#3'}{}}{% % so that each unstarred chapter writes an entry to the % ".ttb" file. % \begin{macrocode} -\newcommand{\@makethumbchapter}{ -\let\@ttb@old@chapter\@chapter -\def\@chapter[##1]##2{% -\@ttb@old@chapter[##1]{##2}% -\addtocontents{ttb}{\protect\thumbtab - {\thepage}{\thechapter}{##1}{chapter.\thechapter}}% -\@afterheading -}} +\newcommand{\@makethumbchapter}{% + \let\@ttb@old@chapter\@chapter + \def\@chapter[##1]##2{% + \@ttb@old@chapter[##1]{##2}% + \addtocontents{ttb}{\protect\thumbtab + {\thepage}{\thechapter}{##1}{chapter.\thechapter}}% + \@afterheading + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@makethumbpart} @@ -6930,24 +11726,33 @@ Unknown section type '#3'}{}}{% % If this happens, just redefine "\@part", and hope for the % best. % \begin{macrocode} -\newcommand{\@makethumbpart}{ -\let\@ttb@old@part\@part -\@ifundefined{@endpart}{% -\def\@part[##1]##2{\@ttb@old@part[##1]{##2}% -\addtocontents{ttb}{\protect\thumbtab - {\thepage}{\thepart}{##1}{part.\thepage}}% -\@afterheading}}{% -\let\@ttb@old@endpart\@endpart -\def\@part[##1]##2{% -\def\@parttitle{##1}% -\@ttb@old@part[##1]{##2}% -}% -\def\@endpart{% -\addtocontents{ttb}{% -\protect\thumbtab{\thepage}% -{\thepart}{\@parttitle}{part.\thepage}}% -\@ttb@old@endpart -}}} +\newcommand{\@makethumbpart}{% + \let\@ttb@old@part\@part + \@ifundefined{@endpart}% + {% + \def\@part[##1]##2{% + \@ttb@old@part[##1]{##2}% + \addtocontents{ttb}{\protect\thumbtab + {\thepage}{\thepart}{##1}{part.\thepage}}% + \@afterheading + }% + }% + {% + \let\@ttb@old@endpart\@endpart + \def\@part[##1]##2{% + \def\@parttitle{##1}% + \@ttb@old@part[##1]{##2}% + }% + \def\@endpart{% + \addtocontents{ttb}% + {% + \protect\thumbtab{\thepage}% + {\thepart}{\@parttitle}{part.\thepage}% + }% + \@ttb@old@endpart + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@makethumbsection} @@ -6957,15 +11762,21 @@ Unknown section type '#3'}{}}{% % "\@sect" to add the thumbtab information to the .ttb file. % \begin{macrocode} \newcommand*{\@makethumbsection}[1]{% -\let\@ttb@old@sect=\@sect -\def\@sect##1##2##3##4##5##6[##7]##8{% -\@ttb@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}% -\ifthenelse{\equal{##1}{#1}}{% -\addtocontents{ttb}{% -\protect\thumbtab{\thepage}{\csname the#1\endcsname}% -{##7}{#1.\csname the#1\endcsname}}% -\@afterheading}{}% -}} + \let\@ttb@old@sect=\@sect + \def\@sect##1##2##3##4##5##6[##7]##8{% + \@ttb@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}% + \ifthenelse{\equal{##1}{#1}}% + {% + \addtocontents{ttb}% + {% + \protect\thumbtab{\thepage}{\csname the#1\endcsname}% + {##7}{#1.\csname the#1\endcsname}% + }% + \@afterheading + }% + {}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\thumbtab} @@ -6974,19 +11785,16 @@ Unknown section type '#3'}{}}{% % information for now. % \begin{macrocode} \newcommand{\thumbtab}[4]{% -\stepcounter{maxthumbtabs}% -\expandafter -\gdef\csname thumbtab@pages@\romannumeral\c@maxthumbtabs\endcsname -{#1}% -\expandafter -\gdef\csname thumbtab@num@\romannumeral\c@maxthumbtabs\endcsname -{#2}% -\expandafter -\gdef\csname thumbtab@title@\romannumeral\c@maxthumbtabs\endcsname -{#3}% -\expandafter -\gdef\csname thumbtab@link@\romannumeral\c@maxthumbtabs\endcsname -{#4}} + \stepcounter{maxthumbtabs}% + \expandafter + \gdef\csname thumbtab@pages@\romannumeral\c@maxthumbtabs\endcsname{#1}% + \expandafter + \gdef\csname thumbtab@num@\romannumeral\c@maxthumbtabs\endcsname{#2}% + \expandafter + \gdef\csname thumbtab@title@\romannumeral\c@maxthumbtabs\endcsname{#3}% + \expandafter + \gdef\csname thumbtab@link@\romannumeral\c@maxthumbtabs\endcsname{#4}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@dothumbtabs} @@ -7007,30 +11815,31 @@ Unknown section type '#3'}{}}{% % Syntax: \cs{@dothumbtabs}\marg{y offset}\marg{height}. % \begin{macrocode} \newcommand*{\@dothumbtabs}[2]{% -\@colN=0\relax -\whiledo{\@colN<\c@maxthumbtabs}{% - \advance\@colN by 1\relax - \edef\ff@pages{% - \csname thumbtab@pages@\romannumeral\@colN\endcsname}% - \ifnum\@colN=\c@maxthumbtabs - \expandafter - \xdef\csname thumbtab@pages@\romannumeral\@colN\endcsname{% - \ff@pages,>\ff@pages}% - \else + \@colN=0\relax + \whiledo{\@colN<\c@maxthumbtabs}% + {% \advance\@colN by 1\relax - \edef\ff@endpage{% + \edef\ff@pages{% \csname thumbtab@pages@\romannumeral\@colN\endcsname}% - \advance\@colN by -1\relax - \@ff@tmpN=\ff@endpage\relax - \advance\@ff@tmpN by -1\relax - \ifnum\@ff@tmpN>\ff@pages + \ifnum\@colN=\c@maxthumbtabs \expandafter \xdef\csname thumbtab@pages@\romannumeral\@colN\endcsname{% - \ff@pages-\number\@ff@tmpN}% + \ff@pages,>\ff@pages}% + \else + \advance\@colN by 1\relax + \edef\ff@endpage{% + \csname thumbtab@pages@\romannumeral\@colN\endcsname}% + \advance\@colN by -1\relax + \@ff@tmpN=\ff@endpage\relax + \advance\@ff@tmpN by -1\relax + \ifnum\@ff@tmpN>\ff@pages + \expandafter + \xdef\csname thumbtab@pages@\romannumeral\@colN\endcsname{% + \ff@pages-\number\@ff@tmpN}% + \fi \fi - \fi -}% -\@@dothumbtabs{#1}{#2}% + }% + \@@dothumbtabs{#1}{#2}% } % \end{macrocode} %\end{macro} @@ -7046,11 +11855,16 @@ Unknown section type '#3'}{}}{% % use a hyperlink in the thumbtab index. % Syntax: \cs{thumbtabindexformat}\marg{link}\marg{text}\marg{height} % \begin{macrocode} -\@ifundefined{hyperlink}{% -\newcommand{\thumbtabindexformat}[3]{% -\thumbtabformat{#2}{#3}}}{% -\newcommand{\thumbtabindexformat}[3]{% -\hyperlink{#1}{\thumbtabformat{#2}{#3}}} +\@ifundefined{hyperlink}% +{% + \newcommand{\thumbtabindexformat}[3]{% + \thumbtabformat{#2}{#3}% + }% +}% +{% + \newcommand{\thumbtabindexformat}[3]{% + \hyperlink{#1}{\thumbtabformat{#2}{#3}}% + }% } % \end{macrocode} %\end{macro} @@ -7061,13 +11875,19 @@ Unknown section type '#3'}{}}{% % Syntax: \cs{thumbtabformat}\marg{text}\marg{height} % \begin{macrocode} \newcommand{\thumbtabformat}[2]{% -\if@ttb@rotate -\rotatebox{-90}{\parbox[c][\thumbtabwidth]{#2}{% -\centering#1}}% -\else -\parbox[c][#2]{\thumbtabwidth}{% -\centering\@ttb@stack{#1}}% -\fi} + \if@ttb@rotate + \rotatebox{-90}% + {% + \parbox[c][\thumbtabwidth]{#2}{% + \centering#1% + }% + }% + \else + \parbox[c][#2]{\thumbtabwidth}{% + \centering\@ttb@stack{#1}% + }% + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\@flf@subsp} @@ -7076,18 +11896,18 @@ Unknown section type '#3'}{}}{% %\changes{1.10}{2007/08/21}{new} % \begin{macrocode} \def\@flf@subsp#1 #2{% -\expandafter\flf@ta\expandafter{\@flf@subsptext}% -\flf@tb{#1}% -\edef\@flf@subsptext{\the\flf@ta\the\flf@tb}% -\def\@flf@tmp{#2}% -\ifx\@flf@tmp\@nnil - \let\@flf@donextsubsp=\@gobble -\else \expandafter\flf@ta\expandafter{\@flf@subsptext}% - \edef\@flf@subsptext{\the\flf@ta\noexpand\space}% - \let\@flf@donextsubsp=\@flf@subsp -\fi -\@flf@donextsubsp{#2}% + \flf@tb{#1}% + \edef\@flf@subsptext{\the\flf@ta\the\flf@tb}% + \def\@flf@tmp{#2}% + \ifx\@flf@tmp\@nnil + \let\@flf@donextsubsp=\@gobble + \else + \expandafter\flf@ta\expandafter{\@flf@subsptext}% + \edef\@flf@subsptext{\the\flf@ta\noexpand\space}% + \let\@flf@donextsubsp=\@flf@subsp + \fi + \@flf@donextsubsp{#2}% } % \end{macrocode} %\end{macro} @@ -7098,30 +11918,32 @@ Unknown section type '#3'}{}}{% %\changes{1.10}{2007/08/21}{spaces now replaced with \cs{space}} % \begin{macrocode} \newcommand{\@ttb@stack}[1]{% -\def\@flf@subsptext{}% -\expandafter\@flf@subsp#1 \@nil\relax -\begin{tabular}{l}% -\expandafter\@@ttb@stack\@flf@subsptext\@nil\relax -\end{tabular}} + \def\@flf@subsptext{}% + \expandafter\@flf@subsp#1 \@nil\relax + \begin{tabular}{l}% + \expandafter\@@ttb@stack\@flf@subsptext\@nil\relax + \end{tabular}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@ttb@stack} %\changes{1.10}{2007/08/21}{now uses \cs{mbox}} % \begin{macrocode} \def\@@ttb@stack#1#2{% -\def\@flf@tmp{#1}% -\ifx\@flf@tmp\@nnil - \let\flf@next\relax -\else - #1\\% - \def\@flf@tmp{#2}% - \ifx\@nnil#2\relax - \let\flf@next\@gobble + \def\@flf@tmp{#1}% + \ifx\@flf@tmp\@nnil + \let\flf@next\relax \else - \let\flf@next\@@ttb@stack + #1\\% + \def\@flf@tmp{#2}% + \ifx\@nnil#2\relax + \let\flf@next\@gobble + \else + \let\flf@next\@@ttb@stack + \fi \fi -\fi -\flf@next{#2}} + \flf@next{#2}% +} % \end{macrocode} %\end{macro} % @@ -7142,100 +11964,129 @@ Unknown section type '#3'}{}}{% % "thumbtabindex"\meta{n}, where \meta{n} is as before. % \begin{macrocode} \newcommand{\@@dothumbtabs}[2]{% -\setlength{\@ff@tmp@y}{\textheight}% -\addtolength{\@ff@tmp@y}{-#2}% -\addtolength{\@ff@tmp@y}{-#1}% -\computerightedgeodd{\@ff@tmp@x}% -\addtolength{\@ff@tmp@x}{-\thumbtabwidth}% -\computeleftedgeeven{\@ff@tmp@x@even}% -\@ff@tmpN=0\relax -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% - \advance\@ff@tmpN by 1\relax - \@greyscale=\@ff@tmpN\relax - \multiply\@greyscale by 60\relax - \divide\@greyscale by \c@maxthumbtabs - \advance\@greyscale by 25\relax - \edef\@ff@greyscale{0.\number\@greyscale}% + \setlength{\@ff@tmp@y}{\textheight}% + \addtolength{\@ff@tmp@y}{-#2}% + \addtolength{\@ff@tmp@y}{-#1}% + \computerightedgeodd{\@ff@tmp@x}% + \addtolength{\@ff@tmp@x}{-\thumbtabwidth}% + \computeleftedgeeven{\@ff@tmp@x@even}% + \@ff@tmpN=0\relax + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax + \@greyscale=\@ff@tmpN\relax + \multiply\@greyscale by 60\relax + \divide\@greyscale by \c@maxthumbtabs + \advance\@greyscale by 25\relax + \edef\@ff@greyscale{0.\number\@greyscale}% % \end{macrocode} % Thumbtab % \begin{macrocode} - \newdynamicframe[none]{\thumbtabwidth}{#2}% - {\@ff@tmp@x}{\@ff@tmp@y}[thumbtab\number\@ff@tmpN]% - \expandafter\global\expandafter - \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname - {\@ff@tmp@x@even}% + \newdynamicframe[none]{\thumbtabwidth}{#2}% + {\@ff@tmp@x}{\@ff@tmp@y}[thumbtab\number\@ff@tmpN]% + \expandafter\global\expandafter + \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname + {\@ff@tmp@x@even}% % \end{macrocode} % set the contents of the dynamic frame % \begin{macrocode} - \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}{% - \expandafter - \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% - \noexpand\thumbtabformat{% - \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\ - \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname - }{#2}}% - }{% - \if@ttb@title - \expandafter - \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% - \noexpand\thumbtabformat{% - \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname - }{#2}}% - \fi - \if@ttb@num + \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}% + {% \expandafter - \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% - \noexpand\thumbtabformat{% - \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname - }{#2}}% + \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% + \noexpand\thumbtabformat + {% + \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\ + \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname + }% + {#2}% + }% + }% + {% + \if@ttb@title + \expandafter + \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% + \noexpand\thumbtabformat + {% + \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname + }% + {#2}% + }% + \fi + \if@ttb@num + \expandafter + \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% + \noexpand\thumbtabformat + {% + \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname + }% + {#2}% + }% \fi - }% - \expandafter - \xdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname - {[gray]{\@ff@greyscale}} + }% + \expandafter + \xdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname + {[gray]{\@ff@greyscale}} % \end{macrocode} % Thumbtab index % \begin{macrocode} - \newdynamicframe[none]{\thumbtabwidth}{#2}% - {\@ff@tmp@x}{\@ff@tmp@y}[thumbtabindex\number\@ff@tmpN]% - \expandafter\global\expandafter - \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname - {\@ff@tmp@x@even}% - \expandafter + \newdynamicframe[none]{\thumbtabwidth}{#2}% + {\@ff@tmp@x}{\@ff@tmp@y}[thumbtabindex\number\@ff@tmpN]% + \expandafter\global\expandafter + \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname + {\@ff@tmp@x@even}% + \expandafter % \end{macrocode} % set the contents of the dynamic frame % \begin{macrocode} - \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}{% - \expandafter - \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% - \noexpand\thumbtabindexformat{% - \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname}{% - \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\ - \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname - }{#2}}% - }{% - \if@ttb@title + \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}% + {% \expandafter - \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% - \noexpand\thumbtabindexformat{% - \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname}{% - \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname - }{#2}}% - \fi - \if@ttb@num + \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% + \noexpand\thumbtabindexformat + {% + \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname + }% + {% + \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\ + \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname + }% + {#2}% + }% + }% + {% + \if@ttb@title + \expandafter + \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% + \noexpand\thumbtabindexformat + {% + \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname + }% + {% + \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname + }% + {#2}% + }% + \fi + \if@ttb@num + \expandafter + \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% + \noexpand\thumbtabindexformat + {% + \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname + }% + {% + \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname + }% + {#2}% + }% + \fi + }% \expandafter - \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% - \noexpand\thumbtabindexformat{% - \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname}{% - \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname - }{#2}}% - \fi + \xdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname + {[gray]{\@ff@greyscale}} + \addtolength{\@ff@tmp@y}{-#2}% }% - \expandafter - \xdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname - {[gray]{\@ff@greyscale}} - \addtolength{\@ff@tmp@y}{-#2}% -}% }% % \end{macrocode} %\end{macro} @@ -7246,65 +12097,78 @@ Unknown section type '#3'}{}}{% % thumbtab index.) % \begin{macrocode} \newcommand*{\enablethumbtabs}{% -\ifnum\c@maxthumbtabs>0 -\@ff@tmpN=0\relax -\@dynamicframeid{thumbtab1}% -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% -\advance\@ff@tmpN by 1\relax + \ifnum\c@maxthumbtabs>0\relax + \@ff@tmpN=0\relax + \@dynamicframeid{thumbtab1}% + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax % \end{macrocode} % thumbtab % \begin{macrocode} -\edef\@ff@pages{\csname thumbtab@pages@\romannumeral\@ff@tmpN\endcsname}% -\@@setdynamicframe{\ff@id}{pages=\@ff@pages}% -\advance\ff@id by 2\relax -}% -\else\PackageWarning{flowfram}{No thumb tabs defined}\fi} + \edef\@ff@pages{\csname thumbtab@pages@\romannumeral\@ff@tmpN\endcsname}% + \@@setdynamicframe{\ff@id}{pages=\@ff@pages}% + \advance\ff@id by 2\relax + }% + \else + \PackageWarning{flowfram}{No thumb tabs defined}% + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\disablethumbtabs} % Disable all thumbtabs. % \begin{macrocode} \newcommand*{\disablethumbtabs}{% -\ifnum\c@maxthumbtabs>0 -\@ff@tmpN=0\relax -\@dynamicframeid{thumbtab1}% -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% -\advance\@ff@tmpN by 1\relax + \ifnum\c@maxthumbtabs>0\relax + \@ff@tmpN=0\relax + \@dynamicframeid{thumbtab1}% + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax % \end{macrocode} -%thumbtab +% Thumbtab: % \begin{macrocode} -\expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname -{none}% -\advance\ff@id by 1\relax + \expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname + {none}% + \advance\ff@id by 1\relax % \end{macrocode} -%thumbtab index +% Thumbtab index: % \begin{macrocode} -\expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname -{none}% -\advance\ff@id by 1\relax -}\fi} + \expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname + {none}% + \advance\ff@id by 1\relax + }% + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\thumbtabindex} % Show thumbtab index on current page. % The "\@ff@doafter" bit circumvents the problem of duplicate page % numbers, as the table of contents -% is quite frequently on page i while the first chapter starts on page 1. +% is quite frequently on page~i while the first chapter starts on page~1. % \begin{macrocode} \newcommand*{\thumbtabindex}{% -\ifnum\c@maxthumbtabs>0\relax -\@ff@tmpN=0\relax -\@dynamicframeid{thumbtabindex1}% -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% -\advance\@ff@tmpN by 1\relax -\expandafter -\xdef\csname @df@pages@\romannumeral\ff@id\endcsname{\c@page}% -\edef\@ff@doafter{% -\noexpand\afterpage{% -\noexpand\setdynamicframe{\number\ff@id}{pages=none}}} -\@ff@doafter -\advance\ff@id by 2\relax -}\fi} + \ifnum\c@maxthumbtabs>0\relax + \@ff@tmpN=0\relax + \@dynamicframeid{thumbtabindex1}% + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax + \expandafter + \xdef\csname @df@pages@\romannumeral\ff@id\endcsname{\c@page}% + \edef\@ff@doafter{% + \noexpand\afterpage + {% + \noexpand\setdynamicframe{\number\ff@id}{pages=none}% + }% + }% + \@ff@doafter + \advance\ff@id by 2\relax + }% + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\setthumbtab} @@ -7320,26 +12184,43 @@ Unknown section type '#3'}{}}{% % frame settings. % \begin{macrocode} \newcommand{\setthumbtab}[2]{% -\ifthenelse{\equal{#1}{all}}{% -\@ff@tmpN=0\relax -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% -\advance\@ff@tmpN by 1\relax -\@setthumbtab{\@ff@tmpN}{#2}}}{% -\@for\@ttb@id:=#1\do{\@setthumbtab{\@ttb@id}{#2}}}} + \ifthenelse{\equal{#1}{all}}% + {% + \@ff@tmpN=0\relax + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax + \@setthumbtab{\@ff@tmpN}{#2}% + }% + }% + {% + \@for\@ttb@id:=#1\do{\@setthumbtab{\@ttb@id}{#2}}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@setthumbtab} % Set individual thumbtab and its index tab. % \begin{macrocode} \newcommand{\@setthumbtab}[2]{% -% check if this thumbtab exists -\ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}{% -\PackageWarning{flowfram}{Can't find thumbtab number '#1', -ttb file may not be up-to-date}}{% -\@dynamicframeid{thumbtab\number#1}% -\@@setdynamicframe{\ff@id}{#2}% -\@dynamicframeid{thumbtabindex\number#1}% -\@@setdynamicframe{\ff@id}{#2}}} +% \end{macrocode} +% Check if this thumbtab exists +% \begin{macrocode} + \ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}% + {% + \PackageWarning{flowfram}% + {% + Can't find thumbtab number '#1', ttb file may not be + up-to-date% + }% + }% + {% + \@dynamicframeid{thumbtab\number#1}% + \@@setdynamicframe{\ff@id}{#2}% + \@dynamicframeid{thumbtabindex\number#1}% + \@@setdynamicframe{\ff@id}{#2}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\setthumbtabindex} @@ -7347,34 +12228,51 @@ ttb file may not be up-to-date}}{% % take a comma-separated number list. % \begin{macrocode} \newcommand{\setthumbtabindex}[2]{% -\ifthenelse{\equal{#1}{all}}{% -\@ff@tmpN=0\relax -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% -\advance\@ff@tmpN by 1\relax -\@setthumbtabindex{\@ff@tmpN}{#2}}}{% -\@for\@ttb@id:=#1\do{\@setthumbtabindex{\@ttb@id}{#2}}}} + \ifthenelse{\equal{#1}{all}}% + {% + \@ff@tmpN=0\relax + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax + \@setthumbtabindex{\@ff@tmpN}{#2}% + }% + }% + {% + \@for\@ttb@id:=#1\do{\@setthumbtabindex{\@ttb@id}{#2}}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@setthumbtabindex} % Change setting for individual thumbtab index entry. % \begin{macrocode} \newcommand{\@setthumbtabindex}[2]{% -% check if this thumbtab exists -\ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}{% -\PackageWarning{flowfram}{Can't find thumbtab number `\number#1', -ttb file may not be up-to-date}}{% -\@dynamicframeid{thumbtabindex\number#1}% -\@@setdynamicframe{\ff@id}{#2}}} +% \end{macrocode} +% Check if this thumbtab exists +% \begin{macrocode} + \ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}% + {% + \PackageWarning{flowfram}% + {% + Can't find thumbtab number `\number#1', + ttb file may not be up-to-date% + }% + }% + {% + \@dynamicframeid{thumbtabindex\number#1}% + \@@setdynamicframe{\ff@id}{#2}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\tocandhumbtabindex} % Do both the table of contents and the thumbtab index % \begin{macrocode} \newcommand*{\tocandthumbtabindex}{% -\aligntoctrue -\tableofcontents -\thumbtabindex -\aligntocfalse + \aligntoctrue + \tableofcontents + \thumbtabindex + \aligntocfalse } % \end{macrocode} %\end{macro} @@ -7399,36 +12297,44 @@ ttb file may not be up-to-date}}{% \newif\if@storetoc \@storetocfalse \renewcommand*{\@starttoc}[1]{% -\if@storetoc - \@ttb@storetoc{#1}% -\else - \@ttb@old@starttoc{#1}% -\fi} + \if@storetoc + \@ttb@storetoc{#1}% + \else + \@ttb@old@starttoc{#1}% + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\@ttb@storetoc} % store the contents of the file with the given extension % \begin{macrocode} \newcommand*{\@ttb@storetoc}[1]{% -\begingroup -\makeatletter -\@storefileconts{\jobname.#1}% -\if@filesw - \expandafter\newwrite\csname tf@#1\endcsname - \immediate\openout\csname tf@#1\endcsname\jobname.#1\relax -\fi -\@nobreakfalse -\endgroup} + \begingroup + \makeatletter + \@storefileconts{\jobname.#1}% + \if@filesw + \expandafter\newwrite\csname tf@#1\endcsname + \immediate\openout\csname tf@#1\endcsname\jobname.#1\relax + \fi + \@nobreakfalse + \endgroup +} % \end{macrocode} %\end{macro} %\begin{macro}{\@storefileconts} -% store the contents of named file, if it exists. +% Store the contents of named file, if it exists. %\changes{1.10}{2007/08/21}{uses \cs{PackageInfo} instead of % \cs{typeout}} % \begin{macrocode} -\newcommand*{\@storefileconts}[1]{\IfFileExists{#1}{% -\@@storefileconts\@filef@und}{% -\PackageInfo{flowfram}{No file #1.}}} +\newcommand*{\@storefileconts}[1]{% + \IfFileExists{#1}% + {% + \@@storefileconts\@filef@und + }% + {% + \PackageInfo{flowfram}{No file #1.}% + }% +} % \end{macrocode} %\end{macro} % store the number of units corresponding to the @@ -7452,18 +12358,25 @@ ttb file may not be up-to-date}}{% % list. % \begin{macrocode} \newcommand{\@@storefileconts}[1]{% -\@ifundefined{\@ttb@minitoctype}{\@ttb@minitoclevel=6\relax}{% -\expandafter\@ttb@minitoclevel\expandafter - =\csname @ttb@\@ttb@minitoctype @level\endcsname}% -\newread\@ttb@toc -\openin\@ttb@toc=#1\relax -\c@maxtocunits=0\relax -\c@maxminitoc=0\relax -\whiledo{\not\boolean{eof}\@ttb@toc}{% -\read\@ttb@toc to\tocline -\@addtotoclist{\tocline}{\c@maxtocunits}% -}% -\closein\@ttb@toc} + \@ifundefined{\@ttb@minitoctype}% + {% + \@ttb@minitoclevel=6\relax + }% + {% + \expandafter\@ttb@minitoclevel\expandafter + =\csname @ttb@\@ttb@minitoctype @level\endcsname + }% + \newread\@ttb@toc + \openin\@ttb@toc=#1\relax + \c@maxtocunits=0\relax + \c@maxminitoc=0\relax + \whiledo{\not\boolean{eof}\@ttb@toc}% + {% + \read\@ttb@toc to\tocline + \@addtotoclist{\tocline}{\c@maxtocunits}% + }% + \closein\@ttb@toc +} % \end{macrocode} %\end{macro} %\begin{macro}{\@addtotoclist} @@ -7483,45 +12396,55 @@ ttb file may not be up-to-date}}{% \newcount\@ttb@minitoclevel \newcommand{\@addtotoclist}[2]{% -\expandafter\@checkcontentsline#1\end -\if@contsline -\expandafter\@gettype#1\end -\ifthenelse{\equal{\@ttb@contstype}{\@ttb@type}}{% -\global\advance#2 by 1\relax -}{% -}% -\fi -\@ifundefined{@toc@\romannumeral#2}{% -\flf@ta=\expandafter{#1}% -\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@ta}}{% -\flf@ta=\expandafter{#1}% -\flf@tb=\expandafter\expandafter\expandafter{\csname @toc@\romannumeral#2\endcsname}% -\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@tb\the\flf@ta}}% + \expandafter\@checkcontentsline#1\end + \if@contsline + \expandafter\@gettype#1\end + \ifthenelse{\equal{\@ttb@contstype}{\@ttb@type}}% + {% + \global\advance#2 by 1\relax + }% + {}% + \fi + \@ifundefined{@toc@\romannumeral#2}% + {% + \flf@ta=\expandafter{#1}% + \expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@ta}% + }% + {% + \flf@ta=\expandafter{#1}% + \flf@tb=\expandafter\expandafter\expandafter + {\csname @toc@\romannumeral#2\endcsname}% + \expandafter\xdef\csname @toc@\romannumeral#2\endcsname{% + \the\flf@tb\the\flf@ta}% + }% % \end{macrocode} % now do minitoc stuff. If the sectioning type is unknown, % assume it comes last % \begin{macrocode} -\if@minitoc - \if@contsline - \@ifundefined{\@ttb@contstype}{\@ttb@level=6}{% - \@ttb@level=\csname @ttb@\@ttb@contstype @level\endcsname}% - \relax - \ifnum\@ttb@level=\@ttb@minitoclevel - \global\advance\c@maxminitoc by 1\relax - \expandafter - \gdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{}% - \else - \ifnum\@ttb@level>\@ttb@minitoclevel - \flf@ta=\expandafter{#1}\relax - \flf@tb=\expandafter\expandafter\expandafter - {\csname @minitoc@\romannumeral\c@maxminitoc\endcsname}\relax + \if@minitoc + \if@contsline + \@ifundefined{\@ttb@contstype}% + {\@ttb@level=6}% + {% + \@ttb@level=\csname @ttb@\@ttb@contstype @level\endcsname + }% + \relax + \ifnum\@ttb@level=\@ttb@minitoclevel + \global\advance\c@maxminitoc by 1\relax \expandafter - \xdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{% - \the\flf@tb\the\flf@ta} + \gdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{}% + \else + \ifnum\@ttb@level>\@ttb@minitoclevel + \flf@ta=\expandafter{#1}\relax + \flf@tb=\expandafter\expandafter\expandafter + {\csname @minitoc@\romannumeral\c@maxminitoc\endcsname}\relax + \expandafter + \xdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{% + \the\flf@tb\the\flf@ta} + \fi \fi \fi \fi -\fi } % \end{macrocode} %\end{macro} @@ -7540,11 +12463,12 @@ ttb file may not be up-to-date}}{% % Check to see if line starts with "\contentsline" % \begin{macrocode} \long\def\@checkcontentsline#1#2\end{% -\ifx#1\contentsline - \@contslinetrue -\else - \@contslinefalse -\fi} + \ifx#1\contentsline + \@contslinetrue + \else + \@contslinefalse + \fi +} % \end{macrocode} %\end{macro} %\begin{macro}{\@gettype} @@ -7553,7 +12477,8 @@ ttb file may not be up-to-date}}{% % type. % \begin{macrocode} \def\@gettype\contentsline#1#2\end{% -\def\@ttb@contstype{#1}} + \def\@ttb@contstype{#1}% +} % \end{macrocode} %\end{macro} %\begin{macro}{\tableofcontents} @@ -7569,18 +12494,24 @@ ttb file may not be up-to-date}}{% % \begin{macrocode} \newif\ifaligntoc \aligntocfalse - +% \end{macrocode} +% Save original definition of "\tableofcontents" +% \begin{macrocode} \let\@ttb@old@tableofcontents\tableofcontents +% \end{macrocode} +% Redefine "\tableofcontents" +% \begin{macrocode} \renewcommand{\tableofcontents}{% -\@storetoctrue -\@ttb@old@tableofcontents -\ifaligntoc - \@printalignedtoc -\else - \@printtoc -\fi -\@storetocfalse -\global\c@minitoc=0\relax} + \@storetoctrue + \@ttb@old@tableofcontents + \ifaligntoc + \@printalignedtoc + \else + \@printtoc + \fi + \@storetocfalse + \global\c@minitoc=0\relax +} % \end{macrocode} %\end{macro} %\begin{macro}{\beforeminitocskip} @@ -7602,25 +12533,35 @@ ttb file may not be up-to-date}}{% % minitocs have been enabled. % \begin{macrocode} \newcommand*{\dominitoc}[1]{% -\if@minitoc \@dominitoc{#1}\fi} + \if@minitoc + \@dominitoc{#1}% + \fi +} \newcommand*{\@dominitoc}[1]{\@@dominitoc{#1}} % \end{macrocode} %\end{macro} %\begin{macro}{\minitocstyle} % Style in which to display the minitoc. % \begin{macrocode} -\newcommand{\minitocstyle}[1]{\normalfont\normalsize\normalcolor -#1} +\newcommand{\minitocstyle}[1]{% + \normalfont\normalsize\normalcolor + #1% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@@dominitoc} % Now do the actual minitoc for unit "#1". % \begin{macrocode} \newcommand*{\@@dominitoc}[1]{% -{\minitocstyle{% -\vskip\beforeminitocskip -\csname @minitoc@\romannumeral#1\endcsname}} -\vskip\afterminitocskip} + {% + \minitocstyle + {% + \vskip\beforeminitocskip + \csname @minitoc@\romannumeral#1\endcsname + }% + }% + \vskip\afterminitocskip +} % \end{macrocode} %\end{macro} % @@ -7633,24 +12574,29 @@ ttb file may not be up-to-date}}{% % for a slightly more cryptic name. % \begin{macrocode} \newcommand*{\appenddfminitoc}{% -\renewcommand{\beforeminitocskip}{\baselineskip}% -\@ifstar\@sappendminitocdf\@appendminitocdf} + \renewcommand{\beforeminitocskip}{\baselineskip}% + \@ifstar\@sappendminitocdf\@appendminitocdf +} % \end{macrocode} %\end{macro} %\begin{macro}{\@sappendminitocdf} % Starred version % \begin{macrocode} \newcommand*{\@sappendminitocdf}[1]{% -\renewcommand{\@dominitoc}[1]{% -\@sappenddynamic{#1}{\@@dominitoc{##1}}}} + \renewcommand{\@dominitoc}[1]{% + \@sappenddynamic{#1}{\@@dominitoc{##1}}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@appendminitocdf} % Unstarred version % \begin{macrocode} \newcommand*{\@appendminitocdf}[1]{% -\renewcommand{\@dominitoc}[1]{% -\@appenddynamic{#1}{\@@dominitoc{##1}}}} + \renewcommand{\@dominitoc}[1]{% + \@appenddynamic{#1}{\@@dominitoc{##1}}% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@printtoc} @@ -7661,11 +12607,14 @@ ttb file may not be up-to-date}}{% % "\@colN=0".) % \begin{macrocode} \newcommand*{\@printtoc}{% -\@colN=0\relax -\csname @toc@\romannumeral\@colN\endcsname -\whiledo{\@colN<\c@maxtocunits}{% -\advance\@colN by 1\relax -\csname @toc@\romannumeral\@colN\endcsname}} + \@colN=0\relax + \csname @toc@\romannumeral\@colN\endcsname + \whiledo{\@colN<\c@maxtocunits}% + {% + \advance\@colN by 1\relax + \csname @toc@\romannumeral\@colN\endcsname + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@printalignedtoc} @@ -7676,27 +12625,34 @@ ttb file may not be up-to-date}}{% % in order to make them correctly aligned. % \begin{macrocode} \newcommand{\@printalignedtoc}{% -\@ff@tmpN=0\relax -\@ifundefined{@toc@\romannumeral\@ff@tmpN}{% -}{% -\csname @toc@\romannumeral\@ff@tmpN\endcsname -\par\noindent\hrulefill -}% -\whiledo{\@ff@tmpN<\c@maxtocunits}{% -\advance\@ff@tmpN by 1\relax -\ifnum\@ff@tmpN>\c@maxthumbtabs -\csname @toc@\romannumeral\@ff@tmpN\endcsname -\else -\@dynamicframeid{thumbtabindex\number\@ff@tmpN}% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @df@dim@\romannumeral\ff@id\endcsname -\vbox to \@ff@tmp@y{% -\noindent\parbox{\linewidth}{% -\csname @toc@\romannumeral\@ff@tmpN\endcsname}% -\vfill -\par\noindent\hrulefill -}% -\fi}} + \@ff@tmpN=0\relax + \@ifundefined{@toc@\romannumeral\@ff@tmpN}% + {}% + {% + \csname @toc@\romannumeral\@ff@tmpN\endcsname + \par\noindent\hrulefill + }% + \whiledo{\@ff@tmpN<\c@maxtocunits}% + {% + \advance\@ff@tmpN by 1\relax + \ifnum\@ff@tmpN>\c@maxthumbtabs + \csname @toc@\romannumeral\@ff@tmpN\endcsname + \else + \@dynamicframeid{thumbtabindex\number\@ff@tmpN}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @df@dim@\romannumeral\ff@id\endcsname + \vbox to \@ff@tmp@y + {% + \noindent\parbox{\linewidth}% + {% + \csname @toc@\romannumeral\@ff@tmpN\endcsname + }% + \vfill + \par\noindent\hrulefill + }% + \fi + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\enableminitoc} @@ -7707,14 +12663,26 @@ ttb file may not be up-to-date}}{% \@minitocfalse \newcommand*{\enableminitoc}[1][\@ttb@type]{% -\@minitoctrue -\setcounter{minitoc}{0}% -\@ifundefined{#1}{% -\PackageError{flowfram}{Sectioning type `#1' not defined}{}}{% -\renewcommand{\@ttb@minitoctype}{#1}% -\ifthenelse{\equal{#1}{chapter}}{\@makeminitocchapter}{% -\ifthenelse{\equal{#1}{part}}{\@makeminitocpart}{% -\@makeminitocsection{#1}}}}% + \@minitoctrue + \setcounter{minitoc}{0}% + \@ifundefined{#1}% + {% + \PackageError{flowfram}{Sectioning type `#1' not defined}{}% + }% + {% + \renewcommand{\@ttb@minitoctype}{#1}% + \ifthenelse{\equal{#1}{chapter}}% + {% + \@makeminitocchapter + }% + {% + \ifthenelse{\equal{#1}{part}}% + {\@makeminitocpart}% + {% + \@makeminitocsection{#1}% + }% + }% + }% } % \end{macrocode} %\end{macro} @@ -7728,14 +12696,15 @@ ttb file may not be up-to-date}}{% % "\@chapter" so that the minitoc appears after the % chapter heading. % \begin{macrocode} -\newcommand{\@makeminitocchapter}{ -\let\@mtoc@old@chapter\@chapter -\def\@chapter[##1]##2{% -\@mtoc@old@chapter[##1]{##2}% -\stepcounter{minitoc}% -\dominitoc{\c@minitoc}% -\@afterheading -}} +\newcommand{\@makeminitocchapter}{% + \let\@mtoc@old@chapter\@chapter + \def\@chapter[##1]##2{% + \@mtoc@old@chapter[##1]{##2}% + \stepcounter{minitoc}% + \dominitoc{\c@minitoc}% + \@afterheading + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@makeminitocpart} @@ -7743,34 +12712,44 @@ ttb file may not be up-to-date}}{% % "\@endpart" if it exists, otherwise redefine % "\@part". % \begin{macrocode} -\newcommand{\@makeminitocpart}{ -\@ifundefined{@endpart}{% -\let\@mtoc@old@part\@part -\def\@part[##1]##2{% -\@mtoc@old@part[##1]{##2}% -\stepcounter{minitoc}% -\dominitoc{\c@minitoc}% -\@afterheading -}}{% -\let\@mtoc@old@endpart\@endpart -\def\@endpart{% -\stepcounter{minitoc}% -\dominitoc{\c@minitoc}% -\@mtoc@old@endpart -}}} +\newcommand{\@makeminitocpart}{% + \@ifundefined{@endpart}% + {% + \let\@mtoc@old@part\@part + \def\@part[##1]##2{% + \@mtoc@old@part[##1]{##2}% + \stepcounter{minitoc}% + \dominitoc{\c@minitoc}% + \@afterheading + }% + }% + {% + \let\@mtoc@old@endpart\@endpart + \def\@endpart{% + \stepcounter{minitoc}% + \dominitoc{\c@minitoc}% + \@mtoc@old@endpart + }% + }% +} % \end{macrocode} %\end{macro} %\begin{macro}{\@makeminitocsection} % Now for the remaining sectional units. % \begin{macrocode} \newcommand{\@makeminitocsection}[1]{% -\let\@mtoc@old@sect=\@sect -\def\@sect##1##2##3##4##5##6[##7]##8{% -\@mtoc@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}% -\ifthenelse{\equal{##1}{#1}}{% -\stepcounter{minitoc}% -\dominitoc{\c@minitoc}\@afterheading}{}% -}} + \let\@mtoc@old@sect=\@sect + \def\@sect##1##2##3##4##5##6[##7]##8{% + \@mtoc@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}% + \ifthenelse{\equal{##1}{#1}}% + {% + \stepcounter{minitoc}% + \dominitoc{\c@minitoc}% + \@afterheading + }% + {}% + }% +} % \end{macrocode} %\end{macro} %\iffalse @@ -7778,5 +12757,4547 @@ ttb file may not be up-to-date}}{% %</flowfram.sty> % \end{macrocode} %\fi +%\iffalse +% \begin{macrocode} +%<*sample-article.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass[a4paper]{article} + +\usepackage[margin=1in,top=1in,bottom=1in]{geometry} +\usepackage{url} +\usepackage{color} +\usepackage{flowfram} + +\newcommand{\sty}[1]{\textsf{#1}} +\newcommand{\env}[1]{\textsf{#1}} +\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}} +\newcommand{\meta}[1]{\textnormal{\textless\textit{#1}\textgreater}} + +% set up the document frames + +% frames for page 1 +\twocolumnStop[1]{2in} +\setstaticframe{1}{label=title} + +% frames for subsequent pages +\twocolumn[>1] + +\begin{document} +\begin{staticcontents*}{title} +\title{Creating Flow Frames for Posters or Magazines} +\author{Nicola L. C. Talbot\\[1cm]\url{http://www.dickimaw-books.com/}} +\date{} +\maketitle +\end{staticcontents*} + +This document is a sample document, see \linebreak +\texttt{ffuserguide.pdf} for +an up-to-date guide on how to use the \sty{flowfram} package. + +\section{Introduction} + +The \sty{flowfram} package is designed to enable you to create +frames in a document such that the +contents of the \env{document} environment flow from one +frame to the next in the order that they were defined. +This is useful for creating posters\marginpar{A marginal note} +or magazines or any other form of document that does not +conform to the standard one or two column layout. + +\subsection{Setting up Frames} + +The \sty{flowfram} package provides three types of frame: +{flow frames}, {static +frames} and {dynamic frames}. + +\subsubsection{Flow Frames} + +The flow frame is the principle type of frame. +The text of the \env{document} environment will flow from +one frame to the next in order of definition. Each +flow frame has an associated width, height, +position on the page, and optionally a border\footnote{A +footnote!}. + +\subsubsection{Static Frames} + +A static frame is a rectangular area in which text neither +flows into, nor flows out of. The contents must be set +explicitly, and once set, the contents of the static frame will +remain the same on each page until it is explicitly +changed. Thus, a static frame can be used, for example, to make +a company logo appear in the same place on every page. + +\subsubsection{Dynamic Frames} + +A dynamic frame is similar to a static frame, but its contents +are re-typeset on each page. (A static frame stores its +contents in a savebox, whereas a dynamic frame stores its +contents in a macro). + +\section{Frame Attributes} +\label{sec:modattr} + +Once you have defined the {flow frames}, {static frames} and +{dynamic frames}, their attributes can be changed. +The three types of frame mostly have the +same set of attributes, but some are specific to a certain type. +The available attributes are as follows +(\textsuperscript{\textbf{F}} indicates the key is +only available for {flow frames}, +\textsuperscript{\textbf{S}} indicates the key is only available +for {static frames} +and \textsuperscript{\textbf{D}} indicates the key +is only available for {dynamic frames}): + +\begin{description} +\item[width=\meta{length}] The width of the frame. + +\item[height=\meta{length}] The height of the frame. + +\item[x=\meta{length}] The x-coordinate of the frame. + +\item[y=\meta{length}] The y-coordinate of the frame. + +\item[border=\meta{style}] The style of the border around the +frame, this can take the values: \texttt{none} (no border), +\texttt{plain} (plain border) or the name of a \LaTeX\ +frame making command without the preceding backslash. +The value \texttt{fbox} is equivalent to \texttt{plain}. + +\item[offset=\meta{offset}] The border offset, if it is a +user-defined border. This is the distance from the outer +edge of the left hand border to the left edge of the +bounding box of the text inside the border. The \sty{flowfram} +package is able to compute the border for +known frame making commands. +If you define your own frame making command, you may need to +specify the offset explicitly, or the frames +may end up shifted to the right or left. + +\item[bordercolor=\meta{colour}] The colour of the border +if you are using a standard frame making command. +The colour can either be specified as, e.g.\ \texttt{green}, +or including the colour model, e.g. \verb/[rgb]{0,1,0}/. + +\item[textcolor=\meta{colour}] The text colour for that +frame. Again, the colour can either be specified as, +e.g.\ \texttt{green}, or including the colour model, +e.g. \verb/[rgb]{0,1,0}/. + +\item[pages=\meta{page list}] The {list of +pages} for which the frame +should appear. This can either have the values: \texttt{all}, +\texttt{even}, \texttt{odd} or \texttt{none} (the latter +removes the frame from that point on---useful if you +have multiple pages with the same number), or it can be a +comma-separated list of single pages, or +{page ranges}. + +\item[margin=\meta{side}\textsuperscript{F}] The side of +the flow frame that its corresponding margin should go on. This +can take the values \texttt{left} or \texttt{right}. + +\item[clear=\meta{boolean}\textsuperscript{S}] If this value +is set, the static frame will be cleared at the start of the +next page. + +\item[style=\meta{cmd}\textsuperscript{D}] This should be +the name of a command \emph{without} the preceding backslash, +to be applied to the contents of the specified dynamic frame. +The command may either be a declaration, for example \verb/style=large/ +which will set the contents of all the dynamic frames in a +large font, or it can be a command that takes a single argument, +for example \verb/style=textbf/ +which will make the text for all the dynamic frames come out in +bold. To unset a style, do \verb/style=none/. + +\end{description} + +\section{Miscellaneous} + +\subsection{Page Layout} + +The \sty{flowfram} package has the package option \texttt{draft} +which will draw the {bounding boxes} for +each frame defined. At the bottom right of each +bounding box (except for the bounding box denoting the +typeblock), a marker will be shown to indictate the type +of frame, its IDN and its IDL. + +You can see the layout for the current page (irrespective of +whether or not the \texttt{draft} option has been set) using +the command:\newline +\cmdname{flowframeshowlayout} + +The headers and footers will appear as usual (but will not +be shown in draft mode), according to the format given by +\cmdname{pagestyle}. + +\subsection{Frame Stacking Order} + +The material on each page is placed in the following order: +\begin{enumerate} +\item Each static frame defined for that page in ascending +order of IDN. + +\item Each flow frame defined for that page in ascending +order of IDN. + +\item Each dynamic frame defined for that page in ascending +order of IDN. + +\item {Bounding boxes} if the \texttt{draft} +package option has been used. +\end{enumerate} + +This ordering can be used to determine if you want something +to overlay or underlay everything else on the page. + +\subsection{Prematurely Ending a Flow Frame} + +You can force text to move immediately to the next defined +flow frame using one of the standard \LaTeX\ page breaking commands +which work in an analogous way to the way they +work in standard two column mode. + +The command \cmdname{framebreak} is provided for situations +where a paragraph spans two flow frames +of different widths, as \TeX's output routine does not +adjust to the new value of \cmdname{hsize} until the last +paragraph of the previous frame has ended. As a +result, the end of the paragraph at the beginning of the new +flow frame retains the width of the previous flow frame. + +If you want to start a new page, rather than simply move to the +next frame, use the command\newline +\cmdname{finishthispage}. + +\subsection{Floats} + +Since floats (such as figures and tables) can only go in +{flow frames}, this package provides +the additional environments: +\env{staticfigure} and +\env{statictable} which can be used in static frames +and dynamic frames. Unlike their \env{figure} and +\env{table} counterparts, they are fixed in place, and +so do not take an optional placement specifier. The +\cmdname{caption} and \cmdname{label} commands can +be used within \env{staticfigure} and \env{statictable} as +usual. + +The standard \env{figure} and \env{table} commands will +behave as usual in the flow frames, but their starred versions, +\env{figure*} and \env{table*} behave no differently +from \env{figure} and \env{table}. + +\subsection{Global Values} + +The following macros can be changed using \cmdname{renewcommand}: + +\begin{itemize} +\item \cmdname{setffdraftcolor} + +This sets the colour of the bounding box +when it is displayed in draft mode. + +\item +\cmdname{setffdrafttypeblockcolor} + +This sets the colour of +the bounding box of the typeblock when it is displayed +in draft mode. + +\item \cmdname{fflabelfont} + +This sets the font size for the bounding box markers in +draft mode. + +\end{itemize} + +The following are lengths, which can be changed using +\cmdname{setlength}: +\marginpar{Another marginal note} + +\begin{itemize} +\item \cmdname{fflabelsep} + +This is the distance from the right hand side of the +bounding box at which to place the bounding box marker. + +\item \cmdname{flowframesep} + +This is the gap between the text of the frame and +its border, for the standard border types. + +\item \cmdname{flowframerule} + +This is the width of the frame's border, if using +a border given by a frame making command that uses \cmdname{fboxsep} +to set its border width. +\end{itemize} + + +\section*{Contact Details} + +Dr Nicola Talbot\\ +Dickimaw Books\\ +\url{http://www.dickimaw-books.com/} + +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample-article.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sample-blanks.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass{article} + +\usepackage{lipsum} +\usepackage[draft]{flowfram} + +\onecolumn[odd] + +\newdynamicframe{1in}{1in}{-1in}{-1in} +\setdynamiccontents{1}{\arabic{absolutepage}-\arabic{page}} + +\begin{document} + +\lipsum[1-4] + +\lipsum[1-4] + +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample-blanks.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sample-brochure.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass[a4paper]{report} + +\usepackage[landscape,margin=1in]{geometry} +\usepackage{color} +\usepackage{flowfram} +\usepackage[colorlinks]{hyperref} + +% Use sans-serif font as default font +\renewcommand{\familydefault}{cmss} + +% adjust \textheight so that it is an integer multiple of +% \baselineskip +\adjustheight{\textheight} + +% set up pagelayout. One column for title page +% two columns for the rest. +\onecolumninarea[1,2]{0.6\textwidth}{\textheight}{0.4\textwidth}{0pt} +\twocolumninarea[>2]{0.6\textwidth}{\textheight}{0.4\textwidth}{0pt} + +% Set up dynamic frame on the left. This is where +% the headings will go. + +\newdynamicframe{0.4\textwidth}{\textheight}{0pt}{0pt}[left] + +% put the chapter headings in this frame +\dfchaphead*{left} +% Modify the default style +\renewcommand{\DFchapterstyle}[1]{% +\raggedright\Huge\slshape\MakeUppercase{#1}\par} + +% Make static frames for background (only for page 1) +\vtwotone[1]{0.6\paperwidth}{[cmyk]{0.65,0.13,0,0}}{backleft}% +{0.4\paperwidth}{[cmyk]{0.94,0.54,0,0}}{backright} + +% Make a border along the top of each page +\vtwotonetop{1cm}{0.6\paperwidth}{[cmyk]{0.65,0.13,0,0}}{topleft}% +{0.4\paperwidth}{[cmyk]{0.94,0.54,0,0}}{topright} + +% make a static frame for the logo +\newstaticframe{0.2\textwidth}{0.25\textheight}{0pt}{0pt}[logo] + +% empty page style, because I am going to make my own +\pagestyle{empty} + +% Each new chapter sets \thispagestyle{\chapterfirstpagestyle}, change this empty as well +\renewcommand{\chapterfirstpagestyle}{empty} + +% Now make a frame in which to put my own customized footer +\newdynamicframe[>1]{\textwidth}{\headheight}{0pt}{-\footskip}[footer] + +% set the contents of the frame: +\setdynamiccontents*{footer}{% +School of Computing Sciences, University of East Anglia\hfill +http://www.cmp.uea.ac.uk/\hfill +page \thepage\ of \pageref*{lastpage}} + + +\newcommand{\env}[1]{\texttt{#1}} +\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}} +\newcommand{\meta}[1]{\textnormal{\textless\textit{#1}\textgreater}} + +\begin{document} + +% not a very interesting logo +\setstaticcontents*{logo}{\sffamily{\Huge\slshape FLF} Flowfram} + +{\noindent +\slshape\Huge\MakeUppercase{A Sample Brochure}\par +\vskip0.5in +\noindent\large\MakeUppercase{Nicola Talbot}\\ +} + + +\chapter{Introduction} + +The \textsl{flowfram} package is designed to enable you to create +frames in a document such that the +contents of the \env{document} environment flow from one +frame to the next in the order that they were defined. +This is useful for creating posters +or magazines or any other form of document that does not +conform to the standard one or two column layout. + +This is a modified version of the manual for the \textsl{flowfram} package. +It is intended to illustrated what can be done. See the full +manual (ffuserguide.pdf) for +a comprehensive description, as some parts of this document +may now be out of date. +If the columns are very narrow, it may be better to +use \cmdname{raggedright}, otherwise \TeX\ may have a +problem working out the line breaks. + +This is column~\thedisplayedframe. + +The main type of frame is the flow frame. This is described on +column~\ref{flow:flowframe} on page~\pageref{flow:flowframe}. +The order used to draw the contents of each frame on the page +is described in column~\ref{flow:stacking} on +page~\pageref{flow:stacking}. Floats are describe in +column~\ref{flow:floats} on page~\pageref{flow:floats}. + +\chapter{Setting up Frames} + +This is column~\thedisplayedframe. + +The \textsl{flowfram} package provides three types of frame: +{flow frames}, {static +frames} and {dynamic frames}. + +\section*{Flow Frames} + +\labelflow{flow:flowframe} +The flow frame is the principle type of frame. +The text of the \env{document} environment will flow from +one frame to the next in order of definition. Each +flow frame has an associated width, height, +position on the page, and optionally a border. + +It is recommended that all the flow frames in a document +have the same width, otherwise problems may occur +when a paragraph spans to flow frames of unequal +widths. This is because \TeX's output routine does not +register the change in \cmdname{hsize} until it reaches +a paragraph break. If it is absolutely necessary for +flow frames to have unequal widths, judicious use of +\cmdname{framebreak} is required. + +\section*{Static Frames} + +A static frame is a rectangular area in which text neither +flows into, nor flows out of. The contents must be set +explicitly, and once set, the contents of the static frame will +remain the same on each page until it is explicitly +changed. Thus, a static frame can be used, for example, to make +a company logo appear in the same place on every page. + +\section*{Dynamic Frames} + +A dynamic frame is similar to a static frame, but its contents +are re-typeset on each page. (A static frame stores its +contents in a savebox, whereas a dynamic frame stores its +contents in a macro). + +This is column~\thedisplayedframe. + +\chapter{Frame Attributes} +\label{sec:modattr} + +Once you have defined the {flow frames}, {static frames} and +{dynamic frames}, their attributes can be changed. +The three types of frame mostly have the +same set of attributes, but some are specific to a certain type. +The available attributes are as follows +(\textsuperscript{\textbf{F}} indicates the key is +only available for {flow frames}, +\textsuperscript{\textbf{S}} indicates the key is only available +for {static frames} +and \textsuperscript{\textbf{D}} indicates the key +is only available for {dynamic frames}): + +\begin{description} +\item[width=\meta{length}]\mbox{}\par The width of the frame. + +\item[height=\meta{length}]\mbox{}\par The height of the frame. + +\item[x=\meta{length}]\mbox{}\par The x-coordinate of the frame. + +\item[y=\meta{length}]\mbox{}\par The y-coordinate of the frame. + +\item[border=\meta{style}]\mbox{}\par The style of the border around the +frame, this can take the values: \texttt{none} (no border), +\texttt{plain} (plain border) or the name of a \LaTeX\ +frame making command without the preceding backslash. +The value \texttt{fbox} is equivalent to \texttt{plain}. + +\item[offset=\meta{offset}]\mbox{}\par The border offset, if it is a +user-defined border. This is the distance from the outer +edge of the left hand border to the left edge of the +bounding box of the text inside the border. The \textsl{flowfram} +package is able to compute the border for +known frame making commands. +If you define your own frame making command, you may need to +specify the offset explicitly, or the frames +may end up shifted to the right or left. + +\item[bordercolor=\meta{colour}]\mbox{}\par The colour of the border +if you are using a standard frame making command. +The colour can either be specified as, e.g.\ \texttt{green}, +or including the colour model, for example +\verb/[rgb]{0,1,0}/. + +\item[textcolor=\meta{colour}]\mbox{}\par The text colour for that +frame. Again, the colour can either be specified as, +e.g.\ \texttt{green}, or including the colour model, +for example \verb/[rgb]{0,1,0}/. + +\item[pages=\meta{page list}]\mbox{}\par The {list of +pages} for which the frame +should appear. This can either have the values: \texttt{all}, +\texttt{even}, \texttt{odd} or \texttt{none} (the latter +removes the frame from that point on---useful if you +have multiple pages with the same number), or it can be a +comma-separated list of single pages, or +{page ranges}. + +\item[margin=\meta{side}\textsuperscript{F}]\mbox{}\par The side of +the flow frame that its corresponding margin should go on. This +can take the values \texttt{left} or \texttt{right}. + +\item[clear=\meta{boolean}\textsuperscript{S}] If this value +is set, the static frame will be cleared at the start of the +next page. + +\item[style=\meta{cmd}\textsuperscript{D}]\mbox{}\par This should be +the name of a command \emph{without} the preceding backslash, +to be applied to the contents of the specified dynamic frame. +The command may either be a declaration, for example \verb/style=large/ +which will set the contents of all the dynamic frames in a +large font, or it can be a command that takes a single argument, +for example \verb/style=textbf/ +which will make the text for all the dynamic frames come out in +bold. To unset a style, do \verb/style=none/. + +\end{description} + +\chapter{Miscellaneous} + +\section*{Page Layout} + +The \textsl{flowfram} package has the package option \texttt{draft} +which will draw the {bounding boxes} for +each frame defined. At the bottom right of each +bounding box (except for the bounding box denoting the +typeblock), a marker will be shown to indictate the type +of frame, its IDN and its IDL. + +You can see the layout for the current page (irrespective of +whether or not the \texttt{draft} option has been set) using +the command:\newline +\cmdname{flowframeshowlayout} + +The headers and footers will appear as usual (but will not +be shown in draft mode), according to the format given by +\cmdname{pagestyle}. + +\section*{Frame Stacking Order} + +\labelflow{flow:stacking} +The material on each page is placed in the following order: +\begin{enumerate} +\item Each static frame defined for that page in ascending +order of IDN. + +\item Each flow frame defined for that page in ascending +order of IDN. + +\item Each dynamic frame defined for that page in ascending +order of IDN. + +\item {Bounding boxes} if the \texttt{draft} +package option has been used. +\end{enumerate} + +This ordering can be used to determine if you want something +to overlay or underlay everything else on the page. + +\section*{Prematurely Ending a Flow Frame} + +You can force text to move immediately to the next defined +flow frame using one of the standard \LaTeX\ page breaking commands +which work in an analogous way to the way they +work in standard two column mode. + +The command \cmdname{framebreak} is provided for situations +where a paragraph spans two flow frames +of different widths, as \TeX's output routine does not +adjust to the new value of \cmdname{hsize} until the last +paragraph of the previous frame has ended. As a +result, the end of the paragraph at the beginning of the new +flow frame retains the width of the previous flow frame. + +If you want to start a new page, rather than simply move to the +next frame, use the command\newline +\cmdname{finishthispage}. + +\section*{Floats} + +\labelflow{flow:floats} +Since floats (such as figures and tables) can only go in +{flow frames}, this package provides +the additional environments: +\env{staticfigure} and +\env{statictable} which can be used in static frames +and dynamic frames. Unlike their \env{figure} and +\env{table} counterparts, they are fixed in place, and +so do not take an optional placement specifier. The +\cmdname{caption} and \cmdname{label} commands can +be used within \env{staticfigure} and \env{statictable} as +usual. + +The standard \env{figure} and \env{table} commands will +behave as usual in the flow frames, but their starred versions, +\env{figure*} and \env{table*} behave no differently +from \env{figure} and \env{table}. + +\section*{Global Values} + +The following macros can be changed using\linebreak \cmdname{renewcommand}: + +\begin{itemize} +\item \cmdname{setffdraftcolor} + +This sets the colour of the bounding box +when it is displayed in draft mode. + +\item +\cmdname{setffdrafttypeblockcolor} + +This sets the colour of +the bounding box of the typeblock when it is displayed +in draft mode. + +\item \cmdname{fflabelfont} + +This sets the font size for the bounding box markers in +draft mode. + +\end{itemize} + +The following are lengths, which can be changed using +\cmdname{setlength}: + +\begin{itemize} +\item \cmdname{fflabelsep} + +This is the distance from the right hand side of the +bounding box at which to place the bounding box marker. + +\item \cmdname{flowframesep} + +This is the gap between the text of the frame and +its border, for the standard border types. + +\item \cmdname{flowframerule} + +This is the width of the frame's border, if using +a border given by a frame making command that uses \cmdname{fboxsep} +to set its border width. + +\item \cmdname{columnsep} + +This is the horizontal distance between flow frames when using one of the +\cmdname{Ncolumn} type of commands + +\item \cmdname{vcolumnsep} + +This is the vertical distance between the flow frames and the static or +dynamic frame when using one of the \cmdname{Ncolumntop} type of commands. +\end{itemize} + +\label{lastpage} +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample-brochure.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sample-news.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass{article} + +\usepackage{color} +\usepackage{flowfram} +\usepackage[a5paper,top=10mm,bottom=10mm,margin=10mm]{geometry} +\usepackage{graphicx} + +% define lengths to help compute positions +\newlength\leftX +\newlength\leftY +\newlength\leftH +\newlength\leftW + +\newlength\rightX +\newlength\rightY +\newlength\rightH +\newlength\rightW + +% Create a static frame to put title in +\setlength{\leftH}{2cm} +\setlength{\leftY}{\textheight} +\addtolength{\leftY}{-\leftH} + +\newstaticframe[1]{\textwidth}{\leftH}{0pt}{\leftY}[title] + +% First flow frame. + +\setlength{\leftH}{7cm} +\adjustheight{\leftH} +\addtolength{\leftY}{-\leftH} +\setlength{\leftW}{0.5\textwidth} + +\newflowframe[1]{\leftW}{\leftH}{0pt}{\leftY} + +\setlength{\rightH}{\leftH} +\setlength{\rightY}{\leftY} + +% Second flow frame + +\setlength{\leftH}{3.5cm} +\adjustheight{\leftH} +\addtolength{\leftY}{-\leftH} + +\newflowframe[1]{\textwidth}{\leftH}{0pt}{\leftY} + +% Right hand flow frame + +\setlength{\rightX}{\leftW} +\addtolength{\rightX}{\columnsep} +\setlength{\rightW}{\textwidth} +\addtolength{\rightW}{-\rightX} + +\newflowframe[1]{\rightW}{\rightH}{\rightX}{\rightY} + +% insert vertical line between left and right flow frames + +\insertvrule{flow}{1}{flow}{3} + +% insert horizontal line between flow frames 2 and 3 +% don't want it to go under frame 1 so shift the starting +% position + +\addtolength{\rightX}{-0.5\columnsep} +\addtolength{\rightX}{-0.5\columnseprule} +\inserthrule[-\rightX]{flow}{3}{flow}{2} + +% egg picture + +\addtolength{\rightY}{\rightH} +\addtolength{\rightY}{-10mm} +\setlength{\rightW}{0.75in} +\setlength{\rightH}{0.8in} +\addtolength{\rightY}{-\rightH} +\setlength{\rightX}{\textwidth} +\addtolength{\rightX}{-\rightW} +\newstaticframe[1]{\rightW}{\rightH}{\rightX}{\rightY}[egg] + +% set contents +\setstaticcontents*{egg}{\includegraphics[scale=0.75]{egg}} + +% middle heading + +\setlength{\leftH}{2cm} +\addtolength{\leftY}{-\leftH} + +\newstaticframe[1]{\textwidth}{\leftH}{0pt}{\leftY}[midhead] + +% insert horizontal line +\inserthrule*{flow}{2}{static}{midhead} + +% bottom left flow frame + +\setlength{\leftH}{\leftY} +\adjustheight{\leftH} +\setlength{\leftW}{0.6\textwidth} + +\newflowframe[1]{\leftW}{\leftH}{0pt}{0pt} + +% bottom right flow frame + +\setlength{\rightX}{\leftW} +\addtolength{\rightX}{\columnsep} +\setlength{\rightW}{\textwidth} +\addtolength{\rightW}{-\rightX} + +\newflowframe[1]{\rightW}{\leftH}{\rightX}{0pt} + +% static frame for sheep picture + +\newstaticframe[1]{0.8in}{0.8in}{0pt}{0pt}[sheep] + +% set contents +\setstaticcontents*{sheep}{\includegraphics[scale=0.75]{sheep}} + +\onecolumn[>1] % for any text that falls off the last page + +\setcounter{secnumdepth}{0} +\pagestyle{empty} + +\begin{document} + +\begin{staticcontents*}{title} +\begin{center} +\bfseries\Huge +Fairy Tale Times +\end{center} +\hfill Issue 1. 20 November 2005. +\end{staticcontents*} + +\section{Killer Wolf on the Loose} + +The authorites are warning of a killer wolf on the +loose. He has so far devoured an old grandmother and +two pig brothers. He is described as being furry with +big eyes and big teeth. + +On Monday this week he broke into a house, and devoured +an old lady. He then disguised himself as the old lady +in order to deceive her granddaughter. Luckily for the little +girl a woodsman arrived in time to rescue her. Parents are +being cautioned not to let their children wander about on +their own, and to remind them not to talk to strangers.\par +\framebreak + +The next day the wolf struck again, this time targeting two +pig brothers who had most incautiously made their dwellings +on the cheap using inadequate materials. The wolf also made +an attempt on the third pig brother, but was unable to break +into his house. + +Police are appealing to the public for witnesses and remind +people to keep their doors securely fastened at all times. + +``Always ask to see identification,'' said one police advisor, +``and invest in improving the general security of your property.'' + +\framebreak +\section{Tragic Wall Accident} + +{\parshape=6 0pt 13em 0pt 13em 0pt 11em 0pt 11em 0pt 13em +0pt 17em +An egg person tragically fell from a six foot wall yesterday +afternoon and was smash\-ed to pieces. The king's cavalry rushed +to the scene, but regretted that they were unable to help him. +\par} + +Humpty Dumpty was believed to be sitting +on the wall when he fell. Police have ruled out foul play, but +are advising people not to play on high walls, particularly +those vulnerable members of the population suffering from +eggshell syndrome. + +\begin{staticcontents*}{midhead} +\section{Relief as Missing Sheep Finally Return Home} +\end{staticcontents*} + +\framebreak +There was much celebration yesterday morning when Little Bo +Peep's sheep finally returned home. They had been missing +for more than a week. + +{\parshape=8 0pt \linewidth 0pt \linewidth 0pt \linewidth +0pt \linewidth 40pt 180pt 36pt 184pt 29pt 191pt +0pt \linewidth +``I just didn't know where to find them,'' the shepherdess +stated, ``but I was told to leave them alone and they'd come +home.'' Unusual advice perhaps, but it seems to have worked +as they did indeed come home. Eye witnesses reported that their +tails were wagging behind them. +``I'm just so happy they've come home,'' Little Bo Peep said +in a press conference yesterday\framebreak}afternoon. +The sheep themselves made no comment, and police are still +trying to determine what happened to them. + +\noindent\hrulefill + +This is a sample document illustrating the +flowfram package. It uses \TeX's \verb|\parshape| command +to create irregularly shaped paragraphs. + +\hfill Nicola Talbot +\framebreak + +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample-news.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sample-news2.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass[12pt]{article} + +\usepackage{graphicx} +\usepackage{color} +\usepackage{flowfram} +\usepackage[a4paper,margin=20mm]{geometry} + +% define lengths to help compute positions +\newlength\leftX +\newlength\leftY +\newlength\leftH +\newlength\leftW + +\newlength\rightX +\newlength\rightY +\newlength\rightH +\newlength\rightW + +% Create a static frame to put title in +\setlength{\leftH}{3cm} +\setlength{\leftY}{\textheight} +\addtolength{\leftY}{-\leftH} + +\newstaticframe[1]{\textwidth}{\leftH}{0pt}{\leftY}[title] + +% Create left hand frame. This will have an L shape + +\setlength{\leftH}{13cm} +\adjustheight{\leftH} +\addtolength{\leftY}{-\leftH} + +\newstaticframe[1]{\textwidth}{\leftH}{0pt}{\leftY}[L] +\setstaticframe*{L}{shape={\parshape=24 +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt 0.5\linewidth +0pt \linewidth +0pt \linewidth +0pt \linewidth +0pt \linewidth +0pt \linewidth +0pt \linewidth +0pt \linewidth +}} + +% egg picture + +\addtolength{\rightY}{\leftY} +\addtolength{\rightY}{73mm} +\setlength{\rightW}{0.9in} +\setlength{\rightH}{1.5in} +\setlength{\rightX}{\textwidth} +\addtolength{\rightX}{-\rightW} +\newstaticframe[1]{\rightW}{\rightH}{\rightX}{\rightY}[egg] + +% set contents +\setstaticcontents*{egg}{\includegraphics[scale=0.9]{egg}} + +% Right hand static frame + +\setlength{\rightX}{0.5\textwidth} +\addtolength{\rightX}{\columnsep} +\setlength{\rightW}{\textwidth} +\addtolength{\rightW}{-\rightX} +\setlength{\rightY}{\leftY} +\addtolength{\rightY}{2.8cm} +\setlength{\rightH}{\leftH} +\addtolength{\rightH}{-2.8cm} + +\newstaticframe[1]{\rightW}{\rightH}{\rightX}{\rightY}[right] + +\setstaticframe*{right}{shape={\parshape=15 +0pt \linewidth +0pt \linewidth +0pt \linewidth +0pt 0.75\linewidth +0pt 0.65\linewidth +0pt 0.75\linewidth +0pt 0.8\linewidth +0pt 0.8\linewidth +0pt \linewidth +0pt \linewidth +0pt \linewidth +0pt \linewidth +0pt \linewidth +0pt \linewidth +0pt \linewidth +}} + +% insert vertical and horizontal rules, can't use +% \insertrule as left hand +% frame is actually the width of the typeblock +\addtolength{\rightX}{-0.5\columnsep} +\newstaticframe[1]{0pt}{\rightH}{\rightX}{\rightY}[Lrule] +\setstaticcontents*{Lrule}{\makebox[0pt][l]{% +\rule{\columnseprule}{\rightH}\rule{\rightW}{\columnseprule}}} + +% middle heading + +\setlength{\leftH}{2cm} +\addtolength{\leftY}{-\leftH} + +\newstaticframe[1]{\textwidth}{\leftH}{0pt}{\leftY}[midhead] + +% insert horizontal rule +\inserthrule*{static}{L}{static}{midhead} + +% flow frames +\twocolumninarea{\textwidth}{\leftY}{0pt}{0pt} + +% static frame for sheep picture + +\newstaticframe[1]{1.6in}{1.6in}{0pt}{0pt}[sheep] + +% set contents +\setstaticcontents*{sheep}{\includegraphics[scale=1.2]{sheep}} + +\setcounter{secnumdepth}{0} +\setlength{\sdfparindent}{\parindent} + +\begin{document} +\begin{staticcontents*}{title} +\begin{center} +\bfseries\Huge +Fairy Tale Times +\end{center} +\hfill Issue 2. 7 December 2005. +\end{staticcontents*} + +\begin{staticcontents*}{L} +\section{Killer Wolf on the Loose} + +The authorites are warning of a killer wolf on the +loose. He has so far devoured an old grandmother and +two pig brothers. He is described as being furry with +big eyes and big teeth. + +On Monday this week he broke into a house, and devoured +an old lady. He then disguised himself as the old lady +in order to deceive her granddaughter. Luckily for the little +girl a woodsman arrived in time to rescue her. Parents are +being cautioned not to let their children wander about on +their own, and to remind them not to talk to strangers. + +The next day the wolf struck again, this time targeting two +pig brothers who had most incautiously made their dwellings +on the cheap using inadequate materials. The wolf also made +an attempt on the third pig brother, but was unable to break +into his house. + +Police are appealing to the public for witnesses and remind +people to keep their doors securely fastened at all times. +``Always ask to see identification,'' said one police advisor, +``and invest in improving the general security of your property.'' +\end{staticcontents*} + +\begin{staticcontents*}{right} +\section{Tragic Wall Accident} + +An egg person tragically fell from a six foot wall yesterday +afternoon and was smash\-ed to pieces. The king's cavalry rushed +to the scene, but regretted that they were unable to help him. + +Humpty Dumpty was believed to be sitting on the wall when he fell. Police have ruled out foul play, but +are advising people not to play on high walls, particularly +those vulnerable members of the population suffering from +eggshell syndrome. + +\small\em +%Wall related incidents this year: page 3 +% +Exclusive interview with one of the King's men on page 6 +\end{staticcontents*} + +\begin{staticcontents*}{midhead} +\section{Relief as Missing Sheep Finally Return Home} +\end{staticcontents*} + +There was much celebration yesterday morning when Little Bo +Peep's sheep finally returned home. They had been missing +for more than a week. + +``I just didn't know where to find them,'' the shepherdess +stated, ``but I was told to leave them alone and they'd come +home.'' + +\parshape=8 +0pt \linewidth +0pt \linewidth +0.3\linewidth 0.7\linewidth +0.3\linewidth 0.7\linewidth +0.25\linewidth 0.75\linewidth +0.25\linewidth 0.75\linewidth +0pt \linewidth +0pt \linewidth +Unusual advice perhaps, but it seems to have worked +as they did indeed come home. Eye witnesses reported that their +tails were wagging behind them. +``I'm just so happy they've come home,'' Little Bo Peep said +in a press conference yesterday afternoon. +The sheep themselves made no comment, and police are% +\framebreak\parshape=0 +still trying to determine what happened to them. +The big bad wolf is reportedly helping them with their inquiries. + +\noindent\hrulefill + +This is a sample document illustrating the +flowfram package. It uses \TeX's \verb|\parshape| command +to create irregularly shaped paragraphs. This can be a complicated +and somewhat tiresome task, and is generally not recommended. +Using the shapepar package provides you with more intricate +shapes, but as its documentation says, it is not intended +for use in large documents. + +\hfill Nicola Talbot +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample-news2.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sample-pages.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass{book} + +\usepackage[demo]{graphicx} +\usepackage{lipsum} +\usepackage{color} +\usepackage[ + draft, + verbose, + pages=absolute + ]{flowfram} + +\onecolumn + +\setflowframe{1}{label=single} + +\twocolumnDtop[none]{2in} + +\setdynamicframe{1}{label=title} +\setflowframe{2}{label=shortleft} +\setflowframe{3}{label=shortright} + +\twocolumn[none] + +\setflowframe{4}{label=left} +\setflowframe{5}{label=right} + +\newdynamicframe[none]{\textwidth}{\textheight}{0pt}{0pt}[image] + +\setdynamicframe*{image}{valign=c} + +\title{Sample Document} +\author{A.N. Other} + +\begin{document}\raggedright +\maketitle + +\frontmatter +\tableofcontents +\chapter{Acknowledgements} + +\lipsum[1] + +\flowswitchoffnextodd*{single}% +\flowswitchonnextoddonly*{shortleft,shortright}% +\dynamicswitchonnextoddonly*{title}% +\dfchaphead*{title} + + +\mainmatter +\chapter{Sample} + +\flowswitchonnext*{left,right}% +% From this point onwards, automate the switch at the start of +% each chapter +\renewcommand{\ffprechapterhook}{% + \flowswitchoffnextoddonly*{left,right}% + \flowswitchonnextoddonly*{shortleft,shortright}% + \dynamicswitchonnextoddonly*{title}% +} + +\lipsum + +\lipsum + +\chapter{Another Sample Chapter} + +\lipsum[1-20] + +% Switch to single column just for the next page + +\flowswitchoffnextonly*{left,right} +\flowswitchonnextonly*{single} + +\clearpage + +\begin{figure}[p] +\centering + \includegraphics{image1} +\caption{A Sample Figure} +\label{fig:sample} +\end{figure} + +\clearpage + +\lipsum[21-30] + +\chapter{Here's Another Chapter} + +\lipsum[1-20] + +% Switch of columns for next page only and switch on dynamic frame +% called "image": + +\flowswitchoffnextonly*{left,right} +\dynamicswitchonnextonly*{image} + +\setdynamiccontents*{image}{% + \begin{staticfigure} + \centering + \includegraphics{image2} + \caption{Another Sample Figure} + \label{fig:sample2} + \end{staticfigure} +} + +\lipsum[21-40] + +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample-pages.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sample-poster.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass[a0]{a0poster} + +\usepackage{color} +\usepackage{mathptmx} +\usepackage{courier} +\usepackage[scaled=0.92]{helvet} +\usepackage{url} +\usepackage{flowfram} + +% set up frames + +\setlength{\columnsep}{2cm} + +% Base the page layout on 4 column with static header. +% The static frame has height = 0.2\textheight +\NcolumnStop{4}{0.2\textheight} +% give the static frame a label to make it easier to keep track of +\setstaticframe{\value{maxstatic}}{label={title},backcolor=[cmyk]{0.64,0,0.95,0.40},textcolor=white} + +% Insert a vertical line between flow frames 2 and 3: +\insertvrule{flow}{2}{flow}{3} + +% On the first page, replace last two columns with +% 2 columns and a static underneath +\setflowframe{3,4}{pages={>1}} + +\computeflowframearea{3,4} +\twocolumnSbottominarea[1]{0.5\ffareaheight}{\ffareawidth}{\ffareaheight}{\ffareax}{\ffareay} +\setstaticframe{\value{maxstatic}}{label={info},backcolor=[cmyk]{0.26,0,0.76,0},clear} + +% insert a horizontal rule between flow frame 5 and static +% frame 5 +\inserthrule*[0.5\columnsep]{flow}{5}{static}{info} + +\setallflowframes{backcolor=[cmyk]{0.15,0,0.69,0}} + +\newcommand{\sty}[1]{\textsf{#1}} +\newcommand{\env}[1]{\textsf{#1}} +\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}} +\newcommand{\meta}[1]{\textnormal{\textless\textit{#1}\textgreater}} + +%\raggedright +%\setlength{\parindent}{15pt} + +\begin{document} +\begin{staticcontents*}{title} +\begin{center} +\bfseries\veryHuge flowframe.sty : Creating Posters, Magazines or Brochures in \LaTeX +\vskip1cm +\huge Nicola L. C. Talbot +\vskip2ex +\normalsize \url{http://www.dickimaw-books.com/} +\end{center} +\end{staticcontents*} + +\pagestyle{empty} + +\begin{staticcontents*}{info} +\begin{staticfigure} + +\begin{verbatim} + % Make the distance between columns = 1.5cm + \setlength{\columnsep}{2cm} + + % Make a 4 column layout with a static frame on top. + % The static frame has height = 0.2\textheight + \NcolumnStop{4}{0.2\textheight} + + % give the static frame a label to make it easier to keep track of + \setstaticframe{\value{maxstatic}}{label={title},backcolor=[cmyk]{0.64,0,0.95,0.40},textcolor=white} + + % On the first page, replace the 3rd and 4th columns + % with two shorter columns with a static frame underneath + \setflowframe{3,4}{pages={>1}} + + % The area taken up by the 3rd and 4th columns is given by + \computeflowframearea{3,4} + + % Set up new frames in this area + \twocolumnSbottominarea[1]{0.5}{\ffareawidth}{\ffareaheight}{\ffareax}{\ffareay} + + % Assign a label to the last static frame to be created, and set background colour + \setstaticframe{\value{maxstatic}}{label={info},backcolor=[cmyk]{0.26,0,0.76,0}} + + % Set the background colour for all flow frames + \setallflowframes{backcolor=[cmyk]{0.15,0,0.69,0}} +\end{verbatim} + +\caption{The commands used to define the frames for this document} +\protect\label{fig:thisdoc} +\end{staticfigure} +\end{staticcontents*} + +This is a modified version of the manual for the \sty{flowfram} +package. It is intended to illustrated what can be done. See the +full manual (ffuserguide.pdf) for +a comprehensive description, as this may now be out of date. The commands used to define the frames for +this document are shown in Figure~\ref{fig:thisdoc}. +If the columns are very narrow, it may be better to +use \cmdname{raggedright}, otherwise \TeX\ may have a +problem working out the line breaks. + +\section{Introduction} + +The \sty{flowfram} package is designed to enable you to create +frames in a document such that the +contents of the \env{document} environment flow from one +frame to the next in the order that they were defined. +This is useful for creating posters +or magazines or any other form of document that does not +conform to the standard one or two column layout. + +\section{Setting up Frames} + +The \sty{flowfram} package provides three types of frame: +{flow frames}, {static +frames} and {dynamic frames}. + +\subsection{Flow Frames} + +The flow frame is the principle type of frame. +The text of the \env{document} environment will flow from +one frame to the next in order of definition. Each +flow frame has an associated width, height, +position on the page, and optionally a border. + +It is recommended that all the flow frames in a document +have the same width, otherwise problems may occur +when a paragraph spans to flow frames of unequal +widths. This is because \TeX's output routine does not +register the change in \cmdname{hsize} until it reaches +a paragraph break. If it is absolutely necessary for +flow frames to have unequal widths, judicious use of +\cmdname{framebreak} is required. + +\subsection{Static Frames} + +A static frame is a rectangular area in which text neither +flows into, nor flows out of. The contents must be set +explicitly, and once set, the contents of the static frame will +remain the same on each page until it is explicitly +changed. Thus, a static frame can be used, for example, to make +a company logo appear in the same place on every page. + +\subsection{Dynamic Frames} + +A dynamic frame is similar to a static frame, but its contents +are re-typeset on each page. (A static frame stores its +contents in a savebox, whereas a dynamic frame stores its +contents in a macro). + +\section{Frame Attributes} +\label{sec:modattr} + +Once you have defined the {flow frames}, {static frames} and +{dynamic frames}, their attributes can be changed. +The three types of frame mostly have the +same set of attributes, but some are specific to a certain type. +The available attributes are as follows +(\textsuperscript{\textbf{F}} indicates the key is +only available for {flow frames}, +\textsuperscript{\textbf{S}} indicates the key is only available +for {static frames} +and \textsuperscript{\textbf{D}} indicates the key +is only available for {dynamic frames}): + +\begin{description} +\item[width=\meta{length}] The width of the frame. + +\item[height=\meta{length}] The height of the frame. + +\item[x=\meta{length}] The x-coordinate of the frame. + +\item[y=\meta{length}] The y-coordinate of the frame. + +\item[border=\meta{style}] The style of the border around the +frame, this can take the values: \texttt{none} (no border), +\texttt{plain} (plain border) or the name of a \LaTeX\ +frame making command without the preceding backslash. +The value \texttt{fbox} is equivalent to \texttt{plain}. + +\item[offset=\meta{offset}] The border offset, if it is a +user-defined border. This is the distance from the outer +edge of the left hand border to the left edge of the +bounding box of the text inside the border. The \sty{flowfram} +package is able to compute the border for +known frame making commands. +If you define your own frame making command, you may need to +specify the offset explicitly, or the frames +may end up shifted to the right or left. + +\item[bordercolor=\meta{colour}] The colour of the border +if you are using a standard frame making command. +The colour can either be specified as, e.g.\ \texttt{green}, +or including the colour model, e.g. \verb/[rgb]{0,1,0}/. + +\item[textcolor=\meta{colour}] The text colour for that +frame. Again, the colour can either be specified as, +e.g.\ \texttt{green}, or including the colour model, +e.g. \verb/[rgb]{0,1,0}/. + +\item[pages=\meta{page list}] The {list of +pages} for which the frame +should appear. This can either have the values: \texttt{all}, +\texttt{even}, \texttt{odd} or \texttt{none} (the latter +removes the frame from that point on---useful if you +have multiple pages with the same number), or it can be a +comma-separated list of single pages, or +{page ranges}. + +\item[margin=\meta{side}\textsuperscript{F}] The side of +the flow frame that its corresponding margin should go on. This +can take the values \texttt{left} or \texttt{right}. + +\item[clear=\meta{boolean}\textsuperscript{S}] If this value +is set, the static frame will be cleared at the start of the +next page. + +\item[style=\meta{cmd}\textsuperscript{D}] This should be +the name of a command \emph{without} the preceding backslash, +to be applied to the contents of the specified dynamic frame. +The command may either be a declaration, for example \verb/style=large/ +which will set the contents of all the dynamic frames in a +large font, or it can be a command that takes a single argument, +for example \verb/style=textbf/ +which will make the text for all the dynamic frames come out in +bold. To unset a style, do \verb/style=none/. + +\end{description} + +\section{Miscellaneous} + +\subsection{Page Layout} + +The \sty{flowfram} package has the package option \texttt{draft} +which will draw the {bounding boxes} for +each frame defined. At the bottom right of each +bounding box (except for the bounding box denoting the +typeblock), a marker will be shown to indictate the type +of frame, its IDN and its IDL. + +You can see the layout for the current page (irrespective of +whether or not the \texttt{draft} option has been set) using +the command:\newline +\cmdname{flowframeshowlayout} + +The headers and footers will appear as usual (but will not +be shown in draft mode), according to the format given by +\cmdname{pagestyle}. + +\subsection{Frame Stacking Order} + +The material on each page is placed in the following order: +\begin{enumerate} +\item Each static frame defined for that page in ascending +order of IDN. + +\item Each flow frame defined for that page in ascending +order of IDN. + +\item Each dynamic frame defined for that page in ascending +order of IDN. + +\item {Bounding boxes} if the \texttt{draft} +package option has been used. +\end{enumerate} + +This ordering can be used to determine if you want something +to overlay or underlay everything else on the page. + +\subsection{Prematurely Ending a Flow Frame} + +You can force text to move immediately to the next defined +flow frame using one of the standard \LaTeX\ page breaking commands +which work in an analogous way to the way they +work in standard two column mode. + +The command \cmdname{framebreak} is provided for situations +where a paragraph spans two flow frames +of different widths, as \TeX's output routine does not +adjust to the new value of \cmdname{hsize} until the last +paragraph of the previous frame has ended. As a +result, the end of the paragraph at the beginning of the new +flow frame retains the width of the previous flow frame. + +If you want to start a new page, rather than simply move to the +next frame, use the command\newline +\cmdname{finishthispage}. + +\subsection{Floats} + +Since floats (such as figures and tables) can only go in +{flow frames}, this package provides +the additional environments: +\env{staticfigure} and +\env{statictable} which can be used in static frames +and dynamic frames. Unlike their \env{figure} and +\env{table} counterparts, they are fixed in place, and +so do not take an optional placement specifier. The +\cmdname{caption} and \cmdname{label} commands can +be used within \env{staticfigure} and \env{statictable} as +usual. + +The standard \env{figure} and \env{table} commands will +behave as usual in the flow frames, but their starred versions, +\env{figure*} and \env{table*} behave no differently +from \env{figure} and \env{table}. + +\subsection{Global Values} + +The following macros can be changed using \cmdname{renewcommand}: + +\begin{itemize} +\item \cmdname{setffdraftcolor} + +This sets the colour of the bounding box +when it is displayed in draft mode. + +\item +\cmdname{setffdrafttypeblockcolor} + +This sets the colour of +the bounding box of the typeblock when it is displayed +in draft mode. + +\item \cmdname{fflabelfont} + +This sets the font size for the bounding box markers in +draft mode. + +\end{itemize} + +The following are lengths, which can be changed using +\cmdname{setlength}: + +\begin{itemize} +\item \cmdname{fflabelsep} + +This is the distance from the right hand side of the +bounding box at which to place the bounding box marker. + +\item \cmdname{flowframesep} + +This is the gap between the text of the frame and +its border, for the standard border types. + +\item \cmdname{flowframerule} + +This is the width of the frame's border, if using +a border given by a frame making command that uses \cmdname{fboxsep} +to set its border width. + +\item \cmdname{columnsep} + +This is the horizontal distance between flow frames when using one of the +\cmdname{Ncolumn} type of commands + +\item \cmdname{vcolumnsep} + +This is the vertical distance between the flow frames and the static or +dynamic frame when using one of the \cmdname{Ncolumntop} type of commands. +\end{itemize} + +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample-poster.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sample-rot.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass[a4paper]{article} + +\usepackage[draft]{flowfram} +\usepackage{supertabular} + +\newflowframe{0.3\textwidth}{0.25\textheight}{0.5\textwidth}{0.5\textheight} + +\newflowframe{0.3\textwidth}{0.2\textheight}{0pt}{0.1\textheight} + +\newflowframe{0.3\textwidth}{0.2\textheight}{0.5\textwidth}{0.1\textheight} + +\setflowframe{1}{angle=45} +\setflowframe{3}{angle=90} + +\begin{document} + +This is a sample document illustrating the use of the +flowfram package. The first flow frame has been rotated +by an angle of 45 degrees. There is an asterisk in the +margin\marginpar{*}. There is also a +footnote\footnote{down here.}. + +\framebreak +\begin{supertabular}{rl} +1 & A\\ +2 & B\\ +3 & C\\ +4 & D\\ +5 & E\\ +6 & F\\ +7 & G\\ +8 & H\\ +9 & I\\ +10 & J\\ +11 & K\\ +12 & L\\ +13 & M\\ +14 & N\\ +15 & O\\ +16 & P\\ +17 & Q\\ +18 & R\\ +19 & S\\ +20 & T\\ +\end{supertabular} + +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample-rot.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sample.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass[a4paper,twoside]{book} + +\usepackage{times} +\usepackage{courier} +\usepackage{helvet} +\usepackage[margin=1in,top=1in,bottom=1in]{geometry} +\usepackage[colorlinks, + linkcolor=black, + urlcolor=black, + plainpages=false, + pdfpagelabels=true]{hyperref} +\usepackage{fancybox} +\usepackage{color} +\usepackage{flowfram} + +\newcommand{\sty}[1]{\textsf{#1}} +\newcommand{\env}[1]{\textsf{#1}} +\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}} +\newcommand{\meta}[1]{\textnormal{\textless\textit{#1}\textgreater}} + +% set up some background frames to liven up the title page +\newlength{\leftwidth} +\newlength{\rightwidth} + +\computeleftedgeodd{\leftwidth} +\setlength{\leftwidth}{-\leftwidth} +\addtolength{\leftwidth}{0.4\textwidth} +\setlength{\rightwidth}{\paperwidth} +\addtolength{\rightwidth}{-\leftwidth} +% only defined on page 1 unfortunately the document +% has more than one page 1, so will need to change the settings after the title page +\vtwotone[1]{\leftwidth}{magenta}{backleft}{\rightwidth}{[cmyk]{0,0.48,0,0}}{backright} + +% This is for the back cover. +\vtwotone[none]{\rightwidth}{[cmyk]{0,0.48,0,0}}{lastbackright}{\leftwidth}{magenta}{lastbackleft} + +\vtwotonetop[odd]{1cm}{\leftwidth}{magenta}{oddtopleft}{\rightwidth}{[cmyk]{0,0.48,0,0}}{oddtopright} +\vtwotonetop[even]{1cm}{\rightwidth}{[cmyk]{0,0.48,0,0}}{eventopleft}{\leftwidth}{magenta}{eventopright} + +% Set the margin width +\setlength{\marginparwidth}{2cm} + +% now set up main document frames. Each page has a dynamic +% frame for the chapter heading, and a flow frame for the +% text. +\newflowframe{0.6\textwidth}{\textheight}{0pt}{0pt}[main] +\newdynamicframe{0.38\textwidth}{\textheight}{0.62\textwidth}{0pt}[chaphead] + +% swap them round on even pages +\setflowframe*{main}{evenx=0.4\textwidth} +\setdynamicframe*{chaphead}{evenx=0pt} + +% set the margins to appear on the spine side of the page +\setflowframe*{main}{margin=inner} + +% put chapter headings in dynamic frame with IDL chaphead +\dfchaphead*{chaphead} + +% append chapter minitocs to same dynamic frame. +\appenddfminitoc*{chaphead} + +% change the style of the chapter headings + +% numbered chapters: +\renewcommand{\DFchapterstyle}[1]{% +\raggedright\sffamily\bfseries\Huge\color{blue}#1\par +} + +% unnumbered chapters: +\renewcommand{\DFschapterstyle}[1]{\raggedright\sffamily\bfseries\Huge\color{blue} #1\par +} + +% Make thumb tabs (specify each tab to be 2in high) + +\makethumbtabs{2in} +\enableminitoc + +% Thumbtabs are grey by default which looks a bit boring, +% so change the colours +\setthumbtab{1}{backcolor=[rgb]{0.15,0.15,1}} +\setthumbtab{2}{backcolor=[rgb]{0.2,0.2,1}} +\setthumbtab{3}{backcolor=[rgb]{0.25,0.25,1}} +\setthumbtab{4}{backcolor=[rgb]{0.3,0.3,1}} + +% change the text style on the thumbtabs +%\newcommand{\thumbtabstyle}[1]{\textbf{\sffamily\large #1}} +\newcommand{\thumbtabstyle}[1]{\textsc{\sffamily #1}} +\setthumbtab{all}{style=thumbtabstyle,textcolor=white} + +% set default page style + +\pagestyle{plain} + +% Put headers and footers in dynamic frames +\makedfheaderfooter + +\newlength{\xoffset} +\computerightedgeodd{\xoffset} +\addtolength{\xoffset}{-2cm} +\newlength{\yoffset} +\computebottomedge{\yoffset} + +\newcommand{\footstyle}[1]{\bfseries\LARGE #1} + +% pages is initially set to none, as I don't want the footer to +% appear on the title page. + +\setdynamicframe*{footer}{oddx=\xoffset,y=\yoffset,width=2cm,height=2cm, +backcolor=blue,textcolor=white,style=footstyle,pages=none} + +% now work out the x offset for the even pages + +\computeleftedgeeven{\xoffset} +\setdynamicframe*{footer}{evenx=\xoffset} + +\begin{document} +\ffswapoddeven*{main}% swap odd and even position of frame for the title page +\dfswapoddeven*{chaphead} +\title{Creating Flow Frames for Posters or Magazines} +\author{Nicola L. C. Talbot\\[1cm]\url{http://www.dickimaw-books.com/}} +\date{} +\pagenumbering{alph} +\maketitle + +% make table of contents appear on a right hand page +\cleardoublepage +%suppress the background +\setstaticframe*{backleft}{pages=none} +\setstaticframe*{backright}{pages=none} + +\frontmatter +%\tableofcontents +\tocandthumbtabindex +% make the footers appear from this point on +\setdynamicframe*{footer}{pages=all} + +\clearpage +\dfswapoddeven*{chaphead} +\ffswapoddeven*{main}% swap back again + +\mainmatter +\chapter{Introduction} +\enablethumbtabs +\pagenumbering{arabic} + +The \sty{flowfram} package is designed to enable you to create +frames in a document such that the +contents of the \env{document} environment flow from one +frame to the next in the order that they were defined. +This is useful for creating posters\marginpar{A marginal note} +or magazines or any other form of document that does not +conform to the standard one or two column layout. + +This document has \themaxflow\ flow +\ifthenelse{\value{maxflow}=1}{frame}{frames}, \themaxstatic\ static +\ifthenelse{\value{maxstatic}=1}{frame}{frames} and +\themaxdynamic\ dynamic \ifthenelse{\value{maxdynamic}=1}{frame}{frames}. + +\chapter{Setting up Frames} + +The \sty{flowfram} package provides three types of frame: +{flow frames}, {static +frames} and {dynamic frames}. + +\section{Flow Frames} + +The flow frame is the principle type of frame. +The text of the \env{document} environment will flow from +one frame to the next in order of definition. Each +flow frame has an associated width, height, +position on the page, and optionally a border\footnote{A +footnote!}. + +\section{Static Frames} + +A static frame is a rectangular area in which text neither +flows into, nor flows out of. The contents must be set +explicitly, and once set, the contents of the static frame will +remain the same on each page until it is explicitly +changed. Thus, a static frame can be used, for example, to make +a company logo appear in the same place on every page. + +\section{Dynamic Frames} + +A dynamic frame is similar to a static frame, but its contents +are re-typeset on each page. (A static frame stores its +contents in a savebox, whereas a dynamic frame stores its +contents in a macro). + +\chapter{Frame Attributes} +\label{sec:modattr} + +Once you have defined the {flow frames}, {static frames} and +{dynamic frames}, their attributes can be changed. +The three types of frame mostly have the +same set of attributes, but some are specific to a certain type. +The available attributes are as follows +(\textsuperscript{\textbf{F}} indicates the key is +only available for {flow frames}, +\textsuperscript{\textbf{S}} indicates the key is only available +for {static frames} +and \textsuperscript{\textbf{D}} indicates the key +is only available for {dynamic frames}): + +\begin{description} +\item[width=\meta{length}] The width of the frame. + +\item[height=\meta{length}] The height of the frame. + +\item[x=\meta{length}] The x-coordinate of the frame. + +\item[y=\meta{length}] The y-coordinate of the frame. + +\item[border=\meta{style}] The style of the border around the +frame, this can take the values: \texttt{none} (no border), +\texttt{plain} (plain border) or the name of a \LaTeX\ +frame making command without the preceding backslash. +The value \texttt{fbox} is equivalent to \texttt{plain}. + +\item[offset=\meta{offset}] The border offset, if it is a +user-defined border. This is the distance from the outer +edge of the left hand border to the left edge of the +bounding box of the text inside the border. The \sty{flowfram} +package is able to compute the border for +known frame making commands. +If you define your own frame making command, you may need to +specify the offset explicitly, or the frames +may end up shifted to the right or left. + +\item[bordercolor=\meta{colour}] The colour of the border +if you are using a standard frame making command. +The colour can either be specified as, e.g.\ \texttt{green}, +or including the colour model, e.g. \verb/[rgb]{0,1,0}/. + +\item[textcolor=\meta{colour}] The text colour for that +frame. Again, the colour can either be specified as, +e.g.\ \texttt{green}, or including the colour model, +e.g. \verb/[rgb]{0,1,0}/. + +\item[pages=\meta{page list}] The {list of +pages} for which the frame +should appear. This can either have the values: \texttt{all}, +\texttt{even}, \texttt{odd} or \texttt{none} (the latter +removes the frame from that point on---useful if you +have multiple pages with the same number), or it can be a +comma-separated list of single pages, or +{page ranges}. + +\item[margin=\meta{side}\textsuperscript{F}] The side of +the flow frame that its corresponding margin should go on. This +can take the values \texttt{left} or \texttt{right}. + +\item[clear=\meta{boolean}\textsuperscript{S}] If this value +is set, the static frame will be cleared at the start of the +next page. + +\item[style=\meta{cmd}\textsuperscript{D}] This should be +the name of a command \emph{without} the preceding backslash, +to be applied to the contents of the specified dynamic frame. +The command may either be a declaration, for example \verb/style=large/ +which will set the contents of all the dynamic frames in a +large font, or it can be a command that takes a single argument, +for example \verb/style=textbf/ +which will make the text for all the dynamic frames come out in +bold. To unset a style, do \verb/style=none/. + +\end{description} + +\chapter{Miscellaneous} + +\section{Page Layout} + +The \sty{flowfram} package has the package option \texttt{draft} +which will draw the {bounding boxes} for +each frame defined. At the bottom right of each +bounding box (except for the bounding box denoting the +typeblock), a marker will be shown to indictate the type +of frame, its IDN and its IDL. + +You can see the layout for the current page (irrespective of +whether or not the \texttt{draft} option has been set) using +the command:\newline +\cmdname{flowframeshowlayout} + +The headers and footers will appear as usual (but will not +be shown in draft mode), according to the format given by +\cmdname{pagestyle}. + +\section{Frame Stacking Order} + +The material on each page is placed in the following order: +\begin{enumerate} +\item Each static frame defined for that page in ascending +order of IDN. + +\item Each flow frame defined for that page in ascending +order of IDN. + +\item Each dynamic frame defined for that page in ascending +order of IDN. + +\item {Bounding boxes} if the \texttt{draft} +package option has been used. +\end{enumerate} + +This ordering can be used to determine if you want something +to overlay or underlay everything else on the page. + +\section{Prematurely Ending a Flow Frame} + +You can force text to move immediately to the next defined +flow frame using one of the standard \LaTeX\ page breaking commands +which work in an analogous way to the way they +work in standard two column mode. + +The command \cmdname{framebreak} is provided for situations +where a paragraph spans two flow frames +of different widths, as \TeX's output routine does not +adjust to the new value of \cmdname{hsize} until the last +paragraph of the previous frame has ended. As a +result, the end of the paragraph at the beginning of the new +flow frame retains the width of the previous flow frame. + +If you want to start a new page, rather than simply move to the +next frame, use the command\newline +\cmdname{finishthispage}. + +\section{Floats} + +Since floats (such as figures and tables) can only go in +{flow frames}, this package provides +the additional environments: +\env{staticfigure} and +\env{statictable} which can be used in static frames +and dynamic frames. Unlike their \env{figure} and +\env{table} counterparts, they are fixed in place, and +so do not take an optional placement specifier. The +\cmdname{caption} and \cmdname{label} commands can +be used within \env{staticfigure} and \env{statictable} as +usual. + +The standard \env{figure} and \env{table} commands will +behave as usual in the flow frames, but their starred versions, +\env{figure*} and \env{table*} behave no differently +from \env{figure} and \env{table}. + +\section{Global Values} + +The following macros can be changed using \cmdname{renewcommand}: + +\begin{itemize} +\item \cmdname{setffdraftcolor} + +This sets the colour of the bounding box +when it is displayed in draft mode. + +\item +\cmdname{setffdrafttypeblockcolor} + +This sets the colour of +the bounding box of the typeblock when it is displayed +in draft mode. + +\item \cmdname{fflabelfont} + +This sets the font size for the bounding box markers in +draft mode. + +\end{itemize} + +The following are lengths, which can be changed using +\cmdname{setlength}: +\marginpar{Another marginal note} + +\begin{itemize} +\item \cmdname{fflabelsep} + +This is the distance from the right hand side of the +bounding box at which to place the bounding box marker. + +\item \cmdname{flowframesep} + +This is the gap between the text of the frame and +its border, for the standard border types. + +\item \cmdname{flowframerule} + +This is the width of the frame's border, if using +a border given by a frame making command that uses \cmdname{fboxsep} +to set its border width. +\end{itemize} + + +\chapter*{Contact Details} +\disablethumbtabs + +Dr Nicola Talbot\\ +School of Computing Sciences\\ +University of East Anglia\\ +Norwich. Norfolk. NR4 7TJ. UK\\ +\url{http://theoval.cmp.uea.ac.uk/~nlct/} + +\finishthispage\mbox{} +\setdynamiccontents*{chaphead}{} +\setdynamicframe*{footer}{pages=none} +\setstaticframe*{lastbackleft,lastbackright}{pages=even} +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sample1.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass[a4paper]{article} + +\usepackage[a4paper,landscape,margin=1in]{geometry} +\usepackage{fancybox} +\usepackage{color} +\usepackage{flowfram} + +\showframebboxtrue +\showtypeblocktrue + +% set up frames + +% Base the page layout on 4 column with static header +\NcolumnStop{4}{1in} + +% On the first page, replace last two columns with +% 2 columns and a static underneath +\setflowframe{3,4}{pages={>1}} +\twocolumnSbottominarea[1]{1in}{0.5\textwidth}{\flowframeheight{3}}{0.5\textwidth}{0pt} + +\begin{staticcontents}{2} +The page layout for this document was obtained with +the following commands: +\begin{verbatim} +\NcolumnStop{4}{1in} +\setflowframe{3,4}{pages={>1}} +\twocolumnSbottominarea[1]{1in}{0.5\textwidth}{flowframeheight{3}} +{0.5\textwidth}{0pt} +\end{verbatim} +\end{staticcontents} + +\newcommand{\sty}[1]{\textsf{#1}} +\newcommand{\env}[1]{\textsf{#1}} +\newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}} +\newcommand{\meta}[1]{\textnormal{\textless\textit{#1}\textgreater}} + +\raggedright +%\setlength{\parindent}{15pt} + +\begin{document} + +\begin{staticcontents}{1} +\title{Creating Flow Frames for Posters or Magazines} +\author{Nicola L. C. Talbot} +\date{} +\maketitle +\end{staticcontents} + +This is a modified version of the manual for the \sty{flowfram} package. +It is intended to illustrated what can be done. See the full manual for +a comprehensive description. + +If the columns are very narrow, it may be better to +use \cmdname{raggedright}, otherwise \TeX\ may have a +problem working out the line breaks. + +\section{Introduction} + +The \sty{flowfram} package is designed to enable you to create +frames in a document such that the +contents of the \env{document} environment flow from one +frame to the next in the order that they were defined. +This is useful for creating posters +or magazines or any other form of document that does not +conform to the standard one or two column layout. + +\section{Setting up Frames} + +The \sty{flowfram} package provides three types of frame: +{flow frames}, {static +frames} and {dynamic frames}. + +\subsection{Flow Frames} + +The flow frame is the principle type of frame. +The text of the \env{document} environment will flow from +one frame to the next in order of definition. Each +flow frame has an associated width, height, +position on the page, and optionally a border. + +It is recommended that all the flow frames in a document +have the same width, otherwise problems may occur +when a paragraph spans to flow frames of unequal +widths. This is because \TeX's output routine does not +register the change in \cmdname{hsize} until it reaches +a paragraph break. If it is absolutely necessary for +flow frames to have unequal widths, judicious use of +\cmdname{framebreak} is required. + +\subsection{Static Frames} + +A static frame is a rectangular area in which text neither +flows into, nor flows out of. The contents must be set +explicitly, and once set, the contents of the static frame will +remain the same on each page until it is explicitly +changed. Thus, a static frame can be used, for example, to make +a company logo appear in the same place on every page. + +\subsection{Dynamic Frames} + +A dynamic frame is similar to a static frame, but its contents +are re-typeset on each page. (A static frame stores its +contents in a savebox, whereas a dynamic frame stores its +contents in a macro). + + +\section{Frame Attributes} +\label{sec:modattr} + +Once you have defined the {flow frames}, {static frames} and +{dynamic frames}, their attributes can be changed. +The three types of frame mostly have the +same set of attributes, but some are specific to a certain type. +The available attributes are as follows +(\textsuperscript{\textbf{F}} indicates the key is +only available for {flow frames}, +\textsuperscript{\textbf{S}} indicates the key is only available +for {static frames} +and \textsuperscript{\textbf{D}} indicates the key +is only available for {dynamic frames}): + +\begin{description} +\item[width=\meta{length}] The width of the frame. + +\item[height=\meta{length}] The height of the frame. + +\item[x=\meta{length}] The x-coordinate of the frame. + +\item[y=\meta{length}] The y-coordinate of the frame. + +\item[border=\meta{style}] The style of the border around the +frame, this can take the values: \texttt{none} (no border), +\texttt{plain} (plain border) or the name of a \LaTeX\ +frame making command without the preceding backslash. +The value \texttt{fbox} is equivalent to \texttt{plain}. + +\item[offset=\meta{offset}] The border offset, if it is a +user-defined border. This is the distance from the outer +edge of the left hand border to the left edge of the +bounding box of the text inside the border. The \sty{flowfram} +package is able to compute the border for +known frame making commands. +If you define your own frame making command, you may need to +specify the offset explicitly, or the frames +may end up shifted to the right or left. + +\item[bordercolor=\meta{colour}] The colour of the border +if you are using a standard frame making command. +The colour can either be specified as, e.g.\ \texttt{green}, +or including the colour model, e.g. \verb/[rgb]{0,1,0}/. + +\item[textcolor=\meta{colour}] The text colour for that +frame. Again, the colour can either be specified as, +e.g.\ \texttt{green}, or including the colour model, +e.g. \verb/[rgb]{0,1,0}/. + +\item[pages=\meta{page list}] The {list of +pages} for which the frame +should appear. This can either have the values: \texttt{all}, +\texttt{even}, \texttt{odd} or \texttt{none} (the latter +removes the frame from that point on---useful if you +have multiple pages with the same number), or it can be a +comma-separated list of single pages, or +{page ranges}. + +\item[margin=\meta{side}\textsuperscript{F}] The side of +the flow frame that its corresponding margin should go on. This +can take the values \texttt{left} or \texttt{right}. + +\item[clear=\meta{boolean}\textsuperscript{S}] If this value +is set, the static frame will be cleared at the start of the +next page. + +\item[style=\meta{cmd}\textsuperscript{D}] This should be +the name of a command \emph{without} the preceding backslash, +to be applied to the contents of the specified dynamic frame. +The command may either be a declaration, for example \verb/style=large/ +which will set the contents of all the dynamic frames in a +large font, or it can be a command that takes a single argument, +for example \verb/style=textbf/ +which will make the text for all the dynamic frames come out in +bold. To unset a style, do \verb/style=none/. + +\end{description} + +\section{Miscellaneous} + +\subsection{Page Layout} + +The \sty{flowfram} package has the package option \texttt{draft} +which will draw the {bounding boxes} for +each frame defined. At the bottom right of each +bounding box (except for the bounding box denoting the +typeblock), a marker will be shown to indictate the type +of frame, its IDN and its IDL. + +You can see the layout for the current page (irrespective of +whether or not the \texttt{draft} option has been set) using +the command:\newline +\cmdname{flowframeshowlayout} + +The headers and footers will appear as usual (but will not +be shown in draft mode), according to the format given by +\cmdname{pagestyle}. + +\subsection{Frame Stacking Order} + +The material on each page is placed in the following order: +\begin{enumerate} +\item Each static frame defined for that page in ascending +order of IDN. + +\item Each flow frame defined for that page in ascending +order of IDN. + +\item Each dynamic frame defined for that page in ascending +order of IDN. + +\item {Bounding boxes} if the \texttt{draft} +package option has been used. +\end{enumerate} + +This ordering can be used to determine if you want something +to overlay or underlay everything else on the page. + +\subsection{Prematurely Ending a Flow Frame} + +You can force text to move immediately to the next defined +flow frame using one of the standard \LaTeX\ page breaking commands +which work in an analogous way to the way they +work in standard two column mode. + +The command \cmdname{framebreak} is provided for situations +where a paragraph spans two flow frames +of different widths, as \TeX's output routine does not +adjust to the new value of \cmdname{hsize} until the last +paragraph of the previous frame has ended. As a +result, the end of the paragraph at the beginning of the new +flow frame retains the width of the previous flow frame. + +If you want to start a new page, rather than simply move to the +next frame, use the command\newline +\cmdname{finishthispage}. + +\subsection{Floats} + +Since floats (such as figures and tables) can only go in +{flow frames}, this package provides +the additional environments: +\env{staticfigure} and +\env{statictable} which can be used in static frames +and dynamic frames. Unlike their \env{figure} and +\env{table} counterparts, they are fixed in place, and +so do not take an optional placement specifier. The +\cmdname{caption} and \cmdname{label} commands can +be used within \env{staticfigure} and \env{statictable} as +usual. + +The standard \env{figure} and \env{table} commands will +behave as usual in the flow frames, but their starred versions, +\env{figure*} and \env{table*} behave no differently +from \env{figure} and \env{table}. + +\subsection{Global Values} + +The following macros can be changed using \cmdname{renewcommand}: + +\begin{itemize} +\item \cmdname{setffdraftcolor} + +This sets the colour of the bounding box +when it is displayed in draft mode. + +\item +\cmdname{setffdrafttypeblockcolor} + +This sets the colour of +the bounding box of the typeblock when it is displayed +in draft mode. + +\item \cmdname{fflabelfont} + +This sets the font size for the bounding box markers in +draft mode. + +\end{itemize} + +The following are lengths, which can be changed using +\cmdname{setlength}: + +\begin{itemize} +\item \cmdname{fflabelsep} + +This is the distance from the right hand side of the +bounding box at which to place the bounding box marker. + +\item \cmdname{flowframesep} + +This is the gap between the text of the frame and +its border, for the standard border types. + +\item \cmdname{flowframerule} + +This is the width of the frame's border, if using +a border given by a frame making command that uses \cmdname{fboxsep} +to set its border width. +\end{itemize} + +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample1.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sample2.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass[a4paper,twoside]{report} + +\usepackage{url} + +\newcommand{\cmdname}[1]{\texttt{\char`\\#1}} +\newcommand{\sty}[1]{\texttt{#1}} +\newcommand{\env}[1]{\texttt{#1}} +\newcommand{\meta}[1]{$\langle$\emph{#1}$\rangle$} + +\begin{document} + +\title{Creating Flow Frames for Posters or Magazines} +\author{Nicola L. C. Talbot\\[1cm]\url{http://www.dickimaw-books.com/}} +\date{} +\pagenumbering{alph} +\maketitle + +\pagenumbering{roman} +\tableofcontents + +\chapter{Introduction} +\pagenumbering{arabic} + +The \sty{flowfram} package is designed to enable you to create +frames in a document such that the +contents of the \env{document} environment flow from one +frame to the next in the order that they were defined. +This is useful for creating posters +or magazines or any other form of document that does not +conform to the standard one or two column layout. + +\chapter{Setting up Frames} + +The \sty{flowfram} package provides three types of frame: +{flow frames}, {static +frames} and {dynamic frames}. + +\section{Flow Frames} + +The flow frame is the principle type of frame. +The text of the \env{document} environment will flow from +one frame to the next in order of definition. Each +flow frame has an associated width, height, +position on the page, and optionally a border. + +\section{Static Frames} + +A static frame is a rectangular area in which text neither +flows into, nor flows out of. The contents must be set +explicitly, and once set, the contents of the static frame will +remain the same on each page until it is explicitly +changed. Thus, a static frame can be used, for example, to make +a company logo appear in the same place on every page. + +\section{Dynamic Frames} + +A dynamic frame is similar to a static frame, but its contents +are re-typeset on each page. (A static frame stores its +contents in a savebox, whereas a dynamic frame stores its +contents in a macro). + +\chapter{Frame Attributes} +\label{sec:modattr} + +Once you have defined the {flow frames}, {static frames} and +{dynamic frames}, their attributes can be changed. +The three types of frame mostly have the +same set of attributes, but some are specific to a certain type. +The available attributes are as follows +(\textsuperscript{\textbf{F}} indicates the key is +only available for {flow frames}, +\textsuperscript{\textbf{S}} indicates the key is only available +for {static frames} +and \textsuperscript{\textbf{D}} indicates the key +is only available for {dynamic frames}): + +\begin{description} +\item[width=\meta{length}] The width of the frame. + +\item[height=\meta{length}] The height of the frame. + +\item[x=\meta{length}] The x-coordinate of the frame. + +\item[y=\meta{length}] The y-coordinate of the frame. + +\item[border=\meta{style}] The style of the border around the +frame, this can take the values: \texttt{none} (no border), +\texttt{plain} (plain border) or the name of a \LaTeX\ +frame making command without the preceding backslash. +The value \texttt{fbox} is equivalent to \texttt{plain}. + +\item[offset=\meta{offset}] The border offset, if it is a +user-defined border. This is the distance from the outer +edge of the left hand border to the left edge of the +bounding box of the text inside the border. The \sty{flowfram} +package is able to compute the border for +known frame making commands. +If you define your own frame making command, you may need to +specify the offset explicitly, or the frames +may end up shifted to the right or left. + +\item[bordercolor=\meta{colour}] The colour of the border +if you are using a standard frame making command. +The colour can either be specified as, e.g.\ \texttt{green}, +or including the colour model, e.g. \verb/[rgb]{0,1,0}/. + +\item[textcolor=\meta{colour}] The text colour for that +frame. Again, the colour can either be specified as, +e.g.\ \texttt{green}, or including the colour model, +e.g. \verb/[rgb]{0,1,0}/. + +\item[pages=\meta{page list}] The {list of +pages} for which the frame +should appear. This can either have the values: \texttt{all}, +\texttt{even}, \texttt{odd} or \texttt{none} (the latter +removes the frame from that point on---useful if you +have multiple pages with the same number), or it can be a +comma-separated list of single pages, or +{page ranges}. + +\item[margin=\meta{side}\textsuperscript{F}] The side of +the flow frame that its corresponding margin should go on. This +can take the values \texttt{left} or \texttt{right}. + +\item[clear=\meta{boolean}\textsuperscript{S}] If this value +is set, the static frame will be cleared at the start of the +next page. + +\item[style=\meta{cmd}\textsuperscript{D}] This should be +the name of a command \emph{without} the preceding backslash, +to be applied to the contents of the specified dynamic frame. +The command may either be a declaration, for example \verb/style=large/ +which will set the contents of all the dynamic frames in a +large font, or it can be a command that takes a single argument, +for example \verb/style=textbf/ +which will make the text for all the dynamic frames come out in +bold. To unset a style, do \verb/style=none/. + +\end{description} + +\chapter{Miscellaneous} + +\section{Page Layout} + +The \sty{flowfram} package has the package option \texttt{draft} +which will draw the {bounding boxes} for +each frame defined. At the bottom right of each +bounding box (except for the bounding box denoting the +typeblock), a marker will be shown to indictate the type +of frame, its IDN and its IDL. + +You can see the layout for the current page (irrespective of +whether or not the \texttt{draft} option has been set) using +the command:\newline +\cmdname{flowframeshowlayout} + +The headers and footers will appear as usual (but will not +be shown in draft mode), according to the format given by +\cmdname{pagestyle}. + +\section{Frame Stacking Order} + +The material on each page is placed in the following order: +\begin{enumerate} +\item Each static frame defined for that page in ascending +order of IDN. + +\item Each flow frame defined for that page in ascending +order of IDN. + +\item Each dynamic frame defined for that page in ascending +order of IDN. + +\item {Bounding boxes} if the \texttt{draft} +package option has been used. +\end{enumerate} + +This ordering can be used to determine if you want something +to overlay or underlay everything else on the page. + +\section{Prematurely Ending a Flow Frame} + +You can force text to move immediately to the next defined +flow frame using one of the standard \LaTeX\ page breaking commands +which work in an analogous way to the way they +work in standard two column mode. + +The command \cmdname{framebreak} is provided for situations +where a paragraph spans two flow frames +of different widths, as \TeX's output routine does not +adjust to the new value of \cmdname{hsize} until the last +paragraph of the previous frame has ended. As a +result, the end of the paragraph at the beginning of the new +flow frame retains the width of the previous flow frame. + +If you want to start a new page, rather than simply move to the +next frame, use the command\newline +\cmdname{finishthispage}. + +\section{Floats} + +Since floats (such as figures and tables) can only go in +{flow frames}, this package provides +the additional environments: +\env{staticfigure} and +\env{statictable} which can be used in static frames +and dynamic frames. Unlike their \env{figure} and +\env{table} counterparts, they are fixed in place, and +so do not take an optional placement specifier. The +\cmdname{caption} and \cmdname{label} commands can +be used within \env{staticfigure} and \env{statictable} as +usual. + +The standard \env{figure} and \env{table} commands will +behave as usual in the flow frames, but their starred versions, +\env{figure*} and \env{table*} behave no differently +from \env{figure} and \env{table}. + +\section{Global Values} + +The following macros can be changed using \cmdname{renewcommand}: + +\begin{itemize} +\item \cmdname{setffdraftcolor} + +This sets the colour of the bounding box +when it is displayed in draft mode. + +\item +\cmdname{setffdrafttypeblockcolor} + +This sets the colour of +the bounding box of the typeblock when it is displayed +in draft mode. + +\item \cmdname{fflabelfont} + +This sets the font size for the bounding box markers in +draft mode. + +\end{itemize} + +The following are lengths, which can be changed using +\cmdname{setlength}: + +\begin{itemize} +\item \cmdname{fflabelsep} + +This is the distance from the right hand side of the +bounding box at which to place the bounding box marker. + +\item \cmdname{flowframesep} + +This is the gap between the text of the frame and +its border, for the standard border types. + +\item \cmdname{flowframerule} + +This is the width of the frame's border, if using +a border given by a frame making command that uses \cmdname{fboxsep} +to set its border width. +\end{itemize} + + +\chapter*{Contact Details} + +Dr Nicola Talbot\\ +Dickimaw Books\\ +\url{http://www.dickimaw-books.com/} + +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample2.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sample3.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass{article} + +\usepackage{color} +\usepackage[draft]{flowfram} +\usepackage{tikz} +\usetikzlibrary{snakes} + +\newstaticframe[1,2]{3in}{3in}{0pt}{0pt}[sf1] +\newdynamicframe[1,3]{2in}{3in}{0.5\textwidth}{0.5\textheight}[df1] + +\newstaticframe[2]{3in}{3in}{0.5\textwidth}{0.5\textheight}[sf2] + +\newdynamicframe[3]{2in}{2in}{0.5\textwidth}{0pt}[df2] + +\setlength{\sdfparindent}{\parindent} + +\onecolumn + +\newlength\fancywidth +\newlength\fancyheight +\newlength\fancydepth + +\newcommand{\fancyframe}[1]{% +\settowidth{\fancywidth}{#1}% +\settoheight{\fancyheight}{#1}% +\settodepth{\fancydepth}{#1}% +\addtolength{\fancyheight}{\fancydepth}% +\hspace{-\flowframesep}% +\tikz[baseline=0pt]{% +\draw[snake=bumps,raise snake=\flowframesep,line width=\flowframerule] + (0pt,0pt) + rectangle (\fancywidth,\fancyheight); +}} + +\begin{document} +\setstaticframe{1,2}{valign=t} +\setstaticframe{1}{border=fancyframe} +\setstaticcontents{1}{Top\par +\vfill +Bottom} + +%\setdynamiccontents{1}{Bar} +%\begin{dynamiccontents*}{df1} +%Paragraph 1 +% +%Paragraph 2 +%\end{dynamiccontents*} + +\mbox{} + +\newpage\mbox{} + +\begin{staticcontents*}{sf1} +Some text on the left static frame. +\continueonframe[continued \relativeframelocation{static}{2}{static}{1}]{sf2} +Some more text on the right static frame, and +some more text to pad it out a bit. +\end{staticcontents*} + +\newpage\mbox{} + +\begin{dynamiccontents}{1} +Some text in the first dynamic frame. +\continueonframe[continued \reldynamicloc*{df2}{df1}]{2} +Some more text in the second dynamic frame, and +some more text to pad it out a bit. +\end{dynamiccontents} + +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sample3.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*sampleRL.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} + % This file is public domain. + +\documentclass{article} + +\usepackage{lipsum} +\usepackage[RL,draft]{flowfram} + +\twocolumn + +\begin{document} +This is the start of the text. + +\lipsum + +This is the end of the text. +\end{document} +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</sampleRL.tex> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%<*flowfram.perl> +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +#!/usr/bin/env perl +# File : flowfram.perl +# Author : Nicola L C Talbot +# Date : 28 June 2008 +# Last Modified : 1 July 2008 +# Version : 1.0 +# Description : LaTeX2HTML implementation of the flowfram package. +# This is not meant to emulate the flowfram package. +# Most of the frame related commands are ignored, to +# provide a simple HTML version of the document. +# +# Copyright 2007 Nicola L.C. Talbot +# +# This work may be distributed and/or modified under the +# conditions of the LaTeX Project Public License, either version 1.3 +# of this license of (at your option) any later version. +# The latest version of this license is in +# http://www.latex-project.org/lppl.txt +# and version 1.3 or later is part of all distributions of LaTeX +# version 2005/12/01 or later. +# +# This work has the LPPL maintenance status `maintained'. +# +# The Current Maintainer of this work is Nicola Talbot. + +package main; + +$showstaticcontents = 0; +$showdynamiccontents = 0; + +sub do_cmd_onecolumninarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumninarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_Ncolumninarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_Ncolumn{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumntopinarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumntopinarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_Ncolumntopinarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumnbottominarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumnbottominarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_Ncolumnbottominarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumnStopinarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumnDtopinarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumnSbottominarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumnDbottominarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumnStopinarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumnDtopinarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumnSbottominarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumnDbottominarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_NcolumnDbottominarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_NcolumnSbottominarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumntop +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumntop +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_Ncolumntop +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumnStop +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumnStop +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_NcolumnStop +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumnDtop +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumnDtop +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_NcolumnDtop +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumnbottom +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumnbottom +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_Ncolumnbottom +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumnSbottom +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumnSbottom +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_NcolumnSbottom +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_onecolumnDbottom +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_twocolumnDbottom +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_NcolumnDbottom +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_NcolumnDtopinarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_NcolumnStopinarea +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_makebackgroundframe +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + ($keyval,$pat) = &get_next_optional_argument; + + $_ +} + +sub do_cmd_vtwotone +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_vtwotonetop +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_vtwotonebottom +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_htwotone +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_htwotoneleft +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_htwotoneright +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_hNtone{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + $keyval,$pat = &get_next_optional_argument; + + local($n); + + $n = &missing_braces + unless(s/$next_pair_pr_rx/$n=$2;''/eo); + + for ($idx = 1; $idx <= $n; $idx++) + { + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + } + + $_; +} + +sub do_cmd_hNtoneleft{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + $keyval,$pat = &get_next_optional_argument; + + local($n); + + $n = &missing_braces + unless(s/$next_pair_pr_rx/$n=$2;''/eo); + + for ($idx = 1; $idx <= $n; $idx++) + { + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + } + + $_; +} + +sub do_cmd_hNtoneright{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + $keyval,$pat = &get_next_optional_argument; + + local($n); + + $n = &missing_braces + unless(s/$next_pair_pr_rx/$n=$2;''/eo); + + for ($idx = 1; $idx <= $n; $idx++) + { + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + } + + $_; +} + +sub do_cmd_vNtone{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + $keyval,$pat = &get_next_optional_argument; + + local($n); + + $n = &missing_braces + unless(s/$next_pair_pr_rx/$n=$2;''/eo); + + for ($idx = 1; $idx <= $n; $idx++) + { + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + } + + $_; +} + +sub do_cmd_vNtonetop{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + $keyval,$pat = &get_next_optional_argument; + + local($n); + + $n = &missing_braces + unless(s/$next_pair_pr_rx/$n=$2;''/eo); + + for ($idx = 1; $idx <= $n; $idx++) + { + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + } + + $_; +} + +sub do_cmd_vNtonebottom{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + $keyval,$pat = &get_next_optional_argument; + + local($n); + + $n = &missing_braces + unless(s/$next_pair_pr_rx/$n=$2;''/eo); + + for ($idx = 1; $idx <= $n; $idx++) + { + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + } + + $_; +} + +sub do_cmd_inserthrule{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + ($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_insertvrule{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + ($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_newflowframe +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + ($keyval,$pat) = &get_next_optional_argument; + + $_ +} + +sub do_cmd_newflowframestar +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + ($keyval,$pat) = &get_next_optional_argument; + + $_ +} + +sub do_cmd_newstaticframe +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + ($keyval,$pat) = &get_next_optional_argument; + + $_ +} + +sub do_cmd_newstaticframestar +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + ($keyval,$pat) = &get_next_optional_argument; + + $_ +} + +sub do_cmd_newdynamicframe +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + ($keyval,$pat) = &get_next_optional_argument; + + $_ +} + +sub do_cmd_newdynamicframestar +{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + ($keyval,$pat) = &get_next_optional_argument; + + $_ +} + +sub do_cmd_setflowframe +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_setflowframestar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_setstaticframe +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_setstaticframestar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_setdynamicframe +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_setdynamicframestar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_setalldynamicframes +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_setallflowframes +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_setallstaticframes +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_setthumbtab +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_setthumbtabindex +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_ffswapoddeven +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_ffswapoddevenstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_dfswapoddeven +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_dfswapoddevenstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_sfswapoddeven +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_sfswapoddevenstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_dfchaphead +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_dfchapheadstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_computeleftedgeodd +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_computeleftedgeeven +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_computerightedgeodd +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_computerightedgeeven +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_computebottomedge +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_computetopedge +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_appenddfminitoc +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_appenddfminitocstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_makethumbtabs +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_setstaticcontents +{ + local($_) = @_; + local($text); + + s/$next_pair_pr_rx/;''/eo; + + $text = &missing_braces + unless (s/$next_pair_pr_rx/$text=$2;''/eo); + + $text = "" unless($showstaticcontents); + + "$text$_" +} + +sub do_cmd_setstaticcontentsstar +{ + local($_) = @_; + local($text); + + s/$next_pair_pr_rx/;''/eo; + + $text = &missing_braces + unless (s/$next_pair_pr_rx/$text=$2;''/eo); + + $text = "" unless($showstaticcontents); + + "$text$_" +} + +sub do_cmd_setdynamiccontents +{ + local($_) = @_; + local($text); + + s/$next_pair_pr_rx/;''/eo; + + $text = &missing_braces + unless (s/$next_pair_pr_rx/$text=$2;''/eo); + + $text = "" unless($showdynamiccontents); + + "$text$_" +} + +sub do_cmd_setdynamiccontentsstar +{ + local($_) = @_; + local($text); + + s/$next_pair_pr_rx/;''/eo; + + $text = &missing_braces + unless (s/$next_pair_pr_rx/$text=$2;''/eo); + + $text = "" unless($showdynamiccontents); + + "$text$_" +} + +sub do_cmd_appenddynamiccontents +{ + local($_) = @_; + local($text); + + s/$next_pair_pr_rx/;''/eo; + + $text = &missing_braces + unless (s/$next_pair_pr_rx/$text=$2;''/eo); + + $text = "" unless($showdynamiccontents); + + "$text$_" +} + +sub do_cmd_appenddynamiccontentsstar +{ + local($_) = @_; + local($text); + + s/$next_pair_pr_rx/;''/eo; + + $text = &missing_braces + unless (s/$next_pair_pr_rx/$text=$2;''/eo); + + $text = "" unless($showdynamiccontents); + + "$text$_" +} + +sub do_env_staticcontents{ + local($_) = @_; + local($id); + + $id = &missing_braces + unless (s/$next_pair_rx/$id=$2,''/eo); + + local($body) = ($showstaticcontents ? $_ : ""); + + $body +} + +sub do_env_staticcontentsstar{ + local($_) = @_; + local($id); + + $id = &missing_braces + unless (s/$next_pair_rx/$id=$2,''/eo); + + local($body) = ($showstaticcontents ? $_ : ""); + + $body +} + +sub do_env_dynamiccontents{ + local($_) = @_; + local($id); + + $id = &missing_braces + unless (s/$next_pair_rx/$id=$2,''/eo); + + local($body) = ($showdynamiccontents ? $_ : ""); + + $body +} + +sub do_env_dynamiccontentsstar{ + local($_) = @_; + local($id); + + $id = &missing_braces + unless (s/$next_pair_rx/$id=$2,''/eo); + + local($body) = ($showdynamiccontents ? $_ : ""); + + $body +} + +sub do_continueonframe{ + local($_) = @_; + + local($keyval,$pat) = &get_next_optional_argument; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getflowid +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getstaticid +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getdynamicid +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getdynamiclabel +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getflowlabel +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getstaticlabel +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getdynamicbounds +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getdynamicboundsstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getflowbounds +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getflowboundsstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getstaticbounds +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_getstaticboundsstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_FFaboveleft{ "above left".$_[0] } +sub do_cmd_FFaboveright{ "above right".$_[0] } +sub do_cmd_FFbelowleft{ "below left".$_[0] } +sub do_cmd_FFbelowright{ "below right".$_[0] } +sub do_cmd_FFleft{ "on the left".$_[0] } +sub do_cmd_FFright{ "on the right".$_[0] } +sub do_cmd_FFabove{ "above".$_[0] } +sub do_cmd_FFbelow{ "below".$_[0] } +sub do_cmd_FFoverlap{ "overlap".$_[0] } + +sub do_cmd_ffcontinuedtextfont{ + local($_) = @_; + local($text); + + $text = &missingbraces + unless (s/$next_pair_pr_rx/$text=$2;''/eo); + + "<EM>$text</EM>$_" +} + +sub do_cmd_ffhrule{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_ffvrule{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_labelflow{ &do_cmd_label(@_) } + +sub do_cmd_labelflowid{ &do_cmd_label(@_) } + +sub do_cmd_minitocstyle{ + local($_) = @_; + local($text); + + $text = &missing_braces + unless(s/$next_pair_pr_rx/$text=$2;''/eo); + + "$text$_" +} + +sub do_cmd_relativeframelocation +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_relativeframelocationstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_reldynamicloc +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_reldynamiclocstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_relflowloc +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_relflowlocstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_relstaticloc +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_relstaticlocstar +{ + local($_) = @_; + + s/$next_pair_pr_rx/;''/eo; + s/$next_pair_pr_rx/;''/eo; + + $_ +} + +sub do_cmd_simpar{ + local($_) = @_; + + "<P>$_" +} + +sub do_env_staticfigure{ &do_env_figure(@_) } +sub do_env_statictable{ &do_env_table(@_) } + +&ignore_commands( <<_IGNORED_CMDS); +thumbtabindex +tocandthumbtabindex +enablethumbtabs +disablethumbtabs +enableminitoc +makedfheaderfooter +ffcontinuedtextlayout +fflabelfont +ffruledeclarations +ffvadjustfalse +ffvadjusttrue +flowframeshowlayout +finishthispage +framebreak +setffdraftcolor +setffdraftypeblockcolor +showframebboxfalse +showframebboxtrue +showmarginsfalse +showmarginstrue +showtypeblockfalse +showtypeblocktrue +thumbtabformat +thumbtabindexformat +_IGNORED_CMDS + +1; +% \end{macrocode} +%\fi +%\iffalse +% \begin{macrocode} +%</flowfram.perl> +% \end{macrocode} +%\fi %\Finale \endinput diff --git a/Master/texmf-dist/source/latex/flowfram/flowfram.ins b/Master/texmf-dist/source/latex/flowfram/flowfram.ins index e5caad2fb22..999f48fe496 100644 --- a/Master/texmf-dist/source/latex/flowfram/flowfram.ins +++ b/Master/texmf-dist/source/latex/flowfram/flowfram.ins @@ -1,10 +1,10 @@ -% flowfram.ins generated using makedtx version 0.94b 2010/1/23 11:35 +% flowfram.ins generated using makedtx version 0.94b 2012/11/10 22:19 \input docstrip \preamble flowfram.dtx - Copyright 2010 Nicola Talbot + Copyright 2012 Nicola Talbot This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 @@ -18,7 +18,7 @@ The Current Maintainer of this work is Nicola Talbot. - This work consists of the files flowfram.dtx and flowfram.ins and the derived file flowfram.sty. + This work consists of the files flowfram.dtx and flowfram.ins and the derived files flowfram.sty, sample-article.tex, sample-blanks.tex, sample-brochure.tex, sample-news.tex, sample-news2.tex, sample-pages.tex, sample-poster.tex, sample-rot.tex, sample.tex, sample1.tex, sample2.tex, sample3.tex, sampleRL.tex, flowfram.perl. \endpreamble @@ -26,6 +26,20 @@ \generate{\file{flowfram.sty}{\usepreamble\defaultpreamble \usepostamble\defaultpostamble\from{flowfram.dtx}{flowfram.sty,package}} +\file{sample-article.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-article.tex}} +\file{sample-blanks.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-blanks.tex}} +\file{sample-brochure.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-brochure.tex}} +\file{sample-news.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-news.tex}} +\file{sample-news2.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-news2.tex}} +\file{sample-pages.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-pages.tex}} +\file{sample-poster.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-poster.tex}} +\file{sample-rot.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample-rot.tex}} +\file{sample.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample.tex}} +\file{sample1.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample1.tex}} +\file{sample2.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample2.tex}} +\file{sample3.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sample3.tex}} +\file{sampleRL.tex}{\nopreamble\nopostamble\from{flowfram.dtx}{sampleRL.tex}} +\file{flowfram.perl}{\nopreamble\nopostamble\from{flowfram.dtx}{flowfram.perl}} } \endbatchfile diff --git a/Master/texmf-dist/source/latex/flowfram/flowfram.perl b/Master/texmf-dist/source/latex/flowfram/flowfram.perl deleted file mode 100644 index 7d7f8c23c56..00000000000 --- a/Master/texmf-dist/source/latex/flowfram/flowfram.perl +++ /dev/null @@ -1,1632 +0,0 @@ -#!/usr/bin/env perl -# File : flowfram.perl -# Author : Nicola L C Talbot -# Date : 28 June 2008 -# Last Modified : 1 July 2008 -# Version : 1.0 -# Description : LaTeX2HTML implementation of the flowfram package. -# This is not meant to emulate the flowfram package. -# Most of the frame related commands are ignored, to -# provide a simple HTML version of the document. -# -# Copyright 2007 Nicola L.C. Talbot -# -# This work may be distributed and/or modified under the -# conditions of the LaTeX Project Public License, either version 1.3 -# of this license of (at your option) any later version. -# The latest version of this license is in -# http://www.latex-project.org/lppl.txt -# and version 1.3 or later is part of all distributions of LaTeX -# version 2005/12/01 or later. -# -# This work has the LPPL maintenance status `maintained'. -# -# The Current Maintainer of this work is Nicola Talbot. - -package main; - -$showstaticcontents = 0; -$showdynamiccontents = 0; - -sub do_cmd_onecolumninarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumninarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_Ncolumninarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_Ncolumn{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumntopinarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumntopinarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_Ncolumntopinarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumnbottominarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumnbottominarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_Ncolumnbottominarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumnStopinarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumnDtopinarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumnSbottominarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumnDbottominarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumnStopinarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumnDtopinarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumnSbottominarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumnDbottominarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_NcolumnDbottominarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_NcolumnSbottominarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumntop -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumntop -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_Ncolumntop -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumnStop -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumnStop -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_NcolumnStop -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumnDtop -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumnDtop -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_NcolumnDtop -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumnbottom -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumnbottom -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_Ncolumnbottom -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumnSbottom -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumnSbottom -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_NcolumnSbottom -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_onecolumnDbottom -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_twocolumnDbottom -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_NcolumnDbottom -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_NcolumnDtopinarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_NcolumnStopinarea -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_makebackgroundframe -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - ($keyval,$pat) = &get_next_optional_argument; - - $_ -} - -sub do_cmd_vtwotone -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_vtwotonetop -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_vtwotonebottom -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_htwotone -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_htwotoneleft -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_htwotoneright -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_hNtone{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - $keyval,$pat = &get_next_optional_argument; - - local($n); - - $n = &missing_braces - unless(s/$next_pair_pr_rx/$n=$2;''/eo); - - for ($idx = 1; $idx <= $n; $idx++) - { - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - } - - $_; -} - -sub do_cmd_hNtoneleft{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - $keyval,$pat = &get_next_optional_argument; - - local($n); - - $n = &missing_braces - unless(s/$next_pair_pr_rx/$n=$2;''/eo); - - for ($idx = 1; $idx <= $n; $idx++) - { - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - } - - $_; -} - -sub do_cmd_hNtoneright{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - $keyval,$pat = &get_next_optional_argument; - - local($n); - - $n = &missing_braces - unless(s/$next_pair_pr_rx/$n=$2;''/eo); - - for ($idx = 1; $idx <= $n; $idx++) - { - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - } - - $_; -} - -sub do_cmd_vNtone{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - $keyval,$pat = &get_next_optional_argument; - - local($n); - - $n = &missing_braces - unless(s/$next_pair_pr_rx/$n=$2;''/eo); - - for ($idx = 1; $idx <= $n; $idx++) - { - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - } - - $_; -} - -sub do_cmd_vNtonetop{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - $keyval,$pat = &get_next_optional_argument; - - local($n); - - $n = &missing_braces - unless(s/$next_pair_pr_rx/$n=$2;''/eo); - - for ($idx = 1; $idx <= $n; $idx++) - { - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - } - - $_; -} - -sub do_cmd_vNtonebottom{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - $keyval,$pat = &get_next_optional_argument; - - local($n); - - $n = &missing_braces - unless(s/$next_pair_pr_rx/$n=$2;''/eo); - - for ($idx = 1; $idx <= $n; $idx++) - { - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - } - - $_; -} - -sub do_cmd_inserthrule{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - ($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_insertvrule{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - ($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_newflowframe -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - ($keyval,$pat) = &get_next_optional_argument; - - $_ -} - -sub do_cmd_newflowframestar -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - ($keyval,$pat) = &get_next_optional_argument; - - $_ -} - -sub do_cmd_newstaticframe -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - ($keyval,$pat) = &get_next_optional_argument; - - $_ -} - -sub do_cmd_newstaticframestar -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - ($keyval,$pat) = &get_next_optional_argument; - - $_ -} - -sub do_cmd_newdynamicframe -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - ($keyval,$pat) = &get_next_optional_argument; - - $_ -} - -sub do_cmd_newdynamicframestar -{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - ($keyval,$pat) = &get_next_optional_argument; - - $_ -} - -sub do_cmd_setflowframe -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_setflowframestar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_setstaticframe -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_setstaticframestar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_setdynamicframe -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_setdynamicframestar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_setalldynamicframes -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_setallflowframes -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_setallstaticframes -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_setthumbtab -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_setthumbtabindex -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_ffswapoddeven -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_ffswapoddevenstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_dfswapoddeven -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_dfswapoddevenstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_sfswapoddeven -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_sfswapoddevenstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_dfchaphead -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_dfchapheadstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_computeleftedgeodd -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_computeleftedgeeven -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_computerightedgeodd -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_computerightedgeeven -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_computebottomedge -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_computetopedge -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_appenddfminitoc -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_appenddfminitocstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_makethumbtabs -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_setstaticcontents -{ - local($_) = @_; - local($text); - - s/$next_pair_pr_rx/;''/eo; - - $text = &missing_braces - unless (s/$next_pair_pr_rx/$text=$2;''/eo); - - $text = "" unless($showstaticcontents); - - "$text$_" -} - -sub do_cmd_setstaticcontentsstar -{ - local($_) = @_; - local($text); - - s/$next_pair_pr_rx/;''/eo; - - $text = &missing_braces - unless (s/$next_pair_pr_rx/$text=$2;''/eo); - - $text = "" unless($showstaticcontents); - - "$text$_" -} - -sub do_cmd_setdynamiccontents -{ - local($_) = @_; - local($text); - - s/$next_pair_pr_rx/;''/eo; - - $text = &missing_braces - unless (s/$next_pair_pr_rx/$text=$2;''/eo); - - $text = "" unless($showdynamiccontents); - - "$text$_" -} - -sub do_cmd_setdynamiccontentsstar -{ - local($_) = @_; - local($text); - - s/$next_pair_pr_rx/;''/eo; - - $text = &missing_braces - unless (s/$next_pair_pr_rx/$text=$2;''/eo); - - $text = "" unless($showdynamiccontents); - - "$text$_" -} - -sub do_cmd_appenddynamiccontents -{ - local($_) = @_; - local($text); - - s/$next_pair_pr_rx/;''/eo; - - $text = &missing_braces - unless (s/$next_pair_pr_rx/$text=$2;''/eo); - - $text = "" unless($showdynamiccontents); - - "$text$_" -} - -sub do_cmd_appenddynamiccontentsstar -{ - local($_) = @_; - local($text); - - s/$next_pair_pr_rx/;''/eo; - - $text = &missing_braces - unless (s/$next_pair_pr_rx/$text=$2;''/eo); - - $text = "" unless($showdynamiccontents); - - "$text$_" -} - -sub do_env_staticcontents{ - local($_) = @_; - local($id); - - $id = &missing_braces - unless (s/$next_pair_rx/$id=$2,''/eo); - - local($body) = ($showstaticcontents ? $_ : ""); - - $body -} - -sub do_env_staticcontentsstar{ - local($_) = @_; - local($id); - - $id = &missing_braces - unless (s/$next_pair_rx/$id=$2,''/eo); - - local($body) = ($showstaticcontents ? $_ : ""); - - $body -} - -sub do_env_dynamiccontents{ - local($_) = @_; - local($id); - - $id = &missing_braces - unless (s/$next_pair_rx/$id=$2,''/eo); - - local($body) = ($showdynamiccontents ? $_ : ""); - - $body -} - -sub do_env_dynamiccontentsstar{ - local($_) = @_; - local($id); - - $id = &missing_braces - unless (s/$next_pair_rx/$id=$2,''/eo); - - local($body) = ($showdynamiccontents ? $_ : ""); - - $body -} - -sub do_continueonframe{ - local($_) = @_; - - local($keyval,$pat) = &get_next_optional_argument; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getflowid -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getstaticid -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getdynamicid -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getdynamiclabel -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getflowlabel -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getstaticlabel -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getdynamicbounds -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getdynamicboundsstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getflowbounds -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getflowboundsstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getstaticbounds -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_getstaticboundsstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_FFaboveleft{ "above left".$_[0] } -sub do_cmd_FFaboveright{ "above right".$_[0] } -sub do_cmd_FFbelowleft{ "below left".$_[0] } -sub do_cmd_FFbelowright{ "below right".$_[0] } -sub do_cmd_FFleft{ "on the left".$_[0] } -sub do_cmd_FFright{ "on the right".$_[0] } -sub do_cmd_FFabove{ "above".$_[0] } -sub do_cmd_FFbelow{ "below".$_[0] } -sub do_cmd_FFoverlap{ "overlap".$_[0] } - -sub do_cmd_ffcontinuedtextfont{ - local($_) = @_; - local($text); - - $text = &missingbraces - unless (s/$next_pair_pr_rx/$text=$2;''/eo); - - "<EM>$text</EM>$_" -} - -sub do_cmd_ffhrule{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_ffvrule{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_labelflow{ &do_cmd_label(@_) } - -sub do_cmd_labelflowid{ &do_cmd_label(@_) } - -sub do_cmd_minitocstyle{ - local($_) = @_; - local($text); - - $text = &missing_braces - unless(s/$next_pair_pr_rx/$text=$2;''/eo); - - "$text$_" -} - -sub do_cmd_relativeframelocation -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_relativeframelocationstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_reldynamicloc -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_reldynamiclocstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_relflowloc -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_relflowlocstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_relstaticloc -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_relstaticlocstar -{ - local($_) = @_; - - s/$next_pair_pr_rx/;''/eo; - s/$next_pair_pr_rx/;''/eo; - - $_ -} - -sub do_cmd_simpar{ - local($_) = @_; - - "<P>$_" -} - -sub do_env_staticfigure{ &do_env_figure(@_) } -sub do_env_statictable{ &do_env_table(@_) } - -&ignore_commands( <<_IGNORED_CMDS); -thumbtabindex -tocandthumbtabindex -enablethumbtabs -disablethumbtabs -enableminitoc -makedfheaderfooter -ffcontinuedtextlayout -fflabelfont -ffruledeclarations -ffvadjustfalse -ffvadjusttrue -flowframeshowlayout -finishthispage -framebreak -setffdraftcolor -setffdraftypeblockcolor -showframebboxfalse -showframebboxtrue -showmarginsfalse -showmarginstrue -showtypeblockfalse -showtypeblocktrue -thumbtabformat -thumbtabindexformat -_IGNORED_CMDS - -1; |