diff options
author | Reinhard Kotucha <reinhard.kotucha@web.de> | 2007-04-08 18:18:21 +0000 |
---|---|---|
committer | Reinhard Kotucha <reinhard.kotucha@web.de> | 2007-04-08 18:18:21 +0000 |
commit | 2b0321dafd5d992f9fad9d473404b5108ddbc5c7 (patch) | |
tree | 21a9322d8d9ce642ecfb7f35e57313f8334fe297 /Master/texmf-dist/source/latex/flowfram/flowfram.dtx | |
parent | f25dd24f847d44201cbb435d7473ee114a876241 (diff) |
update flowfram to v1.07
git-svn-id: svn://tug.org/texlive/trunk@4132 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/flowfram/flowfram.dtx')
-rw-r--r-- | Master/texmf-dist/source/latex/flowfram/flowfram.dtx | 514 |
1 files changed, 399 insertions, 115 deletions
diff --git a/Master/texmf-dist/source/latex/flowfram/flowfram.dtx b/Master/texmf-dist/source/latex/flowfram/flowfram.dtx index 2cc5a42fe35..644416a095f 100644 --- a/Master/texmf-dist/source/latex/flowfram/flowfram.dtx +++ b/Master/texmf-dist/source/latex/flowfram/flowfram.dtx @@ -1,12 +1,12 @@ %\iffalse -% flowfram.dtx generated using makedtx version 0.9b (c) Nicola Talbot +% flowfram.dtx generated using makedtx version 0.91b (c) Nicola Talbot % Command line args: % -src "flowfram.sty\Z=>flowfram.sty" % -doc "docstub.tex" % -author "Nicola Talbot" % -dir "source" % flowfram -% Created on 2005/11/24 14:42 +% Created on 2007/3/9 11:23 %\fi %\iffalse %<*package> @@ -29,23 +29,36 @@ %\fi % \iffalse % Doc-Source file to use with LaTeX2e -% Copyright (C) 2005 Nicola Talbot, all rights reserved. +% Copyright (C) 2007 Nicola Talbot, all rights reserved. % \fi % \iffalse %<*driver> \documentclass{ltxdoc} -\CheckSum{7647} +\CheckSum{8125} \PageIndex \usepackage{url} +\usepackage[colorlinks,hyperindex=false, +pdfauthor={Nicola L C Talbot}, +pdftitle={Documented Source Code for flowfram.sty}]{hyperref} \usepackage[style=altlist,toc,number=none]{glossary}[2005/07/15] +\MakeShortVerb" +\DeleteShortVerb| + \newcommand{\sty}[1]{\textsf{#1}} \newcommand{\env}[1]{\textsf{#1}} \newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}} -\MakeShortVerb" +\renewcommand{\usage}[1]{\textit{\hyperpage{#1}}} +\renewcommand{\main}[1]{\hyperpage{#1}} +\newcommand{\see}[2]{\emph{see} #1} +\makeatletter +\def\index@prologue{\section*{Index} +\addcontentsline{toc}{section}{Index}} +\makeatother + \storeglosentry{typeblock}{name=typeblock,description={The area of the page where the main body of the text goes. @@ -110,10 +123,10 @@ refer to the frame by label instead of by its IDN.}} \end{document} %</driver> %\fi -%\def\filedate{24th November 2005} -%\def\fileversion{1.02} +%\def\filedate{9th March 2007} +%\def\fileversion{1.07} %\def\filename{flowfram.dtx} -%\def\docdate{24th November 2005} +%\def\docdate{9th March 2007} % %\title{Documented Source Code for flowfram.sty v\fileversion} %\author{Nicola L. C. Talbot} @@ -131,14 +144,16 @@ refer to the frame by label instead of by its IDN.}} % % %\section{The Code} +%\iffalse % \begin{macrocode} %<*flowfram.sty> % \end{macrocode} +%\fi % \subsection{Package Initialisation} % Declare package, and identify it as a \LaTeXe\ package. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{flowfram}[2005/11/24 v1.02] +\ProvidesPackage{flowfram}[2007/03/09 v1.07] % \end{macrocode} % Load packages needed by this package % \begin{macrocode} @@ -146,6 +161,7 @@ refer to the frame by label instead of by its IDN.}} \RequirePackage{keyval} \RequirePackage{graphics} \RequirePackage{afterpage} +\@ifundefined{@ldc@l@r}{\RequirePackage{color}}{} % \end{macrocode} % The colour of the \gls{bbox} borders when the draft % option is specified is given by the commands: @@ -322,10 +338,8 @@ refer to the frame by label instead of by its IDN.}} % \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}{% @@ -361,6 +375,12 @@ refer to the frame by label instead of by its IDN.}} \newlength\@ff@tmp@x@even \newlength\@ff@tmp@y % \end{macrocode} +% Define a length to govern paragraph indentation within +% static and dynamic frames\DescribeMacro{\sdfparindent}. +% This is 0pt by default. +% \begin{macrocode} +\newlength\sdfparindent +% \end{macrocode} % \subsection{Flow Frames} % Set up default lengths. The gap between the text and the % border is given by:\DescribeMacro{\flowframesep} @@ -396,20 +416,20 @@ refer to the frame by label instead of by its IDN.}} \usedframebreaktrue {\parfillskip=0pt\pagebreak[#1]\parskip=0pt\par\noindent}} % \end{macrocode} -% The commands "\newpage", "\clearpage" and +% The commands "\newpage" and % "\pagebreak" can be used to move on to the next % \gls{flow}, but to finish the entire page, use % "\finishthispage".\DescribeMacro{\finishthispage} % \begin{macrocode} \newcommand{\finishthispage}{% \@colN=\c@thisframe -\clearpage +\newpage \whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax \@ff@chckifthispg{\c@page}{\@colN}% \if@notthiscol\else -\mbox{}\vfill\clearpage% -\fi} -} +\mbox{}\newpage% +\fi +}} % \end{macrocode} % Modify the definition of "\cleardoublepage". This may % or may not be defined so use "\def". @@ -501,21 +521,24 @@ refer to the frame by label instead of by its IDN.}} % \begin{macrocode} \newcommand{\@n@wflowframe}{% \global\advance\c@maxflow by 1\relax -\expandafter\global\expandafter\newif\csname ifcolumnframe\romannumeral\c@maxflow\endcsname +\expandafter\global\expandafter +\newif\csname ifcolumnframe\romannumeral\c@maxflow\endcsname \@ifstar\@snewflowframe\@newflowframe } % \end{macrocode} % Starred version sets boolean flag to indicate a border % \begin{macrocode} \newcommand{\@snewflowframe}{% -\expandafter\global\expandafter\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iftrue +\expandafter\global\expandafter +\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iftrue \@@newflowframe} % \end{macrocode} % The unstarred version unsets boolean flag to indicate % no border. % \begin{macrocode} \newcommand{\@newflowframe}{% -\expandafter\global\expandafter\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iffalse +\expandafter\global\expandafter +\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iffalse \@@newflowframe} % \end{macrocode} % Now get on with initialising the \gls{flow}. By default, it @@ -523,27 +546,49 @@ refer to the frame by label instead of by its IDN.}} % 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} +\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 @@ -562,7 +607,8 @@ refer to the frame by label instead of by its IDN.}} \fi }}}% \fi -\@ifnextchar[{\@s@tflowframeid{\c@maxflow}}{\@s@tflowframeid{\c@maxflow}[\number\c@maxflow]}} +\@ifnextchar[{\@s@tflowframeid{\c@maxflow}}{% +\@s@tflowframeid{\c@maxflow}[\number\c@maxflow]}} % \end{macrocode} % If square brackets occur after "\newflowframe", take % the contents to be the label, otherwise the label will be @@ -571,7 +617,8 @@ refer to the frame by label instead of by its IDN.}} \def\@s@tflowframeid#1[#2]{% \edef\ff@label{#2}% \@ff@checkuniqueidl{#1}{\ff@label}% -\expandafter\xdef\csname @col@id@\romannumeral#1\endcsname{\ff@label}% +\expandafter +\xdef\csname @col@id@\romannumeral#1\endcsname{\ff@label}% } % \end{macrocode} % Check \IDL{} "#2" for \gls{flow} "#1" is unique @@ -582,7 +629,8 @@ refer to the frame by label instead of by its IDN.}} \advance\@colN by 1\relax \ifnum\@colN=#1\relax \else -\ifthenelse{\equal{#2}{\csname @col@id@\romannumeral\@colN\endcsname}}{% +\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}}{}% @@ -749,6 +797,18 @@ boolean}{You can only specify the values 'true' or 'false'}}} \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 \gls{static}s and \gls{dynamic}s. +% \begin{macrocode} +\define@key{flowframe}{shape}{\def\ff@shape{#1}% +} +% \end{macrocode} +% This key is only for \gls{static}s and \gls{dynamic}s. +% \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'}}} +% \end{macrocode} % Provide a command to change the settings for all flow % frames. This just iterates through all the \gls{flow}s, % and sets each one in turn. @@ -809,10 +869,11 @@ boolean}{You can only specify the values 'true' or 'false'}}} % \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@style{}% +\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@oddx{}\def\ff@oddy{}\def\ff@angle{}\def\ff@shape{\empty}% \setkeys{flowframe}{#2}% \ifthenelse{\equal{\ff@frame}{}}{}{% \setboolean{columnframe\romannumeral#1}{\ff@frame}}% @@ -873,6 +934,14 @@ boolean}{You can only specify the values 'true' or 'false'}}} \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}{}}% } % \end{macrocode} %\DescribeMacro{\ffswapoddeven} @@ -1058,6 +1127,8 @@ 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}% @@ -1184,9 +1255,11 @@ id '#1'}{}\fi} \@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@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{}% +\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}}% @@ -1222,7 +1295,7 @@ id '#1'}{}\fi} {\ff@oddy}}% \expandafter \xdef\csname @sf@dim@\romannumeral#1\endcsname{% -[c][\ff@height][c]{\ff@width}}% +[c][\ff@height][\ff@valign]{\ff@width}}% \ifthenelse{\equal{\ff@frametype}{}}{}{% \expandafter \xdef\csname @sf@frametype@\romannumeral#1\endcsname{% @@ -1241,6 +1314,11 @@ id '#1'}{}\fi} \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}}% @@ -1254,6 +1332,107 @@ static frames}{Static frames don't have marginal notes}}% static frames}{}}% } % \end{macrocode} +% Simulate paragraph break inside "\shapepar" +% \begin{macrocode} +%\newcommand*{\simpar}{\hfil\vadjust{\vskip\parskip}\break\indent} +\newcommand*{\simpar}{\hfill\\\indent\mbox{}} +% \end{macrocode} +% Provide means to allow parshape to be carried over a paragraph +% break. +% \begin{macrocode} +\let\orgpar\par +\newcommand{\ffpshpar}{\edef\next{\hangafter=\the\hangafter +\hangindent=\the\hangindent}\orgpar\next +\edef\next{\prevgraf=\the\prevgraf}\@ff@parshape\indent\mbox{}\next} +% \end{macrocode} +% Provide a means to have section headings within "\parshape". +% \begin{macrocode} +\def\@ff@parshape{\parshape=0} + +\newcommand{\@ff@sectionhead}[1]{% +\def\ff@sechead{#1}% +\ffpshpar +\@ifstar{\@s@ff@heading}{\@dblarg\@ff@heading}} + +\def\@s@ff@heading#1{% +\@ifundefined{@ff@old\ff@sechead}{\PackageError{flowfram}{Unknown +heading command '\ff@sechead'}{}}{% +\begingroup +\edef\next{\hangafter=\the\hangafter +\hangindent=\the\hangindent}\orgpar\next +\let\par=\orgpar +\edef\next{\prevgraf=\the\prevgraf}% +\csname @ff@old\ff@sechead\endcsname*{\@ff@parshape\next +#1}% +\xdef\next{\@ff@parshape +\prevgraf=\the\prevgraf}% +\endgroup +}% +\mbox{}\next\let\next\undefined} + +\def\@ff@heading[#1]#2{% +\@ifundefined{@ff@old\ff@sechead}{\PackageError{flowfram}{Unknown +heading command '\ff@sechead'}{}}{% +\begingroup +\edef\next{\hangafter=\the\hangafter +\hangindent=\the\hangindent}\orgpar\next +\let\par=\orgpar +\edef\next{\prevgraf=\the\prevgraf}% +\csname @ff@old\ff@sechead\endcsname[#1]{\@ff@parshape\next +#2}% +\xdef\next{\@ff@parshape +\prevgraf=\the\prevgraf}% +\endgroup}% +\mbox{}\next\let\next\undefined} +% \end{macrocode} +% 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}}% +} +% \end{macrocode} +% 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} +% \end{macrocode} +% 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}{}}% +} +% \end{macrocode} % Set the contents of the \gls{static} given by its \IDN{}. % Synatax: "\begin{staticcontents}{n}". %\DescribeEnv{staticcontents} @@ -1262,15 +1441,45 @@ static frames}{}}% \newenvironment{staticcontents}[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}% +\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname +\noexpand\begingroup +\noexpand\let\noexpand\orgpar=\noexpand\par +}% +\or +% \parshape +\edef\@sf@mpg{% +\noexpand +\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname +\@ff@parshape +\noexpand\begingroup +\noexpand\let\noexpand\orgpar=\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 +\@s@tfftextcol\noindent \@sf@mpg -}{\end{minipage}\end{lrbox}% +\setlength\parindent\sdfparindent +}{\ifnum\ff@shape=2\par +\else\orgpar\fi\endgroup\end{minipage}\end{lrbox}% \expandafter\global\expandafter\sbox\@sf@thisframe{% \usebox\staticframe}\ignorespaces } @@ -1431,6 +1640,8 @@ fbox}% \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}}% @@ -1548,13 +1759,14 @@ id '#1'}{}\fi} % Change the setting for the \gls{dynamic} given by its \IDN{}. % \begin{macrocode} \newcommand{\@@setdynamicframe}[2]{% -\expandafter\expandafter\expandafter\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname +\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@oddx{}\def\ff@oddy{}\def\ff@angle{}\def\ff@shape{0}% \setkeys{flowframe}{#2}% \ifthenelse{\equal{\ff@frame}{}}{}{% \setboolean{dynamicframe\romannumeral#1}{\ff@frame}}% @@ -1581,7 +1793,7 @@ id '#1'}{}\fi} \expandafter\global\expandafter\setlength \csname @df@\romannumeral#1@posy\endcsname{\ff@oddy}}% \expandafter\xdef\csname @df@dim@\romannumeral#1\endcsname{% -[c][\ff@height][t]{\ff@width}}% +[c][\ff@height][\ff@valign]{\ff@width}}% \ifthenelse{\equal{\ff@label}{}}{}{% \@s@tdynamicframeid{#1}[\ff@label]} \ifthenelse{\equal{\ff@frametype}{}}{}{% @@ -1600,6 +1812,11 @@ id '#1'}{}\fi} \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}}% @@ -1622,14 +1839,14 @@ frames}{dynamic frames don't have marginal notes}}% % \begin{macrocode} \newcommand{\@@dynamicframeswapcoords}[1]{% \setlength{\@ff@tmp@x}% -{\csname @df@\romannumeral#1@evenx\endcsname} +{\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} +{\csname @df@\romannumeral#1@eveny\endcsname}% \expandafter\setlength \csname @df@\romannumeral#1@eveny\endcsname {\csname @df@\romannumeral#1@posy\endcsname}% @@ -1695,7 +1912,7 @@ frames}{dynamic frames don't have marginal notes}}% % \begin{macrocode} \newcommand{\@setdynamiccontents}[2]{% \ifnum#1>\c@maxdynamic -\PackageError{flowfram}{Dynamic frame \number#1 does not exist}{% +\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 @@ -1731,9 +1948,10 @@ but there are only % \end{macrocode} % Append "#2" onto the end of "#1". % \begin{macrocode} -\toksdef\ta=0 \toksdef\tb=2 -\long\def\@ff@addtolist#1\entry#2{\ta={{#2}}\tb=\expandafter{#1}% -\xdef#1{\the\tb\the\ta}} +\toksdef\flf@ta=0 \toksdef\flf@tb=2 +\long\def\@ff@addtolist#1\entry#2{\flf@ta={{#2}}% +\flf@tb=\expandafter{#1}% +\xdef#1{\the\flf@tb\the\flf@ta}} % \end{macrocode} %\subsection{Initialise Flow Frames} %\DescribeMacro{\setinitialframe} @@ -1763,7 +1981,7 @@ Attempting to find the first page with a flow frame}% \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} +\@outputpage}% \c@thisframe=\@nxtcol \fi \@setcol{\c@thisframe}\relax @@ -1781,13 +1999,13 @@ Attempting to find the first page with a flow frame}% \finishthispage \setallflowframes{pages=none}% \settoheight{\@ff@staticH}{#1}% -\settodepth{\@ff@tmp@y}{#1} +\settodepth{\@ff@tmp@y}{#1}% \addtolength{\@ff@staticH}{\@ff@tmp@y}% -\ifdim\@ff@staticH>0pt -\twocolumnStop[\c@page]{\@ff@staticH} +\ifdim\@ff@staticH>0pt\relax +\twocolumnStop[\c@page]{\@ff@staticH}% \c@thisframe=\c@maxflow \advance\c@thisframe by -1\relax -\@twocolumn[>\c@page] +\@twocolumn[>\c@page]% \setstaticcontents{\c@maxstatic}{#1}% \else \@twocolumn @@ -1805,13 +2023,13 @@ Attempting to find the first page with a flow frame}% \finishthispage \setallflowframes{pages=none}% \settoheight{\@ff@staticH}{#1}% -\settodepth{\@ff@tmp@y}{#1} +\settodepth{\@ff@tmp@y}{#1}% \addtolength{\@ff@staticH}{\@ff@tmp@y}% -\ifdim\@ff@staticH>0pt -\onecolumnStop[\c@page]{\@ff@staticH} +\ifdim\@ff@staticH>0pt\relax +\onecolumnStop[\c@page]{\@ff@staticH}% \c@thisframe=\c@maxflow \advance\c@thisframe by -1\relax -\@onecolumn[>\c@page] +\@onecolumn[>\c@page]% \setstaticcontents{\c@maxstatic}{#1}% \else \@twocolumn @@ -1842,14 +2060,14 @@ Frames must be defined in the preamble}#1}% % 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} +%\AtEndDocument{\finishthispage} % \end{macrocode} %\subsection{Output Routine} % Set up the output box so it has the correct dimensions for % specified \gls{flow}. This is used by the output routine. % \begin{macrocode} \newcommand{\@setcol}[1]{% -\ifnum\c@maxflow<#1 +\ifnum\c@maxflow<#1\relax \PackageError{flowfram}{Can't set frame '\number#1', doesn't exist}{}% \else @@ -2009,11 +2227,15 @@ or text might not appear correctly}% \renewcommand{\@dothefoot}{}% \renewcommand{\@dodynamicthehead}{% \@dynamicframeid{header}% -\expandafter\def\csname @dynamicframe@\romannumeral\ff@id\endcsname{\vfill\@thehead\vfill} +\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} +\expandafter +\def\csname @dynamicframe@\romannumeral\ff@id\endcsname{% +\vfill\@thefoot\vfill}% }% } % \end{macrocode} @@ -2079,18 +2301,31 @@ or text might not appear correctly}% \newif\if@ff@moreframes \newcommand{\@ff@checkifmoreframes}{% \@ff@moreframesfalse -\@colN=0\relax +\@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}}} +\@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 +} % \end{macrocode} % Check to see if the current page lies in the \gls{pglist} % given by "#1". % \begin{macrocode} -\newcommand{\@ff@checkpages}[1]{% -\@for \@ff@pp:=#1\do{% -\@ff@checkthispage{\@ff@pp}}} +\newcommand{\@ff@checkpages}[2][\c@page]{% +\@for\@ff@pp:=#2\do{% +\@ff@checkthispage{#1}{\@ff@pp}}} % \end{macrocode} % Check to see if the current page lies in the \gls{pgrange} % given by "#1". If the \gls{pgrange} is specified by @@ -2099,11 +2334,11 @@ or text might not appear correctly}% % lies within the number range. If the \gls{pgrange} is "none", % ignore it. % \begin{macrocode} -\newcommand{\@ff@checkthispage}[1]{% -\ifthenelse{\equal{#1}{all}\or\equal{#1}{even}\or\equal{#1}{odd}}{% +\newcommand{\@ff@checkthispage}[2]{% +\ifthenelse{\equal{#2}{all}\or\equal{#2}{even}\or\equal{#2}{odd}}{% \@ff@moreframestrue}{% -\ifthenelse{\equal{#1}{none}}{}{% -\@ff@checknumrange{#1}}}} +\ifthenelse{\equal{#2}{none}}{}{% +\@ff@checknumrange{#1}{#2}}}} % \end{macrocode} % The number range could be a single number, a closed range % (e.g.\ "2-6") or an open range (e,g.\ "<4" or ">10"). @@ -2112,12 +2347,15 @@ or text might not appear correctly}% % If the current page is less than or equal to the maximum, % there are still more \gls{flow}s available. % \begin{macrocode} -\newcommand{\@ff@checknumrange}[1]{% +\newcommand{\@ff@checknumrange}[2]{% \def\@ff@numstart{0}\def\@ff@numend{10000}% -\@ff@getrange{#1}% -\ifnum\@ff@numend>\c@page +\@ff@getrange{#2}% +\ifnum\@ff@numend>#1\relax \@ff@moreframestrue \else +\ifnum\@ff@numend=#1\relax +\@ff@moreframestrue +\fi \fi } % \end{macrocode} @@ -2179,7 +2417,7 @@ or text might not appear correctly}% % value, otherwise it is a range. % \begin{macrocode} \def\@@ff@getrange#1-#2\end{% -\ifx\relax#2 +\ifx\relax#2\relax \def\@ff@numstart{#1}\def\@ff@numend{#1}% \else \def\@ff@numstart{#1}% @@ -2214,9 +2452,12 @@ adding new one}% \@colN=#1\relax \c@curpg=\c@page \loop -\ifnum\@colN=\c@maxflow\@colN=1\@ff@nwpgtrue -\advance\c@curpg by 1\relax -\else\advance\@colN by 1\fi +\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 @@ -2290,7 +2531,7 @@ adding new one}% \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}{ +\rotateframe{\csname @ff@angle@\romannumeral#1\endcsname}{% \ifthenelse{\boolean{columnframe\romannumeral#1}}{% \@ff@fbox{\csname colwidth\romannumeral#1\endcsname}% {\csname colheight\romannumeral#1\endcsname}{% @@ -2570,7 +2811,8 @@ adding new one}% % specified in the form "[c][height][?]{width}" % \begin{macrocode} \def\@ff@getstaticpos[#1][#2][#3]#4{\@ff@tmp@x=#4\relax -\@ff@tmp@y=#2} +\@ff@tmp@y=#2\relax +\def\ff@valign{#3}} % \end{macrocode} % Display the savebox associated with \gls{static} "#1" % \begin{macrocode} @@ -2677,6 +2919,43 @@ adding new one}% \expandafter\global\expandafter \gdef\csname @dynamicframe@\romannumeral\@colN\endcsname{}}{}}} % \end{macrocode} +% Display contents of dynamic box (contents stored in +% "\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 +% 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 +} +% \end{macrocode} % Typeset the dynamic box with its associated border. % \begin{macrocode} \newcommand{\@dodynamicbox}[1]{% @@ -2693,15 +2972,11 @@ adding new one}% \rotateframe{\csname @df@angle@\romannumeral#1\endcsname}{% \ifthenelse{\boolean{dynamicframe\romannumeral#1}}{% \@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}% -{\expandafter\expandafter\expandafter -\parbox\csname @df@dim@\romannumeral#1\endcsname -{\csname\ff@style\endcsname{\ff@contents}}}% +{\@dodfparbox{#1}}% {\csname\ff@frametype\endcsname}% }{% \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}{% -\expandafter\expandafter\expandafter -\parbox\csname @df@dim@\romannumeral#1\endcsname -{\csname \ff@style\endcsname{\ff@contents}}}% +\@dodfparbox{#1}}% }}} % \end{macrocode} % Now for the \gls{bbox}: @@ -2854,14 +3129,18 @@ adding new one}% % \begin{macrocode} \newlength\ffevenoffset \newcommand{\@ff@do@allframes}{% +\ffevenoffset=0pt\relax \if@twoside \ifodd\c@page \else -\ffevenoffset=-\oddsidemargin -\advance\ffevenoffset by \evensidemargin -\kern\ffevenoffset +\ffevenoffset=-\oddsidemargin\relax +\advance\ffevenoffset by \evensidemargin\relax +\kern\ffevenoffset\relax \fi \fi +\setlength{\@ff@tmp@x}{\textwidth}% +\advance\@ff@tmp@x by -\ffevenoffset\relax +\makebox[\@ff@tmp@x][l]{% \@s@tfr@mes{% \@ff@doallstatics \@@doheader @@ -2879,7 +3158,7 @@ adding new one}% \ifshowmargins \@ff@drawmargins \fi -}} +}}} % \end{macrocode} % This was modified from the output routine for standard % two column format. After "\@g@tnextcol", the register @@ -2899,7 +3178,7 @@ adding new one}% \@setcolbox\c@thisframe \if@specialpage \global\@specialpagefalse - \@nameuse{ps@\@specialstyle} + \@nameuse{ps@\@specialstyle}\relax \fi \if@twoside \ifodd\count\z@ @@ -3075,7 +3354,7 @@ adding new one}% \ifcase#2 \PackageError{flowfram}{% You have requested 0 flowframes!}{% -It does not make much sense to ask to create 0 flow frames} +It does not make much sense to ask to create 0 flow frames}% \or \onecolumninarea[#1]{#3}{#4}{#5}{#6}% \or @@ -3655,7 +3934,7 @@ which really doesn't make sense}% \if@twoside \computeleftedgeeven{\@ff@tmp@x@even}% \else -\setlength{\@ff@tmp@x@even}{\@ff@tmp@x} +\setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% \fi \computebottomedge{\@ff@tmp@y}% \addtolength{\@ff@tmp@x}{#1}% @@ -3955,7 +4234,9 @@ which really doesn't make sense}% \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}% +\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}% } @@ -3971,7 +4252,8 @@ which really doesn't make sense}% \advance\@thisstrip by -1\relax \next} -\newcommand{\@@nexthNband}[3]{\@nexthband{\ff@pages}{\@ff@staticW}{#1}{#2}{#3}\@nexthNband} +\newcommand{\@@nexthNband}[3]{% +\@nexthband{\ff@pages}{\@ff@staticW}{#1}{#2}{#3}\@nexthNband} % \end{macrocode} %\DescribeMacro{\makebackgroundframe} % Make one big \gls{static} that covers the entire page. @@ -4750,7 +5032,7 @@ Unknown section type '#3'}{}}{% \@ff@tmpN=0\relax \whiledo{\@ff@tmpN<\c@maxthumbtabs}{% \advance\@ff@tmpN by 1\relax -\@greyscale=\@ff@tmpN +\@greyscale=\@ff@tmpN\relax \multiply\@greyscale by 60\relax \divide\@greyscale by \c@maxthumbtabs \advance\@greyscale by 25\relax @@ -5042,11 +5324,11 @@ ttb file may not be up-to-date}}{% }% \fi \@ifundefined{@toc@\romannumeral#2}{% -\ta=\expandafter{#1}% -\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\ta}}{% -\ta=\expandafter{#1}% -\tb=\expandafter\expandafter\expandafter{\csname @toc@\romannumeral#2\endcsname}% -\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\tb\the\ta}}% +\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}}% % now do minitoc stuff. If the sectioning type is unknown, % assume it comes last \if@minitoc @@ -5059,9 +5341,9 @@ ttb file may not be up-to-date}}{% \expandafter\gdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{}\relax \else \ifnum\@ttb@level>\@ttb@minitoclevel - \ta=\expandafter{#1}\relax - \tb=\expandafter\expandafter\expandafter{\csname @minitoc@\romannumeral\c@maxminitoc\endcsname}\relax - \expandafter\xdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{\the\tb\the\ta} + \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 @@ -5287,8 +5569,10 @@ ttb file may not be up-to-date}}{% \dominitoc{\c@minitoc}\@afterheading}{}% }} % \end{macrocode} +%\iffalse % \begin{macrocode} %</flowfram.sty> % \end{macrocode} +%\fi %\Finale \endinput |