diff options
41 files changed, 21854 insertions, 11961 deletions
diff --git a/Master/texmf-dist/doc/latex/flowfram/CHANGES b/Master/texmf-dist/doc/latex/flowfram/CHANGES index ab0e4aca1c3..9b2069d7880 100644 --- a/Master/texmf-dist/doc/latex/flowfram/CHANGES +++ b/Master/texmf-dist/doc/latex/flowfram/CHANGES @@ -1,5 +1,94 @@ flowfram change log +1.14 (2012/11/10) : + + * Now loads xkeyval rather than keyval + + * Now loads xfor and etoolbox + + * Added new package options: + + - verbose (mainly for debugging messages) + + - thumbtabs (key=value option replacing options "ttbtitle", + "ttbnotitle", "ttbnum" and "ttbnonum") + + - pages + + * Changed the following package options to boolean key=value + (missing value assumed "true", providing backward compatibility): + + - rotate + + - color + + * Made \usedframebreaktrue global in definition of \framebreak + + * Added \usedframebreaktrue to definition of \newpage + + * New counter: "absolutepage" (keeps track of physical page rather + than page number given by \c@page). + + * Added pre-chapter hook \ffprechapterhook + + * Added page exclusion list. + + * New commands to set page list and page exclusion list: + + - \flowsetpagelist + - \flowsetexclusion + - \flowaddexclusion + - \dynamicsetpagelist + - \dynamicsetexclusion + - \dynamicaddexclusion + - \staticsetpagelist + - \staticsetexclusion + - \staticaddexclusion + + * New commands to make it easier to switch frames on and off + on-the-fly: + + - \flowswitchonnext + - \flowswitchoffnext + - \flowswitchonnextonly + - \flowswitchoffnextonly + - \flowswitchonnextodd + - \flowswitchoffnextodd + - \flowswitchonnextoddonly + - \flowswitchoffnextoddonly + + - \dynamicswitchonnext + - \dynamicswitchoffnext + - \dynamicswitchonnextonly + - \dynamicswitchoffnextonly + - \dynamicswitchonnextodd + - \dynamicswitchoffnextodd + - \dynamicswitchonnextoddonly + - \dynamicswitchoffnextoddonly + + - \staticswitchonnext + - \staticswitchoffnext + - \staticswitchonnextonly + - \staticswitchoffnextonly + - \staticswitchonnextodd + - \staticswitchoffnextodd + - \staticswitchonnextoddonly + - \staticswitchoffnextoddonly + + - \ffaddtoadjustframeshook + + * Added \fftolerance (now only warns about moving to unequal width + frame if width difference is greater than tolerance). + + * Added optional argument to \@sf@chckifthispg and + \@df@chckifthispg + + * Bug fixes: + + - removed unwanted spaces caused by eol character + + - added check for non-void boxes. + 1.13 (2010/01/23) : * Fixed 'undefined \ffareaevenx' bug. diff --git a/Master/texmf-dist/doc/latex/flowfram/README b/Master/texmf-dist/doc/latex/flowfram/README index b67134a19de..6850d26118c 100644 --- a/Master/texmf-dist/doc/latex/flowfram/README +++ b/Master/texmf-dist/doc/latex/flowfram/README @@ -1,6 +1,6 @@ -LaTeX Package : flowfram v 1.13 +LaTeX Package : flowfram v1.14 -Last Modified : 23rd January 2010 +Last Modified : 2012-11-10 Author : Nicola Talbot @@ -46,5 +46,5 @@ frames unless other packages (such as frames.perl) are used. This material is subject to the LaTeX Project Public License. See http://www.ctan.org/tex-archive/help/Catalogue/licenses.lppl.html for the details of that license. -http://theoval.cmp.uea.ac.uk/~nlct/ +http://www.dickimaw-books.com/ diff --git a/Master/texmf-dist/doc/latex/flowfram/ffuserguide.html b/Master/texmf-dist/doc/latex/flowfram/ffuserguide.html deleted file mode 100644 index cc817a62f25..00000000000 --- a/Master/texmf-dist/doc/latex/flowfram/ffuserguide.html +++ /dev/null @@ -1,4922 +0,0 @@ -<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN"> - -<!--Converted with LaTeX2HTML 2002 (1.67) -original version by: Nikos Drakos, CBLU, University of Leeds -* revised and updated by: Marcus Hennecke, Ross Moore, Herb Swan -* with significant contributions from: - Jens Lippmann, Marek Rouchal, Martin Wilck and others --> -<HTML> -<HEAD> -<TITLE>Creating Flow Frames for Posters, Brochures or Magazines using flowfram.sty v 1.13</TITLE> -<META NAME="description" CONTENT="Creating Flow Frames for Posters, Brochures or Magazines using flowfram.sty v 1.13"> -<META NAME="keywords" CONTENT="LaTeX; text frames; posters; brochures; magazines; newspapers"> -<META NAME="resource-type" CONTENT="document"> -<META NAME="distribution" CONTENT="global"> - -<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1"> -<META NAME="Generator" CONTENT="LaTeX2HTML v2002"> -<META HTTP-EQUIV="Content-Style-Type" CONTENT="text/css"> - - -</HEAD> - -<BODY > -<A NAME="top"></A> - -<P> - -<P> - -<H1 ALIGN=CENTER>Creating Flow Frames for Posters, Brochures or -Magazines using flowfram.sty v 1.13</H1> -<P ALIGN=CENTER><STRONG>Nicola L. C. Talbot</STRONG></P> -<BR><P ALIGN=CENTER><I>Date:</I> 23rd January 2010</P> -<P ALIGN=LEFT></P> -<BR><P><P ALIGN=LEFT><FONT SIZE=-1>Key words and phrases: LaTeX; text frames; posters; brochures; magazines; newspapers</FONT></P> - -<P> - -<P> -Dr Nicola Talbot -<BR> -School of Computing Sciences -<BR> -University of East Anglia -<BR> -Norwich. Norfolk. NR4 7TJ. -<BR> -United Kingdom -<BR><TT><A NAME="tex2html1" - HREF="http://theoval.cmp.uea.ac.uk/~nlct/">http://theoval.cmp.uea.ac.uk/~nlct/</A></TT> -<P> - -<P> - -<BR> - -<H2><A NAME="SECTION0010000000000000000000"> -Contents</A> -</H2> -<!--Table of Contents--> - -<UL> -<LI><A NAME="tex2html271" - HREF="ffuserguide.html#SECTION0020000000000000000000">1. Introduction</A> -<UL> -<LI><A NAME="tex2html272" - HREF="ffuserguide.html#SECTION0021000000000000000000">1.1 Draft Option</A> -<LI><A NAME="tex2html273" - HREF="ffuserguide.html#SECTION0022000000000000000000">1.2 Frame Stacking Order</A> -<LI><A NAME="tex2html274" - HREF="ffuserguide.html#SECTION0023000000000000000000">1.3 HTML</A> -</UL> -<BR> -<LI><A NAME="tex2html275" - HREF="ffuserguide.html#SECTION0030000000000000000000">2. Defining New Frames</A> -<UL> -<LI><A NAME="tex2html276" - HREF="ffuserguide.html#SECTION0031000000000000000000">2.1 Flow Frames</A> -<UL> -<LI><A NAME="tex2html277" - HREF="ffuserguide.html#SECTION0031100000000000000000">2.1.1 Prematurely Ending a Flow Frame</A> -</UL> -<LI><A NAME="tex2html278" - HREF="ffuserguide.html#SECTION0032000000000000000000">2.2 Static Frames</A> -<UL> -<LI><A NAME="tex2html279" - HREF="ffuserguide.html#SECTION0032100000000000000000">2.2.1 Important Notes</A> -</UL> -<LI><A NAME="tex2html280" - HREF="ffuserguide.html#SECTION0033000000000000000000">2.3 Dynamic Frames</A> -<UL> -<LI><A NAME="tex2html281" - HREF="ffuserguide.html#SECTION0033100000000000000000">2.3.1 Important Notes</A> -</UL> -</UL> -<BR> -<LI><A NAME="tex2html282" - HREF="ffuserguide.html#SECTION0040000000000000000000">3. Modifying Frame Attributes</A> -<UL> -<LI><A NAME="tex2html283" - HREF="ffuserguide.html#SECTION0041000000000000000000">3.1 Non-Rectangular Frames</A> -</UL> -<BR> -<LI><A NAME="tex2html284" - HREF="ffuserguide.html#SECTION0050000000000000000000">4. Locations and Dimensions</A> -<UL> -<LI><A NAME="tex2html285" - HREF="ffuserguide.html#SECTION0051000000000000000000">4.1 Determining the Location of the Typeblock</A> -<LI><A NAME="tex2html286" - HREF="ffuserguide.html#SECTION0052000000000000000000">4.2 Determining the Dimensions and Locations of Frames</A> -<LI><A NAME="tex2html287" - HREF="ffuserguide.html#SECTION0053000000000000000000">4.3 Relative Locations</A> -</UL> -<BR> -<LI><A NAME="tex2html288" - HREF="ffuserguide.html#SECTION0060000000000000000000">5. Predefined Layouts</A> -<UL> -<LI><A NAME="tex2html289" - HREF="ffuserguide.html#SECTION0061000000000000000000">5.1 Column Styles</A> -<LI><A NAME="tex2html290" - HREF="ffuserguide.html#SECTION0062000000000000000000">5.2 Column Styles with an Additional Frame</A> -<LI><A NAME="tex2html291" - HREF="ffuserguide.html#SECTION0063000000000000000000">5.3 Right to Left Columns</A> -<LI><A NAME="tex2html292" - HREF="ffuserguide.html#SECTION0064000000000000000000">5.4 Backdrop Effects</A> -<UL> -<LI><A NAME="tex2html293" - HREF="ffuserguide.html#SECTION0064100000000000000000">5.4.1 Vertical stripe effects</A> -<LI><A NAME="tex2html294" - HREF="ffuserguide.html#SECTION0064200000000000000000">5.4.2 Horizontal stripe effect</A> -<LI><A NAME="tex2html295" - HREF="ffuserguide.html#SECTION0064300000000000000000">5.4.3 Background Frame</A> -<LI><A NAME="tex2html296" - HREF="ffuserguide.html#SECTION0064400000000000000000">5.4.4 Vertical and Horizontal Rules</A> -</UL> -</UL> -<BR> -<LI><A NAME="tex2html297" - HREF="ffuserguide.html#SECTION0070000000000000000000">6. Thumbtabs and Minitocs</A> -<UL> -<LI><A NAME="tex2html298" - HREF="ffuserguide.html#SECTION0071000000000000000000">6.1 Thumbtabs</A> -<LI><A NAME="tex2html299" - HREF="ffuserguide.html#SECTION0072000000000000000000">6.2 Minitocs</A> -</UL> -<BR> -<LI><A NAME="tex2html300" - HREF="ffuserguide.html#SECTION0080000000000000000000">7. Global Settings</A> -<UL> -<LI><A NAME="tex2html301" - HREF="ffuserguide.html#SECTION0081000000000000000000">7.1 Macros</A> -<LI><A NAME="tex2html302" - HREF="ffuserguide.html#SECTION0082000000000000000000">7.2 Lengths</A> -<LI><A NAME="tex2html303" - HREF="ffuserguide.html#SECTION0083000000000000000000">7.3 Counters</A> -</UL> -<BR> -<LI><A NAME="tex2html304" - HREF="ffuserguide.html#SECTION0090000000000000000000">8. Troubleshooting</A> -<UL> -<LI><A NAME="tex2html305" - HREF="ffuserguide.html#SECTION0091000000000000000000">8.1 General Queries</A> -<LI><A NAME="tex2html306" - HREF="ffuserguide.html#SECTION0092000000000000000000">8.2 Unexpected Output</A> -<LI><A NAME="tex2html307" - HREF="ffuserguide.html#SECTION0093000000000000000000">8.3 Error Messages</A> -</UL> -<BR> -<LI><A NAME="tex2html308" - HREF="ffuserguide.html#SECTION00100000000000000000000">Glossary</A> -<LI><A NAME="tex2html309" - HREF="ffuserguide.html#SECTION00110000000000000000000">Index</A> -</UL> -<!--End of Table of Contents--> -<P> - -<P> - -<P> - -<H1><A NAME="SECTION0020000000000000000000"> -1. Introduction</A> -</H1> - -<P> - -<I>This chapter provides a brief overview of the package, -the package options and the various frame types.</I> -<P> - -<P> -The <TT>flowfram</TT> package is a LaTeX2e package designed to -enable you to create text <A HREF=ffuserguide.html#gls:frame NAME="11452">frames</A> in a document such that -the contents of the <TT>document</TT><A NAME="3586"></A> 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. - -<P> -The <TT>flowfram</TT> package provides three types of frame: -<A HREF=ffuserguide.html#gls:flow NAME="11467">flow frames</A>, <A HREF=ffuserguide.html#gls:static NAME="11474">static frames</A> and <A HREF=ffuserguide.html#gls:dynamic NAME="11481">dynamic frames</A> with dimensions and -positions specified by the -user<A NAME="tex2html2" - HREF="#foot3519"><SUP>1.1</SUP></A>. -The main contents of the document environment flow from -one flow frame to the next in the order of definition, -whereas the contents of the static and dynamic frames -are set explicitly using commands described in -<A HREF="ffuserguide.html#sec:modattr">Modifying Frame -Attributes</A>. Note that -unless otherwise stated, all co-ordinates are relative to the -bottom left hand corner of the <A HREF=ffuserguide.html#gls:typeblock NAME="11492">typeblock</A>. If you have -a two-sided document, the absolute position of the typeblock may vary depending on the values of <TT>\oddsidemargin</TT><A NAME="3589"></A> -and <TT>\evensidemargin</TT><A NAME="3594"></A>, and all the frames will shift -accordingly unless otherwise indicated. - -<P> -Since floats (such as figures and tables) can only go in -flow frames, this package provides -the additional environments: -<TT>staticfigure</TT><A NAME="3599"></A> and -<TT>statictable</TT><A NAME="3602"></A> which can be used in static frames and dynamic frames. Unlike their <TT>figure</TT><A NAME="3605"></A> and -<TT>table</TT><A NAME="3608"></A> counterparts, they are fixed in place, and -so do not take an optional placement specifier. The -<TT>\caption</TT><A NAME="3611"></A> and <TT>\label</TT><A NAME="3616"></A> commands can -be used within <TT>staticfigure</TT><A NAME="3621"></A> and <TT>statictable</TT><A NAME="3624"></A> as -usual, but remember that if the frame is displayed on multiple -pages, you may end up with multiply defined labels. - -<P> -The standard <TT>figure</TT><A NAME="3627"></A> and <TT>table</TT><A NAME="3630"></A> commands will -behave as usual in the flow frames, but their starred versions, -<TT>figure*</TT><A NAME="3633"></A> and <TT>table*</TT><A NAME="3636"></A> behave no differently -from <TT>figure</TT><A NAME="3639"></A> and <TT>table</TT><A NAME="3642"></A><A NAME="tex2html3" - HREF="#foot405"><SUP>1.2</SUP></A>. - -<P> -This package has only been tested with a limited number of -class files and packages. Since it modifies the output routine, -it is likely to conflict with any other package which also -does this. - -<P> -You should load <TT>flowfram</TT> <I>after</I> <TT>hyperref</TT><A NAME="3645"></A> and any -colour package (e.g. <TT>color</TT><A NAME="3648"></A>). -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0021000000000000000000"> -1.1 Draft Option</A> -</H1> - -<P> -The <TT>flowfram</TT> package has the package option <TT>draft</TT><A NAME="3655"></A> -which will draw the <A HREF=ffuserguide.html#gls:bbox NAME="11562">bounding boxes</A> for -each <A HREF=ffuserguide.html#gls:frame NAME="11569">frame</A> that has been defined. At the bottom right of each -bounding box (except for the bounding box denoting the -<A HREF=ffuserguide.html#gls:typeblock NAME="11584">typeblock</A>), a marker will be shown in the form: -[<I>T</I>:<I>idn</I>;<I>idl</I>], where <I>T</I> is a single -letter denoting the frame type, <I>idn</I> is the <A HREF=ffuserguide.html#gls:idn NAME="11595">identification number (IDN)</A> for the frame and <I>idl</I> is the <A HREF=ffuserguide.html#gls:idl NAME="11606">identification label (IDL)</A> for that -frame. Values of <I>T</I> are: <TT>F</TT> (<A HREF=ffuserguide.html#gls:flow NAME="11617">flow frame</A>), -<TT>S</TT> (<A HREF=ffuserguide.html#gls:static NAME="11624">static frame</A>) or <TT>D</TT> (<A HREF=ffuserguide.html#gls:dynamic NAME="11631">dynamic frame</A>). -Markers of the form: [M:<I>idn</I>] indicate that the -bounding box is the area taken up by the margin for flow frame with IDN <I>idn</I>. Note that even if a frame has been rotated, the bounding box will not be rotated. - -<P> -If you want to show or hide specific types of bounding -boxes, you can use one of the following commands: - -<UL> -<LI><TT>\showtypeblocktrue</TT><A NAME="3658"></A> Display the bounding box for the typeblock. - -<P> -</LI> -<LI><TT>\showtypeblockfalse</TT><A NAME="3663"></A> Do not display the bounding box for the typeblock. - -<P> -</LI> -<LI><TT>\showmarginstrue</TT><A NAME="3668"></A> Display the bounding box for the margins. - -<P> -</LI> -<LI><TT>\showmarginsfalse</TT><A NAME="3673"></A> Do not display the bounding box for the margins. - -<P> -</LI> -<LI><TT>\showframebboxtrue</TT><A NAME="3678"></A> Display the bounding box for the frames. - -<P> -</LI> -<LI><TT>\showframebboxfalse</TT><A NAME="3683"></A> Do not display the bounding box for the frames. - -<P> -</LI> -</UL> - -<P> -You can see the layout for the current page (irrespective of -whether or not the <TT>draft</TT><A NAME="3688"></A> option has been set) using -the command: - -<P> -<TT>\flowframeshowlayout</TT><A NAME="3691"></A> -<P> - -<P> -The <TT>flowfram</TT> package also has the options <TT>nocolor</TT><A NAME="3696"></A> -and <TT>norotate</TT><A NAME="3699"></A> for previewers that can not process -colour or rotating specials. (Otherwise you may end up with -large black rectangles obscuring your text, instead of -the pale background colour you were hoping for.) -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0022000000000000000000"></A> -<A NAME="sec:stacking"></A> -<BR> -1.2 Frame Stacking Order -</H1> - -<P> -The material on each page is placed in the following order: - -<OL> -<LI>Each <A HREF=ffuserguide.html#gls:static NAME="11705">static frame</A> defined for that page in ascending -order of <A HREF=ffuserguide.html#gls:idn NAME="11712">IDN</A>. - -<P> -</LI> -<LI>Each <A HREF=ffuserguide.html#gls:flow NAME="11719">flow frame</A> defined for that page in ascending -order of <A HREF=ffuserguide.html#gls:idn NAME="11726">IDN</A>. - -<P> -</LI> -<LI>Each <A HREF=ffuserguide.html#gls:dynamic NAME="11733">dynamic frame</A> defined for that page in ascending -order of <A HREF=ffuserguide.html#gls:idn NAME="11740">IDN</A>. - -<P> -</LI> -<LI><A HREF=ffuserguide.html#gls:bbox NAME="11747">Bounding boxes</A> if the <TT>draft</TT><A NAME="3706"></A> -package option has been used. -</LI> -</OL> - -<P> -This ordering can be used to determine if you want something -to overlay or underlay everything else on the page. -Note that the <A HREF=ffuserguide.html#gls:frame NAME="11754">frames</A> do not interact with each other. If -you have two or more overlapping frames, the text in each -frame will not attempt to wrap around the other -frames, but will simply overwrite -them.<A NAME="tex2html17" - HREF="#foot3520"><SUP>1.3</SUP></A> -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0023000000000000000000"> -1.3 HTML</A> -</H1> - -<P> -The <TT>flowfram</TT> package now comes with a LaTeX2HTML style -file <TT>flowfram.perl</TT>. However this style file is not meant -to emulate the <TT>flowfram</TT> package, but is provided to facilitate -creating a plain HTML document from the LaTeX source. All -<A HREF=ffuserguide.html#gls:frame NAME="11782">frame</A>-related information is ignored. By default, the contents -of any <A HREF=ffuserguide.html#gls:static NAME="11785">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="11788">dynamic</A> frames are ignored, but this can be changed using -<PRE> -\HTMLset{showstaticcontents}{1} -</PRE> -to show the contents of the static frames or -<PRE> -\HTMLset{showdynamiccontents}{1} -</PRE> -to show the contents of the dynamic frames (where <code>\HTMLset</code> -is defined in the <TT>html</TT><A NAME="3717"></A> package). Note that this places the -text at the point in the document where the contents are set. -This style file does not create HTML frames. It can therefore be -used to create an accessible version of the PDF document -such as this document. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0030000000000000000000"> -2. Defining New Frames</A> -</H1> - -<P> - -<I>This chapter describes how to define new frames, and how to -identify and set frame contents. See also -<A HREF="ffuserguide.html#sec:layouts">Predefined -Layouts</A>.</I> -<P> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0031000000000000000000"> -2.1 Flow Frames</A> -</H1> - -<P> -The <A HREF=ffuserguide.html#gls:flow NAME="11865">flow frame</A> is the principle type of <A HREF=ffuserguide.html#gls:frame NAME="11872">frame</A>. -The text of the <TT>document</TT><A NAME="3728"></A> 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. To define -a new flow frame use: - -<P> -<TT>\newflowframe</TT><A NAME="3731"></A><TT>[<I>page list</I>]{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}[<I>label</I>]</TT> -<P> -where <I>width</I> is the width of the frame, <I>height</I> is -the height of the frame, (<I>x</I>,<I>y</I>) is the -position of the bottom left hand corner of the frame relative to the bottom left hand corner of the -<A HREF=ffuserguide.html#gls:typeblock NAME="11903">typeblock</A><A NAME="tex2html29" - HREF="#foot3522"><SUP>2.1</SUP></A>. -The first optional argument, <I>page list</I>, indicates the -list of pages for which this frame is defined. - -<P> -A <A HREF=ffuserguide.html#gls:pglist NAME="11914">page list</A> can either be specified by the keywords: -<TT>all</TT>, <TT>odd</TT>, <TT>even</TT> or <TT>none</TT>, or -by a comma-separated list of either individual page numbers or -<A HREF=ffuserguide.html#gls:pgrange NAME="11921">page ranges</A>. If <I>page list</I> is -omitted, <TT>all</TT> is assumed. -A page range can be a closed -range (e.g. <code>2-8</code>) or an open range (e.g. -<code><10</code> or <code>>5</code>). For example: <code><3,5,7-11,>15</code> -indicates pages 1, 2, 5, 7, 8, 9, 10, 11 and all pages -greater than page 15. These page numbers refer to the value of -the page counter<A NAME="tex2html30" - HREF="#foot3523"><SUP>2.2</SUP></A>, -so if you have a page i and a page 1, they -will both have the same layout (unless you change the -page list setting somewhere between the two pages). - -<P> -Each frame has its own unique <A HREF=ffuserguide.html#gls:idn NAME="11936">IDN</A>, -corresponding to the order in which it was defined. So the first -flow frame to be defined has IDN 1, -the second has IDN 2, and so on. This number can then -be used to identify the frame when you want to modify its -settings. Alternatively, you can assign a unique <A HREF=ffuserguide.html#gls:idl NAME="11959">IDL</A> to the -frame using the final optional argument <I>label</I>. - -<P> -You can retrieve the IDL for a given flow frame from its IDN using: - -<P> -<TT>\getflowlabel</TT><A NAME="3748"></A><TT>{<I>idn</I>}</TT> -<P> -Conversely, you can retrieve the IDN for a given flow frame from its IDL using: - -<P> -<TT>\getflowid</TT><A NAME="3755"></A><TT>{<I>cmd</I>}{<I>idl</I>}</TT> -<P> -where <I>cmd</I> is a control sequence which will be used to -store the frame's IDN. -For example: -<PRE> -The label for the first flow frame is ``\getflowlabel{1}''. -The flow frame labelled ``main'' has IDN \getflowid{\myid}{main}\myid. -</PRE> - (See also -<A HREF="ffuserguide.html#sec:counters">Counters</A>.) - -<P> -Note that <TT>\getflowlabel</TT><A NAME="3764"></A> doesn't perform any check to -determine whether the supplied IDN is valid, but -<TT>\getflowid</TT><A NAME="3769"></A> will generate an error if the supplied -IDL is undefined. - -<P> -By default, the flow frame will not have a border, but the -starred form - -<P> -<TT>\newflowframe*</TT><A NAME="3774"></A><TT>[<I>page list</I>]{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}[<I>label</I>]</TT> -<P> -will place a plain border around the flow frame. -(See <A HREF="ffuserguide.html#sec:modattr">Modifying frame -attributes</A> if you want a different border.) - -<P> -Note that if the document continues beyond the last -defined flow frame (for example, the flow frames have only -been defined on pages 1 to 10, but the document contains 11 -pages) then a single flow frame will be defined, -emulating one column mode for all subsequent pages. - -<P> -In the PDF version of this document, -I used the command -<PRE> -\newflowframe{0.6\textwidth}{\textheight}{0pt}{0pt}[main] -</PRE> -to define the main flow frame<A NAME="tex2html31" - HREF="#foot3524"><SUP>2.3</SUP></A>. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H2><A NAME="SECTION0031100000000000000000"></A> -<A NAME="sec:framebreak"></A> -<BR> -2.1.1 Prematurely Ending a Flow Frame -</H2> - -<P> -You can force text to move immediately to the next defined -<A HREF=ffuserguide.html#gls:flow NAME="12031">flow frame</A> using one of the commands: <TT>\newpage</TT><A NAME="3800"></A>, -<TT>\pagebreak</TT><A NAME="3805"></A> or <TT>\framebreak</TT><A NAME="3810"></A>. -The first two work in an analogous way to the way they -work in standard two column mode. The last one, -<TT>\framebreak</TT><A NAME="3815"></A>, is required -when a paragraph spans two flow frames of different widths, as TeX's output routine does not -adjust to the new value of <TT>\hsize</TT><A NAME="3820"></A> until the last -paragraph of the previous <A HREF=ffuserguide.html#gls:frame NAME="12042">frame</A> 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. - -<P> -If you want to start a new page, rather than simply move to the -next frame, use the command <TT>\clearpage</TT><A NAME="3825"></A>, -or for two-sided documents, to start on the next odd page -do <TT>\cleardoublepage</TT><A NAME="3830"></A>. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0032000000000000000000"></A> -<A NAME="sec:static"></A> -<BR> -2.2 Static Frames -</H1> - -<P> -A <A HREF=ffuserguide.html#gls:static NAME="12156">static frame</A> is a rectangular area in which text neither -flows into nor flows out of.<A NAME="tex2html41" - HREF="#foot2894"><SUP>2.4</SUP></A> -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. - -<P> -As from version 1.03 it is now possible to have -static frames with non-rectangular contents, see -<A HREF="ffuserguide.html#sec:parshape">Non-Rectangular -Frames</A> for further details. - -<P> -A new static frame is defined using the command: - -<P> -<TT>\newstaticframe</TT><A NAME="3839"></A><TT>[<I>page list</I>]{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}[<I>label</I>]</TT> -<P> -where, as with <TT>\newflowframe</TT><A NAME="3856"></A>, <I>width</I> is the width of -the frame, <I>height</I> is the height of the frame, -(<I>x</I>,<I>y</I>) is the position of the bottom left hand -corner of the frame relative to the bottom left hand -corner of the <A HREF=ffuserguide.html#gls:typeblock NAME="12191">typeblock</A>. The first optional argument, -<I>page list</I>, indicates the <A HREF=ffuserguide.html#gls:pglist NAME="12198">page list</A> for which this -static frame should appear, and the final optional argument, -<I>label</I> is a unique textual <A HREF=ffuserguide.html#gls:idl NAME="12209">IDL</A> which you can use to -identify this frame. If no label is specified, you -can refer to this frame by its unique <A HREF=ffuserguide.html#gls:idn NAME="12224">IDN</A>. -The first static frame to be defined has IDN 1, the second -has IDN 2, and so on. - -<P> -You can retrieve the IDL for a given static frame from its IDN using: - -<P> -<TT>\getstaticlabel</TT><A NAME="3861"></A><TT>{<I>idn</I>}</TT> -<P> -Conversely, you can retrieve the IDN for a given static frame from its IDL using: - -<P> -<TT>\getstaticid</TT><A NAME="3868"></A><TT>{<I>cmd</I>}{<I>idl</I>}</TT> -<P> -where <I>cmd</I> is a control sequence which will be used to -store the frame's IDN. -For example: -<PRE> -The label for the first static frame is ``\getstaticlabel{1}''. -The static frame labelled ``backleft'' has IDN -\getstaticid{\myid}{backleft}\myid. -</PRE> - -<P> -Note that <TT>\getstaticlabel</TT><A NAME="3877"></A> doesn't perform any check to -determine whether the supplied IDN is valid, but -<TT>\getstaticid</TT><A NAME="3882"></A> will generate an error if the supplied -IDL is undefined. - -<P> -As with <TT>\newflowframe</TT><A NAME="3887"></A>, there is a starred version - -<P> -<TT>\newstaticframe*</TT><A NAME="3892"></A><TT>[<I>page list</I>]{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}[<I>label</I>]</TT> -<P> -which will place a border around that static frame. - -<P> -To set the contents of a particular static frame, you can -either use the <TT>staticcontents</TT><A NAME="3909"></A> environment: - -<P> -<code>\begin{staticcontents}</code><TT>{<I>IDN</I>}</TT> -<BR><I>contents</I> -<BR><code>\end{staticcontents}</code> -<P> -where <I>IDN</I> is the unique IDN associated with -that static frame and <I>contents</I> is the contents of the -static frame, or you can use the -command: - -<P> -<TT>\setstaticcontents</TT><A NAME="3914"></A><TT>{<I>IDN</I>}{<I>contents</I>}</TT> -<P> -which will do the same thing. - -<P> -There are starred versions available for both the environment -and the command to enable you to identify the static frame by its associated IDL rather than its IDN: - -<P> -<code>\begin{staticcontents*}</code><TT>{<I>IDL</I>}</TT> -<BR><I>contents</I> -<BR><code>\end{staticcontents*}</code> -<P> -or the equivalent: - -<P> -<TT>\setstaticcontents*</TT><A NAME="3925"></A><TT>{<I>IDL</I>}{<I>contents</I>}</TT> -<P> - -<P> -In the body of <TT>staticcontents</TT><A NAME="3934"></A> or <TT>staticcontents*</TT><A NAME="3937"></A>, -or in the second argument of <TT>\setstaticcontents</TT><A NAME="3940"></A> -or <TT>\setstaticcontents*</TT><A NAME="3945"></A>, you can move onto another -static frame using: - -<P> -<TT>\continueonframe</TT><A NAME="3950"></A><TT>[<I>continuation text</I>]{<I>id</I>}</TT> -<P> -If <TT>staticcontents*</TT><A NAME="3959"></A> or <TT>\setstaticcontents*</TT><A NAME="3962"></A> are -being used, <I>id</I> refers to the IDL of the next -static frame, otherwise <I>id</I> refers to the IDN of the -next static frame. -The optional argument specifies some continuation text to place -at the end of the first static frame. For example, suppose I have -defined two static frames labelled "frame1" and "frame2", then -<PRE> -\begin{staticcontents*}{frame1} -Some text in the first frame. (Let's -assume this frame is somewhere on the -left half of the page.) -\continueonframe[Continued on the right]{frame2} -This is some text in the second frame. (Let's -assume this frame is somewhere on the -right half of the same page.) -\end{staticcontents*} -</PRE> -is equivalent to: -<PRE> -\begin{staticcontents*}{frame1} -Some text in the first frame. (Let's -assume this frame is somewhere on the -left half of the page.) -\ffcontinuedtextlayout{Continued on the right} -\end{staticcontents*} -\begin{staticcontents*}{frame2}\par\noindent -This is some text in the second frame. (Let's -assume this frame is somewhere on the -right half of the same page.) -\end{staticcontents*} -</PRE> -where - -<P> -<TT>\ffcontinuedtextlayout</TT><A NAME="3967"></A><TT>{<I>text</I>}</TT> -<P> -governs how the continuation text should be displayed. The font used -to display the continuation text is given by - -<P> -<TT>\ffcontinuedtextfont</TT><A NAME="3974"></A><TT>{<I>text</I>}</TT> -<P> - -<P> -Note that this assumes that it should appear that no paragraph -break occurs in the transition between the two frames. If you -want a paragraph break you need to explicitly put one before -and after <TT>\continueonframe</TT><A NAME="3981"></A>. For example: -<PRE> -\begin{staticcontents*}{frame1} -Some text in the first frame. (Let's -assume this frame is somewhere on the -left half of the page.) - -\continueonframe[Continued on the right]{frame2} - -This is some text in the second frame. (Let's -assume this frame is somewhere on the -right half of the same page.) -\end{staticcontents*} -</PRE> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H2><A NAME="SECTION0032100000000000000000"> -2.2.1 Important Notes</A> -</H2> - -<P> - -<UL> -<LI>When you set the contents of a <A HREF=ffuserguide.html#gls:static NAME="12344">static frame</A>, the contents are -immediately typeset and stored in a box until it is time to put -the contents on the page. This means that if you use any information -that varies throughout the document (such as the page number) the -value that is current when you set the static frame's contents -will be the value used. - -<P> -</LI> -<LI>However, if <TT>\label</TT><A NAME="3990"></A> is used inside a static frame, -the label information will be written to the auxiliary file each -time the static frame is displayed until the contents of that -frame have been changed. This means that you may -end up with multiply defined labels. -</LI> -</UL> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0033000000000000000000"></A> -<A NAME="sec:dynamic"></A> -<BR> -2.3 Dynamic Frames -</H1> - -<P> -A <A HREF=ffuserguide.html#gls:dynamic NAME="12478">dynamic frame</A> is similar to a <A HREF=ffuserguide.html#gls:static NAME="12485">static frame</A> except that 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.<A NAME="tex2html48" - HREF="#foot3525"><SUP>2.5</SUP></A>) - -<P> -As from version 1.03 it is now possible to have -dynamic frames with non-rectangular contents, see -<A HREF="ffuserguide.html#sec:parshape">Non-Rectangular -Frames</A> for further details. - -<P> -To create a new dynamic frame, use the command: - -<P> -<TT>\newdynamicframe</TT><A NAME="4006"></A><TT>[<I>page list</I>]{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}[<I>label</I>]</TT> -<P> -The parameters are exactly the same as for <TT>\newflowframe</TT><A NAME="4023"></A> -and <TT>\newstaticframe</TT><A NAME="4028"></A>. -Again, each dynamic frame has an associated unique <A HREF=ffuserguide.html#gls:idn NAME="12512">IDN</A>, -starting from 1 for the first dynamic frame to be defined, and -a unique <A HREF=ffuserguide.html#gls:idl NAME="12523">IDL</A> can also be set using the final optional -argument <I>label</I>. - -<P> -You can retrieve the IDL for a given dynamic frame from its IDN using: - -<P> -<TT>\getdynamiclabel</TT><A NAME="4033"></A><TT>{<I>idn</I>}</TT> -<P> -Conversely, you can retrieve the IDN for a given dynamic frame from its IDL using: - -<P> -<TT>\getdynamicid</TT><A NAME="4040"></A><TT>{<I>cmd</I>}{<I>idl</I>}</TT> -<P> -where <I>cmd</I> is a control sequence which will be used to -store the frame's IDN. - -<P> -For example: -<PRE> -The label for the first dynamic frame is ``\getdynamiclabel{1}''. -The dynamic frame labelled ``chaphead'' has IDN -\getdynamicid{\myid}{chaphead}\myid. -</PRE> - -<P> -Note that <TT>\getdynamiclabel</TT><A NAME="4049"></A> doesn't perform any check to -determine whether the supplied IDN is valid, but -<TT>\getdynamicid</TT><A NAME="4054"></A> will generate an error if the supplied -IDL is undefined. - -<P> -As with the other <A HREF=ffuserguide.html#gls:frame NAME="12566">frame</A> types, there is also a starred -version - -<P> -<TT>\newdynamicframe*</TT><A NAME="4059"></A><TT>[<I>page list</I>]{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}[<I>label</I>]</TT> -<P> -which will place a plain border around the dynamic frame. -For example, in the PDF version -of this document I used the command -<PRE> -\newdynamicframe{0.38\textwidth}{\textheight}{0.62\textwidth}{0pt}[chaphead] -</PRE> -which created a frame on the -right on odd pages and on the left on even pages. (The -position for the even pages is set using <TT>\setdynamicframe</TT><A NAME="4076"></A> -defined in <A HREF="ffuserguide.html#sec:modattr">Modifying -Frame Attributes</A>.) - -<P> -The contents of a dynamic frame are set using the command: - -<P> -<TT>\setdynamiccontents</TT><A NAME="4081"></A><TT>{<I>id</I>}{<I>contents</I>}</TT> -<P> -where <I>id</I> is the unique IDN associated with that -dynamic frame, and <I>contents</I> is the contents of the -dynamic frame. Alternatively, if you have assigned an IDL, -<I>label</I>, to the dynamic frame, you can use the starred -version: - -<P> -<TT>\setdynamiccontents*</TT><A NAME="4090"></A><TT>{<I>label</I>}{<I>contents</I>}</TT> -<P> -As with most LaTeX commands, you can't use verbatim text<A NAME="4098"></A> in -<I>contents</I>. - -<P> -As from version 1.09, the contents can also be set using the -<TT>dynamiccontents</TT><A NAME="4100"></A> environment: - -<P> -<code>\begin{dynamiccontents}</code><TT>{<I>id</I>}</TT> -<BR><I>contents</I> -<BR><code>\end{dynamiccontents}</code> -<P> -or the <TT>dynamiccontents*</TT><A NAME="4105"></A> environment: - -<P> -<code>\begin{dynamiccontents*}</code><TT>{label}</TT> -<BR><I>contents</I> -<BR><code>\end{dynamiccontents*}</code> -<P> -<A NAME="pg:verb"></A>Note that you can't use verbatim text<A NAME="4108"></A> within the -<TT>dynamiccontents</TT><A NAME="4110"></A> or <TT>dynamiccontents*</TT><A NAME="4113"></A> environments. - -<P> -You can additionally append text to a dynamic frame using -either: - -<P> -<TT>\appenddynamiccontents</TT><A NAME="4116"></A><TT>{<I>id</I>}{<I>contents</I>}</TT> -<P> -or: - -<P> -<TT>\appenddynamiccontents*</TT><A NAME="4125"></A><TT>{<I>label</I>}{<I>contents</I>}</TT> -<P> - -<P> -If <TT>\chapter</TT><A NAME="4134"></A> is defined, you can make the chapter titles -appear in a dynamic frame using the command - -<P> -<TT>\dfchaphead</TT><A NAME="4139"></A><TT>{<I>IDN</I>}</TT> -<P> -where <I>IDN</I> is the <A HREF=ffuserguide.html#gls:idn NAME="12609">IDN</A> of the dynamic frame. There is -also a starred version of this command if you want to -use the <A HREF=ffuserguide.html#gls:idl NAME="12616">IDL</A> instead of the IDN. For example, in -the PDF version of this document, I used the command: -<PRE> -\dfchaphead*{chaphead} -</PRE> - -<P> -The headers and footers can be turned into dynamic frames using the command - -<P> -<TT>\makedfheaderfooter</TT><A NAME="4146"></A> -<P> -This will create two dynamic frames with IDLs <TT>header</TT> and <TT>footer</TT>. The page style will be used as -usual, but you can then move or resize the header and footer using -<TT>\setdynamicframe</TT><A NAME="4151"></A> (described <A HREF="ffuserguide.html#sec:modattr">later</A>). - -<P> -In the body of <TT>dynamiccontents</TT><A NAME="4156"></A> or <TT>dynamiccontents*</TT><A NAME="4159"></A>, -you can move onto another dynamic frame using: - -<P> -<TT>\continueonframe</TT><A NAME="4162"></A><TT>[<I>continuation text</I>]{id}</TT> -<P> -If this command occurs within <TT>dynamiccontents*</TT><A NAME="4170"></A>, <I>id</I> -refers to the IDL of the new frame, otherwise it refers -to the IDN of the new frame. -The optional argument specifies some continuation text to place -at the end of the first dynamic frame. For example, suppose I have -defined two dynamic frames labelled "frame1" and "frame2", then -<PRE> -\begin{dynamiccontents*}{frame1} -Some text in the first frame. (Let's -assume this frame is somewhere on the -left half of the page.) -\continueonframe[Continued on the right]{frame2} -This is some text in the second frame. (Let's -assume this frame is somewhere on the -right half of the same page.) -\end{dynamiccontents*} -</PRE> -is equivalent to: -<PRE> -\begin{dynamiccontents*}{frame1} -Some text in the first frame. (Let's -assume this frame is somewhere on the -left half of the page.) -\ffcontinuedtextlayout{Continued on the right} -\end{dynamiccontents*} -\begin{dynamiccontents*}{frame2}\par\noindent -This is some text in the second frame. (Let's -assume this frame is somewhere on the -right half of the same page.) -\end{dynamiccontents*} -</PRE> -where - -<P> -<TT>\ffcontinuedtextlayout</TT><A NAME="4173"></A><TT>{<I>text</I>}</TT> -<P> -governs how the continuation text should be displayed. The font used -to display the continuation text is given by - -<P> -<TT>\ffcontinuedtextfont</TT><A NAME="4180"></A><TT>{<I>text</I>}</TT> -<P> - -<P> -Note that this assumes that it should appear that no paragraph -break occurs in the transition between the two frames. If you -want a paragraph break you need to explicitly put one before -and after <TT>\continueonframe</TT><A NAME="4187"></A>. For example: -<PRE> -\begin{dynamiccontents*}{frame1} -Some text in the first frame. (Let's -assume this frame is somewhere on the -left half of the page.) - -\continueonframe[Continued on the right]{frame2} - -This is some text in the second frame. (Let's -assume this frame is somewhere on the -right half of the same page.) -\end{dynamiccontents*} -</PRE> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H2><A NAME="SECTION0033100000000000000000"> -2.3.1 Important Notes</A> -</H2> - -<P> - -<UL> -<LI>Verbatim text<A NAME="961"></A> can't be used in a -<A HREF=ffuserguide.html#gls:dynamic NAME="12668">dynamic frame</A>. This includes -the body of the <TT>dynamiccontents</TT><A NAME="4196"></A> and <TT>dynamiccontents*</TT><A NAME="4199"></A> -environments. - -<P> -</LI> -<LI><TT>\continueonframe</TT><A NAME="4202"></A> can't be used in the -argument of any of the commands that set the contents of a -dynamic frame, such as <TT>\setdynamiccontents</TT><A NAME="4207"></A>. - -<P> -</LI> -<LI>Dynamic frames are painted on the page after all the -static and flow <A HREF=ffuserguide.html#gls:frame NAME="12683">frames</A>. If the location of a dynamic frame overlaps the location of any static or flow frames, the contents -of the dynamic frame will obscure the contents of the overlapping -frames. -</LI> -</UL> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0040000000000000000000"></A> -<A NAME="sec:modattr"></A> -<BR> -3. Modifying Frame Attributes -</H1> - -<P> - -<I>This chapter describes how to modify frame attributes, -such as the size and location.</I> -<P> - -<P> -Once you have defined the <A HREF=ffuserguide.html#gls:flow NAME="12832">flow frames</A>, <A HREF=ffuserguide.html#gls:static NAME="12839">static frames</A> and -<A HREF=ffuserguide.html#gls:dynamic NAME="12846">dynamic frames</A>, their attributes can be changed. The three types of -<A HREF=ffuserguide.html#gls:frame NAME="12853">frame</A> mostly have the same set of attributes, but some are -specific to a certain type. - -<P> -Flow frame attributes are modified using -either the command: - -<P> -<TT>\setflowframe</TT><A NAME="4216"></A><TT>{<I>idn list</I>}{<I>key-val list</I>}</TT> -<P> -or the starred version: - -<P> -<TT>\setflowframe*</TT><A NAME="4225"></A><TT>{<I>label list</I>}{<I>key-val list</I>}</TT> -<P> -or the attributes for all flow frames can be set using: - -<P> -<TT>\setallflowframes</TT><A NAME="4234"></A><TT>{<I>key-val list</I>}</TT> -<P> -Static frame attributes are modified using either the command: - -<P> -<TT>\setstaticframe</TT><A NAME="4241"></A><TT>{<I>idn list</I>}{<I>key-val list</I>}</TT> -<P> -or the starred version: - -<P> -<TT>\setstaticframe*</TT><A NAME="4250"></A><TT>{<I>label list</I>}{<I>key-val list</I>}</TT> -<P> -or the attributes for all static frames can be set using: - -<P> -<TT>\setallstaticframes</TT><A NAME="4259"></A><TT>{<I>key-val list</I>}</TT> -<P> -Dynamic frame attributes are modified using either the command: - -<P> -<TT>\setdynamicframe</TT><A NAME="4266"></A><TT>{<I>idn list</I>}{<I>key-val list</I>}</TT> -<P> -or the starred version: - -<P> -<TT>\setdynamicframe*</TT><A NAME="4275"></A><TT>{<I>label list</I>}{<I>key-val list</I>}</TT> -<P> -or the attributes for all dynamic frames can be set using: - -<P> -<TT>\setalldynamicframes</TT><A NAME="4284"></A><TT>{<I>key-val list</I>}</TT> -<P> - -<P> -In each of the above, <I>idn list</I> can either be one of the -keywords: <TT>all</TT>, <TT>odd</TT> or <TT>even</TT> (indicating -all frames of that type, frames of that type whose -<A HREF=ffuserguide.html#gls:idn NAME="12892">IDN</A> is odd or frames of that type whose IDN is even) or it can be a comma-separated list of ID numbers, or -IDN ranges. - -<P> -For the starred versions, <I>label list</I> should be -a comma-separated list of <A HREF=ffuserguide.html#gls:idl NAME="12911">IDLs</A>. Note that you can't use the -above keywords or have ranges in <I>label list</I>. - -<P> -The <I>key-val list</I> argument must be a comma-separated -list of <I>key</I>=<I>value</I> pairs, indicating which -attributes to modify. The available values are as follows: - -<P> -<DL> -<DT><STRONG>width<A NAME="4290"></A>=<I>length</I></STRONG></DT> -<DD>The width of the frame. - -<P> -</DD> -<DT><STRONG>height<A NAME="4291"></A>=<I>length</I></STRONG></DT> -<DD>The height of the frame. - -<P> -</DD> -<DT><STRONG>x<A NAME="4292"></A>=<I>length</I></STRONG></DT> -<DD>The x-coordinate of the frame for all pages on which it is defined. - -<P> -</DD> -<DT><STRONG>y<A NAME="4293"></A>=<I>length</I></STRONG></DT> -<DD>The y-coordinate of the frame for all pages on which it is defined. - -<P> -</DD> -<DT><STRONG>evenx<A NAME="4294"></A>=<I>length</I></STRONG></DT> -<DD>The x-coordinate of the -frame for all even pages on which it is defined, but only if -the document is a two-sided document. - -<P> -For example, in the PDF version of -this document, I used the commands -<PRE> -\setflowframe*{main}{evenx=0.4\textwidth} -\setdynamicframe*{chaphead}{evenx=0pt} -</PRE> -to switch the positions of the flow frame and dynamic frame containing the document text and chapter headings, respectively, -on even pages. - -<P> -You can swap the odd and even values using the commands: - -<P> -<TT>\ffswapoddeven</TT><A NAME="4296"></A><TT>{<I>IDN</I>}</TT> -<P> -(for flow frames) - -<P> -<TT>\sfswapoddeven</TT><A NAME="4303"></A><TT>{<I>IDN</I>}</TT> -<P> -(for static frames) or - -<P> -<TT>\dfswapoddeven</TT><A NAME="4310"></A><TT>{<I>IDN</I>}</TT> -<P> -(for dynamic frames). These -commands all have starred versions which take the frame's -IDL instead of its IDN. - -<P> -</DD> -<DT><STRONG>eveny<A NAME="4316"></A>=<I>length</I></STRONG></DT> -<DD>The y-coordinate of the -frame for all even pages on which it is defined, but only if -the document is a two-sided document. - -<P> -</DD> -<DT><STRONG>oddx<A NAME="4317"></A>=<I>length</I></STRONG></DT> -<DD>The x-coordinate of the -frame for all odd pages on which it is defined, if the -document is two-sided. - -<P> -</DD> -<DT><STRONG>oddy<A NAME="4318"></A>=<I>length</I></STRONG></DT> -<DD>The y-coordinate of the -frame for all odd pages on which it is defined, -if the document is two-sided. - -<P> -</DD> -<DT><STRONG>valign<A NAME="4319"></A>=<I>pos</I></STRONG></DT> -<DD>Change the vertical alignment -of material inside a static or dynamic frame. The value <I>pos</I> -may be one of: <TT>c</TT>, <TT>t</TT> or <TT>b</TT>. -The default for static frames is <TT>c</TT>, the default -for dynamic frames is <TT>t</TT>. -This key is not available for flow frames. - -<P> -</DD> -<DT><STRONG>label<A NAME="4320"></A>=<I>text</I></STRONG></DT> -<DD>Assign an IDL to the frame. -(If you do not specify a label when you first define a frame it will be given a label identical to its IDN.) This key is -provided to allow the user to label frames that have been -generated by certain predefined layout commands described -in <A HREF="ffuserguide.html#sec:layouts">Predefined -Layouts</A>. - -<P> -</DD> -<DT><STRONG>border<A NAME="4321"></A>=<I>style</I></STRONG></DT> -<DD>The style of the border around the -frame, this can take the values: <TT>none</TT> (no border), -<TT>plain</TT> (plain border) or the name of a LaTeX -<A HREF=ffuserguide.html#gls:fcmd NAME="13010">frame making command</A> without the preceding backslash. (I admit -the notation is a little confusing, a frame making command is a command that places some kind of border around its -argument, such as <TT>\fbox</TT><A NAME="4323"></A>, or if you are using the -<TT>fancybox</TT><A NAME="4328"></A> package: <TT>\doublebox</TT><A NAME="4331"></A>, <TT>\ovalbox</TT><A NAME="4336"></A>, -<TT>\Ovalbox</TT><A NAME="4341"></A> and <TT>\shadowbox</TT><A NAME="4346"></A>.) -The value <TT>fbox</TT> is equivalent to <TT>plain</TT>. - -<P> -For example, to make the first static frame have an oval border: -<PRE> -\setstaticframe{1}{border=ovalbox} -</PRE> -Or you can define your own border: -<PRE> -\newcommand{\greenyellowbox}[1]{\fcolorbox{green}{yellow}{#1}} -\setstaticframe{1}{border=greenyellowbox} -</PRE> - -<P> -This next example uses the <TT>tikz</TT><A NAME="4351"></A> package to define a fancy -frame, so you need to use: -<PRE> -\usepackage{tikz} -\usetikzlibrary{snakes} -</PRE> -The border command is defined as follows: -<PRE> -\newlength\fancywidth -\newlength\fancyheight -\newlength\fancydepth - -\newcommand{\fancyborder}[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); -}} -</PRE> -This makes a bumpy border, but it uses <TT>\flowframesep</TT><A NAME="4354"></A> to -determine the gap between the border and the text and uses -<TT>\flowframerule</TT><A NAME="4359"></A> to set the line width. This ensures that -the offset (see below) is correctly computed. - -<P> -This new border can now be applied to a frame: -<PRE> -\setstaticframe{1}{border=fancyborder} -</PRE> - -<P> -</DD> -<DT><STRONG>offset<A NAME="4363"></A>=<I>offset</I></STRONG></DT> -<DD>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 -<A HREF=ffuserguide.html#gls:bbox NAME="13025">bounding box</A> of the text inside the border. The <TT>flowfram</TT> -package is able to compute the border for the following -known frame making commands: <TT>\fbox</TT><A NAME="4365"></A>, <TT>\ovalbox</TT><A NAME="4370"></A>, -<TT>\Ovalbox</TT><A NAME="4375"></A>, <TT>\doublebox</TT><A NAME="4380"></A> and <TT>\shadowbox</TT><A NAME="4385"></A>. -For all other borders, the offset is assumed to be -<TT>-\flowframesep-\flowframerule</TT>. -If you define your own frame making command, you may need to -specify the offset explicitly, or the flow/static/dynamic frames -may end up shifted to the right or left. - -<P> -The above examples can compute their own offsets, however, -if you were to do, for example: -<PRE> -\newcommand{\thickgreenyellowbox}[1]{% -{\setlength{\fboxsep}{5pt}\setlength{\fboxrule}{6pt}% -\fcolorbox{green}{yellow}{#1}}} -</PRE> -Then you would have to specify the offset. In this example, -the offset is -5pt-6pt=-11pt, -so you would need to do: -<PRE> -\setstaticframe{1}{border=thickgreenyellowbox,offset=-11pt} -</PRE> - -<P> -</DD> -<DT><STRONG>bordercolor<A NAME="4389"></A>=<I>colour</I></STRONG></DT> -<DD>The colour of the border -if you are using a standard frame making command. -The colour can either be specified as, e.g. <TT>green</TT>, -or including the colour model, e.g. <code>[rgb]{0,1,0}</code>. -For example: -<PRE> -\setallflowframes{border=doublebox,bordercolor=[rgb]{1,0,0.5}} -</PRE> - -<P> -</DD> -<DT><STRONG>textcolor<A NAME="4390"></A>=<I>colour</I></STRONG></DT> -<DD>The text colour for that -frame. Again, the colour can either be specified as, -e.g. <TT>green</TT>, or including the colour model, -e.g. <code>[rgb]{0,1,0}</code>. - -<P> -</DD> -<DT><STRONG>backcolor<A NAME="4391"></A>=<I>colour</I></STRONG></DT> -<DD>The background colour for -that frame. Again, the colour can either be specified as, -e.g. <TT>green</TT>, or including the colour model, -e.g. <code>[rgb]{0,1,0}</code>. Note that the background colour -only extends as far as the bounding box, not the border. -If you want it to extend as far as the border, you -will need to define your own border type (see above). - -<P> -</DD> -<DT><STRONG>pages<A NAME="4392"></A>=<I>page list</I></STRONG></DT> -<DD>The <A HREF=ffuserguide.html#gls:pglist NAME="13052">list of -pages</A> for which the frame should appear. This can either have -the values: <TT>all</TT>, <TT>even</TT>, <TT>odd</TT> or <TT>none</TT> -(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 -<A HREF=ffuserguide.html#gls:pgrange NAME="13067">page ranges</A>. -For example: -<PRE> -\setdynamicframe{1}{pages=1,5,8-10} -</PRE> - -<P> -</DD> -<DT><STRONG>margin<A NAME="4393"></A>=<I>side</I></STRONG></DT> -<DD>The side of -the flow frame that its corresponding margin should go on. This -can take the values <TT>left</TT>, <TT>right</TT>, -<TT>inner</TT> or <TT>outer</TT>. This setting is only available -for flow frames. - -<P> -</DD> -<DT><STRONG>clear<A NAME="4394"></A>=<I>boolean</I></STRONG></DT> -<DD>If this value is set, the static or dynamic frame will be -cleared at the start of the -next page, otherwise it will only be cleared on the next -occurrence of <TT>\setstaticcontents</TT><A NAME="4396"></A> or the -<TT>staticcontents</TT><A NAME="4401"></A> environment, or the -<TT>\setdynamiccontents</TT><A NAME="4404"></A>, depending on the frame type. -This value is not set by default. This setting is not -available for flow frames. - -<P> -For example, in the PDF version of this document, I -prevented the chapter heading reappearing on every page using -the command: -<PRE> -\setdynamicframe*{chaphead}{clear} -</PRE> - -<P> -If you want to put <TT>\label</TT><A NAME="4409"></A> in a static or dynamic frame, you -should use the clear<A NAME="4413"></A> key to prevent the label from being -multiply defined. - -<P> -</DD> -<DT><STRONG>style<A NAME="4414"></A>=<I>cmd</I></STRONG></DT> -<DD>This should be -the name of a command <I>without</I> the preceding backslash, -to be applied to the contents of the specified dynamic frame. -The command may either be a declaration, for example: -<PRE> -\setalldynamicframes{style=large} -</PRE> -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: -<PRE> -\setalldynamicframes{style=textbf} -</PRE> -which will make the text for all the dynamic frames come out in -bold. To unset a style, do <code>style=none</code>. -This setting is only available for dynamic frames. - -<P> -</DD> -<DT><STRONG>angle<A NAME="4415"></A>=<I>n</I></STRONG></DT> -<DD>Rotate the contents of the -frame by <I>n</I> degrees (new to -version 1.02). Note that the <A HREF=ffuserguide.html#gls:bbox NAME="13106">bounding boxes</A> will not -appear rotated. - -<P> -</DD> -<DT><STRONG>shape<A NAME="4416"></A>=<I>shape command</I></STRONG></DT> -<DD>Define a shape for -the contents of a static frame or dynamic frame (new -to version 1.03). If <I>shape command</I> is <TT>\relax</TT><A NAME="4418"></A>, no -paragraph shape will be applied. See -<A HREF="ffuserguide.html#sec:parshape">Non-Rectangular -Frames</A> for further details. -</DD> -</DL> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0041000000000000000000"></A> -<A NAME="sec:parshape"></A> -<BR> -3.1 Non-Rectangular Frames -</H1> - -<P> -As from version 1.03, it is now possible to specify -non-rectangular <A HREF=ffuserguide.html#gls:static NAME="13178">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="13181">dynamic</A> frames (but not <A HREF=ffuserguide.html#gls:flow NAME="13188">flow frames</A>). Note -that the -<A HREF=ffuserguide.html#gls:bbox NAME="13195">bounding box</A> will still appear as a rectangle despite the -<A HREF=ffuserguide.html#gls:frame NAME="13202">frame's</A> shape setting. You may use either TeX's -<TT>\parshape</TT><A NAME="4431"></A> command, or the <TT>\shapepar</TT><A NAME="4436"></A> -command defined in Donald Arseneau's <TT>shapepar</TT><A NAME="4441"></A> -package (if using <TT>\shapepar</TT><A NAME="4444"></A>, remember to include -the <TT>shapepar</TT><A NAME="4449"></A> package.) - -<P> -Note that it is better to use <TT>\parshape</TT><A NAME="4452"></A> instead -of <TT>\shapepar</TT><A NAME="4457"></A> as the latter is more restrictive and -requires more processing. However, <TT>\shapepar</TT><A NAME="4462"></A> provides -greater flexibility in the type of shape that can be used. -<DL> -<DT><STRONG><TT>\parshape</TT><A NAME="4467"></A></STRONG></DT> -<DD>With <TT>\parshape</TT><A NAME="4472"></A> you can not have cut-outs in the middle, -top or bottom of a frame, however it is possible to have cut-outs -in the left or right side of the frame. When used with the -shape<A NAME="4476"></A> key for static or dynamic frames, the effects of -<TT>\par</TT><A NAME="4478"></A> and the sectioning commands are modified to allow -the paragraph shape to extend beyond a single paragraph, and -to allow sectioning commands (but not <TT>\chapter</TT><A NAME="4483"></A> -or <TT>\part</TT><A NAME="4488"></A>). - -<P> -</DD> -<DT><STRONG><TT>\shapepar</TT><A NAME="4493"></A></STRONG></DT> -<DD>With <TT>\shapepar</TT><A NAME="4498"></A> you may -have cut-outs, but you may not have any sectioning commands, -paragraph breaks, vertical spacing or mathematics. You can -simulate a paragraph break using <TT>\simpar</TT><A NAME="4503"></A>, but this -is not recommended. The size of the shape depends on the -amount of text, so the shape will expand or contract as you -add or delete text. See the <TT>shapepar</TT><A NAME="4508"></A> documentation for -more details. -</DD> -</DL> - -<P> -To restore a frame to its default rectangular setting use -shape<A NAME="4510"></A>=<TT>\relax</TT><A NAME="4512"></A>. - -<P> -For those unfamiliar with TeX's <TT>\parshape</TT><A NAME="4517"></A> command, -the syntax is as follows: -<BR> -<BR><TT>\parshape</TT><A NAME="4522"></A>=<I>n</I> <I>i<SUB>1</SUB></I> <I>l<SUB>1</SUB></I> -<I>i<SUB>2</SUB></I> <I>l<SUB>2</SUB></I> ... -<I>i<SUB>n</SUB></I> <I>l<SUB>n</SUB></I> -<BR> -<BR> -where <I>n</I> is the number of (<I>i<SUB>j</SUB></I> <I>l<SUB>j</SUB></I>) pairs and -<I>i<SUB>j</SUB></I> specifies the left -indentation for the jth line and -<I>l<SUB>j</SUB></I> specifies the length of -the jth line. - -<P> -For example, to create a -zigzag shaped static frame (whose IDN is <TT>shapedt</TT>): - -<PRE> -\setstaticframe*{shapedt}{shape={\parshape=20 -0.6\linewidth 0.4\linewidth 0.5\linewidth 0.4\linewidth -0.4\linewidth 0.4\linewidth 0.3\linewidth 0.4\linewidth -0.2\linewidth 0.4\linewidth 0.1\linewidth 0.4\linewidth -0pt 0.4\linewidth 0.1\linewidth 0.4\linewidth -0.2\linewidth 0.4\linewidth 0.3\linewidth 0.4\linewidth -0.4\linewidth 0.4\linewidth 0.5\linewidth 0.4\linewidth -0.6\linewidth 0.4\linewidth 0.5\linewidth 0.4\linewidth -0.4\linewidth 0.4\linewidth 0.3\linewidth 0.4\linewidth -0.2\linewidth 0.4\linewidth 0.1\linewidth 0.4\linewidth -0pt 0.4\linewidth 0.1\linewidth 0.4\linewidth -}} -</PRE> - -<P> - -<P> -The syntax for <TT>\shapepar</TT><A NAME="4547"></A> is more complicated, see -the <TT>shapepar</TT><A NAME="4552"></A> documentation for more details. In general: -<BR> -<BR><TT>\shapepar</TT><A NAME="4555"></A>{<I>shape specs</I>} -<BR> -<BR> -The <TT>shapepar</TT><A NAME="4560"></A> package has four predefined shapes: -<TT>\squareshape</TT><A NAME="4563"></A>, <TT>\diamondshape</TT><A NAME="4568"></A>, -<TT>\heartshape</TT><A NAME="4573"></A> and <TT>\nutshape</TT><A NAME="4578"></A>. - -<P> -For example, to assign -a heart shape to the static frame whose IDL is <TT>shapedb</TT>: -<PRE> -\setstaticframe*{shapedb}{shape={\shapepar\heartshape}} -</PRE> -To reset the frame back to its original rectangular shape -do: -<PRE> -\setstaticframe*{shapedb}{shape=\relax} -</PRE> - -<P> - - -<P> -The <TT>flowfram</TT> package currently does not support any other -paragraph shape making commands. Any other commands would -have to be used explicitly within the contents of the frame. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0050000000000000000000"> -4. Locations and Dimensions</A> -</H1> - -<P> - -<I>This chapter describes some of the commands provided to -determine the locations and dimensions of frames.</I> -<P> - -<P> -This chapter describes some of the commands available that can -be used to determine the locations and dimensions of <A HREF=ffuserguide.html#gls:frame NAME="13228">frames</A>. -See the accompanying document <TT>flowfram.pdf</TT> for more details of -these commands or for other commands not listed here. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0051000000000000000000"></A> -<A NAME="sec:typeblockloc"></A> -<BR> -4.1 Determining the Location of the Typeblock -</H1> - -<P> -As mentioned earlier, when you create new <A HREF=ffuserguide.html#gls:frame NAME="13260">frames</A>, -you must specify their location relative to the <A HREF=ffuserguide.html#gls:typeblock NAME="13267">typeblock</A>, but -what if you want to position a frame a set distance from the -edge of the paper? The <TT>flowfram</TT> package provides the following -commands that compute the distance from the typeblock to the -paper boundary: - -<P> - -<P> -<TT>\computeleftedgeodd</TT><A NAME="4609"></A><TT>{<I>length</I>}</TT> -<P> -This computes the position of the left edge of the (odd) page, relative -to the left side of the typeblock, and stores the result in -<I>length</I>. - -<P> - -<P> -<TT>\computeleftedgeeven</TT><A NAME="4616"></A><TT>{<I>length</I>}</TT> -<P> -As above, but for even pages. - -<P> - -<P> -<TT>\computetopedge</TT><A NAME="4623"></A><TT>{<I>length</I>}</TT> -<P> -This computes the top edge of the page, relative to the bottom of the -typeblock, and stores the result in <I>length</I>. - -<P> - -<P> -<TT>\computebottomedge</TT><A NAME="4630"></A><TT>{<I>length</I>}</TT> -<P> -This computes the bottom edge of the page, relative to the bottom of the -typeblock, and stores the result in <I>length</I>. - -<P> - -<P> -<TT>\computerightedgeodd</TT><A NAME="4637"></A><TT>{<I>length</I>}</TT> -<P> -This computes the position of the right edge of the (odd) page, -relative to the left side of the typeblock, and store the result -in <I>length</I>. - -<P> - -<P> -<TT>\computerightedgeeven</TT><A NAME="4644"></A><TT>{<I>length</I>}</TT> -<P> -As above, but for even pages. - -<P> -Note that in all cases <I>length</I> must be a LaTeX length -command. - -<P> -For example, if you want to create a frame whose bottom -left corner is one inch from the left edge of the page -and half an inch from the bottom edge of the page (this -assumes odd and even pages have the same margins): -<PRE> -% define two new lengths to represent the x and y coords -\newlength{\myX} -\newlength{\myY} -% compute the distance from the typeblock to the paper edge -\computeleftedgeodd{\myX} -\computebottomedge{\myY} -% Add the absolute co-ordinates to get co-ordinates -% relative to the typeblock -\addtolength{\myX}{1in} -\addtolength{\myY}{0.5in} -</PRE> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0052000000000000000000"> -4.2 Determining the Dimensions and Locations of Frames</A> -</H1> - -<P> -It is possible to determine the dimensions and locations -of a <A HREF=ffuserguide.html#gls:frame NAME="13311">frame</A> using one of the following commands: - -<P> - -<UL> -<LI><TT>\getstaticbounds</TT><A NAME="4655"></A><TT>{<I>IDN</I>}</TT> -</LI> -<LI><TT>\getstaticbounds*</TT><A NAME="4662"></A><TT>{<I>IDL</I>}</TT> -</LI> -<LI><TT>\getflowbounds</TT><A NAME="4669"></A><TT>{<I>IDN</I>}</TT> -</LI> -<LI><TT>\getflowbounds*</TT><A NAME="4676"></A><TT>{<I>IDL</I>}</TT> -</LI> -<LI><TT>\getdynamicbounds</TT><A NAME="4683"></A><TT>{<I>IDN</I>}</TT> -</LI> -<LI><TT>\getdynamicbounds*</TT><A NAME="4690"></A><TT>{<I>IDL</I>}</TT> -</LI> -</UL> - -<P> -For each command, the starred version takes an <A HREF=ffuserguide.html#gls:idl NAME="13318">IDL</A> as the -argument, and the unstarred version takes an <A HREF=ffuserguide.html#gls:idn NAME="13325">IDN</A> as the -argument. Each command stores the relevant information in the -lengths <TT>\ffareawidth</TT><A NAME="4697"></A>, <TT>\ffareaheight</TT><A NAME="4702"></A>, -<TT>\ffareax</TT><A NAME="4707"></A> and <TT>\ffareay</TT><A NAME="4712"></A>. - -<P> -For other related commands, see the section "Determining Dimensions -and Locations" in the accompanying document -<TT>flowfram.pdf</TT>. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0053000000000000000000"> -4.3 Relative Locations</A> -</H1> - -<P> -To print the relative location of one <A HREF=ffuserguide.html#gls:frame NAME="13385">frame</A> from another do: - -<P> -<TT>\relativeframelocation</TT><A NAME="4721"></A><TT>{<I>type1</I>}{<I>idn1</I>}{<I>type2</I>}{<I>idn2</I>}</TT> -<P> -where <I>type1</I> and <I>idn1</I> indicate the type and <A HREF=ffuserguide.html#gls:idn NAME="13392">IDN</A> of -the first frame, and <I>type2</I> and <I>idn2</I> indicate the type -and <A HREF=ffuserguide.html#gls:idn NAME="13399">IDN</A> of the second frame. There is also a starred version: - -<P> -<TT>\relativeframelocation*</TT><A NAME="4734"></A><TT>{<I>type1</I>}{<I>idl1</I>}{<I>type2</I>}{<I>idll</I>}</TT> -<P> -where <I>idl1</I> and <I>idl2</I> indicate the <A HREF=ffuserguide.html#gls:idl NAME="13406">IDL</A> of the -first and second frames, respectively. Both the above commands will -print one of the following: - -<P> - -<UL> -<LI><TT>\FFaboveleft</TT><A NAME="4747"></A> if the first frame is above left of the -second frame. - -<P> -</LI> -<LI><TT>\FFaboveright</TT><A NAME="4752"></A> if the first frame is above right of the -second frame. - -<P> -</LI> -<LI><TT>\FFabove</TT><A NAME="4757"></A> if the first frame is above the second frame. - -<P> -</LI> -<LI><TT>\FFbelowleft</TT><A NAME="4762"></A> if the first frame is below left of the -second frame. - -<P> -</LI> -<LI><TT>\FFbelowright</TT><A NAME="4767"></A> if the first frame is below right of the -second frame. - -<P> -</LI> -<LI><TT>\FFbelow</TT><A NAME="4772"></A> if the first frame is below the second frame. - -<P> -</LI> -<LI><TT>\FFleft</TT><A NAME="4777"></A> if the first frame is to the left of the -second frame. - -<P> -</LI> -<LI><TT>\FFright</TT><A NAME="4782"></A> if the first frame is to the right of the -second frame. - -<P> -</LI> -<LI><TT>\FFoverlap</TT><A NAME="4787"></A> if both frames overlap. -</LI> -</UL> - -<P> -A frame is considered to be above another frame if the bottom edge -of the first frame is higher than the top edge of the second frame. - -<P> -A frame is considered to be below another frame if the top edge -of the first frame is lower than the bottom edge of the second frame. - -<P> -A frame is considered to be to the left of another frame if the right -edge of the first frame is to the left of the left edge of the second -frame. - -<P> -A frame is considered to be to the right of another frame if the left -edge of the first frame is to the right of the right edge of the -second frame. - -<P> -Note that the relative locations are taken for the current page, -regardless of whether either of the two frames are displayed on that -page. If the current page is odd, then the frame settings for odd pages -will be compared, otherwise the frame settings for even pages will -be compared. However remember that the first paragraph of each page -retains the settings in place at the start of the paragraph, so if the -frames have different locations for odd and even pages, then -<TT>\relativeframelocation</TT><A NAME="4792"></A> may use the wrong page settings if it -is used at the start of the page. - -<P> -For example, the PDF version of this document defined a -<A HREF=ffuserguide.html#gls:flow NAME="13413">flow frame</A> labelled <TT>main</TT> and a -<A HREF=ffuserguide.html#gls:dynamic NAME="13420">dynamic frame</A> labelled <TT>chaphead</TT> which is -used to display the chapter headings. The following code -<PRE> -The dynamic frame is -\relativeframelocation*{dynamic}{chaphead}{flow}{main} -of the flow frame. -</PRE> -produces: -The dynamic frame is -on -the left of the flow frame. - -<P> -There are some short cut commands for frames of the -same type: - -<P> -<TT>\reldynamicloc</TT><A NAME="4797"></A><TT>{<I>idn1</I>}{<I>idn2</I>}</TT> -<P> -This is equivalent to: -<BR> -<BR><TT>\relativeframelocation</TT><A NAME="4806"></A><TT>{dynamic}{<I>idn1</I>}{dynamic}{<I>idn2</I>}</TT> - -<P> -<TT>\relstaticloc</TT><A NAME="4817"></A><TT>{<I>idn1</I>}{<I>idn2</I>}</TT> -<P> -This is equivalent to: -<BR> -<BR><TT>\relativeframelocation</TT><A NAME="4826"></A><TT>{static}{<I>idn1</I>}{static}{<I>idn2</I>}</TT> - -<P> -<TT>\relflowloc</TT><A NAME="4837"></A><TT>{<I>idn1</I>}{<I>idn2</I>}</TT> -<P> -This is equivalent to: -<BR> -<BR><TT>\relativeframelocation</TT><A NAME="4846"></A><TT>{flow}{<I>idn1</I>}{flow}{<I>idn2</I>}</TT> -<BR> -<BR> -Each of the above commands also has a starred version that uses the -<A HREF=ffuserguide.html#gls:idl NAME="13431">IDL</A> instead of the <A HREF=ffuserguide.html#gls:idn NAME="13438">IDN</A>. - -<P> -These commands may be used in the optional argument of -<TT>\continueonframe</TT><A NAME="4857"></A> for frames that are on the same page. -For example: -<PRE> -\begin{dynamiccontents}{1} -Some text in the first dynamic frame that goes on for -quite a bit longer than this example. -\continueonframe[continued \reldynamicloc{2}{1}]{2} -This text is in the second dynamic frame which is -somewhere on the same page. -\end{dynamiccontents} -</PRE> - -<P> -For additional commands that determine the relative location of one -frame from another, see the section "Determining the relative -location of one frame from another" in the accompanying document -<TT>flowfram.pdf</TT>. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0060000000000000000000"></A> -<A NAME="sec:layouts"></A> -<BR> -5. Predefined Layouts -</H1> - -<P> - -<I>This chapter describes commands that create frames -arranged in a predefined layout.</I> -<P> - -<P> -The <TT>flowfram</TT> package has a number of commands which -create <A HREF=ffuserguide.html#gls:frame NAME="13450">frames</A> in a predefined layout. These commands -may only be used in the preamble. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0061000000000000000000"> -5.1 Column Styles</A> -</H1> - -<P> -The standard LaTeX commands <TT>\onecolumn</TT><A NAME="4870"></A> and -<TT>\twocolumn</TT><A NAME="4875"></A> are redefined to create one or two -<A HREF=ffuserguide.html#gls:flow NAME="13498">flow frames</A> that fill the entire <A HREF=ffuserguide.html#gls:typeblock NAME="13505">typeblock</A> separated -from each other (in the case of <TT>\twocolumn</TT><A NAME="4880"></A>) by a -gap of width <TT>\columnsep</TT><A NAME="4885"></A>. The height of these -flow frames may not be exactly as high as the typeblock, -as their height is adjusted to make them an integer -multiple of <TT>\baselineskip</TT><A NAME="4890"></A>. You can switch off this -automatic adjustment using the command: - -<P> -<TT>\ffvadjustfalse</TT><A NAME="4895"></A> -<P> - -<P> -The <TT>\onecolumn</TT><A NAME="4900"></A> and <TT>\twocolumn</TT><A NAME="4905"></A> commands -also take an optional argument which is the <A HREF=ffuserguide.html#gls:pglist NAME="13520">page list</A> for which those flow frames are defined. In addition -to <TT>\onecolumn</TT><A NAME="4910"></A> and <TT>\twocolumn</TT><A NAME="4915"></A>, the -following commands are also defined: - -<P> - -<P> -<TT>\Ncolumn</TT><A NAME="4920"></A><TT>[<I>pages</I>]{<I>n</I>}</TT> -<P> -This creates <I>n</I> column flow frames each separated by a -distance of <TT>\columnsep</TT><A NAME="4929"></A>. - -<P> - -<P> -<TT>\onecolumninarea</TT><A NAME="4934"></A><TT>[<I>pages</I>]{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This creates a single flow frame to fill the given area, -adjusting the height so that it is an integer multiple of -<TT>\baselineskip</TT><A NAME="4949"></A>. - -<P> - -<P> -<TT>\twocolumninarea</TT><A NAME="4954"></A><TT>[<I>pages</I>]{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This creates two column flow frames separated by a distance -of <TT>\columnsep</TT><A NAME="4969"></A> filling the entire area specified, again -adjusting the height so that it is an integer multiple of -<TT>\baselineskip</TT><A NAME="4974"></A>. The columns are separated by a gap of -<TT>\columnsep</TT><A NAME="4979"></A>. - -<P> - -<P> -<TT>\Ncolumninarea</TT><A NAME="4984"></A><TT>[<I>pages</I>]{<I>n</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is a more general form of <TT>\twocolumninarea</TT><A NAME="5001"></A> making -<I>n</I> flow frames instead of two. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0062000000000000000000"> -5.2 Column Styles with an Additional Frame</A> -</H1> - -<P> -As well as the column-style <A HREF=ffuserguide.html#gls:flow NAME="14132">flow frames</A> defined -above, it is also possible to define -<I>n</I> columns with an additional <A HREF=ffuserguide.html#gls:frame NAME="14139">frame</A> spanning either -above or below them. There will be a vertical gap of -approximately<A NAME="tex2html92" - HREF="#foot3053"><SUP>5.1</SUP></A> -<TT>\vcolumnsep</TT><A NAME="5015"></A> between the columns -and the extra frame. In each of the following definitions, -the argument <I>pages</I> is the <A HREF=ffuserguide.html#gls:pglist NAME="14146">page list</A> for which -the frames are defined, <I>n</I> is the number of -columns required, <I>type</I> is the type of frame to go -above or below the columns (this may be one of: <TT>flow</TT>, -<TT>static</TT> or <TT>dynamic</TT>). The area in which the -new frames should fill is defined by <I>width</I>, <I>height</I> -(the width and height of the area) and <I>x</I>, <I>y</I> -(the position of the bottom left hand corner of the area -relative to the bottom left hand corner of the <A HREF=ffuserguide.html#gls:typeblock NAME="14157">typeblock</A>.) - -<P> -The height of the additional frame at the top or bottom of -the columns is given by <I>H</I>. - -<P> - -<P> -<TT>\onecolumntopinarea</TT><A NAME="5020"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This creates one flow frame with a <I>type</I> frame above it, filling -the area specified. - -<P> - -<P> -<TT>\twocolumntopinarea</TT><A NAME="5039"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This creates two column-style flow frames with a <I>type</I> frame -above them, filling the area specified. - -<P> - -<P> -<TT>\Ncolumntopinarea</TT><A NAME="5058"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>n</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This creates <I>n</I> column-style flow frames with a <I>type</I> -frame above them, filling the area specified. - -<P> - -<P> -<TT>\onecolumnbottominarea</TT><A NAME="5079"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This creates one flow frame with a <I>type</I> frame underneath it, -filling the area specified. - -<P> - -<P> -<TT>\twocolumnbottominarea</TT><A NAME="5098"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This creates two column-style flow frames with a <I>type</I> frame -below them, filling the area specified. - -<P> - -<P> -<TT>\Ncolumnbottominarea</TT><A NAME="5117"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>n</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This creates <I>n</I> column-style flow frames with a <I>type</I> -frame below them, filling the area specified. - -<P> -The following commands are special cases of the above: - -<P> - -<P> -<TT>\onecolumnStopinarea</TT><A NAME="5138"></A><TT>[<I>pages</I>]{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\onecolumntopinarea</TT><A NAME="5155"></A><TT>[<I>pages</I>]{static}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\onecolumnDtopinarea</TT><A NAME="5173"></A><TT>[<I>pages</I>]{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\onecolumntopinarea</TT><A NAME="5190"></A><TT>[<I>pages</I>]{dynamic}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\onecolumntop</TT><A NAME="5208"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>H</I>}</TT> -<P> -As <TT>\onecolumntopinarea</TT><A NAME="5219"></A> where the area is the entire -typeblock. - -<P> - -<P> -<TT>\onecolumnStop</TT><A NAME="5224"></A><TT>[<I>pages</I>]{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\onecolumntop</TT><A NAME="5233"></A><TT>[<I>pages</I>]{static}{<I>H</I>}</TT> - -<P> - -<P> -<TT>\onecolumnDtop</TT><A NAME="5243"></A><TT>[<I>pages</I>]{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\onecolumntop</TT><A NAME="5252"></A><TT>[<I>pages</I>]{dynamic}{<I>H</I>}</TT> - -<P> - -<P> -<TT>\twocolumnStopinarea</TT><A NAME="5262"></A><TT>[<I>pages</I>]{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\twocolumntopinarea</TT><A NAME="5279"></A><TT>[<I>pages</I>]{static}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\twocolumnDtopinarea</TT><A NAME="5297"></A><TT>[<I>pages</I>]{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\twocolumntopinarea</TT><A NAME="5314"></A><TT>[<I>pages</I>]{dynamic}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\twocolumntop</TT><A NAME="5332"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>H</I>}</TT> -<P> -As <TT>\twocolumntopinarea</TT><A NAME="5343"></A> where the area is the entire -typeblock. - -<P> - -<P> -<TT>\twocolumnStop</TT><A NAME="5348"></A><TT>[<I>pages</I>]{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\twocolumntop</TT><A NAME="5357"></A><TT>[<I>pages</I>]{static}{<I>H</I>}</TT> - -<P> - -<P> -<TT>\twocolumnDtop</TT><A NAME="5367"></A><TT>[<I>pages</I>]{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\twocolumntop</TT><A NAME="5376"></A><TT>[<I>pages</I>]{dynamic}{<I>H</I>}</TT> - -<P> - -<P> -<TT>\NcolumnStopinarea</TT><A NAME="5386"></A><TT>[<I>pages</I>]{<I>n</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\Ncolumntopinarea</TT><A NAME="5405"></A><TT>[<I>pages</I>]{static}{<I>n</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\NcolumnDtopinarea</TT><A NAME="5425"></A><TT>[<I>pages</I>]{<I>n</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\Ncolumntopinarea</TT><A NAME="5444"></A><TT>[<I>pages</I>]{dynamic}{<I>n</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\Ncolumntop</TT><A NAME="5464"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>n</I>}{<I>H</I>}</TT> -<P> -As <TT>\Ncolumntopinarea</TT><A NAME="5477"></A> where the area is the entire -typeblock. - -<P> - -<P> -<TT>\NcolumnStop</TT><A NAME="5482"></A><TT>[<I>pages</I>]{<I>n</I>}{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\Ncolumntop</TT><A NAME="5493"></A><TT>[<I>pages</I>]{static}{<I>n</I>}{<I>H</I>}</TT> - -<P> - -<P> -<TT>\NcolumnDtop</TT><A NAME="5505"></A><TT>[<I>pages</I>]{<I>n</I>}{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\Ncolumntop</TT><A NAME="5516"></A><TT>[<I>pages</I>]{dynamic}{<I>n</I>}{<I>H</I>}</TT> - -<P> - -<P> -<TT>\onecolumnSbottominarea</TT><A NAME="5528"></A><TT>[<I>pages</I>]{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\onecolumnbottominarea</TT><A NAME="5545"></A><TT>[<I>pages</I>]{static}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\onecolumnDbottominarea</TT><A NAME="5563"></A><TT>[<I>pages</I>]{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\onecolumnbottominarea</TT><A NAME="5580"></A><TT>[<I>pages</I>]{dynamic}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\onecolumnbottom</TT><A NAME="5598"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>H</I>}</TT> -<P> -As <TT>\onecolumnbottominarea</TT><A NAME="5609"></A> where the area is the entire -typeblock. - -<P> - -<P> -<TT>\onecolumnSbottom</TT><A NAME="5614"></A><TT>[<I>pages</I>]{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\onecolumnbottom</TT><A NAME="5623"></A><TT>[<I>pages</I>]{static}{<I>H</I>}</TT> - -<P> - -<P> -<TT>\onecolumnDbottom</TT><A NAME="5633"></A><TT>[<I>pages</I>]{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\onecolumnbottom</TT><A NAME="5642"></A><TT>[<I>pages</I>]{dynamic}{<I>H</I>}</TT> - -<P> - -<P> -<TT>\twocolumnSbottominarea</TT><A NAME="5652"></A><TT>[<I>pages</I>]{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\twocolumnbottominarea</TT><A NAME="5669"></A><TT>[<I>pages</I>]{static}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\twocolumnDbottominarea</TT><A NAME="5687"></A><TT>[<I>pages</I>]{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\twocolumnbottominarea</TT><A NAME="5704"></A><TT>[<I>pages</I>]{dynamic}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\twocolumnbottom</TT><A NAME="5722"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>H</I>}</TT> -<P> -As <TT>\twocolumnbottominarea</TT><A NAME="5733"></A> where the area is the entire -typeblock. - -<P> - -<P> -<TT>\twocolumnSbottom</TT><A NAME="5738"></A><TT>[<I>pages</I>]{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\twocolumnbottom</TT><A NAME="5747"></A><TT>[<I>pages</I>]{static}{<I>H</I>}</TT> - -<P> - -<P> -<TT>\twocolumnDbottom</TT><A NAME="5757"></A><TT>[<I>pages</I>]{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\twocolumnbottom</TT><A NAME="5766"></A><TT>[<I>pages</I>]{dynamic}{<I>H</I>}</TT> - -<P> - -<P> -<TT>\NcolumnSbottominarea</TT><A NAME="5776"></A><TT>[<I>pages</I>]{<I>n</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\Ncolumnbottominarea</TT><A NAME="5795"></A><TT>[<I>pages</I>]{static}{<I>n</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\NcolumnDbottominarea</TT><A NAME="5815"></A><TT>[<I>pages</I>]{<I>n</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> -<P> -This is equivalent to: -<BR> -<TT>\Ncolumnbottominarea</TT><A NAME="5834"></A><TT>[<I>pages</I>]{dynamic}{<I>n</I>}{<I>H</I>}{<I>width</I>}{<I>height</I>}{<I>x</I>}{<I>y</I>}</TT> - -<P> - -<P> -<TT>\Ncolumnbottom</TT><A NAME="5854"></A><TT>[<I>pages</I>]{<I>type</I>}{<I>n</I>}{<I>H</I>}</TT> -<P> -As <TT>\Ncolumnbottominarea</TT><A NAME="5867"></A> where the area is the entire -typeblock. - -<P> - -<P> -<TT>\NcolumnSbottom</TT><A NAME="5872"></A><TT>[<I>pages</I>]{<I>n</I>}{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\Ncolumnbottom</TT><A NAME="5883"></A><TT>[<I>pages</I>]{static}{<I>n</I>}{<I>H</I>}</TT> - -<P> - -<P> -<TT>\NcolumnDbottom</TT><A NAME="5895"></A><TT>[<I>pages</I>]{<I>n</I>}{<I>H</I>}</TT> -<P> -This is equivalent to: -<TT>\Ncolumnbottom</TT><A NAME="5906"></A><TT>[<I>pages</I>]{dynamic}{<I>n</I>}{<I>H</I>}</TT> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0063000000000000000000"> -5.3 Right to Left Columns</A> -</H1> - -<P> -The default behaviour for the commands defined above is -to create the <A HREF=ffuserguide.html#gls:flow NAME="14217">flow frames</A> from left to right. However if you are -typesetting from right to left, you will probably prefer to -define the <A HREF=ffuserguide.html#gls:flow NAME="14224">flow frames</A> in the reverse order. This can be done -via the package option <TT>RL</TT><A NAME="5922"></A>. Alternatively you can use the -command: - -<P> -<TT>\lefttorightcolumnsfalse</TT><A NAME="5925"></A> -<P> -before using commands such as <TT>\twocolumn</TT><A NAME="5930"></A> or -<TT>\Ncolumn</TT><A NAME="5935"></A>. Two switch back to left-to-right columns use: - -<P> -<TT>\lefttorightcolumnstrue</TT><A NAME="5940"></A> -<P> - -<P> - -<H1><A NAME="SECTION0064000000000000000000"> -5.4 Backdrop Effects</A> -</H1> - -<P> -<A HREF=ffuserguide.html#gls:static NAME="14266">Static frames</A> can be used to produce a -backdrop. There are a number of commands which create -static frames that can be used as a backdrop. In the -following definitions, <I>pages</I> is the <A HREF=ffuserguide.html#gls:pglist NAME="14277">page list</A> for -which those static frames are defined (<TT>all</TT> is the default). -For the vertical strips: -<I>xoffset</I> is the amount by which the frames should be -shifted horizontally (0pt by default), <I>W1</I> is the width of the first frame, -with colour specified by <I>C1</I> and <A HREF=ffuserguide.html#gls:idl NAME="14288">IDL</A> <I>L1</I>, -and so on up to <I>Wn</I> the width of the <I>n</I>th frame -with colour specified by <I>Cn</I> and IDL <I>Ln</I>. -For the vertical strips: -<I>yoffset</I> is the amount by which the frames should be -shifted vertically (0pt by default), <I>H1</I> is the height of the first frame, -with colour specified by <I>C1</I> and IDL <I>L1</I>, -and so on up to <I>Hn</I> the height of the <I>n</I>th frame -with colour specified by <I>Cn</I> and IDL <I>Ln</I>. - -<P> -<B>NOTE:</B> unlike the earlier commands, these commands -are all relative to the actual page, not the <A HREF=ffuserguide.html#gls:typeblock NAME="14307">typeblock</A>. -So an x offset of 0pt indicates the first vertical -frame is flush with the left hand edge of the page, and a -y offset of 0pt indicates the first horizontal frame -is flush with the bottom edge of the page. This is because backdrops -tend to span the entire page, not just the typeblock. - -<P> -The colour specification must be completely enclosed in braces, -for example <code>{[rgb]{1,0,1}}</code> not <code>[rgb]{1,0,1}</code>. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H2><A NAME="SECTION0064100000000000000000"> -5.4.1 Vertical stripe effects</A> -</H2> - -<P> - -<P> -<TT>\vtwotone</TT><A NAME="5949"></A><TT>[<I>pages</I>][<I>xoffset</I>]{<I>W1</I>}{<I>C1</I>}{<I>L1</I>}{<I>W2</I>}{<I>C2</I>}{<I>L2</I>}</TT> -<P> -Defines two <A HREF=ffuserguide.html#gls:static NAME="14439">static frames</A> to create a two tone vertical strip effect. -(This command was -used to create the coloured background on the title page -of the PDF version of this document.) - -<P> - -<P> -<TT>\vNtone</TT><A NAME="5970"></A><TT>[<I>pages</I>][<I>xoffset</I>]{<I>n</I>}{<I>W1</I>}{<I>C1</I>}{<I>L1</I>}</TT>...<TT>{<I>Wn</I>}{<I>Cn</I>}{<I>Ln</I>}</TT> -<P> -This is similar to <TT>\vtwotone</TT><A NAME="5993"></A> but with <I>n</I> static frames instead of two. - -<P> - -<P> -<TT>\vtwotonebottom</TT><A NAME="5998"></A><TT>[<I>pages</I>][<I>xoffset</I>]{<I>H</I>}{<I>W1</I>}{<I>C1</I>}{<I>L1</I>}{<I>W2</I>}{<I>C2</I>}{<I>L2</I>}</TT> -<P> -This is similar to <TT>\vtwotone</TT><A NAME="6021"></A> but the static frames are only -<I>H</I> high, instead of the entire height of the page. -The frames are aligned along the bottom edge of the page. - -<P> - -<P> -<TT>\vtwotonetop</TT><A NAME="6026"></A><TT>[<I>pages</I>][<I>xoffset</I>]{<I>H</I>}{<I>W1</I>}{<I>C1</I>}{<I>L1</I>}{<I>W2</I>}{<I>C2</I>}</TT> -<BR><TT>{<I>L2</I>}</TT> -<P> -This is similar to <TT>\vtwotone</TT><A NAME="6049"></A> but the static frames are only -<I>H</I> high, instead of the entire height of the page. -The frames are aligned along the top edge of the page. -(This command was used to create the border effect along -the top of every page in the PDF version of this document. -Two <TT>\vtwotonetop</TT><A NAME="6054"></A> -commands were used, one for the even pages, and the other -for the odd pages.) - -<P> - -<P> -<TT>\vNtonebottom</TT><A NAME="6059"></A><TT>[<I>pages</I>][<I>xoffset</I>]{<I>H</I>}{<I>n</I>}{<I>W1</I>}{<I>C1</I>}{<I>L1</I>}</TT>... -<TT>{<I>Wn</I>}{<I>Cn</I>}{<I>Ln</I>}</TT> -<P> -This is a general version of <TT>\vtwotonebottom</TT><A NAME="6084"></A> for -<I>n</I> frames instead of two. - -<P> - -<P> -<TT>\vNtonetop</TT><A NAME="6089"></A><TT>[<I>pages</I>][<I>xoffset</I>]{<I>H</I>}{<I>n</I>}{<I>W1</I>}{<I>C1</I>}{<I>L1</I>}</TT>... -<TT>{<I>Wn</I>}{<I>Cn</I>}{<I>Ln</I>}</TT> -<P> -This is a general version of <TT>\vtwotonetop</TT><A NAME="6114"></A> for -<I>n</I> frames instead of two. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H2><A NAME="SECTION0064200000000000000000"> -5.4.2 Horizontal stripe effect</A> -</H2> - -<P> - -<P> -<TT>\htwotone</TT><A NAME="6123"></A><TT>[<I>pages</I>][<I>yoffset</I>]{<I>H1</I>}{<I>C1</I>}{<I>L1</I>}{<I>H2</I>}{<I>C2</I>}{<I>L2</I>}</TT> -<P> -This defines two <A HREF=ffuserguide.html#gls:static NAME="14579">static frames</A> to create a two tone horizontal strip -effect. - -<P> - -<P> -<TT>\hNtone</TT><A NAME="6144"></A><TT>[<I>pages</I>][<I>yoffset</I>]{<I>n</I>}{<I>H1</I>}{<I>C1</I>}{<I>L1</I>}</TT>... -<TT>{<I>Hn</I>}{<I>Cn</I>}{<I>Ln</I>}</TT> -<P> -This is similar to <TT>\htwotone</TT><A NAME="6167"></A> but with <I>n</I> static frames instead of two. - -<P> - -<P> -<TT>\htwotoneleft</TT><A NAME="6172"></A><TT>[<I>pages</I>][<I>yoffset</I>]{<I>W</I>}{<I>H1</I>}{<I>C1</I>}{<I>L1</I>}{<I>H2</I>}{<I>C2</I>}{<I>L2</I>}</TT> -<P> -This is similar to <TT>\htwotone</TT><A NAME="6195"></A> but the static frames are only -<I>W</I> wide, instead of the entire width of the page. -The frames are aligned along the left edge of the page. - -<P> - -<P> -<TT>\htwotoneright</TT><A NAME="6200"></A><TT>[<I>pages</I>][<I>yoffset</I>]{<I>W</I>}{<I>H1</I>}{<I>C1</I>}{<I>L1</I>}{<I>H2</I>}{<I>C2</I>}{<I>L2</I>}</TT> -<P> -This is similar to <TT>\htwotone</TT><A NAME="6223"></A> but the static frames are only -<I>W</I> wide, instead of the entire width of the page. -The frames are aligned along the right edge of the page. - -<P> - -<P> -<TT>\hNtoneleft</TT><A NAME="6228"></A><TT>[<I>pages</I>][<I>yoffset</I>]{<I>W</I>}{<I>n</I>}{<I>H1</I>}{<I>C1</I>}{<I>L1</I>}</TT>... -<TT>{<I>Hn</I>}{<I>Cn</I>}{<I>Ln</I>}</TT> -<P> -This is a general version of <TT>\htwotoneleft</TT><A NAME="6253"></A> for -<I>n</I> frames instead of two. - -<P> - -<P> -<TT>\hNtoneright</TT><A NAME="6258"></A><TT>[<I>pages</I>][<I>yoffset</I>]{<I>W</I>}{<I>n</I>}{<I>H1</I>}{<I>C1</I>}{<I>L1</I>}</TT>... -<TT>{<I>Hn</I>}{<I>Cn</I>}{<I>Ln</I>}</TT> -<P> -This is a general version of <TT>\htwotoneright</TT><A NAME="6283"></A> for -<I>n</I> frames instead of two. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H2><A NAME="SECTION0064300000000000000000"> -5.4.3 Background Frame</A> -</H2> - -<P> -To make a single <A HREF=ffuserguide.html#gls:static NAME="14603">static frame</A> covering the entire page, use: - -<P> -<TT>\makebackgroundframe</TT><A NAME="6292"></A><TT>[<I>pages</I>][<I>IDL</I>]</TT> -<P> -Note that this frame should be created before any other -static frame as it will obscure all other static frames created -before it if it is given a background colour. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H2><A NAME="SECTION0064400000000000000000"></A> -<A NAME="sec:insertrule"></A> -<BR> -5.4.4 Vertical and Horizontal Rules -</H2> - -<P> -You can create vertical or horizontal rules between two -<A HREF=ffuserguide.html#gls:frame NAME="14679">frames</A> using the commands: - -<P> - -<P> -<TT>\insertvrule</TT><A NAME="6305"></A><TT>[<I>y top</I>][<I>y bottom</I>]{<I>T1</I>}{<I>IDN1</I>}{<I>T2</I>}{<I>IDN2</I>}</TT> -<P> -This creates a new <A HREF=ffuserguide.html#gls:static NAME="14686">static frame</A> which fits between <I>T1</I> -frame with <A HREF=ffuserguide.html#gls:idn NAME="14697">IDN</A> <I>IDN1</I> and <I>T2</I> frame with IDN <I>IDN2</I>, and places a vertical rule in it -extending from the highest point of the highest frame to -the lowest point of the lowest frame. The first optional -argument <I>y top</I> (default 0pt) extends the rule by that -much above the highest point, and the second optional argument -<I>y bottom</I> (default 0pt) extends the rule by that much -below the lowest point. If either of the optional arguments -are negative, the rule will be shortened instead of extended. -The width of the rule is given by - -<P> -<TT>\ffcolumnseprule</TT><A NAME="6322"></A> -<P> -<B>Note</B> that this has changed as from version 1.09: versions -prior to 1.09 used <TT>\columnseprule</TT><A NAME="6327"></A>. - -<P> -The vertical rule drawn by <TT>\insertvrule</TT><A NAME="6332"></A> is created using -the command: - -<P> -<TT>\ffvrule</TT><A NAME="6337"></A><TT>{offset}{width}{height}</TT> -<P> -This can be redefined if a more ornate rule is required -(see below). - -<P> - -<P> -<TT>\inserthrule</TT><A NAME="6345"></A><TT>[<I>x left</I>][<I>x right</I>]{<I>T1</I>}{<I>IDN1</I>}{<I>T2</I>}{<I>IDN2</I>}</TT> -<P> -This creates a new <A HREF=ffuserguide.html#gls:static NAME="14712">static frame</A> which fits between <I>T1</I> -frame with <A HREF=ffuserguide.html#gls:idn NAME="14723">IDN</A> <I>IDN1</I> and <I>T2</I> frame with IDN <I>IDN2</I>, and places a horizontal rule in it -extending from the leftmost point of the left frame to -the rightmost point of the right frame. The first optional -argument <I>x left</I> (default 0pt) extends the rule by that -much before the leftmost point, and the second optional argument -<I>x right</I> (default 0pt) extends the rule by that much -beyond the rightmost point. If either of the optional arguments -are negative, the rule will be shortened instead of extended. -The height of the rule is given by - -<P> -<TT>\ffcolumnseprule</TT><A NAME="6362"></A> -<P> - -<P> -The horizontal rule drawn by <TT>\inserthrule</TT><A NAME="6367"></A> is created using -the command: - -<P> -<TT>\ffhrule</TT><A NAME="6372"></A><TT>{offset}{width}{height}</TT> -<P> -This can be redefined if a more ornate rule is required (see below). - -<P> -The default value for <TT>\ffcolumnseprule</TT><A NAME="6380"></A> is 2pt. Both -<TT>\insertvrule</TT><A NAME="6385"></A> and <TT>\inserthrule</TT><A NAME="6390"></A> have starred versions -which allow you to identify the frame by <A HREF=ffuserguide.html#gls:idl NAME="14742">IDL</A> instead of -IDN. The frame types, <I>T1</I> and <I>T2</I> can be one -of the following keywords: <TT>flow</TT>, <TT>static</TT> or -<TT>dynamic</TT>. - -<P> -The command - -<P> -<TT>\ffruledeclarations</TT><A NAME="6395"></A> -<P> -can be redefined to set declarations that affect how the rule is drawn. -The most likely use of this command is to set the rule colour. -For example: -<PRE> -\twocolumnStop{2in} - -\renewcommand{\ffruledeclarations}{\color{red}} -\insertvrule{flow}{1}{flow}{2} - -\renewcommand{\ffruledeclarations}{\color{blue}} -\inserthrule{static}{1}{flow}{1} -</PRE> -This will create a layout with two columns (<A HREF=ffuserguide.html#gls:flow NAME="14757">flow frames</A> 1 and 2) -with a <A HREF=ffuserguide.html#gls:static NAME="14764">static frame</A> above. A red vertical rule is placed in a -static frame between flow frames 1 and 2, and a blue horizontal -rule is placed between the static frame and the first -flow frame. (However the horizontal rule will span both -flow frames since that is the width of the static frame.) - -<P> -In the following example, the rules have been redefined -to use a zigzag pattern (which is obtained using the <TT>tikz</TT><A NAME="6400"></A> -package): -<PRE> -\usepackage{flowfram} -\usepackage{tikz} -\usetikzlibrary{snakes} - -\twocolumnStop - -\renewcommand{\ffvrule}[3]{% -\hfill -\tikz{\draw[snake=zigzag,line width=#2,yshift=-#1] (0,0) -- (0pt,#3);}% -\hfill\mbox{}} - -\insertvrule{flow}{1}{flow}{2} - -\renewcommand{\ffhrule}[3]{% -\tikz{\draw[snake=zigzag,line width=#3,xshift=-#1] (0,0) -- (#2,0pt);}} - -\inserthrule{static}{1}{flow}{1} -</PRE> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0070000000000000000000"> -6. Thumbtabs and Minitocs</A> -</H1> - -<P> - -<I>This chapter describes how to create thumbtabs and minitocs, -such as those used in the PDF version of this document.</I> -<P> - -<P> - -<H1><A NAME="SECTION0071000000000000000000"> -6.1 Thumbtabs</A> -</H1> - -<P> -On the right hand side of the odd pages -and on the left hand side of the even pages in the -PDF version of this document, there is a blue rectangle -with the chapter number in it. This is a thumbtab, and it gives -you a rough idea whereabouts in the document you are when you -quickly flick through the pages. Each thumbtab is in fact -a dynamic frame, and you can control whether to make the -number and/or title appear in the thumbtab by using one or -more of the package options: <TT>ttbtitle</TT><A NAME="6407"></A> (show -title--default), <TT>ttbnotitle</TT><A NAME="6410"></A> (don't show the title), -<TT>ttbnum</TT><A NAME="6413"></A> (show the number) and <TT>ttbnonum</TT><A NAME="6416"></A> -(don't show the number--default). - -<P> -If you want thumbtabs in your document, you need to use -the command - -<P> -<TT>\makethumbtabs</TT><A NAME="6419"></A><TT>[<I>y offset</I>]{<I>height</I>}[<I>section type</I>]</TT> -<P> -in the document -preamble. By default, the topmost thumbtab is level with the -top of the <A HREF=ffuserguide.html#gls:typeblock NAME="14865">typeblock</A>, but can be shifted vertically -using the first optional argument <I>y offset</I>. Each -thumbtab will be <I>height</I> high, and will correspond to the -sectioning type <I>section type</I>. If <I>section type</I> -is omitted, chapters will be used if the <TT>\chapter</TT><A NAME="6430"></A> -command is defined, otherwise sections will be used. -The width of the thumbtabs is given by the length - -<P> -<TT>\thumbtabwidth</TT><A NAME="6435"></A> -<P> -which is 1cm by default. -The command - -<P> -<TT>\thumbtabindex</TT><A NAME="6440"></A> -<P> -will display the thumbtab index (all thumbtabs) on the current page. -You then need to use - -<P> -<TT>\enablethumbtabs</TT><A NAME="6445"></A> -<P> -to start the individual thumbtabs and - -<P> -<TT>\disablethumbtabs</TT><A NAME="6450"></A> -<P> -to make them go away. -You can align the table of contents with the thumbtabs<A NAME="tex2html114" - HREF="#foot2404"><SUP>6.1</SUP></A> using -the command - -<P> -<TT>\tocandthumbtabindex</TT><A NAME="6455"></A> -<P> -instead of -the commands <TT>\tableofcontents</TT><A NAME="6460"></A> and -<TT>\thumbtabindex</TT><A NAME="6465"></A>. If you are using the <TT>hyperref</TT><A NAME="6470"></A> -package, the text on the thumbtab index will be a hyperlink -to the corresponding part of the document. Note that when using -<TT>\tocandthumbtabindex</TT><A NAME="6473"></A> you may -need to shift the thumbtabs vertically up or down to make -sure that they align correctly with the table of contents. - -<P> -The format of the text on the thumbtabs is given by the command - -<P> -<TT>\thumbtabindexformat</TT><A NAME="6478"></A> -<P> -for the thumbtab index entries, and - -<P> -<TT>\thumbtabformat</TT><A NAME="6483"></A> -<P> -for the individual thumbtabs. By -default the text on the thumbtabs will be rotated, but as -rotating is not implemented by some previewers, the package option -<TT>norotate</TT><A NAME="6488"></A> is provided, which will stack the letters -vertically. This does not look as good as the rotated text. -Note also that some previewers do not put the hyperlink in the -correct place when the link has been rotated, so this may -also cause a problem. - -<P> -The thumbtab attributes can be changed using - -<P> -<TT>\setthumbtab</TT><A NAME="6491"></A><TT>{<I>n</I>}{<I>key value list</I>}</TT> -<P> -where <I>n</I> is the thumbtab number starting -from 1 (for the top thumbtab) to the value given by the counter -<TT>maxthumbtabs</TT><A NAME="6500"></A> -(for the bottom thumbtab). Note that these numbers are not -related to the associated frame <A HREF=ffuserguide.html#gls:idn NAME="14876">IDN</A>. You may also use -the keyword <TT>all</TT> instead of <I>n</I> to indicate that the -new attributes should apply to all thumbtabs. - -<P> -To just change the settings for the thumbtab index, use - -<P> -<TT>\setthumbtabindex</TT><A NAME="6503"></A><TT>{<I>n</I>}{<I>key value list</I>}</TT> -<P> -The <I>key value list</I> for both these commands is the same as that -for <TT>\setdynamicframe</TT><A NAME="6512"></A>. Again <I>n</I> may either be the -thumbtab index or the keyword <TT>all</TT>. - -<P> -By default, the thumbtabs have a grey background. In the PDF -version of this document, I used: -<PRE> -\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}} -\setthumbtab{5}{backcolor=[rgb]{0.35,0.35,1}} -\setthumbtab{6}{backcolor=[rgb]{0.4,0.4,1}} -\setthumbtab{7}{backcolor=[rgb]{0.45,0.45,1}} -\setthumbtab{8}{backcolor=[rgb]{0.5,0.5,1}} -</PRE> -to change the thumbtab background colour to shades of blue. - -<P> -I also changed the style of the thumbtab text using: -<PRE> -\newcommand{\thumbtabstyle}[1]{{\hypersetup{linkcolor=white}% -\textbf{\large\sffamily #1}}} -\setthumbtab{all}{style=thumbtabstyle,textcolor=white} -</PRE> -Note that the style uses <TT>\hypersetup</TT><A NAME="6517"></A><A NAME="tex2html115" - HREF="#foot3458"><SUP>6.2</SUP></A> to change the colour of the hyperlink text, -since the hyperlink overrides the text colour. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0072000000000000000000"> -6.2 Minitocs</A> -</H1> - -<P> -In the PDF version of this document, after each chapter heading, -there is a mini table of contents for that chapter. To enable minitocs, -use the command - -<P> -<TT>\enableminitoc</TT><A NAME="6529"></A><TT>[<I>section type</I>]</TT> -<P> -The default <I>section type</I> is the same as that used by -the thumbtabs. - -<P> -If you want the minitocs to appear in a <A HREF=ffuserguide.html#gls:dynamic NAME="14894">dynamic frame</A>, you -can use - -<P> -<TT>\appenddfminitoc</TT><A NAME="6536"></A><TT>{<I>IDN</I>}</TT> -<P> -where <I>IDN</I> is the <A HREF=ffuserguide.html#gls:idn NAME="14901">IDN</A> of the appropriate dynamic frame. -There is also a starred version available if you want to -use the <A HREF=ffuserguide.html#gls:idl NAME="14912">IDL</A> instead of the IDN. - -<P> -For example, in the PDF version of this document I -used the command: -<PRE> -\appenddfminitoc*{chaphead} -</PRE> -in the preamble, which appended the minitocs to the -dynamic frame with IDL <TT>chaphead</TT>. - -<P> -The style of the minitoc text is given by the command - -<P> -<TT>\minitocstyle</TT><A NAME="6543"></A><TT>{<I>contents</I>}</TT> -<P> -where the argument is the contents -of the minitoc. This command may be redefined if you want -to change the minitoc style. The gap before the minitoc -is given by the length - -<P> -<TT>\beforeminitocskip</TT><A NAME="6550"></A> -<P> -and the gap after the minitoc is given by the length - -<P> -<TT>\afterminitocskip</TT><A NAME="6555"></A> -<P> -These lengths may be changed using <TT>\setlength</TT><A NAME="6560"></A>. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0080000000000000000000"> -7. Global Settings</A> -</H1> - -<P> - -<I>This section describes style macros, lengths and counters used -by the <TT>flowfram</TT> package.</I> -<P> - -<P> - -<H1><A NAME="SECTION0081000000000000000000"> -7.1 Macros</A> -</H1> -The following macros can be changed using <TT>\renewcommand</TT><A NAME="6569"></A>: - -<P> - -<UL> -<LI><TT>\setffdraftcolor</TT><A NAME="6574"></A> - -<P> -This sets the colour of the <A HREF=ffuserguide.html#gls:bbox NAME="14944">bounding box</A> when it is displayed in draft mode. The default value is: -<code>\color[gray]{0.8}</code>. For example, if you want a darker grey, -do: -<PRE> -\renewcommand{\setffdraftcolor}{\color[gray]{0.3}} -</PRE> - -<P> -</LI> -<LI><TT>\setffdrafttypeblockcolor</TT><A NAME="6579"></A> - -<P> -This sets the colour of -the <A HREF=ffuserguide.html#gls:bbox NAME="14951">bounding box</A> of the <A HREF=ffuserguide.html#gls:typeblock NAME="14958">typeblock</A> when it is displayed -in draft mode. The default value is: <code>\color[gray]{0.9}</code>. -For example, if you want a medium grey, do: -<PRE> -\renewcommand{\setffdrafttypeblockcolor}{\color[gray]{0.5}} -</PRE> - -<P> -</LI> -<LI><TT>\fflabelfont</TT><A NAME="6584"></A> - -<P> -This sets the font size for the <A HREF=ffuserguide.html#gls:bbox NAME="14965">bounding box</A> markers in -draft mode. The default value is: <code>\small\sffamily</code>. -For example, if you want a larger font, do: -<PRE> -\renewcommand{\fflabelfont}{\large\sffamily} -</PRE> - -<P> -</LI> -<LI><TT>\ffruledeclarations</TT><A NAME="6589"></A> - -<P> -This sets the declarations that affect the rules created using -<TT>\insertvrule</TT><A NAME="6594"></A> and <TT>\inserthrule</TT><A NAME="6599"></A>. The default -definition does nothing. -See <A HREF="ffuserguide.html#sec:insertrule">Vertical and -Horizontal Rules</A> for further details. - -<P> -</LI> -<LI><TT>\ffcontinuedtextfont</TT><A NAME="6604"></A><TT>{<I>text</I>}</TT> - -<P> -This sets <I>text</I> in the continuation font. The default definition -does <code>\emph{\small </code><I>text</I><code>}</code>. See -<A HREF="ffuserguide.html#sec:static">Static Frames</A> -and <A HREF="ffuserguide.html#sec:dynamic">Dynamic -Frames</A> for further details. - -<P> -</LI> -</UL> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0082000000000000000000"> -7.2 Lengths</A> -</H1> -The following are lengths, which can be changed using -<TT>\setlength</TT><A NAME="6615"></A>: - -<P> - -<UL> -<LI><TT>\fflabelsep</TT><A NAME="6620"></A> - -<P> -This is the distance from the right hand side of the -<A HREF=ffuserguide.html#gls:bbox NAME="14973">bounding box</A> at which to place the <A HREF=ffuserguide.html#gls:bbox NAME="14980">bounding box</A> marker. The -default value is: <TT>1pt</TT> - -<P> -</LI> -<LI><TT>\flowframesep</TT><A NAME="6625"></A> - -<P> -This is the gap between the text of the <A HREF=ffuserguide.html#gls:frame NAME="14987">frame</A> and -its border, for the standard border types. - -<P> -</LI> -<LI><TT>\flowframerule</TT><A NAME="6630"></A> - -<P> -This is the width of the <A HREF=ffuserguide.html#gls:frame NAME="14994">frame's</A> border, if using -a border given by a <A HREF=ffuserguide.html#gls:fcmd NAME="15001">frame making command</A> that uses <TT>\fboxsep</TT><A NAME="6635"></A> -to set its border width (e.g. <TT>\fbox</TT><A NAME="6640"></A>). - -<P> -</LI> -<LI><TT>\sdfparindent</TT><A NAME="6645"></A> - -<P> -This is the paragraph indentation within <A HREF=ffuserguide.html#gls:static NAME="15004">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15007">dynamic</A> frames. -The default value is 0pt. - -<P> -</LI> -<LI><TT>\vcolumnsep</TT><A NAME="6654"></A> - -<P> -This is the approximate vertical distance between the top frame -and the column frames when using <TT>\Ncolumntop</TT><A NAME="6659"></A> etc. -(The height of the <A HREF=ffuserguide.html#gls:flow NAME="15014">flow frame</A> may be adjusted to make it -an integer multiple of <TT>\baselineskip</TT><A NAME="6664"></A>.) - -<P> -</LI> -<LI><TT>\columnsep</TT><A NAME="6669"></A> - -<P> -This is the horizontal distance between the column frames -when using <TT>\Ncolumn</TT><A NAME="6674"></A> or <TT>\Ncolumntop</TT><A NAME="6679"></A> etc - -<P> -</LI> -<LI><TT>\ffcolumnseprule</TT><A NAME="6684"></A> - -<P> -This is the width of vertical rules created using -<TT>\insertvrule</TT><A NAME="6689"></A> or the height of horizontal rules created -using <TT>\inserthrule</TT><A NAME="6694"></A>. - -<P> -</LI> -<LI><TT>\beforeminitocskip</TT><A NAME="6699"></A> - -<P> -This is the vertical distance before the minitoc. - -<P> -</LI> -<LI><TT>\afterminitocskip</TT><A NAME="6704"></A> - -<P> -This is the vertical distance after the minitoc. -</LI> -</UL> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0083000000000000000000"></A> -<A NAME="sec:counters"></A> -<BR> -7.3 Counters -</H1> -The following are counters that can be accessed via -<TT>\value</TT><A NAME="6713"></A><TT>{<I>counter name</I>}</TT> or via -<code>\the</code><I>counter name</I>. However the value of these counters -should not be modified. - -<P> -<DL> -<DT><STRONG><TT>maxflow</TT><A NAME="6720"></A></STRONG></DT> -<DD>The total number of <A HREF=ffuserguide.html#gls:flow NAME="15064">flow frames</A> that have -been defined so far. - -<P> -</DD> -<DT><STRONG><TT>thisframe</TT><A NAME="6723"></A></STRONG></DT> -<DD>Stores the <A HREF=ffuserguide.html#gls:idn NAME="15071">IDN</A> of the current -flow frame. You can label and reference the <A HREF=ffuserguide.html#gls:idn NAME="15082">IDN</A> using - -<P> -<TT>\labelflowid</TT><A NAME="6726"></A><TT>{<I>label</I>}</TT> -<P> -This is analogous to the standard <TT>\label</TT><A NAME="6733"></A> command, but will -always refer to the IDN of the current flow frame. It can -then be referenced using <TT>\ref</TT><A NAME="6738"></A><TT>{<I>label</I>}</TT>. Note that -this will always refer to the current flow frame even when used -in the contents of a <A HREF=ffuserguide.html#gls:static NAME="15097">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15100">dynamic</A> frame. - -<P> -Don't use more than one instance of <TT>\labelflowid</TT><A NAME="6749"></A> in a given -flow frame for a given page or you will get a "multiply defined -references" warning. - -<P> -</DD> -<DT><STRONG><TT>displayedframe</TT><A NAME="6754"></A></STRONG></DT> -<DD>Stores the index of the currently -displayed <A HREF=ffuserguide.html#gls:flow NAME="15111">flow frame</A>. This will be the same as the <A HREF=ffuserguide.html#gls:idn NAME="15118">IDN</A> if all -flow frames are displayed on the current page, but if some are -hidden, the values may be different. You can label this counter -using - -<P> -<TT>\labelflow</TT><A NAME="6757"></A><TT>{<I>label</I>}</TT> -<P> -and reference it elsewhere in the document using -<TT>\ref</TT><A NAME="6764"></A><TT>{<I>label</I>}</TT>. For example, if you are using -a column layout, you might want to do something like: -<PRE> -This text is about hippos\labelflow{hippos}. - -% Somewhere else in the document -See column~\ref{hippos} on page~\pageref{hippos} -for information on hippos. -</PRE> -Don't use more than one instance of <TT>\labelflow</TT><A NAME="6771"></A> in a given -flow frame for a given page or you will get a "multiply defined -references" warning. Note that -<TT>\labelflow</TT><A NAME="6776"></A> will always refer to the current flow frame even when used in the contents of a static or dynamic <A HREF=ffuserguide.html#gls:frame NAME="15137">frame</A>. - -<P> -</DD> -<DT><STRONG><TT>maxstatic</TT><A NAME="6781"></A></STRONG></DT> -<DD>The total number of <A HREF=ffuserguide.html#gls:static NAME="15144">static frames</A> that have -been defined so far. - -<P> -</DD> -<DT><STRONG><TT>maxdynamic</TT><A NAME="6784"></A></STRONG></DT> -<DD>The total number of <A HREF=ffuserguide.html#gls:dynamic NAME="15151">dynamic frames</A> that -have been defined so far. - -<P> -</DD> -<DT><STRONG><TT>maxthumbtabs</TT><A NAME="6787"></A></STRONG></DT> -<DD>The total number of thumbtabs. -</DD> -</DL> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0090000000000000000000"> -8. Troubleshooting</A> -</H1> - -<P> - -<I>This chapter should be consulted if you experience any -problems using the <TT>flowfram</TT> package.</I> -<P> - -<P> -For an up-to-date list of frequently asked questions, see -the <A NAME="tex2html143" - HREF="http://theoval.cmp.uea.ac.uk/~nlct/latex/packages/faq/flowframfaq.html">flowfram FAQ</A>. -If you have a query that is not addressed here, please try there -before contacting me. -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0091000000000000000000"> -8.1 General Queries</A> -</H1> - -<P> - -<OL> -<LI>If all my <A HREF=ffuserguide.html#gls:flow NAME="15175">flow frames</A> are only defined on, say, -pages 1-10, what happens if I then add some extra text so that -the document exceeds 10 pages? - -<P> -The output routine will create a new <A HREF=ffuserguide.html#gls:flow NAME="15182">flow frame</A> the size -of the <A HREF=ffuserguide.html#gls:typeblock NAME="15189">typeblock</A> and use that. - -<P> -</LI> -<LI>Can I use the formatted page number in <A HREF=ffuserguide.html#gls:pglist NAME="15196">page lists</A>? - -<P> -No. - -<P> -</LI> -<LI><A NAME="itm:whynot"></A> Why not? - -<P> -When the output routine finishes with one <A HREF=ffuserguide.html#gls:flow NAME="15203">flow frame</A> it looks for the -next <A HREF=ffuserguide.html#gls:flow NAME="15210">flow frame</A> defined on that page. If there are none left, it then -searches through the <A HREF=ffuserguide.html#gls:pglist NAME="15217">page list</A> of all the defined <A HREF=ffuserguide.html#gls:flow NAME="15224">flow frames</A> to -see if the next page lies in that range. If there are none defined on -that page, it ships out that page, and tries the next page. This gives -rise to two problems: - -<P> - -<OL> -<LI>LaTeX is not clairvoyant. If it is currently -on page 14, and on the next page the page numbering changes -to A, it has no way of knowing this until it has reached -that point, which it hasn't yet. So it is looking for a -<A HREF=ffuserguide.html#gls:flow NAME="15231">flow frame</A> defined on page 15, not on page A. - -<P> -</LI> -<LI>How does LaTeX tell if page C lies between -pages A and D? It would require an algorithm that can convert -from a formatted number back to an integer. Given that there -are many different ways of formatting the value of a counter -(besides the standard Roman and alphabetical formats) it -would be impossible to write an algorithm to do this -for some arbitrary format. -</LI> -</OL> - -<P> -</LI> -<LI>Can I have an arbitrarily shaped <A HREF=ffuserguide.html#gls:frame NAME="15238">frame</A>? -<A NAME="itm:parshape"></A> -<P> -You can assign certain irregular shapes to <A HREF=ffuserguide.html#gls:static NAME="15241">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15244">dynamic</A> frames, -using the shape<A NAME="6801"></A> key (see -<A HREF="ffuserguide.html#sec:parshape">Non-Rectangular -Frames</A>). -Note that the <A HREF=ffuserguide.html#gls:bbox NAME="15251">bounding box</A> will still appear as a rectangle with -the dimensions of the given <A HREF=ffuserguide.html#gls:frame NAME="15258">frame</A> which may not correspond -to the assigned shape. -This function is not available for <A HREF=ffuserguide.html#gls:flow NAME="15265">flow frames</A>. - -<P> -</LI> -<LI>Why has the text from my <A HREF=ffuserguide.html#gls:flow NAME="15272">flow frame</A> appeared in a -<A HREF=ffuserguide.html#gls:static NAME="15279">static frame</A> or <A HREF=ffuserguide.html#gls:dynamic NAME="15286">dynamic frame</A>? - -<P> -Assuming you haven't inadvertently set that text as the contents -of the <A HREF=ffuserguide.html#gls:static NAME="15289">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15292">dynamic</A> frame, the frames are most likely -overlapping (see <A HREF="ffuserguide.html#sec:stacking">Frame -Stacking Order</A>). -In an attempt to clarify what's going on, suppose you have -defined a <A HREF=ffuserguide.html#gls:static NAME="15299">static frame</A>, a <A HREF=ffuserguide.html#gls:dynamic NAME="15306">dynamic frame</A> and two <A HREF=ffuserguide.html#gls:flow NAME="15313">flow frames</A>. The -following is an approximate<A NAME="tex2html144" - HREF="#foot2635"><SUP>8.1</SUP></A> analogy: TeX has a sheet of -paper on the table, and has pencilled<A NAME="tex2html145" - HREF="#foot2636"><SUP>8.2</SUP></A> in a -rectangle denoting the <A HREF=ffuserguide.html#gls:typeblock NAME="15320">typeblock</A>. The paper is put to one -side for now. TeX also has four rectangular sheets -of transparent paper. The first (which I shall call sheet 1) -represents the <A HREF=ffuserguide.html#gls:static NAME="15327">static frame</A>, the next two (which I shall call -sheets 2 and 3) represent the <A HREF=ffuserguide.html#gls:flow NAME="15334">flow frames</A>, and the last one -(which I shall call sheet 4) represents the <A HREF=ffuserguide.html#gls:dynamic NAME="15341">dynamic frame</A>. -TeX starts work on filling sheet 2 with the document text. -Once it has put as much text on that sheet as it considers -possible (according to its views on aesthetics), it puts sheet 2 -into the "in tray", and then continues on sheet 3. While it's -filling in sheets 2 and 3, if it encounters a command or -environment that tells it what to put in the <A HREF=ffuserguide.html#gls:static NAME="15348">static frame</A>, -it fills in sheet 1 and then puts sheet 1 into the "in tray" and -resumes where it left off on sheet 2 or 3. Similarly, if -it encounters a command that tells it what to put in the -<A HREF=ffuserguide.html#gls:dynamic NAME="15355">dynamic frame</A>, it stops what it's doing, fills in sheet 4, then -puts sheet 4 into the "in tray", and resumes where it left off. -Only when it has finished sheet 3 (the last <A HREF=ffuserguide.html#gls:flow NAME="15362">flow frame</A> defined -on that page), will it gather together all -the transparent sheets, and fix them onto the page starting -with sheet 1 through to sheet 4, measuring the bottom left hand -corner of each transparent sheet relative to the bottom left hand -corner of the <A HREF=ffuserguide.html#gls:typeblock NAME="15369">typeblock</A>. TeX will then put that page -aside, and start work on the next page. If two or more of the -transparent sheets overlap, you will see through the top one into -the one below (unless of course the top one has been painted -over, either by setting a background colour, or by adding an -image that has a non-transparent background.) - -<P> -Note that it's also possible that the overlap is caused by an -overfull hbox that's causing the text to poke out the side of the -<A HREF=ffuserguide.html#gls:flow NAME="15376">flow frame</A> into a neighbouring <A HREF=ffuserguide.html#gls:frame NAME="15383">frame</A>. Check the log file for -warnings or use the <TT>draft</TT> option to the document class -which will place a filled rectangle on the end of overfull lines. - -<P> -</LI> -<LI>Why do I get lots of overfull hbox messages? - -<P> -Probably because you have narrow <A HREF=ffuserguide.html#gls:frame NAME="15390">frames</A>. It's better to use -ragged right formatting when the frames are narrow. - -<P> -</LI> -<LI>Why do I keep getting multiply-defined warnings? - -<P> -Probably because you have used <TT>\label</TT><A NAME="6807"></A> in a <A HREF=ffuserguide.html#gls:static NAME="15393">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15396">dynamic</A> frame that is displayed on more than one page. Try using the clear<A NAME="6815"></A> -key to ensure that the frame is always cleared at the end of each -page. - -<P> -</LI> -<LI>What happens if I use a command or environment -that switches to two-column mode (e.g. <TT>theindex</TT><A NAME="6817"></A>)? - -<P> -As from version 1.01, any <TT>\onecolumn</TT><A NAME="6820"></A> or -<TT>\twocolumn</TT><A NAME="6825"></A> commands that occur outside of the -preamble will print the contents of the optional argument, -and issue a warning. It is recommended that you set up -your own frames for use in the index. See the source code of this -document, <TT>ffuserguide.tex</TT>, for an example. - -<P> -</LI> -<LI>How do I change the vertical alignment -of material inside a <A HREF=ffuserguide.html#gls:static NAME="15399">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15402">dynamic</A> frame? - -<P> -Use the valign<A NAME="6833"></A> key in <TT>\setstaticframe</TT><A NAME="6835"></A> or -<TT>\setdynamicframe</TT><A NAME="6840"></A> (new to version 1.03). - -<P> -</LI> -<LI><A NAME="itm:absval"></A> How do I compute the distance from the edge -of the page instead of the <A HREF=ffuserguide.html#gls:typeblock NAME="15409">typeblock</A>? - -<P> -See <A HREF="ffuserguide.html#sec:typeblockloc">Determining the -Location of the Typeblock</A>. - -<P> -</LI> -<LI>Is there a GUI I can use to make it easier to create the -<A HREF=ffuserguide.html#gls:frame NAME="15416">frames</A>? - -<P> -Yes, Jpgfdraw which can be downloaded from: -<TT><A NAME="tex2html146" - HREF="http://theoval.cmp.uea.ac.uk/~nlct/jpgfdraw/">http://theoval.cmp.uea.ac.uk/~nlct/jpgfdraw/</A></TT> -</LI> -</OL> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0092000000000000000000"> -8.2 Unexpected Output</A> -</H1> - -<P> - -<OL> -<LI>The lines at the beginning of my <A HREF=ffuserguide.html#gls:flow NAME="15426">flow frames</A> are the -wrong width. - -<P> -This is a problem that will occur if you have <A HREF=ffuserguide.html#gls:flow NAME="15433">flow frames</A> with different widths, as the change in <TT>\hsize</TT><A NAME="6849"></A> -does not come into effect until a paragraph break. So if -you have a paragraph that spans two <A HREF=ffuserguide.html#gls:flow NAME="15440">flow frames</A>, the end -of the paragraph at the beginning of the second <A HREF=ffuserguide.html#gls:flow NAME="15447">flow frame</A> will retain the width it had at the start of the -paragraph at the bottom of the previous <A HREF=ffuserguide.html#gls:flow NAME="15454">flow frame</A>. You can -fix the problem by inserting <TT>\framebreak</TT><A NAME="6854"></A> at the -point where the <A HREF=ffuserguide.html#gls:frame NAME="15461">frame</A> break occurs -(see <A HREF="ffuserguide.html#sec:framebreak">Prematurely Ending a -Flow Frame</A>). - -<P> -</LI> -<LI>My <A HREF=ffuserguide.html#gls:frame NAME="15468">frames</A> shift to the right when I add a border. - -<P> -This may occur if you use a border that is not recognised -by the <TT>flowfram</TT> package. You will need to set the -offset using the <TT>offset</TT> key (see -<A HREF="ffuserguide.html#sec:modattr">Modifying Frame -Attributes</A>). - -<P> -</LI> -<LI>I have a vertical white strip along the right hand side -of every page. - -<P> -This can happen if you have, say, an A4 document, and -<TT>ghostscript</TT><A NAME="6859"></A> has letter as the default paper size. You can -change the default paper size by editing the file <code>gs_init.ps</code>. -Change: -<PRE> -% Optionally choose a default paper size other than U.S. letter. -% (a4) -</PRE> -to: -<PRE> -% Optionally choose a default paper size other than U.S. letter. -(a4) -</PRE> - -<P> -</LI> -<LI>I don't have any output. - -<P> -All your <A HREF=ffuserguide.html#gls:flow NAME="15475">flow frames</A> are empty. TeX doesn't put the -frames onto the page until it has finished putting text -into the flow frames. So if there is no text to go in the -flow frames it won't output the page. If you only want the -<A HREF=ffuserguide.html#gls:static NAME="15490">static frames</A> or <A HREF=ffuserguide.html#gls:dynamic NAME="15497">dynamic frames</A> filled in, and nothing -outside of them, just do <code>\mbox{}\clearpage</code>. -This will put -an invisible something with zero area into your -flow frame, but it's enough to convince TeX that the -document contains some text. - -<P> -</LI> -<LI>The last page hasn't appeared. - -<P> -See the previous answer. - -<P> -</LI> -<LI>There is no paragraph indentation inside my -<A HREF=ffuserguide.html#gls:static NAME="15504">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15507">dynamic</A> frames. - -<P> -The paragraph indentation in <A HREF=ffuserguide.html#gls:static NAME="15510">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15513">dynamic</A> frames is governed -by the length <TT>\sdfparindent</TT><A NAME="6870"></A> which is set to 0pt by -default. To make the indentation the same as that used by -<A HREF=ffuserguide.html#gls:flow NAME="15520">flow frames</A> place the following in the preamble: -<PRE> -\setlength{\sdfparindent}{\parindent} -</PRE> - -<P> -</LI> -<LI>My section numbering is in the wrong order. - -<P> -Remember that the contents of the <A HREF=ffuserguide.html#gls:dynamic NAME="15527">dynamic frames</A> are not set -until the page is shipped out, and the contents will be set -in the order of <A HREF=ffuserguide.html#gls:idn NAME="15534">IDN</A>, so if you have any sectioning commands -occuring within dynamic frames, they may not be set in the same -order as they are in your input file. - -<P> -</LI> -<LI>The contents of my <A HREF=ffuserguide.html#gls:static NAME="15541">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15544">dynamic</A> frame have shifted -to the left when I used <TT>\parshape</TT><A NAME="6879"></A>. - -<P> -This will happen if your <TT>\parshape</TT><A NAME="6884"></A> specification -exceeds the linewidth. For example: -<PRE> -\parshape=1 0.4\linewidth 0.7\linewidth -</PRE> -This specifies a line with overall length -<code>1.1\linewidth</code> which is too long. - -<P> -</LI> -</OL> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<H1><A NAME="SECTION0093000000000000000000"> -8.3 Error Messages</A> -</H1> - -<P> - -<OL> -<LI><code>Illegal unit of measure (pt inserted)</code> - -<P> -All lengths must have units. Remember to include the -units when defining new <A HREF=ffuserguide.html#gls:frame NAME="15586">frames</A>. The following -keys require lengths: <TT>width</TT>, <TT>height</TT>, -<TT>x</TT>, <TT>y</TT> and <TT>offset</TT><A NAME="tex2html206" - HREF="#foot3488"><SUP>8.3</SUP></A>. - -<P> -</LI> -<LI><code>Missing number, treated as zero</code> - -<P> -LaTeX is expecting a number. There are a number of -possible causes: - -<P> - -<OL> -<LI>You have used an <A HREF=ffuserguide.html#gls:idl NAME="15593">IDL</A> instead of an <A HREF=ffuserguide.html#gls:idn NAME="15600">IDN</A>. If you -want to refer to a frame by its label, you need to remember -to use the starred versions of the -<code>\set</code><I>type</I><code>frame</code> commands, or when setting -the contents of <A HREF=ffuserguide.html#gls:static NAME="15607">static frames</A> or <A HREF=ffuserguide.html#gls:dynamic NAME="15614">dynamic frames</A>. - -<P> -</LI> -<LI>When specifying page lists, you have mixed keywords -with page ranges. For example: <TT>1,even</TT> is invalid. -</LI> -</OL> - -<P> -</LI> -<LI><code>Flow frame IDL '</code><I>label</I><code>' already defined</code> - -<P> -All <A HREF=ffuserguide.html#gls:idl NAME="15621">IDLs</A> within each <A HREF=ffuserguide.html#gls:frame NAME="15628">frame</A> type must be -unique. There are similar error messages for duplicate -IDLs for <A HREF=ffuserguide.html#gls:static NAME="15639">static frames</A> and <A HREF=ffuserguide.html#gls:dynamic NAME="15646">dynamic frames</A>. - -<P> -</LI> -<LI><code>Can't find flow frame id</code> - -<P> -You have specified a non-existent flow frame <A HREF=ffuserguide.html#gls:idl NAME="15657">IDL</A>. There are -similar error messages for <A HREF=ffuserguide.html#gls:static NAME="15664">static frames</A> and <A HREF=ffuserguide.html#gls:dynamic NAME="15671">dynamic frames</A>. -Check to make sure you have spelt the label correctly, and -check you are using the correct <A HREF=ffuserguide.html#gls:frame NAME="15678">frame</A> type command. -(For example, if a static frame has the IDL <TT>mylabel</TT>, -and you attempt to do -<TT>\setflowframe*</TT><A NAME="6893"></A><TT>{mylabel}{<I>options</I>}</TT>, -then you will get this error, because <TT>mylabel</TT> refers -to a static frame not a <A HREF=ffuserguide.html#gls:flow NAME="15697">flow frame</A>.) - -<P> -</LI> -<LI><code>Key 'clear' is boolean</code> - -<P> -The <TT>clear</TT> key can only have the values <TT>true</TT> -or <TT>false</TT>. - -<P> -</LI> -<LI><code>Key 'clear' not available</code> - -<P> -The <TT>clear</TT> key is only available for <A HREF=ffuserguide.html#gls:static NAME="15700">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15703">dynamic</A> frames. - -<P> -</LI> -<LI><code>Key 'style' not available</code> - -<P> -The <TT>style</TT> key is only available for <A HREF=ffuserguide.html#gls:dynamic NAME="15710">dynamic frames</A>. - -<P> -</LI> -<LI><code>Key 'margin' not available</code> - -<P> -The <TT>margin</TT> key is only available for <A HREF=ffuserguide.html#gls:flow NAME="15717">flow frames</A>. - -<P> -</LI> -<LI><code>Key 'shape' not available</code> - -<P> -The <TT>shape</TT> key is only available for <A HREF=ffuserguide.html#gls:static NAME="15720">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15723">dynamic</A> frames. - -<P> -</LI> -<LI><code>Dynamic frame style '</code><I>style</I><code>' not defined</code> - -<P> -The specified style <I>style</I> must be the name of a command -without the preceding backslash. It is possible that you have -mis-spelt the name, or you have forgotten to define the command. - -<P> -</LI> -<LI><code>Argument of \fbox has an extra }</code> - -<P> -This error will occur if you do, say, <code>border=\fbox</code> -instead of <code>border=fbox</code>. Remember not to include -the initial backslash. - -<P> -</LI> -<LI><code>Not in outer par mode</code> - -<P> -You can not have floats (such as figures, tables or marginal -notes) in <A HREF=ffuserguide.html#gls:static NAME="15726">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15729">dynamic</A> frames. If you want -a figure or table within a <A HREF=ffuserguide.html#gls:static NAME="15732">static</A> or -<A HREF=ffuserguide.html#gls:dynamic NAME="15735">dynamic</A> frame -use <TT>staticfigure</TT><A NAME="6917"></A> or <TT>statictable</TT><A NAME="6920"></A>. - -<P> -</LI> -<LI><code>Somethings wrong---maybe missing \item</code> - -<P> -Assuming that all your list type of environments start -with <TT>\item</TT><A NAME="6923"></A>, this may be caused by something going -wrong with the toc (table of contents), ttb (thumbtab) -or aux (auxiliary) files in the previous run. Try deleting -them, and try again. - -<P> -</LI> -<LI><code>No room for a new \skip</code> - -<P> -You have exceeded TeX's 256 register limit. Use the <TT>etex</TT><A NAME="6928"></A> -package. - -<P> -</LI> -<LI><code>\verb illegal in command argument</code> - -<P> -As a general rule, you can't use verbatim text<A NAME="6930"></A> in a command -argument. -This rule applies to all the commands defined by the <TT>flowfram</TT> -package. See also below. - -<P> -</LI> -<LI>I get <code>\verb illegal in command argument</code> when using -verbatim text<A NAME="6931"></A> inside the <TT>dynamiccontents</TT><A NAME="6933"></A> environment. - -<P> -You can not use verbatim text<A NAME="6935"></A> inside either the starred or -unstarred version of the <TT>dynamiccontents</TT><A NAME="6937"></A> environment. -(See <A HREF="ffuserguide.html#pg:verb">earlier</A>.) - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> -</LI> -</OL> - -<P> -<BR> - -<H2><A NAME="SECTION00100000000000000000000"> -Glossary</A> -</H2> -<DL COMPACT> -<DT><A NAME="gls:bbox"><B>bounding box</B></A><DD>The bounding box of a frame is the area allocated for the -contents of that frame. However the text may not completely fill that -area, and it is possible that the text may overflow that area. <A NAME="tex2html9" - HREF="ffuserguide.html#11562"> 1.1 Draft Option</A> -, <A NAME="tex2html24" - HREF="ffuserguide.html#11747"> 1.2 Frame Stacking Order</A> -, <A NAME="tex2html65" - HREF="ffuserguide.html#13025"> 3. Modifying Frame Attributes</A> -, <A NAME="tex2html68" - HREF="ffuserguide.html#13106"> 3. Modifying Frame Attributes</A> -, <A NAME="tex2html72" - HREF="ffuserguide.html#13195"> 3.1 Non-Rectangular Frames</A> -, <A NAME="tex2html121" - HREF="ffuserguide.html#14944"> 7.1 Macros</A> -, <A NAME="tex2html122" - HREF="ffuserguide.html#14951"> 7.1 Macros</A> -, <A NAME="tex2html124" - HREF="ffuserguide.html#14965"> 7.1 Macros</A> -, <A NAME="tex2html125" - HREF="ffuserguide.html#14973"> 7.2 Lengths</A> -, <A NAME="tex2html126" - HREF="ffuserguide.html#14980"> 7.2 Lengths</A> -, <A NAME="tex2html159" - HREF="ffuserguide.html#15251"> 8.1 General Queries</A> -<DT><A NAME="gls:dynamic"><B>dynamic frame</B></A><DD>Frames -in which text is fixed in place, but the contents are re-typeset -each time the frame is displayed. <A NAME="tex2html7" - HREF="ffuserguide.html#11481"> 1. Introduction</A> -, <A NAME="tex2html16" - HREF="ffuserguide.html#11631"> 1.1 Draft Option</A> -, <A NAME="tex2html22" - HREF="ffuserguide.html#11733"> 1.2 Frame Stacking Order</A> -, <A NAME="tex2html28" - HREF="ffuserguide.html#11788"> 1.3 HTML</A> -, <A NAME="tex2html49" - HREF="ffuserguide.html#12478"> 2.3 Dynamic Frames</A> -, <A NAME="tex2html56" - HREF="ffuserguide.html#12668"> 2.3.1 Important Notes</A> -, <A NAME="tex2html60" - HREF="ffuserguide.html#12846"> 3. Modifying Frame Attributes</A> -, <A NAME="tex2html70" - HREF="ffuserguide.html#13181"> 3.1 Non-Rectangular Frames</A> -, <A NAME="tex2html85" - HREF="ffuserguide.html#13420"> 4.3 Relative Locations</A> -, <A NAME="tex2html118" - HREF="ffuserguide.html#14894"> 6.2 Minitocs</A> -, <A NAME="tex2html131" - HREF="ffuserguide.html#15007"> 7.2 Lengths</A> -, <A NAME="tex2html137" - HREF="ffuserguide.html#15100"> 7.3 Counters</A> -, <A NAME="tex2html142" - HREF="ffuserguide.html#15151"> 7.3 Counters</A> -, <A NAME="tex2html158" - HREF="ffuserguide.html#15244"> 8.1 General Queries</A> -, <A NAME="tex2html164" - HREF="ffuserguide.html#15286"> 8.1 General Queries</A> -, <A NAME="tex2html166" - HREF="ffuserguide.html#15292"> 8.1 General Queries</A> -, <A NAME="tex2html168" - HREF="ffuserguide.html#15306"> 8.1 General Queries</A> -, <A NAME="tex2html173" - HREF="ffuserguide.html#15341"> 8.1 General Queries</A> -, <A NAME="tex2html175" - HREF="ffuserguide.html#15355"> 8.1 General Queries</A> -, <A NAME="tex2html182" - HREF="ffuserguide.html#15396"> 8.1 General Queries</A> -, <A NAME="tex2html184" - HREF="ffuserguide.html#15402"> 8.1 General Queries</A> -, <A NAME="tex2html196" - HREF="ffuserguide.html#15497"> 8.2 Unexpected Output</A> -, <A NAME="tex2html198" - HREF="ffuserguide.html#15507"> 8.2 Unexpected Output</A> -, <A NAME="tex2html200" - HREF="ffuserguide.html#15513"> 8.2 Unexpected Output</A> -, <A NAME="tex2html202" - HREF="ffuserguide.html#15527"> 8.2 Unexpected Output</A> -, <A NAME="tex2html205" - HREF="ffuserguide.html#15544"> 8.2 Unexpected Output</A> -, <A NAME="tex2html211" - HREF="ffuserguide.html#15614"> 8.3 Error Messages</A> -, <A NAME="tex2html215" - HREF="ffuserguide.html#15646"> 8.3 Error Messages</A> -, <A NAME="tex2html218" - HREF="ffuserguide.html#15671"> 8.3 Error Messages</A> -, <A NAME="tex2html222" - HREF="ffuserguide.html#15703"> 8.3 Error Messages</A> -, <A NAME="tex2html223" - HREF="ffuserguide.html#15710"> 8.3 Error Messages</A> -, <A NAME="tex2html226" - HREF="ffuserguide.html#15723"> 8.3 Error Messages</A> -, <A NAME="tex2html228" - HREF="ffuserguide.html#15729"> 8.3 Error Messages</A> -, <A NAME="tex2html230" - HREF="ffuserguide.html#15735"> 8.3 Error Messages</A> -<DT><A NAME="gls:flow"><B>flow frame</B></A><DD>The frames in a document such that the contents of the -<TT>document</TT><A NAME="3559"></A> environment flow from one frame to the next in -the order that they were defined. There must be at least one flow frame -on every page. <A NAME="tex2html5" - HREF="ffuserguide.html#11467"> 1. Introduction</A> -, <A NAME="tex2html14" - HREF="ffuserguide.html#11617"> 1.1 Draft Option</A> -, <A NAME="tex2html20" - HREF="ffuserguide.html#11719"> 1.2 Frame Stacking Order</A> -, <A NAME="tex2html32" - HREF="ffuserguide.html#11865"> 2.1 Flow Frames</A> -, <A NAME="tex2html39" - HREF="ffuserguide.html#12031"> 2.1.1 Prematurely Ending a Flow Frame</A> -, <A NAME="tex2html58" - HREF="ffuserguide.html#12832"> 3. Modifying Frame Attributes</A> -, <A NAME="tex2html71" - HREF="ffuserguide.html#13188"> 3.1 Non-Rectangular Frames</A> -, <A NAME="tex2html84" - HREF="ffuserguide.html#13413"> 4.3 Relative Locations</A> -, <A NAME="tex2html89" - HREF="ffuserguide.html#13498"> 5.1 Column Styles</A> -, <A NAME="tex2html93" - HREF="ffuserguide.html#14132"> 5.2 Column Styles with an Additional Frame</A> -, <A NAME="tex2html97" - HREF="ffuserguide.html#14217"> 5.3 Right to Left Columns</A> -, <A NAME="tex2html98" - HREF="ffuserguide.html#14224"> 5.3 Right to Left Columns</A> -, <A NAME="tex2html112" - HREF="ffuserguide.html#14757"> 5.4.4 Vertical and Horizontal Rules</A> -, <A NAME="tex2html132" - HREF="ffuserguide.html#15014"> 7.2 Lengths</A> -, <A NAME="tex2html133" - HREF="ffuserguide.html#15064"> 7.3 Counters</A> -, <A NAME="tex2html138" - HREF="ffuserguide.html#15111"> 7.3 Counters</A> -, <A NAME="tex2html147" - HREF="ffuserguide.html#15175"> 8.1 General Queries</A> -, <A NAME="tex2html148" - HREF="ffuserguide.html#15182"> 8.1 General Queries</A> -, <A NAME="tex2html151" - HREF="ffuserguide.html#15203"> 8.1 General Queries</A> -, <A NAME="tex2html152" - HREF="ffuserguide.html#15210"> 8.1 General Queries</A> -, <A NAME="tex2html154" - HREF="ffuserguide.html#15224"> 8.1 General Queries</A> -, <A NAME="tex2html155" - HREF="ffuserguide.html#15231"> 8.1 General Queries</A> -, <A NAME="tex2html161" - HREF="ffuserguide.html#15265"> 8.1 General Queries</A> -, <A NAME="tex2html162" - HREF="ffuserguide.html#15272"> 8.1 General Queries</A> -, <A NAME="tex2html169" - HREF="ffuserguide.html#15313"> 8.1 General Queries</A> -, <A NAME="tex2html172" - HREF="ffuserguide.html#15334"> 8.1 General Queries</A> -, <A NAME="tex2html176" - HREF="ffuserguide.html#15362"> 8.1 General Queries</A> -, <A NAME="tex2html178" - HREF="ffuserguide.html#15376"> 8.1 General Queries</A> -, <A NAME="tex2html187" - HREF="ffuserguide.html#15426"> 8.2 Unexpected Output</A> -, <A NAME="tex2html188" - HREF="ffuserguide.html#15433"> 8.2 Unexpected Output</A> -, <A NAME="tex2html189" - HREF="ffuserguide.html#15440"> 8.2 Unexpected Output</A> -, <A NAME="tex2html190" - HREF="ffuserguide.html#15447"> 8.2 Unexpected Output</A> -, <A NAME="tex2html191" - HREF="ffuserguide.html#15454"> 8.2 Unexpected Output</A> -, <A NAME="tex2html194" - HREF="ffuserguide.html#15475"> 8.2 Unexpected Output</A> -, <A NAME="tex2html201" - HREF="ffuserguide.html#15520"> 8.2 Unexpected Output</A> -, <A NAME="tex2html220" - HREF="ffuserguide.html#15697"> 8.3 Error Messages</A> -, <A NAME="tex2html224" - HREF="ffuserguide.html#15717"> 8.3 Error Messages</A> -<DT><A NAME="gls:frame"><B>frame</B></A><DD>A rectangular -area of the page in which text can be placed (not to be -confused with a frame making command). There are three types: -flow, static and dynamic. <A NAME="tex2html4" - HREF="ffuserguide.html#11452"> 1. Introduction</A> -, <A NAME="tex2html10" - HREF="ffuserguide.html#11569"> 1.1 Draft Option</A> -, <A NAME="tex2html25" - HREF="ffuserguide.html#11754"> 1.2 Frame Stacking Order</A> -, <A NAME="tex2html26" - HREF="ffuserguide.html#11782"> 1.3 HTML</A> -, <A NAME="tex2html33" - HREF="ffuserguide.html#11872"> 2.1 Flow Frames</A> -, <A NAME="tex2html40" - HREF="ffuserguide.html#12042"> 2.1.1 Prematurely Ending a Flow Frame</A> -, <A NAME="tex2html53" - HREF="ffuserguide.html#12566"> 2.3 Dynamic Frames</A> -, <A NAME="tex2html57" - HREF="ffuserguide.html#12683"> 2.3.1 Important Notes</A> -, <A NAME="tex2html61" - HREF="ffuserguide.html#12853"> 3. Modifying Frame Attributes</A> -, <A NAME="tex2html73" - HREF="ffuserguide.html#13202"> 3.1 Non-Rectangular Frames</A> -, <A NAME="tex2html74" - HREF="ffuserguide.html#13228"> 4. Locations and Dimensions</A> -, <A NAME="tex2html75" - HREF="ffuserguide.html#13260"> 4.1 Determining the Location of the Typeblock</A> -, <A NAME="tex2html77" - HREF="ffuserguide.html#13311"> 4.2 Determining the Dimensions and Locations of Frames</A> -, <A NAME="tex2html80" - HREF="ffuserguide.html#13385"> 4.3 Relative Locations</A> -, <A NAME="tex2html88" - HREF="ffuserguide.html#13450"> 5. Predefined Layouts</A> -, <A NAME="tex2html94" - HREF="ffuserguide.html#14139"> 5.2 Column Styles with an Additional Frame</A> -, <A NAME="tex2html106" - HREF="ffuserguide.html#14679"> 5.4.4 Vertical and Horizontal Rules</A> -, <A NAME="tex2html127" - HREF="ffuserguide.html#14987"> 7.2 Lengths</A> -, <A NAME="tex2html128" - HREF="ffuserguide.html#14994"> 7.2 Lengths</A> -, <A NAME="tex2html140" - HREF="ffuserguide.html#15137"> 7.3 Counters</A> -, <A NAME="tex2html156" - HREF="ffuserguide.html#15238"> 8.1 General Queries</A> -, <A NAME="tex2html160" - HREF="ffuserguide.html#15258"> 8.1 General Queries</A> -, <A NAME="tex2html179" - HREF="ffuserguide.html#15383"> 8.1 General Queries</A> -, <A NAME="tex2html180" - HREF="ffuserguide.html#15390"> 8.1 General Queries</A> -, <A NAME="tex2html186" - HREF="ffuserguide.html#15416"> 8.1 General Queries</A> -, <A NAME="tex2html192" - HREF="ffuserguide.html#15461"> 8.2 Unexpected Output</A> -, <A NAME="tex2html193" - HREF="ffuserguide.html#15468"> 8.2 Unexpected Output</A> -, <A NAME="tex2html207" - HREF="ffuserguide.html#15586"> 8.3 Error Messages</A> -, <A NAME="tex2html213" - HREF="ffuserguide.html#15628"> 8.3 Error Messages</A> -, <A NAME="tex2html219" - HREF="ffuserguide.html#15678"> 8.3 Error Messages</A> -<DT><A NAME="gls:fcmd"><B>frame making command</B></A><DD>A -LaTeX command which places some kind of border around its -argument. For example: <TT>\fbox</TT><A NAME="3572"></A>. <A NAME="tex2html64" - HREF="ffuserguide.html#13010"> 3. Modifying Frame Attributes</A> -, <A NAME="tex2html129" - HREF="ffuserguide.html#15001"> 7.2 Lengths</A> -<DT><A NAME="gls:idl"><B>identification label -(IDL)</B></A><DD>A unique -label which can be assigned to a frame, enabling you to -refer to the frame by label instead of by its -IDN. <A NAME="tex2html13" - HREF="ffuserguide.html#11606"> 1.1 Draft Option</A> -, <A NAME="tex2html38" - HREF="ffuserguide.html#11959"> 2.1 Flow Frames</A> -, <A NAME="tex2html45" - HREF="ffuserguide.html#12209"> 2.2 Static Frames</A> -, <A NAME="tex2html52" - HREF="ffuserguide.html#12523"> 2.3 Dynamic Frames</A> -, <A NAME="tex2html55" - HREF="ffuserguide.html#12616"> 2.3 Dynamic Frames</A> -, <A NAME="tex2html63" - HREF="ffuserguide.html#12911"> 3. Modifying Frame Attributes</A> -, <A NAME="tex2html78" - HREF="ffuserguide.html#13318"> 4.2 Determining the Dimensions and Locations of Frames</A> -, <A NAME="tex2html83" - HREF="ffuserguide.html#13406"> 4.3 Relative Locations</A> -, <A NAME="tex2html86" - HREF="ffuserguide.html#13431"> 4.3 Relative Locations</A> -, <A NAME="tex2html101" - HREF="ffuserguide.html#14288"> 5.4 Backdrop Effects</A> -, <A NAME="tex2html111" - HREF="ffuserguide.html#14742"> 5.4.4 Vertical and Horizontal Rules</A> -, <A NAME="tex2html120" - HREF="ffuserguide.html#14912"> 6.2 Minitocs</A> -, <A NAME="tex2html208" - HREF="ffuserguide.html#15593"> 8.3 Error Messages</A> -, <A NAME="tex2html212" - HREF="ffuserguide.html#15621"> 8.3 Error Messages</A> -, <A NAME="tex2html216" - HREF="ffuserguide.html#15657"> 8.3 Error Messages</A> -<DT><A NAME="gls:idn"><B>identification number -(IDN)</B></A><DD>A unique -number assigned to each frame, which you can use to identify -the frame when modifying its appearance. Example: if you -have defined 3 flow frames, 2 static frames and 1 dynamic -frame, the flow frames will have IDNs 1, 2 and 3, the static -frames will have IDNs 1 and 2, and the dynamic frame will -have IDN 1. <A NAME="tex2html12" - HREF="ffuserguide.html#11595"> 1.1 Draft Option</A> -, <A NAME="tex2html19" - HREF="ffuserguide.html#11712"> 1.2 Frame Stacking Order</A> -, <A NAME="tex2html21" - HREF="ffuserguide.html#11726"> 1.2 Frame Stacking Order</A> -, <A NAME="tex2html23" - HREF="ffuserguide.html#11740"> 1.2 Frame Stacking Order</A> -, <A NAME="tex2html37" - HREF="ffuserguide.html#11936"> 2.1 Flow Frames</A> -, <A NAME="tex2html46" - HREF="ffuserguide.html#12224"> 2.2 Static Frames</A> -, <A NAME="tex2html51" - HREF="ffuserguide.html#12512"> 2.3 Dynamic Frames</A> -, <A NAME="tex2html54" - HREF="ffuserguide.html#12609"> 2.3 Dynamic Frames</A> -, <A NAME="tex2html62" - HREF="ffuserguide.html#12892"> 3. Modifying Frame Attributes</A> -, <A NAME="tex2html79" - HREF="ffuserguide.html#13325"> 4.2 Determining the Dimensions and Locations of Frames</A> -, <A NAME="tex2html81" - HREF="ffuserguide.html#13392"> 4.3 Relative Locations</A> -, <A NAME="tex2html82" - HREF="ffuserguide.html#13399"> 4.3 Relative Locations</A> -, <A NAME="tex2html87" - HREF="ffuserguide.html#13438"> 4.3 Relative Locations</A> -, <A NAME="tex2html108" - HREF="ffuserguide.html#14697"> 5.4.4 Vertical and Horizontal Rules</A> -, <A NAME="tex2html110" - HREF="ffuserguide.html#14723"> 5.4.4 Vertical and Horizontal Rules</A> -, <A NAME="tex2html117" - HREF="ffuserguide.html#14876"> 6.1 Thumbtabs</A> -, <A NAME="tex2html119" - HREF="ffuserguide.html#14901"> 6.2 Minitocs</A> -, <A NAME="tex2html134" - HREF="ffuserguide.html#15071"> 7.3 Counters</A> -, <A NAME="tex2html135" - HREF="ffuserguide.html#15082"> 7.3 Counters</A> -, <A NAME="tex2html139" - HREF="ffuserguide.html#15118"> 7.3 Counters</A> -, <A NAME="tex2html203" - HREF="ffuserguide.html#15534"> 8.2 Unexpected Output</A> -, <A NAME="tex2html209" - HREF="ffuserguide.html#15600"> 8.3 Error Messages</A> -<DT><A NAME="gls:pglist"><B>page list</B></A><DD>A list of -pages. This can either be a single keyword: <TT>all</TT>, -<TT>odd</TT>, <TT>even</TT> or <TT>none</TT>, or it can -be a comma-separated list of individual page numbers or -page ranges. For example: <TT><3,5,7-11,>15</TT> -indicates pages 1,2,5,7,8,9,10,11 and all pages after page 15. -Note that these numbers refer to the actual value of the -page counter, not the absolute physical page number. <A NAME="tex2html35" - HREF="ffuserguide.html#11914"> 2.1 Flow Frames</A> -, <A NAME="tex2html44" - HREF="ffuserguide.html#12198"> 2.2 Static Frames</A> -, <A NAME="tex2html66" - HREF="ffuserguide.html#13052"> 3. Modifying Frame Attributes</A> -, <A NAME="tex2html91" - HREF="ffuserguide.html#13520"> 5.1 Column Styles</A> -, <A NAME="tex2html95" - HREF="ffuserguide.html#14146"> 5.2 Column Styles with an Additional Frame</A> -, <A NAME="tex2html100" - HREF="ffuserguide.html#14277"> 5.4 Backdrop Effects</A> -, <A NAME="tex2html150" - HREF="ffuserguide.html#15196"> 8.1 General Queries</A> -, <A NAME="tex2html153" - HREF="ffuserguide.html#15217"> 8.1 General Queries</A> -<DT><A NAME="gls:pgrange"><B>page range</B></A><DD>Page -ranges can be closed, e.g. <TT>5-10</TT>, or open, e.g. -<TT><7</TT> or <TT>>9</TT>. <A NAME="tex2html36" - HREF="ffuserguide.html#11921"> 2.1 Flow Frames</A> -, <A NAME="tex2html67" - HREF="ffuserguide.html#13067"> 3. Modifying Frame Attributes</A> -<DT><A NAME="gls:static"><B>static frame</B></A><DD>Frames in which text is fixed in place. The contents are fixed until -explicitly changed or cleared via the <TT>\clear</TT><A NAME="3562"></A> key -in <TT>\setstaticcontents</TT><A NAME="3567"></A>. <A NAME="tex2html6" - HREF="ffuserguide.html#11474"> 1. Introduction</A> -, <A NAME="tex2html15" - HREF="ffuserguide.html#11624"> 1.1 Draft Option</A> -, <A NAME="tex2html18" - HREF="ffuserguide.html#11705"> 1.2 Frame Stacking Order</A> -, <A NAME="tex2html27" - HREF="ffuserguide.html#11785"> 1.3 HTML</A> -, <A NAME="tex2html42" - HREF="ffuserguide.html#12156"> 2.2 Static Frames</A> -, <A NAME="tex2html47" - HREF="ffuserguide.html#12344"> 2.2.1 Important Notes</A> -, <A NAME="tex2html50" - HREF="ffuserguide.html#12485"> 2.3 Dynamic Frames</A> -, <A NAME="tex2html59" - HREF="ffuserguide.html#12839"> 3. Modifying Frame Attributes</A> -, <A NAME="tex2html69" - HREF="ffuserguide.html#13178"> 3.1 Non-Rectangular Frames</A> -, <A NAME="tex2html99" - HREF="ffuserguide.html#14266"> 5.4 Backdrop Effects</A> -, <A NAME="tex2html103" - HREF="ffuserguide.html#14439"> 5.4.1 Vertical stripe effects</A> -, <A NAME="tex2html104" - HREF="ffuserguide.html#14579"> 5.4.2 Horizontal stripe effect</A> -, <A NAME="tex2html105" - HREF="ffuserguide.html#14603"> 5.4.3 Background Frame</A> -, <A NAME="tex2html107" - HREF="ffuserguide.html#14686"> 5.4.4 Vertical and Horizontal Rules</A> -, <A NAME="tex2html109" - HREF="ffuserguide.html#14712"> 5.4.4 Vertical and Horizontal Rules</A> -, <A NAME="tex2html113" - HREF="ffuserguide.html#14764"> 5.4.4 Vertical and Horizontal Rules</A> -, <A NAME="tex2html130" - HREF="ffuserguide.html#15004"> 7.2 Lengths</A> -, <A NAME="tex2html136" - HREF="ffuserguide.html#15097"> 7.3 Counters</A> -, <A NAME="tex2html141" - HREF="ffuserguide.html#15144"> 7.3 Counters</A> -, <A NAME="tex2html157" - HREF="ffuserguide.html#15241"> 8.1 General Queries</A> -, <A NAME="tex2html163" - HREF="ffuserguide.html#15279"> 8.1 General Queries</A> -, <A NAME="tex2html165" - HREF="ffuserguide.html#15289"> 8.1 General Queries</A> -, <A NAME="tex2html167" - HREF="ffuserguide.html#15299"> 8.1 General Queries</A> -, <A NAME="tex2html171" - HREF="ffuserguide.html#15327"> 8.1 General Queries</A> -, <A NAME="tex2html174" - HREF="ffuserguide.html#15348"> 8.1 General Queries</A> -, <A NAME="tex2html181" - HREF="ffuserguide.html#15393"> 8.1 General Queries</A> -, <A NAME="tex2html183" - HREF="ffuserguide.html#15399"> 8.1 General Queries</A> -, <A NAME="tex2html195" - HREF="ffuserguide.html#15490"> 8.2 Unexpected Output</A> -, <A NAME="tex2html197" - HREF="ffuserguide.html#15504"> 8.2 Unexpected Output</A> -, <A NAME="tex2html199" - HREF="ffuserguide.html#15510"> 8.2 Unexpected Output</A> -, <A NAME="tex2html204" - HREF="ffuserguide.html#15541"> 8.2 Unexpected Output</A> -, <A NAME="tex2html210" - HREF="ffuserguide.html#15607"> 8.3 Error Messages</A> -, <A NAME="tex2html214" - HREF="ffuserguide.html#15639"> 8.3 Error Messages</A> -, <A NAME="tex2html217" - HREF="ffuserguide.html#15664"> 8.3 Error Messages</A> -, <A NAME="tex2html221" - HREF="ffuserguide.html#15700"> 8.3 Error Messages</A> -, <A NAME="tex2html225" - HREF="ffuserguide.html#15720"> 8.3 Error Messages</A> -, <A NAME="tex2html227" - HREF="ffuserguide.html#15726"> 8.3 Error Messages</A> -, <A NAME="tex2html229" - HREF="ffuserguide.html#15732"> 8.3 Error Messages</A> -<DT><A NAME="gls:typeblock"><B>typeblock</B></A><DD>The area of the page where the main body of the text goes. -The width and height of this area are given by -<TT>\textwidth</TT><A NAME="3549"></A> and <TT>\textheight</TT><A NAME="3554"></A>. <A NAME="tex2html8" - HREF="ffuserguide.html#11492"> 1. Introduction</A> -, <A NAME="tex2html11" - HREF="ffuserguide.html#11584"> 1.1 Draft Option</A> -, <A NAME="tex2html34" - HREF="ffuserguide.html#11903"> 2.1 Flow Frames</A> -, <A NAME="tex2html43" - HREF="ffuserguide.html#12191"> 2.2 Static Frames</A> -, <A NAME="tex2html76" - HREF="ffuserguide.html#13267"> 4.1 Determining the Location of the Typeblock</A> -, <A NAME="tex2html90" - HREF="ffuserguide.html#13505"> 5.1 Column Styles</A> -, <A NAME="tex2html96" - HREF="ffuserguide.html#14157"> 5.2 Column Styles with an Additional Frame</A> -, <A NAME="tex2html102" - HREF="ffuserguide.html#14307"> 5.4 Backdrop Effects</A> -, <A NAME="tex2html116" - HREF="ffuserguide.html#14865"> 6.1 Thumbtabs</A> -, <A NAME="tex2html123" - HREF="ffuserguide.html#14958"> 7.1 Macros</A> -, <A NAME="tex2html149" - HREF="ffuserguide.html#15189"> 8.1 General Queries</A> -, <A NAME="tex2html170" - HREF="ffuserguide.html#15320"> 8.1 General Queries</A> -, <A NAME="tex2html177" - HREF="ffuserguide.html#15369"> 8.1 General Queries</A> -, <A NAME="tex2html185" - HREF="ffuserguide.html#15409"> 8.1 General Queries</A> -</DL> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> -<A NAME="index"></A> -<BR> - -<H2><A NAME="SECTION00110000000000000000000"> -Index</A> -</H2><DL COMPACT> -<DT><STRONG><TT>\afterminitocskip</TT></STRONG> -<DD><A HREF="ffuserguide.html#6555">6.2</A> - | <A HREF="ffuserguide.html#6704">7.2</A> -<DT><STRONG><TT>\appenddfminitoc</TT></STRONG> -<DD><A HREF="ffuserguide.html#6536">6.2</A> -<DT><STRONG><TT>\appenddynamiccontents</TT></STRONG> -<DD><A HREF="ffuserguide.html#4116">2.3</A> -<DT><STRONG><TT>\appenddynamiccontents*</TT></STRONG> -<DD><A HREF="ffuserguide.html#4125">2.3</A> -<DT><STRONG><TT>\baselineskip</TT></STRONG> -<DD><A HREF="ffuserguide.html#4890">5.1</A> - | <A HREF="ffuserguide.html#4949">5.1</A> - | <A HREF="ffuserguide.html#4974">5.1</A> - | <A HREF="ffuserguide.html#5010">5.2</A> - | <A HREF="ffuserguide.html#6664">7.2</A> -<DT><STRONG><TT>\beforeminitocskip</TT></STRONG> -<DD><A HREF="ffuserguide.html#6550">6.2</A> - | <A HREF="ffuserguide.html#6699">7.2</A> -<DT><STRONG><TT>\caption</TT></STRONG> -<DD><A HREF="ffuserguide.html#3611">1.</A> -<DT><STRONG><TT>\chapter</TT></STRONG> -<DD><A HREF="ffuserguide.html#4134">2.3</A> - | <A HREF="ffuserguide.html#4483">3.1</A> - | <A HREF="ffuserguide.html#6430">6.1</A> -<DT><STRONG><TT>\clear</TT></STRONG> -<DD><A HREF="ffuserguide.html#3562">ffuserguide</A> -<DT><STRONG><TT>\cleardoublepage</TT></STRONG> -<DD><A HREF="ffuserguide.html#3830">2.1.1</A> -<DT><STRONG><TT>\clearpage</TT></STRONG> -<DD><A HREF="ffuserguide.html#3825">2.1.1</A> -<DT><STRONG><TT>color</TT> package</STRONG> -<DD><A HREF="ffuserguide.html#3648">1.</A> -<DT><STRONG><TT>\columnsep</TT></STRONG> -<DD><A HREF="ffuserguide.html#4885">5.1</A> - | <A HREF="ffuserguide.html#4929">5.1</A> - | <A HREF="ffuserguide.html#4969">5.1</A> - | <A HREF="ffuserguide.html#4979">5.1</A> - | <A HREF="ffuserguide.html#6669">7.2</A> -<DT><STRONG><TT>\columnseprule</TT></STRONG> -<DD><A HREF="ffuserguide.html#6327">5.4.4</A> -<DT><STRONG><TT>\computebottomedge</TT></STRONG> -<DD><A HREF="ffuserguide.html#4630">4.1</A> -<DT><STRONG><TT>\computeleftedgeeven</TT></STRONG> -<DD><A HREF="ffuserguide.html#4616">4.1</A> -<DT><STRONG><TT>\computeleftedgeodd</TT></STRONG> -<DD><A HREF="ffuserguide.html#4609">4.1</A> -<DT><STRONG><TT>\computerightedgeeven</TT></STRONG> -<DD><A HREF="ffuserguide.html#4644">4.1</A> -<DT><STRONG><TT>\computerightedgeodd</TT></STRONG> -<DD><A HREF="ffuserguide.html#4637">4.1</A> -<DT><STRONG><TT>\computetopedge</TT></STRONG> -<DD><A HREF="ffuserguide.html#4623">4.1</A> -<DT><STRONG><TT>\continueonframe</TT></STRONG> -<DD><A HREF="ffuserguide.html#3950">2.2</A> - | <A HREF="ffuserguide.html#3981">2.2</A> - | <A HREF="ffuserguide.html#4162">2.3</A> - | <A HREF="ffuserguide.html#4187">2.3</A> - | <A HREF="ffuserguide.html#4202">2.3.1</A> - | <A HREF="ffuserguide.html#4857">4.3</A> -<DT><STRONG><TT>\dfchaphead</TT></STRONG> -<DD><A HREF="ffuserguide.html#4139">2.3</A> -<DT><STRONG><TT>\dfswapoddeven</TT></STRONG> -<DD><A HREF="ffuserguide.html#4310">3.</A> -<DT><STRONG><TT>\diamondshape</TT></STRONG> -<DD><A HREF="ffuserguide.html#4568">3.1</A> -<DT><STRONG><TT>\disablethumbtabs</TT></STRONG> -<DD><A HREF="ffuserguide.html#6450">6.1</A> -<DT><STRONG><TT>displayedframe</TT> counter</STRONG> -<DD><A HREF="ffuserguide.html#6754">7.3</A> -<DT><STRONG><TT>document</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#3559">ffuserguide</A> - | <A HREF="ffuserguide.html#3586">1.</A> - | <A HREF="ffuserguide.html#3728">2.1</A> -<DT><STRONG><TT>\doublebox</TT></STRONG> -<DD><A HREF="ffuserguide.html#4331">3.</A> - | <A HREF="ffuserguide.html#4380">3.</A> -<DT><STRONG><TT>draft</TT> option</STRONG> -<DD><A HREF="ffuserguide.html#3655">1.1</A> - | <A HREF="ffuserguide.html#3688">1.1</A> - | <A HREF="ffuserguide.html#3706">1.2</A> -<DT><STRONG><TT>dynamiccontents</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#4003">2.3</A> - | <A HREF="ffuserguide.html#4100">2.3</A> - | <A HREF="ffuserguide.html#4110">2.3</A> - | <A HREF="ffuserguide.html#4156">2.3</A> - | <A HREF="ffuserguide.html#4196">2.3.1</A> - | <A HREF="ffuserguide.html#6933">8.3</A> - | <A HREF="ffuserguide.html#6937">8.3</A> -<DT><STRONG><TT>dynamiccontents*</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#4105">2.3</A> - | <A HREF="ffuserguide.html#4113">2.3</A> - | <A HREF="ffuserguide.html#4159">2.3</A> - | <A HREF="ffuserguide.html#4170">2.3</A> - | <A HREF="ffuserguide.html#4199">2.3.1</A> -<DT><STRONG><TT>\enableminitoc</TT></STRONG> -<DD><A HREF="ffuserguide.html#6529">6.2</A> -<DT><STRONG><TT>\enablethumbtabs</TT></STRONG> -<DD><A HREF="ffuserguide.html#6445">6.1</A> -<DT><STRONG><TT>etex</TT> package</STRONG> -<DD><A HREF="ffuserguide.html#6928">8.3</A> -<DT><STRONG><TT>\evensidemargin</TT></STRONG> -<DD><A HREF="ffuserguide.html#3594">1.</A> -<DT><STRONG><TT>fancybox</TT> package</STRONG> -<DD><A HREF="ffuserguide.html#4328">3.</A> -<DT><STRONG><TT>\fbox</TT></STRONG> -<DD><A HREF="ffuserguide.html#3572">ffuserguide</A> - | <A HREF="ffuserguide.html#4323">3.</A> - | <A HREF="ffuserguide.html#4365">3.</A> - | <A HREF="ffuserguide.html#6640">7.2</A> -<DT><STRONG><TT>\fboxsep</TT></STRONG> -<DD><A HREF="ffuserguide.html#6635">7.2</A> -<DT><STRONG><TT>\FFabove</TT></STRONG> -<DD><A HREF="ffuserguide.html#4757">4.3</A> -<DT><STRONG><TT>\FFaboveleft</TT></STRONG> -<DD><A HREF="ffuserguide.html#4747">4.3</A> -<DT><STRONG><TT>\FFaboveright</TT></STRONG> -<DD><A HREF="ffuserguide.html#4752">4.3</A> -<DT><STRONG><TT>\ffareaheight</TT></STRONG> -<DD><A HREF="ffuserguide.html#4702">4.2</A> -<DT><STRONG><TT>\ffareawidth</TT></STRONG> -<DD><A HREF="ffuserguide.html#4697">4.2</A> -<DT><STRONG><TT>\ffareax</TT></STRONG> -<DD><A HREF="ffuserguide.html#4707">4.2</A> -<DT><STRONG><TT>\ffareay</TT></STRONG> -<DD><A HREF="ffuserguide.html#4712">4.2</A> -<DT><STRONG><TT>\FFbelow</TT></STRONG> -<DD><A HREF="ffuserguide.html#4772">4.3</A> -<DT><STRONG><TT>\FFbelowleft</TT></STRONG> -<DD><A HREF="ffuserguide.html#4762">4.3</A> -<DT><STRONG><TT>\FFbelowright</TT></STRONG> -<DD><A HREF="ffuserguide.html#4767">4.3</A> -<DT><STRONG><TT>\ffcolumnseprule</TT></STRONG> -<DD><A HREF="ffuserguide.html#6322">5.4.4</A> - | <A HREF="ffuserguide.html#6362">5.4.4</A> - | <A HREF="ffuserguide.html#6380">5.4.4</A> - | <A HREF="ffuserguide.html#6684">7.2</A> -<DT><STRONG><TT>\ffcontinuedtextfont</TT></STRONG> -<DD><A HREF="ffuserguide.html#3974">2.2</A> - | <A HREF="ffuserguide.html#4180">2.3</A> - | <A HREF="ffuserguide.html#6604">7.1</A> -<DT><STRONG><TT>\ffcontinuedtextlayout</TT></STRONG> -<DD><A HREF="ffuserguide.html#3967">2.2</A> - | <A HREF="ffuserguide.html#4173">2.3</A> -<DT><STRONG><TT>\ffhrule</TT></STRONG> -<DD><A HREF="ffuserguide.html#6372">5.4.4</A> -<DT><STRONG><TT>\fflabelfont</TT></STRONG> -<DD><A HREF="ffuserguide.html#6584">7.1</A> -<DT><STRONG><TT>\fflabelsep</TT></STRONG> -<DD><A HREF="ffuserguide.html#6620">7.2</A> -<DT><STRONG><TT>\FFleft</TT></STRONG> -<DD><A HREF="ffuserguide.html#4777">4.3</A> -<DT><STRONG><TT>\FFoverlap</TT></STRONG> -<DD><A HREF="ffuserguide.html#4787">4.3</A> -<DT><STRONG><TT>\FFright</TT></STRONG> -<DD><A HREF="ffuserguide.html#4782">4.3</A> -<DT><STRONG><TT>\ffruledeclarations</TT></STRONG> -<DD><A HREF="ffuserguide.html#6395">5.4.4</A> - | <A HREF="ffuserguide.html#6589">7.1</A> -<DT><STRONG><TT>\ffswapoddeven</TT></STRONG> -<DD><A HREF="ffuserguide.html#4296">3.</A> -<DT><STRONG><TT>\ffvadjustfalse</TT></STRONG> -<DD><A HREF="ffuserguide.html#4895">5.1</A> -<DT><STRONG><TT>\ffvrule</TT></STRONG> -<DD><A HREF="ffuserguide.html#6337">5.4.4</A> -<DT><STRONG><TT>figure</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#3605">1.</A> - | <A HREF="ffuserguide.html#3627">1.</A> - | <A HREF="ffuserguide.html#3639">1.</A> -<DT><STRONG><TT>figure*</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#3633">1.</A> -<DT><STRONG><TT>\flowframerule</TT></STRONG> -<DD><A HREF="ffuserguide.html#4359">3.</A> - | <A HREF="ffuserguide.html#6630">7.2</A> -<DT><STRONG><TT>\flowframesep</TT></STRONG> -<DD><A HREF="ffuserguide.html#4354">3.</A> - | <A HREF="ffuserguide.html#6625">7.2</A> -<DT><STRONG><TT>\flowframeshowlayout</TT></STRONG> -<DD><A HREF="ffuserguide.html#3691">1.1</A> -<DT><STRONG>frame settings</STRONG> -<DD><DL COMPACT> -<DT><STRONG>angle</STRONG> -<DD><A HREF="ffuserguide.html#4415">3.</A> -<DT><STRONG>backcolor</STRONG> -<DD><A HREF="ffuserguide.html#4391">3.</A> -<DT><STRONG>border</STRONG> -<DD><A HREF="ffuserguide.html#4321">3.</A> -<DT><STRONG>bordercolor</STRONG> -<DD><A HREF="ffuserguide.html#4389">3.</A> -<DT><STRONG>clear</STRONG> -<DD><A HREF="ffuserguide.html#4394">3.</A> - | <A HREF="ffuserguide.html#4413">3.</A> - | <A HREF="ffuserguide.html#6815">8.1</A> -<DT><STRONG>evenx</STRONG> -<DD><A HREF="ffuserguide.html#4294">3.</A> -<DT><STRONG>eveny</STRONG> -<DD><A HREF="ffuserguide.html#4316">3.</A> -<DT><STRONG>height</STRONG> -<DD><A HREF="ffuserguide.html#4291">3.</A> -<DT><STRONG>label</STRONG> -<DD><A HREF="ffuserguide.html#4320">3.</A> -<DT><STRONG>margin</STRONG> -<DD><A HREF="ffuserguide.html#4393">3.</A> -<DT><STRONG>oddx</STRONG> -<DD><A HREF="ffuserguide.html#4317">3.</A> -<DT><STRONG>oddy</STRONG> -<DD><A HREF="ffuserguide.html#4318">3.</A> -<DT><STRONG>offset</STRONG> -<DD><A HREF="ffuserguide.html#4363">3.</A> -<DT><STRONG>pages</STRONG> -<DD><A HREF="ffuserguide.html#4392">3.</A> -<DT><STRONG>shape</STRONG> -<DD><A HREF="ffuserguide.html#4416">3.</A> - | <A HREF="ffuserguide.html#4476">3.1</A> - | <A HREF="ffuserguide.html#4510">3.1</A> - | <A HREF="ffuserguide.html#6801">8.1</A> -<DT><STRONG>style</STRONG> -<DD><A HREF="ffuserguide.html#4414">3.</A> -<DT><STRONG>textcolor</STRONG> -<DD><A HREF="ffuserguide.html#4390">3.</A> -<DT><STRONG>valign</STRONG> -<DD><A HREF="ffuserguide.html#4319">3.</A> - | <A HREF="ffuserguide.html#6833">8.1</A> -<DT><STRONG>width</STRONG> -<DD><A HREF="ffuserguide.html#4290">3.</A> -<DT><STRONG>x</STRONG> -<DD><A HREF="ffuserguide.html#4292">3.</A> -<DT><STRONG>y</STRONG> -<DD><A HREF="ffuserguide.html#4293">3.</A> -</DL> -<DT><STRONG><TT>\framebreak</TT></STRONG> -<DD><A HREF="ffuserguide.html#3810">2.1.1</A> - | <A HREF="ffuserguide.html#3815">2.1.1</A> - | <A HREF="ffuserguide.html#6854">8.2</A> -<DT><STRONG><TT>\getdynamicbounds</TT></STRONG> -<DD><A HREF="ffuserguide.html#4683">4.2</A> -<DT><STRONG><TT>\getdynamicbounds*</TT></STRONG> -<DD><A HREF="ffuserguide.html#4690">4.2</A> -<DT><STRONG><TT>\getdynamicid</TT></STRONG> -<DD><A HREF="ffuserguide.html#4040">2.3</A> - | <A HREF="ffuserguide.html#4054">2.3</A> -<DT><STRONG><TT>\getdynamiclabel</TT></STRONG> -<DD><A HREF="ffuserguide.html#4033">2.3</A> - | <A HREF="ffuserguide.html#4049">2.3</A> -<DT><STRONG><TT>\getflowbounds</TT></STRONG> -<DD><A HREF="ffuserguide.html#4669">4.2</A> -<DT><STRONG><TT>\getflowbounds*</TT></STRONG> -<DD><A HREF="ffuserguide.html#4676">4.2</A> -<DT><STRONG><TT>\getflowid</TT></STRONG> -<DD><A HREF="ffuserguide.html#3755">2.1</A> - | <A HREF="ffuserguide.html#3769">2.1</A> -<DT><STRONG><TT>\getflowlabel</TT></STRONG> -<DD><A HREF="ffuserguide.html#3748">2.1</A> - | <A HREF="ffuserguide.html#3764">2.1</A> -<DT><STRONG><TT>\getstaticbounds</TT></STRONG> -<DD><A HREF="ffuserguide.html#4655">4.2</A> -<DT><STRONG><TT>\getstaticbounds*</TT></STRONG> -<DD><A HREF="ffuserguide.html#4662">4.2</A> -<DT><STRONG><TT>\getstaticid</TT></STRONG> -<DD><A HREF="ffuserguide.html#3868">2.2</A> - | <A HREF="ffuserguide.html#3882">2.2</A> -<DT><STRONG><TT>\getstaticlabel</TT></STRONG> -<DD><A HREF="ffuserguide.html#3861">2.2</A> - | <A HREF="ffuserguide.html#3877">2.2</A> -<DT><STRONG><TT>ghostscript</TT></STRONG> -<DD><A HREF="ffuserguide.html#6859">8.2</A> -<DT><STRONG><TT>\heartshape</TT></STRONG> -<DD><A HREF="ffuserguide.html#4573">3.1</A> -<DT><STRONG><TT>\hNtone</TT></STRONG> -<DD><A HREF="ffuserguide.html#6144">5.4.2</A> -<DT><STRONG><TT>\hNtoneleft</TT></STRONG> -<DD><A HREF="ffuserguide.html#6228">5.4.2</A> -<DT><STRONG><TT>\hNtoneright</TT></STRONG> -<DD><A HREF="ffuserguide.html#6258">5.4.2</A> -<DT><STRONG><TT>\hsize</TT></STRONG> -<DD><A HREF="ffuserguide.html#3820">2.1.1</A> - | <A HREF="ffuserguide.html#6849">8.2</A> -<DT><STRONG><TT>html</TT> package</STRONG> -<DD><A HREF="ffuserguide.html#3717">1.3</A> -<DT><STRONG><TT>\htwotone</TT></STRONG> -<DD><A HREF="ffuserguide.html#6123">5.4.2</A> - | <A HREF="ffuserguide.html#6167">5.4.2</A> - | <A HREF="ffuserguide.html#6195">5.4.2</A> - | <A HREF="ffuserguide.html#6223">5.4.2</A> -<DT><STRONG><TT>\htwotoneleft</TT></STRONG> -<DD><A HREF="ffuserguide.html#6172">5.4.2</A> - | <A HREF="ffuserguide.html#6253">5.4.2</A> -<DT><STRONG><TT>\htwotoneright</TT></STRONG> -<DD><A HREF="ffuserguide.html#6200">5.4.2</A> - | <A HREF="ffuserguide.html#6283">5.4.2</A> -<DT><STRONG><TT>hyperref</TT> package</STRONG> -<DD><A HREF="ffuserguide.html#3645">1.</A> - | <A HREF="ffuserguide.html#6522">6.1</A> - | <A HREF="ffuserguide.html#6470">6.1</A> -<DT><STRONG><TT>\hypersetup</TT></STRONG> -<DD><A HREF="ffuserguide.html#6517">6.1</A> -<DT><STRONG><TT>\inserthrule</TT></STRONG> -<DD><A HREF="ffuserguide.html#6345">5.4.4</A> - | <A HREF="ffuserguide.html#6367">5.4.4</A> - | <A HREF="ffuserguide.html#6390">5.4.4</A> - | <A HREF="ffuserguide.html#6599">7.1</A> - | <A HREF="ffuserguide.html#6694">7.2</A> -<DT><STRONG><TT>\insertvrule</TT></STRONG> -<DD><A HREF="ffuserguide.html#6305">5.4.4</A> - | <A HREF="ffuserguide.html#6332">5.4.4</A> - | <A HREF="ffuserguide.html#6385">5.4.4</A> - | <A HREF="ffuserguide.html#6594">7.1</A> - | <A HREF="ffuserguide.html#6689">7.2</A> -<DT><STRONG><TT>\item</TT></STRONG> -<DD><A HREF="ffuserguide.html#6923">8.3</A> -<DT><STRONG><TT>\label</TT></STRONG> -<DD><A HREF="ffuserguide.html#3616">1.</A> - | <A HREF="ffuserguide.html#3990">2.2.1</A> - | <A HREF="ffuserguide.html#4409">3.</A> - | <A HREF="ffuserguide.html#6733">7.3</A> - | <A HREF="ffuserguide.html#6807">8.1</A> -<DT><STRONG><TT>\labelflow</TT></STRONG> -<DD><A HREF="ffuserguide.html#6757">7.3</A> - | <A HREF="ffuserguide.html#6771">7.3</A> - | <A HREF="ffuserguide.html#6776">7.3</A> -<DT><STRONG><TT>\labelflowid</TT></STRONG> -<DD><A HREF="ffuserguide.html#6726">7.3</A> - | <A HREF="ffuserguide.html#6749">7.3</A> -<DT><STRONG><TT>\lefttorightcolumnsfalse</TT></STRONG> -<DD><A HREF="ffuserguide.html#5925">5.3</A> -<DT><STRONG><TT>\lefttorightcolumnstrue</TT></STRONG> -<DD><A HREF="ffuserguide.html#5940">5.3</A> -<DT><STRONG><TT>\makebackgroundframe</TT></STRONG> -<DD><A HREF="ffuserguide.html#6292">5.4.3</A> -<DT><STRONG><TT>\makedfheaderfooter</TT></STRONG> -<DD><A HREF="ffuserguide.html#4146">2.3</A> -<DT><STRONG><TT>\makethumbtabs</TT></STRONG> -<DD><A HREF="ffuserguide.html#6419">6.1</A> -<DT><STRONG><TT>maxdynamic</TT> counter</STRONG> -<DD><A HREF="ffuserguide.html#6784">7.3</A> -<DT><STRONG><TT>maxflow</TT> counter</STRONG> -<DD><A HREF="ffuserguide.html#6720">7.3</A> -<DT><STRONG><TT>maxstatic</TT> counter</STRONG> -<DD><A HREF="ffuserguide.html#6781">7.3</A> -<DT><STRONG><TT>maxthumbtabs</TT> counter</STRONG> -<DD><A HREF="ffuserguide.html#6500">6.1</A> - | <A HREF="ffuserguide.html#6787">7.3</A> -<DT><STRONG><TT>\minitocstyle</TT></STRONG> -<DD><A HREF="ffuserguide.html#6543">6.2</A> -<DT><STRONG><TT>\Ncolumn</TT></STRONG> -<DD><A HREF="ffuserguide.html#4920">5.1</A> - | <A HREF="ffuserguide.html#5935">5.3</A> - | <A HREF="ffuserguide.html#6674">7.2</A> -<DT><STRONG><TT>\Ncolumnbottom</TT></STRONG> -<DD><A HREF="ffuserguide.html#5854">5.2</A> - | <A HREF="ffuserguide.html#5883">5.2</A> - | <A HREF="ffuserguide.html#5906">5.2</A> -<DT><STRONG><TT>\Ncolumnbottominarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5117">5.2</A> - | <A HREF="ffuserguide.html#5795">5.2</A> - | <A HREF="ffuserguide.html#5834">5.2</A> - | <A HREF="ffuserguide.html#5867">5.2</A> -<DT><STRONG><TT>\NcolumnDbottom</TT></STRONG> -<DD><A HREF="ffuserguide.html#5895">5.2</A> -<DT><STRONG><TT>\NcolumnDbottominarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5815">5.2</A> -<DT><STRONG><TT>\NcolumnDtop</TT></STRONG> -<DD><A HREF="ffuserguide.html#5505">5.2</A> -<DT><STRONG><TT>\NcolumnDtopinarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5425">5.2</A> -<DT><STRONG><TT>\Ncolumninarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#4984">5.1</A> -<DT><STRONG><TT>\NcolumnSbottom</TT></STRONG> -<DD><A HREF="ffuserguide.html#5872">5.2</A> -<DT><STRONG><TT>\NcolumnSbottominarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5776">5.2</A> -<DT><STRONG><TT>\NcolumnStop</TT></STRONG> -<DD><A HREF="ffuserguide.html#5482">5.2</A> -<DT><STRONG><TT>\NcolumnStopinarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5386">5.2</A> -<DT><STRONG><TT>\Ncolumntop</TT></STRONG> -<DD><A HREF="ffuserguide.html#5464">5.2</A> - | <A HREF="ffuserguide.html#5493">5.2</A> - | <A HREF="ffuserguide.html#5516">5.2</A> - | <A HREF="ffuserguide.html#6659">7.2</A> - | <A HREF="ffuserguide.html#6679">7.2</A> -<DT><STRONG><TT>\Ncolumntopinarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5058">5.2</A> - | <A HREF="ffuserguide.html#5405">5.2</A> - | <A HREF="ffuserguide.html#5444">5.2</A> - | <A HREF="ffuserguide.html#5477">5.2</A> -<DT><STRONG><TT>\newdynamicframe</TT></STRONG> -<DD><A HREF="ffuserguide.html#4006">2.3</A> -<DT><STRONG><TT>\newdynamicframe*</TT></STRONG> -<DD><A HREF="ffuserguide.html#4059">2.3</A> -<DT><STRONG><TT>\newflowframe</TT></STRONG> -<DD><A HREF="ffuserguide.html#3731">2.1</A> - | <A HREF="ffuserguide.html#3856">2.2</A> - | <A HREF="ffuserguide.html#3887">2.2</A> - | <A HREF="ffuserguide.html#4023">2.3</A> -<DT><STRONG><TT>\newflowframe*</TT></STRONG> -<DD><A HREF="ffuserguide.html#3774">2.1</A> -<DT><STRONG><TT>\newpage</TT></STRONG> -<DD><A HREF="ffuserguide.html#3800">2.1.1</A> -<DT><STRONG><TT>\newstaticframe</TT></STRONG> -<DD><A HREF="ffuserguide.html#3839">2.2</A> - | <A HREF="ffuserguide.html#4028">2.3</A> -<DT><STRONG><TT>\newstaticframe*</TT></STRONG> -<DD><A HREF="ffuserguide.html#3892">2.2</A> -<DT><STRONG><TT>nocolor</TT> option</STRONG> -<DD><A HREF="ffuserguide.html#3696">1.1</A> -<DT><STRONG><TT>norotate</TT> option</STRONG> -<DD><A HREF="ffuserguide.html#3699">1.1</A> - | <A HREF="ffuserguide.html#6488">6.1</A> -<DT><STRONG><TT>\nutshape</TT></STRONG> -<DD><A HREF="ffuserguide.html#4578">3.1</A> -<DT><STRONG><TT>\oddsidemargin</TT></STRONG> -<DD><A HREF="ffuserguide.html#3589">1.</A> -<DT><STRONG><TT>\onecolumn</TT></STRONG> -<DD><A HREF="ffuserguide.html#4870">5.1</A> - | <A HREF="ffuserguide.html#4900">5.1</A> - | <A HREF="ffuserguide.html#4910">5.1</A> - | <A HREF="ffuserguide.html#6820">8.1</A> -<DT><STRONG><TT>\onecolumnbottom</TT></STRONG> -<DD><A HREF="ffuserguide.html#5598">5.2</A> - | <A HREF="ffuserguide.html#5623">5.2</A> - | <A HREF="ffuserguide.html#5642">5.2</A> -<DT><STRONG><TT>\onecolumnbottominarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5079">5.2</A> - | <A HREF="ffuserguide.html#5545">5.2</A> - | <A HREF="ffuserguide.html#5580">5.2</A> - | <A HREF="ffuserguide.html#5609">5.2</A> -<DT><STRONG><TT>\onecolumnDbottom</TT></STRONG> -<DD><A HREF="ffuserguide.html#5633">5.2</A> -<DT><STRONG><TT>\onecolumnDbottominarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5563">5.2</A> -<DT><STRONG><TT>\onecolumnDtop</TT></STRONG> -<DD><A HREF="ffuserguide.html#5243">5.2</A> -<DT><STRONG><TT>\onecolumnDtopinarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5173">5.2</A> -<DT><STRONG><TT>\onecolumninarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#4934">5.1</A> -<DT><STRONG><TT>\onecolumnSbottom</TT></STRONG> -<DD><A HREF="ffuserguide.html#5614">5.2</A> -<DT><STRONG><TT>\onecolumnSbottominarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5528">5.2</A> -<DT><STRONG><TT>\onecolumnStop</TT></STRONG> -<DD><A HREF="ffuserguide.html#5224">5.2</A> -<DT><STRONG><TT>\onecolumnStopinarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5138">5.2</A> -<DT><STRONG><TT>\onecolumntop</TT></STRONG> -<DD><A HREF="ffuserguide.html#5208">5.2</A> - | <A HREF="ffuserguide.html#5233">5.2</A> - | <A HREF="ffuserguide.html#5252">5.2</A> -<DT><STRONG><TT>\onecolumntopinarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5020">5.2</A> - | <A HREF="ffuserguide.html#5155">5.2</A> - | <A HREF="ffuserguide.html#5190">5.2</A> - | <A HREF="ffuserguide.html#5219">5.2</A> -<DT><STRONG><TT>\Ovalbox</TT></STRONG> -<DD><A HREF="ffuserguide.html#4336">3.</A> - | <A HREF="ffuserguide.html#4341">3.</A> - | <A HREF="ffuserguide.html#4370">3.</A> - | <A HREF="ffuserguide.html#4375">3.</A> -<DT><STRONG><TT>\pagebreak</TT></STRONG> -<DD><A HREF="ffuserguide.html#3805">2.1.1</A> -<DT><STRONG><TT>\par</TT></STRONG> -<DD><A HREF="ffuserguide.html#4478">3.1</A> -<DT><STRONG><TT>\parshape</TT></STRONG> -<DD><A HREF="ffuserguide.html#4467">3.1</A> - | <A HREF="ffuserguide.html#4431">3.1</A> - | <A HREF="ffuserguide.html#4452">3.1</A> - | <A HREF="ffuserguide.html#4472">3.1</A> - | <A HREF="ffuserguide.html#4517">3.1</A> - | <A HREF="ffuserguide.html#4522">3.1</A> - | <A HREF="ffuserguide.html#6879">8.2</A> - | <A HREF="ffuserguide.html#6884">8.2</A> -<DT><STRONG><TT>\part</TT></STRONG> -<DD><A HREF="ffuserguide.html#4488">3.1</A> -<DT><STRONG><TT>\ref</TT></STRONG> -<DD><A HREF="ffuserguide.html#6738">7.3</A> - | <A HREF="ffuserguide.html#6764">7.3</A> -<DT><STRONG><TT>\relativeframelocation</TT></STRONG> -<DD><A HREF="ffuserguide.html#4721">4.3</A> - | <A HREF="ffuserguide.html#4792">4.3</A> - | <A HREF="ffuserguide.html#4806">4.3</A> - | <A HREF="ffuserguide.html#4826">4.3</A> - | <A HREF="ffuserguide.html#4846">4.3</A> -<DT><STRONG><TT>\relativeframelocation*</TT></STRONG> -<DD><A HREF="ffuserguide.html#4734">4.3</A> -<DT><STRONG><TT>\relax</TT></STRONG> -<DD><A HREF="ffuserguide.html#4418">3.</A> - | <A HREF="ffuserguide.html#4512">3.1</A> -<DT><STRONG><TT>\reldynamicloc</TT></STRONG> -<DD><A HREF="ffuserguide.html#4797">4.3</A> -<DT><STRONG><TT>\relflowloc</TT></STRONG> -<DD><A HREF="ffuserguide.html#4837">4.3</A> -<DT><STRONG><TT>\relstaticloc</TT></STRONG> -<DD><A HREF="ffuserguide.html#4817">4.3</A> -<DT><STRONG><TT>\renewcommand</TT></STRONG> -<DD><A HREF="ffuserguide.html#6569">7.1</A> -<DT><STRONG><TT>RL</TT> option</STRONG> -<DD><A HREF="ffuserguide.html#5922">5.3</A> -<DT><STRONG><TT>\sdfparindent</TT></STRONG> -<DD><A HREF="ffuserguide.html#6645">7.2</A> - | <A HREF="ffuserguide.html#6870">8.2</A> -<DT><STRONG><TT>\setalldynamicframes</TT></STRONG> -<DD><A HREF="ffuserguide.html#4284">3.</A> -<DT><STRONG><TT>\setallflowframes</TT></STRONG> -<DD><A HREF="ffuserguide.html#4234">3.</A> -<DT><STRONG><TT>\setallstaticframes</TT></STRONG> -<DD><A HREF="ffuserguide.html#4259">3.</A> -<DT><STRONG><TT>\setdynamiccontents</TT></STRONG> -<DD><A HREF="ffuserguide.html#4081">2.3</A> - | <A HREF="ffuserguide.html#4207">2.3.1</A> - | <A HREF="ffuserguide.html#4404">3.</A> -<DT><STRONG><TT>\setdynamiccontents*</TT></STRONG> -<DD><A HREF="ffuserguide.html#4090">2.3</A> -<DT><STRONG><TT>\setdynamicframe</TT></STRONG> -<DD><A HREF="ffuserguide.html#4076">2.3</A> - | <A HREF="ffuserguide.html#4151">2.3</A> - | <A HREF="ffuserguide.html#4266">3.</A> - | <A HREF="ffuserguide.html#6512">6.1</A> - | <A HREF="ffuserguide.html#6840">8.1</A> -<DT><STRONG><TT>\setdynamicframe*</TT></STRONG> -<DD><A HREF="ffuserguide.html#4275">3.</A> -<DT><STRONG><TT>\setffdraftcolor</TT></STRONG> -<DD><A HREF="ffuserguide.html#6574">7.1</A> -<DT><STRONG><TT>\setffdrafttypeblockcolor</TT></STRONG> -<DD><A HREF="ffuserguide.html#6579">7.1</A> -<DT><STRONG><TT>\setflowframe</TT></STRONG> -<DD><A HREF="ffuserguide.html#3791">2.1</A> - | <A HREF="ffuserguide.html#4216">3.</A> -<DT><STRONG><TT>\setflowframe*</TT></STRONG> -<DD><A HREF="ffuserguide.html#4225">3.</A> - | <A HREF="ffuserguide.html#6893">8.3</A> -<DT><STRONG><TT>\setlength</TT></STRONG> -<DD><A HREF="ffuserguide.html#6560">6.2</A> - | <A HREF="ffuserguide.html#6615">7.2</A> -<DT><STRONG><TT>\setstaticcontents</TT></STRONG> -<DD><A HREF="ffuserguide.html#3567">ffuserguide</A> - | <A HREF="ffuserguide.html#3914">2.2</A> - | <A HREF="ffuserguide.html#3940">2.2</A> - | <A HREF="ffuserguide.html#4396">3.</A> -<DT><STRONG><TT>\setstaticcontents*</TT></STRONG> -<DD><A HREF="ffuserguide.html#3925">2.2</A> - | <A HREF="ffuserguide.html#3945">2.2</A> - | <A HREF="ffuserguide.html#3962">2.2</A> -<DT><STRONG><TT>\setstaticframe</TT></STRONG> -<DD><A HREF="ffuserguide.html#4241">3.</A> - | <A HREF="ffuserguide.html#6835">8.1</A> -<DT><STRONG><TT>\setstaticframe*</TT></STRONG> -<DD><A HREF="ffuserguide.html#4250">3.</A> -<DT><STRONG><TT>\setthumbtab</TT></STRONG> -<DD><A HREF="ffuserguide.html#6491">6.1</A> -<DT><STRONG><TT>\setthumbtabindex</TT></STRONG> -<DD><A HREF="ffuserguide.html#6503">6.1</A> -<DT><STRONG><TT>\sfswapoddeven</TT></STRONG> -<DD><A HREF="ffuserguide.html#4303">3.</A> -<DT><STRONG><TT>\shadowbox</TT></STRONG> -<DD><A HREF="ffuserguide.html#4346">3.</A> - | <A HREF="ffuserguide.html#4385">3.</A> -<DT><STRONG><TT>shapepar</TT> package</STRONG> -<DD><A HREF="ffuserguide.html#4493">3.1</A> - | <A HREF="ffuserguide.html#4436">3.1</A> - | <A HREF="ffuserguide.html#4441">3.1</A> - | <A HREF="ffuserguide.html#4444">3.1</A> - | <A HREF="ffuserguide.html#4449">3.1</A> - | <A HREF="ffuserguide.html#4457">3.1</A> - | <A HREF="ffuserguide.html#4462">3.1</A> - | <A HREF="ffuserguide.html#4498">3.1</A> - | <A HREF="ffuserguide.html#4508">3.1</A> - | <A HREF="ffuserguide.html#4547">3.1</A> - | <A HREF="ffuserguide.html#4552">3.1</A> - | <A HREF="ffuserguide.html#4555">3.1</A> - | <A HREF="ffuserguide.html#4560">3.1</A> -<DT><STRONG><TT>\showframebboxfalse</TT></STRONG> -<DD><A HREF="ffuserguide.html#3683">1.1</A> -<DT><STRONG><TT>\showframebboxtrue</TT></STRONG> -<DD><A HREF="ffuserguide.html#3678">1.1</A> -<DT><STRONG><TT>\showmarginsfalse</TT></STRONG> -<DD><A HREF="ffuserguide.html#3673">1.1</A> -<DT><STRONG><TT>\showmarginstrue</TT></STRONG> -<DD><A HREF="ffuserguide.html#3668">1.1</A> -<DT><STRONG><TT>\showtypeblockfalse</TT></STRONG> -<DD><A HREF="ffuserguide.html#3663">1.1</A> -<DT><STRONG><TT>\showtypeblocktrue</TT></STRONG> -<DD><A HREF="ffuserguide.html#3658">1.1</A> -<DT><STRONG><TT>\simpar</TT></STRONG> -<DD><A HREF="ffuserguide.html#4503">3.1</A> -<DT><STRONG><TT>\squareshape</TT></STRONG> -<DD><A HREF="ffuserguide.html#4563">3.1</A> -<DT><STRONG><TT>staticcontents</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#3909">2.2</A> - | <A HREF="ffuserguide.html#3934">2.2</A> - | <A HREF="ffuserguide.html#4000">2.3</A> - | <A HREF="ffuserguide.html#4401">3.</A> -<DT><STRONG><TT>staticcontents*</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#3937">2.2</A> - | <A HREF="ffuserguide.html#3959">2.2</A> -<DT><STRONG><TT>staticfigure</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#3599">1.</A> - | <A HREF="ffuserguide.html#3621">1.</A> - | <A HREF="ffuserguide.html#6917">8.3</A> -<DT><STRONG><TT>statictable</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#3602">1.</A> - | <A HREF="ffuserguide.html#3624">1.</A> - | <A HREF="ffuserguide.html#6920">8.3</A> -<DT><STRONG><TT>table</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#3608">1.</A> - | <A HREF="ffuserguide.html#3630">1.</A> - | <A HREF="ffuserguide.html#3642">1.</A> -<DT><STRONG><TT>table*</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#3636">1.</A> -<DT><STRONG><TT>\tableofcontents</TT></STRONG> -<DD><A HREF="ffuserguide.html#6460">6.1</A> -<DT><STRONG><TT>\textheight</TT></STRONG> -<DD><A HREF="ffuserguide.html#3554">ffuserguide</A> -<DT><STRONG><TT>\textwidth</TT></STRONG> -<DD><A HREF="ffuserguide.html#3549">ffuserguide</A> -<DT><STRONG><TT>theindex</TT> environment</STRONG> -<DD><A HREF="ffuserguide.html#6817">8.1</A> -<DT><STRONG><TT>thisframe</TT> counter</STRONG> -<DD><A HREF="ffuserguide.html#6723">7.3</A> -<DT><STRONG><TT>\thumbtabformat</TT></STRONG> -<DD><A HREF="ffuserguide.html#6483">6.1</A> -<DT><STRONG><TT>\thumbtabindex</TT></STRONG> -<DD><A HREF="ffuserguide.html#6440">6.1</A> - | <A HREF="ffuserguide.html#6465">6.1</A> -<DT><STRONG><TT>\thumbtabindexformat</TT></STRONG> -<DD><A HREF="ffuserguide.html#6478">6.1</A> -<DT><STRONG><TT>\thumbtabwidth</TT></STRONG> -<DD><A HREF="ffuserguide.html#6435">6.1</A> -<DT><STRONG><TT>tikz</TT> package</STRONG> -<DD><A HREF="ffuserguide.html#4351">3.</A> - | <A HREF="ffuserguide.html#6400">5.4.4</A> -<DT><STRONG><TT>\tocandthumbtabindex</TT></STRONG> -<DD><A HREF="ffuserguide.html#6455">6.1</A> - | <A HREF="ffuserguide.html#6473">6.1</A> -<DT><STRONG><TT>ttbnonum</TT> option</STRONG> -<DD><A HREF="ffuserguide.html#6416">6.1</A> -<DT><STRONG><TT>ttbnotitle</TT> option</STRONG> -<DD><A HREF="ffuserguide.html#6410">6.1</A> -<DT><STRONG><TT>ttbnum</TT> option</STRONG> -<DD><A HREF="ffuserguide.html#6413">6.1</A> -<DT><STRONG><TT>ttbtitle</TT> option</STRONG> -<DD><A HREF="ffuserguide.html#6407">6.1</A> -<DT><STRONG><TT>\twocolumn</TT></STRONG> -<DD><A HREF="ffuserguide.html#4875">5.1</A> - | <A HREF="ffuserguide.html#4880">5.1</A> - | <A HREF="ffuserguide.html#4905">5.1</A> - | <A HREF="ffuserguide.html#4915">5.1</A> - | <A HREF="ffuserguide.html#5930">5.3</A> - | <A HREF="ffuserguide.html#6825">8.1</A> -<DT><STRONG><TT>\twocolumnbottom</TT></STRONG> -<DD><A HREF="ffuserguide.html#5722">5.2</A> - | <A HREF="ffuserguide.html#5747">5.2</A> - | <A HREF="ffuserguide.html#5766">5.2</A> -<DT><STRONG><TT>\twocolumnbottominarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5098">5.2</A> - | <A HREF="ffuserguide.html#5669">5.2</A> - | <A HREF="ffuserguide.html#5704">5.2</A> - | <A HREF="ffuserguide.html#5733">5.2</A> -<DT><STRONG><TT>\twocolumnDbottom</TT></STRONG> -<DD><A HREF="ffuserguide.html#5757">5.2</A> -<DT><STRONG><TT>\twocolumnDbottominarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5687">5.2</A> -<DT><STRONG><TT>\twocolumnDtop</TT></STRONG> -<DD><A HREF="ffuserguide.html#5367">5.2</A> -<DT><STRONG><TT>\twocolumnDtopinarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5297">5.2</A> -<DT><STRONG><TT>\twocolumninarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#4954">5.1</A> - | <A HREF="ffuserguide.html#5001">5.1</A> -<DT><STRONG><TT>\twocolumnSbottom</TT></STRONG> -<DD><A HREF="ffuserguide.html#5738">5.2</A> -<DT><STRONG><TT>\twocolumnSbottominarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5652">5.2</A> -<DT><STRONG><TT>\twocolumnStop</TT></STRONG> -<DD><A HREF="ffuserguide.html#5348">5.2</A> -<DT><STRONG><TT>\twocolumnStopinarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5262">5.2</A> -<DT><STRONG><TT>\twocolumntop</TT></STRONG> -<DD><A HREF="ffuserguide.html#5332">5.2</A> - | <A HREF="ffuserguide.html#5357">5.2</A> - | <A HREF="ffuserguide.html#5376">5.2</A> -<DT><STRONG><TT>\twocolumntopinarea</TT></STRONG> -<DD><A HREF="ffuserguide.html#5039">5.2</A> - | <A HREF="ffuserguide.html#5279">5.2</A> - | <A HREF="ffuserguide.html#5314">5.2</A> - | <A HREF="ffuserguide.html#5343">5.2</A> -<DT><STRONG><TT>\value</TT></STRONG> -<DD><A HREF="ffuserguide.html#6713">7.3</A> -<DT><STRONG><TT>\vcolumnsep</TT></STRONG> -<DD><A HREF="ffuserguide.html#5015">5.2</A> - | <A HREF="ffuserguide.html#6654">7.2</A> -<DT><STRONG>verbatim text</STRONG> -<DD><A HREF="ffuserguide.html#3998">2.3</A> - | <A HREF="ffuserguide.html#4098">2.3</A> - | <A HREF="ffuserguide.html#4108">2.3</A> - | <A HREF="ffuserguide.html#961">2.3.1</A> - | <A HREF="ffuserguide.html#6930">8.3</A> - | <A HREF="ffuserguide.html#6931">8.3</A> - | <A HREF="ffuserguide.html#6935">8.3</A> -<DT><STRONG><TT>\vNtone</TT></STRONG> -<DD><A HREF="ffuserguide.html#5970">5.4.1</A> -<DT><STRONG><TT>\vNtonebottom</TT></STRONG> -<DD><A HREF="ffuserguide.html#6059">5.4.1</A> -<DT><STRONG><TT>\vNtonetop</TT></STRONG> -<DD><A HREF="ffuserguide.html#6089">5.4.1</A> -<DT><STRONG><TT>\vtwotone</TT></STRONG> -<DD><A HREF="ffuserguide.html#5949">5.4.1</A> - | <A HREF="ffuserguide.html#5993">5.4.1</A> - | <A HREF="ffuserguide.html#6021">5.4.1</A> - | <A HREF="ffuserguide.html#6049">5.4.1</A> -<DT><STRONG><TT>\vtwotonebottom</TT></STRONG> -<DD><A HREF="ffuserguide.html#5998">5.4.1</A> - | <A HREF="ffuserguide.html#6084">5.4.1</A> -<DT><STRONG><TT>\vtwotonetop</TT></STRONG> -<DD><A HREF="ffuserguide.html#6026">5.4.1</A> - | <A HREF="ffuserguide.html#6054">5.4.1</A> - | <A HREF="ffuserguide.html#6114">5.4.1</A> - -</DL> - -<P> - -<P> -<A HREF="ffuserguide.html#top">Top</A> | <A HREF="ffuserguide.html#index">Index</A> - -<P> - -<BR><HR><H4>Footnotes</H4> -<DL> -<DT><A NAME="foot3519">... -user</A><A - HREF="ffuserguide.html#tex2html2"><SUP>1.1</SUP></A></DT> -<DD>Can I have arbitrary shaped frames? See -<A HREF="ffuserguide.html#sec:parshape">Non-Rectangular Frames</A> - -</DD> -<DT><A NAME="foot405">... environment</A><A - HREF="ffuserguide.html#tex2html3"><SUP>1.2</SUP></A></DT> -<DD>This is because -of the arbitrary layout of the flow frames. - -</DD> -<DT><A NAME="foot3520">... -them.</A><A - HREF="ffuserguide.html#tex2html17"><SUP>1.3</SUP></A></DT> -<DD>Can I have arbitrary -shaped frames? See -<A HREF="ffuserguide.html#sec:parshape">Non-Rectangular -Frames</A>. - -</DD> -<DT><A NAME="foot3522">...typeblock</A><A - HREF="ffuserguide.html#tex2html29"><SUP>2.1</SUP></A></DT> -<DD>See <A HREF="ffuserguide.html#itm:absval">converting from absolute to relative page -co-ordinates</A> - -</DD> -<DT><A NAME="foot3523">... counter</A><A - HREF="ffuserguide.html#tex2html30"><SUP>2.2</SUP></A></DT> -<DD>why can't I use the page number format? -See query <A HREF="ffuserguide.html#itm:whynot">3</A> - -</DD> -<DT><A NAME="foot3524">...flow</A><A - HREF="ffuserguide.html#tex2html31"><SUP>2.3</SUP></A></DT> -<DD>the -position for the even pages is set using <TT>\setflowframe</TT><A NAME="3791"></A> -defined in <A HREF="ffuserguide.html#sec:modattr">Modifying -Frame Attributes</A> - -</DD> -<DT><A NAME="foot2894">... of.</A><A - HREF="ffuserguide.html#tex2html41"><SUP>2.4</SUP></A></DT> -<DD>By "neither flows into nor -flows out of" I mean you have to explicitly set the contents of -this frame. Note that it may appear to contain text if another -frame overlaps it, but this text belongs to the other frame. - -</DD> -<DT><A NAME="foot3525">... macro.</A><A - HREF="ffuserguide.html#tex2html48"><SUP>2.5</SUP></A></DT> -<DD>which means that you can have -verbatim text<A NAME="3998"></A> in the body of the <TT>staticcontents</TT><A NAME="4000"></A> environment -but not in the body of the <TT>dynamiccontents</TT><A NAME="4003"></A> environment - -</DD> -<DT><A NAME="foot3053">... -approximately</A><A - HREF="ffuserguide.html#tex2html92"><SUP>5.1</SUP></A></DT> -<DD>It may not be exact, as the flow frames are adjusted so that their height is an integer multiple -of <TT>\baselineskip</TT><A NAME="5010"></A>, which may increase the gap. - -</DD> -<DT><A NAME="foot2404">... thumbtabs</A><A - HREF="ffuserguide.html#tex2html114"><SUP>6.1</SUP></A></DT> -<DD>but -only do this if there is enough room on the page! - -</DD> -<DT><A NAME="foot3458">...hypersetup@<TT>\hypersetup</TT></A><A - HREF="ffuserguide.html#tex2html115"><SUP>6.2</SUP></A></DT> -<DD>defined by the -<TT>hyperref</TT><A NAME="6522"></A> package - -</DD> -<DT><A NAME="foot2635">... approximate</A><A - HREF="ffuserguide.html#tex2html144"><SUP>8.1</SUP></A></DT> -<DD>The pedantic may point out -that TeX may make several attempts to fill in the flow frames -depending on penalties and so on. - -</DD> -<DT><A NAME="foot2636">... pencilled</A><A - HREF="ffuserguide.html#tex2html145"><SUP>8.2</SUP></A></DT> -<DD>actually it hasn't -drawn anything really, but it has in its mind's eye. - -</DD> -<DT><A NAME="foot3488">...offset</A><A - HREF="ffuserguide.html#tex2html206"><SUP>8.3</SUP></A></DT> -<DD><TT>offset</TT> can also have the value <TT>compute</TT> - -</DD> -</DL> -<BR><HR> - -</BODY> -</HTML> diff --git a/Master/texmf-dist/doc/latex/flowfram/ffuserguide.pdf b/Master/texmf-dist/doc/latex/flowfram/ffuserguide.pdf Binary files differindex 595c0cfbbab..49ef7001861 100644 --- a/Master/texmf-dist/doc/latex/flowfram/ffuserguide.pdf +++ b/Master/texmf-dist/doc/latex/flowfram/ffuserguide.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/ffuserguide.tex b/Master/texmf-dist/doc/latex/flowfram/ffuserguide.tex index 37aacadebbc..20059639d4d 100644 --- a/Master/texmf-dist/doc/latex/flowfram/ffuserguide.tex +++ b/Master/texmf-dist/doc/latex/flowfram/ffuserguide.tex @@ -1,5 +1,6 @@ \documentclass[a4paper,twoside]{book} +\usepackage{etoolbox} \usepackage{etex} \usepackage{mathptmx} \usepackage{courier} @@ -35,7 +36,20 @@ \newcommand{\marg}[1]{\texttt{\char`\{#1\char`\}}} \newcommand{\oarg}[1]{\texttt{[#1]}} \newcommand{\appname}[1]{\texttt{#1}\index{#1@\texttt{#1}}} -\newcommand{\pkgopt}[1]{\pkgoptni{#1}\index{#1@\pkgoptni{#1} option}} + +\newcommand{\pkgopt}[2][]{% + \ifstrempty{#1}% + {% + \pkgoptni{#2}\index{#2@\pkgoptni{#2} option}% + }% + {% + \pkgoptni{#2}=\pkgoptni{#1}\index{#2@\pkgoptni{#2} +option!#1@\pkgoptni{#1}}% + }% +} + +\newcommand{\pkgoptval}[2]{\pkgoptni{#2}\index{#1@\pkgoptni{#1} option!#2@\pkgoptni{#2}}} + \newcommand{\key}[1]{#1\index{frame settings!#1}} \newcommand{\dq}[1]{``#1''} \newcommand*{\Index}[1]{#1\index{#1}} @@ -58,8 +72,9 @@ \vskip10pt\noindent\ignorespacesafterend} \newcommand{\chapdesc}[1]{% -\appenddynamiccontents*{chaphead}{\par -\emph{#1}}} + \appenddynamiccontents*{chaphead}{\par + \normalfont\emph{#1}}% +} \newcommand*{\glsindex}[1]{\protect\index{#1}} @@ -105,7 +120,7 @@ on every page}} \newglossaryentry{static}{name=static frame\glsindex{frame!static},% description={Frames in which text is fixed in place. The contents are fixed until -explicitly changed or cleared via the \protect\cmdname{clear} key +explicitly changed or cleared via the \protect\key{clear} key in \protect\cmdname{setstaticcontents}}} \newglossaryentry{dynamic}{name=dynamic frame\glsindex{frame!dynamic},% @@ -134,8 +149,9 @@ pages. This can either be a single keyword: \texttt{all}, be a comma-separated list of individual page numbers or page ranges. For example: \texttt{\textless3,5,7-11,\textgreater15} indicates pages 1,2,5,7,8,9,10,11 and all pages after page 15. -Note that these numbers refer to the actual value of the -page counter, not the absolute physical page number}} +These numbers refer to the decimal value of the page counter by +default. To make them refer to the absolute physical page number use +the package option \pkgopt[absolute]{pages}}} \newglossaryentry{pgrange}{name=page range\glsindex{page range},% description={Page @@ -348,9 +364,9 @@ backcolor=blue,textcolor=white,style=footstyle,pages=none} \begin{document}\label{top} \title{Creating Flow Frames for Posters, Brochures or -Magazines using flowfram.sty v 1.13} +Magazines using flowfram.sty version 1.14} \author{Nicola L. C. Talbot} -\date{23rd January 2010} +\date{2012-11-10} % swap frames around for title page \ffswapoddeven*{main} @@ -365,11 +381,8 @@ Magazines using flowfram.sty v 1.13} \noindent Dr Nicola Talbot\\ -School of Computing Sciences\\ -University of East Anglia\\ -Norwich. Norfolk. NR4 7TJ.\\ -United Kingdom\\ -\url{http://theoval.cmp.uea.ac.uk/~nlct/} +Dickimaw Books\\ +\url{http://www.dickimaw-books.com/} \frontmatter % swap frames back again @@ -391,6 +404,14 @@ United Kingdom\\ \chapdesc{This chapter provides a brief overview of the package, the package options and the various frame types.} +This document is the user manual for the \styni{flowfram} package. +Advanced users wanting further details of the package should read +the documented code \texttt{flowfram.pdf}. Sample files are provided +in the directory \meta{TEXMF}\texttt{/doc/latex/flowfram/samples/} +where \meta{TEXMF} indicates the root \TeX\ installation directory +for this package. (This document is located in +\meta{TEXMF}\texttt{/doc/latex/flowfram/}.) + The \styni{flowfram} package is a \LaTeXe\ package designed to enable you to create text \glspl{frame} in a document such that the contents of the \env{document} environment flow from one @@ -399,6 +420,11 @@ 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. +\textbf{The \styni{flowfram} package tries to make \TeX\ do +something it wasn't originally designed to do. It modifies the +output routine and may not always perform as desired. Caveat +emptor---or `you get what you pay for'.} + The \styni{flowfram} package provides three types of \gls*{frame}: \glspl{flow}, \glspl{static} and \glspl{dynamic} with dimensions and positions specified by the @@ -417,10 +443,69 @@ may vary depending on the values of \cmdname{oddsidemargin} and \cmdname{evensidemargin}, and all the \glspl*{frame} will shift accordingly unless otherwise indicated. -Since floats (such as figures and tables) can only go in -\glspl*{flow}, this package provides -the additional environments: -\env{staticfigure} and +This package has only been tested with a limited number of +class files and packages. Since it modifies the output routine, +it is likely to conflict with any other package which also +does this (such as \sty{longtable}). + +You should load \styni{flowfram} \emph{after} \sty{hyperref} and any +colour package (e.g.\ \sty{color}).\htmlnav + +\section{Package Options} + +\begin{description} + + \item[\pkgopt{pages}] Determines whether the \gls{pglist} refers to + the page number as given by the page counter (\pkgopt[relative]{pages}) + or the absolute page number (\pkgopt[absolute]{pages}). The + default is \pkgoptval{pages}{relative} to ensure backward compatibility, + but if you have a document where the page counter is reset it's + best to use \pkgopt[absolute]{pages}. + + \item[\pkgopt{draft}] Switch on draft mode (see + \latexhtml{\autoref{sec:draft}}{\htmlref{Draft Option}{sec:draft}}). + + \item[\pkgopt{final}] Switch off draft mode (default). + + \item[\pkgopt{thumbtabs}] Controls thumbtab contents. See + \latexhtml{\autoref{sec:thumbtabs}}{\htmlref{Thumbtabs}{sec:thumbtabs}} + for details. + + \item[\pkgopt{LR}] When using the column style layouts described in + \latexhtml{\autoref{sec:Ncolumn}}{\htmlref{Column + Styles}{sec:Ncolumn}}, define the \glspl{flow} from left to right. + (Default.) + + \item[\pkgopt{RL}] When using the column style layouts described in + \latexhtml{\autoref{sec:Ncolumn}}{\htmlref{Column + Styles}{sec:Ncolumn}}, define the \glspl{flow} from right to left. + + \item[\pkgopt{rotate}] May have the value \pkgoptval{rotate}{true} + (rotate text in thumbtabs) or \pkgoptval{rotate}{false} + (stack text in thumbtabs). (Default is \pkgoptval{rotate}{true}.) + + \item[\pkgopt{color}] May have the value \pkgoptval{color}{true} + (allow frames to have colour settings) or \pkgoptval{color}{false} + (disable colour in frame settings). The default is \pkgoptval{color}{true}. + + \item[\pkgopt{verbose}] May have the value \pkgoptval{verbose}{true} or + \pkgoptval{verbose}{false}. (Default is \pkgoptval{verbose}{false}.) + Provided to assist debugging. + +\end{description} + +\section{Floats} +\label{sec:floats} + +The standard \env{figure} and \env{table} commands will +behave as usual in the \glspl*{flow}, but their starred versions, +\env{figure*} and \env{table*} behave no differently +from \env{figure} and \env{table}\footnote{This is because +of the arbitrary layout of the flow frames.}. + +Floats (such as figures and tables) can only go in +\glspl*{flow}. However, this package provides +the additional environments: \env{staticfigure} and \env{statictable} which can be used in \glspl*{static} and \glspl*{dynamic}. Unlike their \env{figure} and \env{table} counterparts, they are fixed in place, and @@ -429,22 +514,10 @@ so do not take an optional placement specifier. The be used within \env{staticfigure} and \env{statictable} as usual, but remember that if the frame is displayed on multiple pages, you may end up with multiply defined labels. - -The standard \env{figure} and \env{table} commands will -behave as usual in the \glspl*{flow}, but their starred versions, -\env{figure*} and \env{table*} behave no differently -from \env{figure} and \env{table}\footnote{This is because -of the arbitrary layout of the flow frames.}. - -This package has only been tested with a limited number of -class files and packages. Since it modifies the output routine, -it is likely to conflict with any other package which also -does this. - -You should load \styni{flowfram} \emph{after} \sty{hyperref} and any -colour package (e.g.\ \sty{color}).\htmlnav +\htmlnav \section{Draft Option} +\label{sec:draft} The \styni{flowfram} package has the package option \pkgopt{draft} which will draw the \glspl{bbox} for @@ -497,12 +570,32 @@ the command: \cmdname{flowframeshowlayout} \end{definition} -The \styni{flowfram} package also has the options \pkgopt{nocolor} -and \pkgopt{norotate} for previewers that can not process +The \styni{flowfram} package also has the options \pkgopt[false]{color} +and \pkgopt[false]{rotate} for previewers that can not process colour or rotating specials. (Otherwise you may end up with large black rectangles obscuring your text, instead of the pale background colour you were hoping for.)\htmlnav +\section{Chapters} + +If the \cmdname{chapter} command has been defined, the \styni{flowfram} +package will modify its definition so that it sets the page style to +\cmdname{chapterfirstpagestyle} for the first page of each chapter. This +command defaults to \texttt{plain}, which is the usual page style +for the first page of a chapter. If you want to use a different +style, you will need to redefine \cmdname{chapterfirstpagestyle} to the +name of the relevant page style. A hook +\begin{definition} +\cmdname{ffprechapterhook} +\end{definition} +is used at the start of \cmdname{chapter} definition \emph{before +\cmdname{clearpage} or \cmdname{cleardoublepage} is called.} + +Chapter titles can be placed in a \gls{dynamic} (as in \html{the PDF version of }this document). See +\latexhtml{\autoref{sec:dfchaphead}}{\htmlref{Putting Chapter Titles +in a Dynamic Frame}{sec:dfchaphead}} for further details. +\htmlnav + \section{Frame Stacking Order} \label{sec:stacking} @@ -598,13 +691,19 @@ A \gls*{pgrange} can be a closed range (e.g.\ \verb+2-8+) or an open range (e.g.\ \verb+<10+ or \verb/>5/). For example: \verb'<3,5,7-11,>15' indicates pages 1, 2, 5, 7, 8, 9, 10, 11 and all pages -greater than page 15. These page numbers refer to the value of -the page counter\footnote{why can't I use the page number format? -See query~\ref{itm:whynot}\latex{ on page~\pageref{itm:whynot}}}, -so if you have a page~i and a page~1, they +greater than page 15. These page numbers refer to the integer value of +the page counter\footnote{Why can't I use the page number format? +See query~\ref{itm:whynot}\latex{ on page~\pageref{itm:whynot}}.}\ +by default, so if you have a page~i and a page~1, they will both have the same layout (unless you change the page list setting somewhere between the two pages). +As from version 1.4, if you use the package option +\pkgopt[absolute]{pages} then the numbers in the page list refer to +the absolute page number. In which case page~1 refers to the first +page of the document only, regardless of whether there is another +page~1 or page~i later in the document. + Each \gls*{frame} has its own unique \gls{idn}, corresponding to the order in which it was defined. So the first \gls*{flow} to be defined has \gls*{idn}~1, @@ -687,6 +786,18 @@ paragraph of the previous \gls{frame} has ended. As a result, the end of the paragraph at the beginning of the new \gls*{flow} retains the width of the previous \gls*{flow}. +If a paragraph does span two \glspl*{flow} of unequal width without +using \cmdname{framebreak} a warning will be issued. If a subtle +difference in frame widths is caused by rounding errors (for +example, if the frames were created using Jpgfdraw) you can adjust +the tolerance to suppress these warnings. The default tolerance is +2pt. To change this, set the length register \cmdname{fftolerance} +to the required tolerance. For example, to suppress warnings where +the difference in width is less than 3pt, do +\begin{verbatim} +\setlength{\fftolerance}{3pt} +\end{verbatim} + If you want to start a new page, rather than simply move to the next \gls*{frame}, use the command \cmdname{clearpage}, or for two-sided documents, to start on the next odd page @@ -915,7 +1026,7 @@ To create a new \gls*{dynamic}, use the command: The parameters are exactly the same as for \cmdname{newflowframe} and \cmdname{newstaticframe}. Again, each \gls*{dynamic} has an associated unique \gls{idn}, -starting from 1 for the first \gls*{dynamic} to be defined, and +starting from~1 for the first \gls*{dynamic} to be defined, and a unique \gls{idl}\ can also be set using the final optional argument \meta{label}. @@ -1011,6 +1122,9 @@ or: \cmdname{appenddynamiccontents*}\marg{\meta{label}}\marg{\meta{contents}} \end{definition} +\subsection{Putting Chapter Titles in a Dynamic Frame} +\label{sec:dfchaphead} + If \cmdname{chapter} is defined, you can make the chapter titles appear in a dynamic frame using the command \begin{definition} @@ -1024,6 +1138,36 @@ use the \gls{idl}\ instead of the \gls*{idn}. For example, in \dfchaphead*{chaphead} \end{verbatim} +If you use \cmdname{dfchaphead}, you can adjust the format of the +chapter headings by redefining +\begin{definition} +\cmdname{DFchapterstyle}\marg{\meta{title}} +\end{definition} +for the numbered chapters and +\begin{definition} +\cmdname{DFschapterstyle}\marg{\meta{title}} +\end{definition} +for the unnumbered chapters. For example, this document redefined +those commands as follows: +\begin{verbatim} +\renewcommand{\DFchapterstyle}[1]{% + {\raggedright\sffamily\bfseries\Huge + \color{blue}\thechapter. #1\par + }% +} + +\renewcommand{\DFschapterstyle}[1]{% + {\raggedright\sffamily\bfseries\Huge + \color{blue} #1\par + }% +} +\end{verbatim} +There is no facility for placing other sectional types in a +\gls{dynamic}. +\htmlnav + +\subsection{Putting Headers and Footers in a Dynamic Frame} + The headers and footers can be turned into \glspl*{dynamic} using the command \begin{definition} @@ -1034,6 +1178,9 @@ This will create two \glspl*{dynamic} with \glspl*{idl} usual, but you can then move or resize the header and footer using \cmdname{setdynamicframe} (described \latexhtml{in \autoref{sec:modattr}}{\htmlref{later}{sec:modattr}}). +\htmlnav + +\subsection{Continued Text} In the body of \env{dynamiccontents} or \env{dynamiccontents*}, you can move onto another \gls*{dynamic} using: @@ -1182,7 +1329,9 @@ above keywords or have ranges in \meta{label list}. The \meta{key-val list} argument must be a comma-separated list of \meta{key}=\meta{value} pairs, indicating which -attributes to modify. The available values are as follows: +attributes to modify. \textbf{Make sure you group \meta{value} +if it contains one or more commas or equal signs.} +The available values are as follows: \begin{description} \item[\key{width}=\meta{length}] The width of the \gls*{frame}. @@ -1367,8 +1516,63 @@ comma-separated list of single pages, or \glspl{pgrange}. For example: \begin{verbatim} -\setdynamicframe{1}{pages=1,5,8-10} +\setdynamicframe{1}{pages={1,5,8-10}} +\end{verbatim} +Recall that the numbers in the list either refer to the integer +value of the page counter +(when used with the package option \pkgopt[relative]{pages}) +or the absolute page number (when used with the package option +\pkgopt[absolute]{pages}). + +As from version 1.14, there is also a quick way of setting the page +list that doesn't have the overhead of parsing the +\meta{key}=\meta{value} format of commands such as +\cmdname{setflowframe}: +\begin{definition} +\cmdname{flowsetpagelist}\marg{\meta{idn}}\marg{\meta{page +list}}\newline +\cmdname{dynamicsetpagelist}\marg{\meta{idn}}\marg{\meta{page +list}}\newline +\cmdname{staticsetpagelist}\marg{\meta{idn}}\marg{\meta{page list}} +\end{definition} +\textbf{Note that these commands don't have starred variants. The +first argument must be a single \gls{idn}.} + +See also \latexhtml{\autoref{sec:switch}}{\htmlref{Switching Frames +On and Off On-The-Fly}{sec:switch}}. + +\item[\key{excludepages}=\meta{list}] (New to version~1.14.) +A comma-separated list of page +numbers where the frame should not appear. Note that this overrides +any page given by the \key{pages} key. For this key, \meta{list} may +only contain comma-separated numbers. Ranges are not permitted. For +example: +\begin{verbatim} +\setdynamicframe{1}{excludepages={7}} +\setdynamicframe{1}{pages={1-10}} \end{verbatim} +This will make the dynamic frame appear on pages~1 to~6 and~8 to~10. + +Again, there is also a quick way of setting the exclusion +list that doesn't have the overhead of parsing the +\meta{key}=\meta{value} format of commands such as +\cmdname{setflowframe}: +\begin{definition} +\cmdname{flowsetexclusion}\marg{\meta{idn}}\marg{\meta{list}}\newline +\cmdname{dynamicsetexclusion}\marg{\meta{idn}}\marg{\meta{list}}\newline +\cmdname{staticsetexclusion}\marg{\meta{idn}}\marg{\meta{list}} +\end{definition} +or you can add to an exclusion list using: +\begin{definition} +\cmdname{flowaddexclusion}\marg{\meta{idn}}\marg{\meta{list}}\newline +\cmdname{dynamicaddexclusion}\marg{\meta{idn}}\marg{\meta{list}}\newline +\cmdname{staticaddexclusion}\marg{\meta{idn}}\marg{\meta{list}} +\end{definition} +\textbf{Note that these commands don't have starred variants. The +first argument must be a single \gls{idn}.} + +See also \latexhtml{\autoref{sec:switch}}{\htmlref{Switching Frames +On and Off On-The-Fly}{sec:switch}}. \item[\key{margin}=\meta{side}] The side of the \gls*{flow} that its corresponding margin should go on. This @@ -1483,7 +1687,7 @@ indentation for the \latexhtml{$j$th}{jth} line and the \latexhtml{$j$th}{jth} line. \latexhtml{The \gls*{static} on the top -\ifthenelse{\isodd{page}}{left}{right} +\ifthenelse{\isodd{page}}{right}{left} was assigned a zigzag shape using:}{For example, to create a zigzag shaped static frame (whose \gls*{idn} is \texttt{shapedt}):} \setstaticframe*{shapedb,shapedt}{pages=all} @@ -1548,7 +1752,7 @@ The \sty{shapepar} package has four predefined shapes: \cmdname{heartshape} and \cmdname{nutshape}. \latexhtml{The \gls{static} on the bottom -\ifthenelse{\isodd{page}}{left}{right} +\ifthenelse{\isodd{page}}{right} {left} was assigned a heart shape using the command:}{For example, to assign a heart shape to the static frame whose \gls*{idl} is \texttt{shapedb}:} \begin{verbatim} @@ -1576,6 +1780,173 @@ The \styni{flowfram} package currently does not support any other paragraph shape making commands. Any other commands would have to be used explicitly within the contents of the frame.\htmlnav +\section{Switching Frames On and Off On-The-Fly} +\label{sec:switch} + +Modifying the \gls{pglist} (or the page exclusion list) within the +\env{document} environment is a risky business. This list must +be up-to-date before the output routine looks for the next frame. +To make this a little easier, as from version~1.14 there are +commands that help you do this. \textbf{If you want to use these +commands, it's best to use the package option \pkgopt[absolute]{pages}.} + +The commands described in this section update the \glspl{pglist} +(and possibly the exclusion list) \emph{when the output routine is +next used}. They are designed to switch frames on or off either on +the next page or on the next odd page. You therefore need to take +care where you place these commands. For example, if you have a +two-sided document and you do: +\begin{verbatim} +\dynamicswitchonnextodd{1} +\mainmatter +\chapter{Introduction} +\end{verbatim} +This will set the dynamic frame whose \gls{idn} is~1 to be visible for +the first page of chapter~1. However, if you do +\begin{verbatim} +\mainmatter +\dynamicswitchonnextodd{1} +\chapter{Introduction} +\end{verbatim} +This will have a different effect as \cmdname{mainmatter} issues a +\cmdname{cleardoublepage} so the command to switch on the dynamic +frame is on the same page as the start of chapter~1. This means that +the dynamic frame won't appear until the following odd page +(page~3). + +These commands all have the same syntax with one argument that may +be a comma-separated list. The starred version uses +\glspl{idl} and the unstarred version uses \glspl{idn}. + +\begin{definition} +\cmdname{flowswitchonnext}\marg{\meta{IDN list}}\\ +\cmdname{flowswitchonnext*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{flow} from the following page onwards. +\begin{definition} +\cmdname{flowswitchoffnext}\marg{\meta{IDN list}}\\ +\cmdname{flowswitchoffnext*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{flow} from the following page onwards. +\begin{definition} +\cmdname{flowswitchonnextodd}\marg{\meta{IDN list}}\\ +\cmdname{flowswitchonnextodd*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{flow} from the next odd page onwards. +\begin{definition} +\cmdname{flowswitchoffnextodd}\marg{\meta{IDN list}}\\ +\cmdname{flowswitchoffnextodd*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{flow} from the next odd page onwards. + +\begin{definition} +\cmdname{flowswitchonnextonly}\marg{\meta{IDN list}}\\ +\cmdname{flowswitchonnextonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{flow} just for the following page. +\begin{definition} +\cmdname{flowswitchoffnextonly}\marg{\meta{IDN list}}\\ +\cmdname{flowswitchoffnextonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{flow} just for the following page. +\begin{definition} +\cmdname{flowswitchonnextoddonly}\marg{\meta{IDN list}}\\ +\cmdname{flowswitchonnextoddonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{flow} just for the next odd page. +\begin{definition} +\cmdname{flowswitchoffnextoddonly}\marg{\meta{IDN list}}\\ +\cmdname{flowswitchoffnextoddonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{flow} just for the next odd page. + +\begin{definition} +\cmdname{dynamicswitchonnext}\marg{\meta{IDN list}}\\ +\cmdname{dynamicswitchonnext*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{dynamic} from the following page onwards. +\begin{definition} +\cmdname{dynamicswitchoffnext}\marg{\meta{IDN list}}\\ +\cmdname{dynamicswitchoffnext*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{dynamic} from the following page onwards. +\begin{definition} +\cmdname{dynamicswitchonnextodd}\marg{\meta{IDN list}}\\ +\cmdname{dynamicswitchonnextodd*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{dynamic} from the next odd page onwards. +\begin{definition} +\cmdname{dynamicswitchoffnextodd}\marg{\meta{IDN list}}\\ +\cmdname{dynamicswitchoffnextodd*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{dynamic} from the next odd page onwards. + +\begin{definition} +\cmdname{dynamicswitchonnextonly}\marg{\meta{IDN list}}\\ +\cmdname{dynamicswitchonnextonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{dynamic} just for the following page. +\begin{definition} +\cmdname{dynamicswitchoffnextonly}\marg{\meta{IDN list}}\\ +\cmdname{dynamicswitchoffnextonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{dynamic} just for the following page. +\begin{definition} +\cmdname{dynamicswitchonnextoddonly}\marg{\meta{IDN list}}\\ +\cmdname{dynamicswitchonnextoddonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{dynamic} just for the next odd page. +\begin{definition} +\cmdname{dynamicswitchoffnextoddonly}\marg{\meta{IDN list}}\\ +\cmdname{dynamicswitchoffnextoddonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{dynamic} just for the next odd page. + +\begin{definition} +\cmdname{staticswitchonnext}\marg{\meta{IDN list}}\\ +\cmdname{staticswitchonnext*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{static} from the following page onwards. +\begin{definition} +\cmdname{staticswitchoffnext}\marg{\meta{IDN list}}\\ +\cmdname{staticswitchoffnext*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{static} from the following page onwards. +\begin{definition} +\cmdname{staticswitchonnextodd}\marg{\meta{IDN list}}\\ +\cmdname{staticswitchonnextodd*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{static} from the next odd page onwards. +\begin{definition} +\cmdname{staticswitchoffnextodd}\marg{\meta{IDN list}}\\ +\cmdname{staticswitchoffnextodd*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{static} from the next odd page onwards. + +\begin{definition} +\cmdname{staticswitchonnextonly}\marg{\meta{IDN list}}\\ +\cmdname{staticswitchonnextonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{static} just for the following page. +\begin{definition} +\cmdname{staticswitchoffnextonly}\marg{\meta{IDN list}}\\ +\cmdname{staticswitchoffnextonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{static} just for the following page. +\begin{definition} +\cmdname{staticswitchonnextoddonly}\marg{\meta{IDN list}}\\ +\cmdname{staticswitchonnextoddonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch on the listed \glspl{static} just for the next odd page. +\begin{definition} +\cmdname{staticswitchoffnextoddonly}\marg{\meta{IDN list}}\\ +\cmdname{staticswitchoffnextoddonly*}\marg{\meta{IDL list}} +\end{definition}% +Switch off the listed \glspl{static} just for the next odd page. + +The \styni{flowfram} package comes with a sample file +\texttt{sample-pages.tex} that uses some of these commands. + \chapter{Locations and Dimensions} \chapdesc{This chapter describes some of the commands provided to determine the locations and dimensions of frames.} @@ -1805,6 +2176,7 @@ create \glspl{frame} in a predefined layout. These commands may only be used in the preamble.\htmlnav \section{Column Styles} +\label{sec:Ncolumn} The standard \LaTeX\ commands \cmdname{onecolumn} and \cmdname{twocolumn} are redefined to create one or two @@ -2167,6 +2539,7 @@ This is equivalent to: \htmlnav \section{Right to Left Columns} +\label{sec:RL} The default behaviour for the commands defined above is to create the \glspl{flow} from left to right. However if you are @@ -2467,6 +2840,7 @@ package): such as those used in \html{the PDF version of }this document.} \section{Thumbtabs} +\label{sec:thumbtabs} On the right hand side of \latexhtml{this page}{the odd pages and on the left hand side of the even pages in the @@ -2475,11 +2849,13 @@ with the chapter number in it. This is a thumbtab, and it gives you a rough idea whereabouts in the document you are when you quickly flick through the pages. Each thumbtab is in fact a dynamic frame, and you can control whether to make the -number and/or title appear in the thumbtab by using one or -more of the package options: \pkgopt{ttbtitle} (show -title---default), \pkgopt{ttbnotitle} (don't show the title), -\pkgopt{ttbnum} (show the number) and \pkgopt{ttbnonum} -(don't show the number---default). +number and/or title appear in the thumbtab by using +the package option \pkgopt{thumbtabs}. This is a key=value option, +where the value may be one of \pkgoptval{thumbtabs}{title} +(show the title but not the number---default), +\pkgoptval{thumbtabs}{number} (show the number but not the title), +\pkgoptval{thumbtabs}{both} (show the number and the title) +and \pkgoptval{thumbtabs}{none} (don't show the number or title). If you want thumbtabs in your document, you need to use the command @@ -2743,6 +3119,12 @@ This is the vertical distance before the minitoc. \item \cmdname{afterminitocskip} This is the vertical distance after the minitoc. + +\item \cmdname{fftolerance} + +The output routine will issue a warning when a paragraph spans two +\glspl{flow} of unequal width, unless the difference in width is +less than the value of \cmdname{fftolerance}. \end{itemize} \htmlnav @@ -2751,7 +3133,7 @@ This is the vertical distance after the minitoc. The following are counters that can be accessed via \cmdname{value}\marg{\meta{counter name}} or via \verb|\the|\meta{counter name}. However the value of these counters -should not be modified. +\emph{should not be modified}. \begin{description} \item[\ctr{maxflow}] The total number of \glspl{flow} that have @@ -2803,6 +3185,8 @@ been defined so far. have been defined so far. \item[\ctr{maxthumbtabs}] The total number of thumbtabs. + +\item[\ctr{absolutepage}] The absolute page number. \end{description} \htmlnav @@ -2812,9 +3196,20 @@ problems using the \styni{flowfram} package.} For an up-to-date list of frequently asked questions, see \latexhtml{% -\url{http://theoval.cmp.uea.ac.uk/~nlct/latex/packages/faq/flowframfaq.html}}{the \htmladdnormallink{flowfram FAQ}{http://theoval.cmp.uea.ac.uk/~nlct/latex/packages/faq/flowframfaq.html}}. -If you have a query that is not addressed here, please try there -before contacting me.\htmlnav +\url{http://www.dickimaw-books.com/faqs/flowframfaq.html}}{the +\htmladdnormallink{flowfram +FAQ}{http://www.dickimaw-books.com/faqs/flowframfaq.html}}. If you +have a query that is not addressed here, please try there first. If +that doesn't answer your query, try posting a message to the \LaTeX\ +Community Forum (\url{http://latex-community.org/forum/}), \TeX\ on +StackExchange (\url{http://tex.stackexchange.com/}) or the +\texttt{comp.text.tex} newsgroup. I generally answer questions in +those places much quicker than queries that are emailed to me. + +Bugs can be reported using the \latexhtml{form at +\url{http://www.dickimaw-books.com/bug-report.html}}{\htmladdnormallink{bug +report form}{http://www.dickimaw-books.com/bug-report.html}} +\htmlnav \section{General Queries} @@ -2847,7 +3242,7 @@ that point, which it hasn't yet. So it is looking for a \gls{flow} defined on page~15, not on page~A. \item How does \LaTeX\ tell if page C lies between -pages A and D? It would require an algorithm that can convert +pages A and D\@? It would require an algorithm that can convert from a formatted number back to an integer. Given that there are many different ways of formatting the value of a counter (besides the standard Roman and alphabetical formats) it @@ -2954,7 +3349,7 @@ Location of the Typeblock}{sec:typeblockloc}}. \glspl{frame}? Yes, Jpgfdraw which can be downloaded from: -\url{http://theoval.cmp.uea.ac.uk/~nlct/jpgfdraw/} +\url{http://www.dickimaw-books.com/apps/jpgfdraw/} \end{enumerate} \htmlnav @@ -3175,9 +3570,9 @@ unstarred version of the \env{dynamiccontents} environment. \htmlnav -\clearpage +\ifthenelse{\isodd{page}}{}{\clearpage\mbox{}} % have a backcover: \setdynamicframe*{footer}{pages=none} \setstaticframe*{lastbackleft,lastbackright}{pages=even} -\mbox{}\clearpage +\clearpage\mbox{} \end{document} diff --git a/Master/texmf-dist/doc/latex/flowfram/ffuserguideidx.ist b/Master/texmf-dist/doc/latex/flowfram/ffuserguideidx.ist new file mode 100644 index 00000000000..1ed1dadb531 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/ffuserguideidx.ist @@ -0,0 +1,3 @@ +headings_flag 1 +heading_prefix "\\idxgroupheading\{" +heading_suffix "\}" diff --git a/Master/texmf-dist/doc/latex/flowfram/flowfram.pdf b/Master/texmf-dist/doc/latex/flowfram/flowfram.pdf Binary files differindex b4ebe1d54cf..67085cab743 100644 --- a/Master/texmf-dist/doc/latex/flowfram/flowfram.pdf +++ b/Master/texmf-dist/doc/latex/flowfram/flowfram.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/brochure.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/brochure.pdf Binary files differdeleted file mode 100644 index 4e37ce2e49b..00000000000 --- a/Master/texmf-dist/doc/latex/flowfram/samples/brochure.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/news.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/news.pdf Binary files differdeleted file mode 100644 index d36d46ddccd..00000000000 --- a/Master/texmf-dist/doc/latex/flowfram/samples/news.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/news2.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/news2.pdf Binary files differdeleted file mode 100644 index 62df0e2b448..00000000000 --- a/Master/texmf-dist/doc/latex/flowfram/samples/news2.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/poster.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/poster.pdf Binary files differdeleted file mode 100644 index ea499d7b56f..00000000000 --- a/Master/texmf-dist/doc/latex/flowfram/samples/poster.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample-article.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sample-article.pdf Binary files differnew file mode 100644 index 00000000000..02743025742 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-article.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample-article.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample-article.tex new file mode 100644 index 00000000000..ba165bd9bee --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-article.tex @@ -0,0 +1,283 @@ + % 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}} + + +\twocolumnStop[1]{2in} +\setstaticframe{1}{label=title} + +\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} diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample-blanks.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample-blanks.tex new file mode 100644 index 00000000000..6296b14f576 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-blanks.tex @@ -0,0 +1,19 @@ + % 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} diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample-brochure.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sample-brochure.pdf Binary files differnew file mode 100644 index 00000000000..f94e4e2451a --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-brochure.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/brochure.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample-brochure.tex index d0434139854..c1b499a0248 100644 --- a/Master/texmf-dist/doc/latex/flowfram/samples/brochure.tex +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-brochure.tex @@ -1,3 +1,5 @@ + % This file is public domain. + \documentclass[a4paper]{report} \usepackage[landscape,margin=1in]{geometry} @@ -5,63 +7,45 @@ \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} +\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 @@ -70,19 +54,18 @@ page \thepage\ of \pageref*{lastpage}} \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. +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 +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 +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. @@ -95,8 +78,8 @@ 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 +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} @@ -104,16 +87,16 @@ column~\ref{flow:floats} on page~\pageref{flow:floats}. This is column~\thedisplayedframe. The \textsl{flowfram} package provides three types of frame: -{flow frames}, {static +{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, +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 @@ -121,7 +104,7 @@ 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 +a paragraph break. If it is absolutely necessary for flow frames to have unequal widths, judicious use of \cmdname{framebreak} is required. @@ -130,14 +113,14 @@ flow frames to have unequal widths, judicious use of 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 +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 +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). @@ -146,14 +129,14 @@ 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 +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 +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}): @@ -167,40 +150,40 @@ is only available for {dynamic frames}): \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 +\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. +\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 +\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 +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 +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, +\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 +\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 +\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 +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 @@ -212,13 +195,13 @@ 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 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 +which will make the text for all the dynamic frames come out in bold. To unset a style, do \verb/style=none/. \end{description} @@ -230,17 +213,17 @@ bold. To unset a style, do \verb/style=none/. 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 +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 +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 +be shown in draft mode), according to the format given by \cmdname{pagestyle}. \section*{Frame Stacking Order} @@ -262,43 +245,43 @@ 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. +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. +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 +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 +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 +Since floats (such as figures and tables) can only go in {flow frames}, this package provides -the additional environments: -\env{staticfigure} and +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 +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 +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}. @@ -308,13 +291,13 @@ from \env{figure} and \env{table}. The following macros can be changed using\linebreak \cmdname{renewcommand}: \begin{itemize} -\item \cmdname{setffdraftcolor} +\item \cmdname{setffdraftcolor} This sets the colour of the bounding box when it is displayed in draft mode. -\item -\cmdname{setffdrafttypeblockcolor} +\item +\cmdname{setffdrafttypeblockcolor} This sets the colour of the bounding box of the typeblock when it is displayed @@ -322,7 +305,7 @@ in draft mode. \item \cmdname{fflabelfont} -This sets the font size for the bounding box markers in +This sets the font size for the bounding box markers in draft mode. \end{itemize} @@ -339,7 +322,7 @@ 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. +its border, for the standard border types. \item \cmdname{flowframerule} diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample-news.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sample-news.pdf Binary files differnew file mode 100644 index 00000000000..bfbd33ee0d2 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-news.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/news.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample-news.tex index a8ff83b3922..d3f98184ff9 100644 --- a/Master/texmf-dist/doc/latex/flowfram/samples/news.tex +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-news.tex @@ -1,3 +1,5 @@ + % This file is public domain. + \documentclass{article} \usepackage{color} @@ -5,7 +7,6 @@ \usepackage[a5paper,top=10mm,bottom=10mm,margin=10mm]{geometry} \usepackage{graphicx} -% define lengths to help compute positions \newlength\leftX \newlength\leftY \newlength\leftH @@ -16,14 +17,12 @@ \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} @@ -35,7 +34,6 @@ \setlength{\rightH}{\leftH} \setlength{\rightY}{\leftY} -% Second flow frame \setlength{\leftH}{3.5cm} \adjustheight{\leftH} @@ -43,7 +41,6 @@ \newflowframe[1]{\textwidth}{\leftH}{0pt}{\leftY} -% Right hand flow frame \setlength{\rightX}{\leftW} \addtolength{\rightX}{\columnsep} @@ -52,19 +49,14 @@ \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} @@ -75,20 +67,16 @@ \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} @@ -96,7 +84,6 @@ \newflowframe[1]{\leftW}{\leftH}{0pt}{0pt} -% bottom right flow frame \setlength{\rightX}{\leftW} \addtolength{\rightX}{\columnsep} @@ -105,11 +92,9 @@ \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 @@ -159,7 +144,7 @@ people to keep their doors securely fastened at all times. {\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 +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} @@ -189,12 +174,12 @@ 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 +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 +This is a sample document illustrating the flowfram package. It uses \TeX's \verb|\parshape| command to create irregularly shaped paragraphs. diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample-news2.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sample-news2.pdf Binary files differnew file mode 100644 index 00000000000..792b51492a1 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-news2.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/news2.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample-news2.tex index 125d5d3cd58..8752e95a771 100644 --- a/Master/texmf-dist/doc/latex/flowfram/samples/news2.tex +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-news2.tex @@ -1,3 +1,5 @@ + % This file is public domain. + \documentclass[12pt]{article} \usepackage{graphicx} @@ -5,25 +7,22 @@ \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} @@ -57,7 +56,6 @@ 0pt \linewidth }} -% egg picture \addtolength{\rightY}{\leftY} \addtolength{\rightY}{73mm} @@ -67,10 +65,8 @@ \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} @@ -101,32 +97,24 @@ 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} @@ -143,12 +131,12 @@ Fairy Tale Times \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 @@ -161,9 +149,9 @@ 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. +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*} @@ -181,8 +169,6 @@ 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*} @@ -196,7 +182,7 @@ 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.'' +home.'' \parshape=8 0pt \linewidth @@ -219,7 +205,7 @@ The big bad wolf is reportedly helping them with their inquiries. \noindent\hrulefill -This is a sample document illustrating the +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. diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample-pages.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sample-pages.pdf Binary files differnew file mode 100644 index 00000000000..4e8532796e9 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-pages.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample-pages.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample-pages.tex new file mode 100644 index 00000000000..38e52856a4c --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-pages.tex @@ -0,0 +1,104 @@ + % 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}% +\renewcommand{\ffprechapterhook}{% + \flowswitchoffnextoddonly*{left,right}% + \flowswitchonnextoddonly*{shortleft,shortright}% + \dynamicswitchonnextoddonly*{title}% +} + +\lipsum + +\lipsum + +\chapter{Another Sample Chapter} + +\lipsum[1-20] + + +\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] + + +\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} diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample-poster.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sample-poster.pdf Binary files differnew file mode 100644 index 00000000000..9097577037b --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-poster.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/poster.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample-poster.tex index 05fe2131f7d..c8d2784525e 100644 --- a/Master/texmf-dist/doc/latex/flowfram/samples/poster.tex +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-poster.tex @@ -1,34 +1,28 @@ + % This file is public domain. + \documentclass[a0]{a0poster} \usepackage{color} -\usepackage{times} +\usepackage{mathptmx} \usepackage{courier} -\usepackage{helvet} +\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}} @@ -38,8 +32,6 @@ \newcommand{\cmdname}[1]{\texttt{\symbol{92}#1}} \newcommand{\meta}[1]{\textnormal{\textless\textit{#1}\textgreater}} -%\raggedright -%\setlength{\parindent}{15pt} \begin{document} \begin{staticcontents*}{title} @@ -48,7 +40,7 @@ \vskip1cm \huge Nicola L. C. Talbot \vskip2ex -\normalsize \verb"http://theoval.cmp.uea.ac.uk/~nlct/" +\normalsize \url{http://www.dickimaw-books.com/} \end{center} \end{staticcontents*} @@ -74,7 +66,7 @@ % 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} @@ -90,8 +82,8 @@ \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 +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}. @@ -102,25 +94,25 @@ 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. +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 +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 +{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, +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 @@ -128,7 +120,7 @@ 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 +a paragraph break. If it is absolutely necessary for flow frames to have unequal widths, judicious use of \cmdname{framebreak} is required. @@ -137,28 +129,28 @@ flow frames to have unequal widths, judicious use of 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 +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 +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 +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 +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}): @@ -172,20 +164,20 @@ is only available for {dynamic frames}): \item[y=\meta{length}] The y-coordinate of the frame. -\item[border=\meta{style}] The style of the border around the +\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. +\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 +\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 +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 @@ -193,18 +185,18 @@ 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, +\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 +\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 +\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 +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 @@ -216,13 +208,13 @@ 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 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 +which will make the text for all the dynamic frames come out in bold. To unset a style, do \verb/style=none/. \end{description} @@ -234,17 +226,17 @@ bold. To unset a style, do \verb/style=none/. 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 +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 +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 +be shown in draft mode), according to the format given by \cmdname{pagestyle}. \subsection{Frame Stacking Order} @@ -265,42 +257,42 @@ 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. +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. +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 +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 +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 +Since floats (such as figures and tables) can only go in {flow frames}, this package provides -the additional environments: -\env{staticfigure} and +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 +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 +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}. @@ -310,13 +302,13 @@ from \env{figure} and \env{table}. The following macros can be changed using \cmdname{renewcommand}: \begin{itemize} -\item \cmdname{setffdraftcolor} +\item \cmdname{setffdraftcolor} This sets the colour of the bounding box when it is displayed in draft mode. -\item -\cmdname{setffdrafttypeblockcolor} +\item +\cmdname{setffdrafttypeblockcolor} This sets the colour of the bounding box of the typeblock when it is displayed @@ -324,7 +316,7 @@ in draft mode. \item \cmdname{fflabelfont} -This sets the font size for the bounding box markers in +This sets the font size for the bounding box markers in draft mode. \end{itemize} @@ -341,7 +333,7 @@ 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. +its border, for the standard border types. \item \cmdname{flowframerule} diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample-rot.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sample-rot.pdf Binary files differnew file mode 100644 index 00000000000..88dc5e0b92e --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-rot.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample-rot.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample-rot.tex new file mode 100644 index 00000000000..f62944db3ae --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample-rot.tex @@ -0,0 +1,49 @@ + % 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} diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sample.pdf Binary files differnew file mode 100644 index 00000000000..4a47a3bedb5 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample.tex new file mode 100644 index 00000000000..1bf6ccf6293 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample.tex @@ -0,0 +1,379 @@ + % 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}} + +\newlength{\leftwidth} +\newlength{\rightwidth} + +\computeleftedgeodd{\leftwidth} +\setlength{\leftwidth}{-\leftwidth} +\addtolength{\leftwidth}{0.4\textwidth} +\setlength{\rightwidth}{\paperwidth} +\addtolength{\rightwidth}{-\leftwidth} +\vtwotone[1]{\leftwidth}{magenta}{backleft}{\rightwidth}{[cmyk]{0,0.48,0,0}}{backright} + +\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} + +\setlength{\marginparwidth}{2cm} + +\newflowframe{0.6\textwidth}{\textheight}{0pt}{0pt}[main] +\newdynamicframe{0.38\textwidth}{\textheight}{0.62\textwidth}{0pt}[chaphead] + +\setflowframe*{main}{evenx=0.4\textwidth} +\setdynamicframe*{chaphead}{evenx=0pt} + +\setflowframe*{main}{margin=inner} + +\dfchaphead*{chaphead} + +\appenddfminitoc*{chaphead} + + +\renewcommand{\DFchapterstyle}[1]{% +\raggedright\sffamily\bfseries\Huge\color{blue}#1\par +} + +\renewcommand{\DFschapterstyle}[1]{\raggedright\sffamily\bfseries\Huge\color{blue} #1\par +} + + +\makethumbtabs{2in} +\enableminitoc + +\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}} + +\newcommand{\thumbtabstyle}[1]{\textsc{\sffamily #1}} +\setthumbtab{all}{style=thumbtabstyle,textcolor=white} + + +\pagestyle{plain} + +\makedfheaderfooter + +\newlength{\xoffset} +\computerightedgeodd{\xoffset} +\addtolength{\xoffset}{-2cm} +\newlength{\yoffset} +\computebottomedge{\yoffset} + +\newcommand{\footstyle}[1]{\bfseries\LARGE #1} + + +\setdynamicframe*{footer}{oddx=\xoffset,y=\yoffset,width=2cm,height=2cm, +backcolor=blue,textcolor=white,style=footstyle,pages=none} + + +\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 + +\cleardoublepage +\setstaticframe*{backleft}{pages=none} +\setstaticframe*{backright}{pages=none} + +\frontmatter +\tocandthumbtabindex +\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} diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample1.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sample1.pdf Binary files differnew file mode 100644 index 00000000000..f1798b9c6a6 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample1.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample1.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample1.tex new file mode 100644 index 00000000000..6fd4d999fc4 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample1.tex @@ -0,0 +1,305 @@ + % This file is public domain. + +\documentclass[a4paper]{article} + +\usepackage[a4paper,landscape,margin=1in]{geometry} +\usepackage{fancybox} +\usepackage{color} +\usepackage{flowfram} + +\showframebboxtrue +\showtypeblocktrue + + +\NcolumnStop{4}{1in} + +\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 + +\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} diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample2.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sample2.pdf Binary files differnew file mode 100644 index 00000000000..06633932a57 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample2.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample2.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample2.tex new file mode 100644 index 00000000000..d1ca0992234 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample2.tex @@ -0,0 +1,272 @@ + % 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} diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample3.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sample3.pdf Binary files differnew file mode 100644 index 00000000000..f22dd7c2af4 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample3.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sample3.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sample3.tex new file mode 100644 index 00000000000..56bfcf79813 --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sample3.tex @@ -0,0 +1,65 @@ + % 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} + + +\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} diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sampleRL.pdf b/Master/texmf-dist/doc/latex/flowfram/samples/sampleRL.pdf Binary files differnew file mode 100644 index 00000000000..079ae70299e --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sampleRL.pdf diff --git a/Master/texmf-dist/doc/latex/flowfram/samples/sampleRL.tex b/Master/texmf-dist/doc/latex/flowfram/samples/sampleRL.tex new file mode 100644 index 00000000000..48f4f5e615d --- /dev/null +++ b/Master/texmf-dist/doc/latex/flowfram/samples/sampleRL.tex @@ -0,0 +1,16 @@ + % 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} diff --git a/Master/texmf-dist/source/latex/flowfram/flowfram.perl b/Master/texmf-dist/scripts/flowfram/flowfram.perl index 7d7f8c23c56..45fefe81c83 100644 --- a/Master/texmf-dist/source/latex/flowfram/flowfram.perl +++ b/Master/texmf-dist/scripts/flowfram/flowfram.perl @@ -936,7 +936,7 @@ sub do_cmd_newdynamicframestar $_ } -sub do_cmd_setflowframe +sub do_cmd_setflowframe { local($_) = @_; @@ -956,7 +956,7 @@ sub do_cmd_setflowframestar $_ } -sub do_cmd_setstaticframe +sub do_cmd_setstaticframe { local($_) = @_; @@ -976,7 +976,7 @@ sub do_cmd_setstaticframestar $_ } -sub do_cmd_setdynamicframe +sub do_cmd_setdynamicframe { local($_) = @_; @@ -996,7 +996,7 @@ sub do_cmd_setdynamicframestar $_ } -sub do_cmd_setalldynamicframes +sub do_cmd_setalldynamicframes { local($_) = @_; @@ -1005,7 +1005,7 @@ sub do_cmd_setalldynamicframes $_ } -sub do_cmd_setallflowframes +sub do_cmd_setallflowframes { local($_) = @_; @@ -1014,7 +1014,7 @@ sub do_cmd_setallflowframes $_ } -sub do_cmd_setallstaticframes +sub do_cmd_setallstaticframes { local($_) = @_; @@ -1289,7 +1289,7 @@ sub do_cmd_appenddynamiccontentsstar sub do_env_staticcontents{ local($_) = @_; local($id); - + $id = &missing_braces unless (s/$next_pair_rx/$id=$2,''/eo); @@ -1301,7 +1301,7 @@ sub do_env_staticcontents{ sub do_env_staticcontentsstar{ local($_) = @_; local($id); - + $id = &missing_braces unless (s/$next_pair_rx/$id=$2,''/eo); @@ -1313,7 +1313,7 @@ sub do_env_staticcontentsstar{ sub do_env_dynamiccontents{ local($_) = @_; local($id); - + $id = &missing_braces unless (s/$next_pair_rx/$id=$2,''/eo); @@ -1325,7 +1325,7 @@ sub do_env_dynamiccontents{ sub do_env_dynamiccontentsstar{ local($_) = @_; local($id); - + $id = &missing_braces unless (s/$next_pair_rx/$id=$2,''/eo); @@ -1469,7 +1469,7 @@ sub do_cmd_ffcontinuedtextfont{ local($_) = @_; local($text); - $text = &missingbraces + $text = &missingbraces unless (s/$next_pair_pr_rx/$text=$2;''/eo); "<EM>$text</EM>$_" 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/tex/latex/flowfram/flowfram.sty b/Master/texmf-dist/tex/latex/flowfram/flowfram.sty index 0dbc0e2a2dd..1671f879eda 100644 --- a/Master/texmf-dist/tex/latex/flowfram/flowfram.sty +++ b/Master/texmf-dist/tex/latex/flowfram/flowfram.sty @@ -7,7 +7,7 @@ %% flowfram.dtx (with options: `flowfram.sty,package') %% %% 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 @@ -21,7 +21,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. %% %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z @@ -39,11 +39,13 @@ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} \NeedsTeXFormat{LaTeX2e} -\ProvidesPackage{flowfram}[2010/01/23 v1.13] +\ProvidesPackage{flowfram}[2012/11/10 v1.14 (NLCT)] \RequirePackage{ifthen} -\RequirePackage{keyval} +\RequirePackage{xkeyval} \RequirePackage{graphics} \RequirePackage{afterpage} +\RequirePackage{xfor} +\RequirePackage{etoolbox} \@ifundefined{@ldc@l@r}{\RequirePackage{color}}{} \newcommand{\setffdraftcolor}{\color[gray]{0.8}} \newcommand{\setffdrafttypeblockcolor}{\color[gray]{0.9}} @@ -54,100 +56,202 @@ \newif\ifshowmargins \newif\ifshowframebbox \newcommand*{\@ffdraft}{% -\showtypeblocktrue -\showmarginstrue -\showframebboxtrue + \showtypeblocktrue + \showmarginstrue + \showframebboxtrue } \newcommand*{\@ffnodraft}{% -\showtypeblockfalse -\showmarginsfalse -\showframebboxfalse + \showtypeblockfalse + \showmarginsfalse + \showframebboxfalse } \newcommand*{\@fr@meifdraft}[3][\setffdraftcolor]{% -\def\ff@backcol{{none}}% -\@ifundefined{color}{\frame{#2}}{#1\frame{#2}}% -\ifthenelse{\equal{#3}{}}{}{% -\makebox[0pt][l]{\hskip\fflabelsep\fflabelfont{[#3]}}}}% + \def\ff@backcol{{none}}% + \@ifundefined{color}{\frame{#2}}{#1\frame{#2}}% + \ifthenelse{\equal{#3}{}}{}% + {% + \makebox[0pt][l]{\hskip\fflabelsep\fflabelfont{[#3]}}% + }% +}% \newcommand*{\@s@tffcol}{} \newcommand*{\@s@tfftextcol}{} \newcommand*{\@ffbackground}[1]{#1} -\DeclareOption{draft}{\@ffdraft} -\DeclareOption{final}{\@ffnodraft} -\newif\if@ttb@rotate +\DeclareOptionX{draft}{\@ffdraft} +\DeclareOptionX{final}{\@ffnodraft} +\@ffnodraft +\define@choicekey{flowfram.sty}% + {verbose}[\val\nr]% + {true,false}[true]% + {% + \ifcase\nr\relax + \renewcommand*{\flf@doifverbose}[1]{##1}% + \renewcommand*{\flf@message}[1]{\PackageInfo{flowfram}{##1}}% + \or + \renewcommand*{\flf@doifverbose}[1]{}% + \renewcommand*{\flf@message}[1]{}% + \fi + } +\newcommand*{\flf@message}[1]{% + \flf@doifverbose + {% + \PackageInfo{flowfram}{##1}% + }% +} +\newcommand*{\flf@doifverbose}[1]{} +\define@boolkey{flowfram.sty}[@ttb@]{rotate}[true]{} \@ttb@rotatetrue -\DeclareOption{rotate}{\@ttb@rotatetrue} -\DeclareOption{norotate}{\@ttb@rotatefalse} -\newcommand{\rotateframe}[2]{\if@ttb@rotate -\rotatebox{#1}{#2}% -\else -#2\relax -\fi} +\DeclareOptionX{norotate}{\@ttb@rotatefalse} +\newcommand{\rotateframe}[2]{% + \if@ttb@rotate + \rotatebox{#1}{#2}% + \else + #2% + \fi +} \newif\if@ttb@num -\newif\if@ttb@title \@ttb@numfalse +\newif\if@ttb@title \@ttb@titletrue -\DeclareOption{ttbtitle}{\@ttb@titletrue} -\DeclareOption{ttbnotitle}{\@ttb@titlefalse} -\DeclareOption{ttbnum}{\@ttb@numtrue} -\DeclareOption{ttbnonum}{\@ttb@numfalse} -\DeclareOption{color}{% -\def\flowframecol{{black}}\def\flowframetextcol{{black}} -\renewcommand*\@s@tffcol{\ifthenelse{\equal{\ff@col}{}}{}{% -\expandafter\color\ff@col}} -\renewcommand*\@s@tfftextcol{\ifthenelse{\equal{\ff@txtcol}{}}{}{% -\expandafter\color\ff@txtcol}} -\renewcommand*{\@ffbackground}[1]{% -\ifthenelse{\equal{\ff@backcol}{{none}}}{% -#1}{{\fboxsep=0pt\expandafter\colorbox\ff@backcol{#1}}}} -} -\DeclareOption{nocolor}{% -\def\flowframetextcol{}% -\def\flowframecol{}% -\renewcommand{\@s@tffcol}{}\renewcommand{\@s@tfftextcol}{} -\renewcommand{\@ffbackground}[1]{#1} +\define@choicekey{flowfram.sty}% + {thumbtabs}[\val\nr]% + {title,number,both,none}[title]% + {% + \ifcase\nr\relax + \@ttb@numfalse + \@ttb@titletrue + \or + \@ttb@numtrue + \@ttb@titlefalse + \or + \@ttb@numtrue + \@ttb@titletrue + \or + \@ttb@numfalse + \@ttb@titlefalse + \fi + } +\DeclareOptionX{ttbtitle}{\@ttb@titletrue} +\DeclareOptionX{ttbnotitle}{\@ttb@titlefalse} +\DeclareOptionX{ttbnum}{\@ttb@numtrue} +\DeclareOptionX{ttbnonum}{\@ttb@numfalse} +\define@choicekey{flowfram.sty}{pages}[\val\nr]% + {relative,absolute}% + {% + \ifcase\nr\relax + \renewcommand*{\@ff@pages@countreg}{\c@page}% + \or + \renewcommand*{\@ff@pages@countreg}{\c@absolutepage}% + \fi + } +\newcommand*{\@ff@pages@countreg}{\c@page} +\newcounter{absolutepage} +\define@choicekey{flowfram.sty}{color}[\val\nr]{true,false}[true]{% + \ifcase\nr\relax + \@ff@enablecolor + \or + \@ff@disablecolor + \fi +} +\DeclareOptionX{nocolor}{% + \@ff@disablecolor +} +\newcommand*{\@ff@enablecolor}{% + \def\flowframecol{{black}}% + \def\flowframetextcol{{black}}% + \renewcommand*\@s@tffcol{% + \ifthenelse{\equal{\ff@col}{}}% + {}% + {% + \expandafter\color\ff@col}% + }% + \renewcommand*\@s@tfftextcol{% + \ifthenelse{\equal{\ff@txtcol}{}}% + {}% + {% + \expandafter\color\ff@txtcol + }% + }% + \renewcommand*{\@ffbackground}[1]{% + \ifthenelse{\equal{\ff@backcol}{{none}}}% + {% + ##1% + }% + {% + {\fboxsep=0pt\expandafter\colorbox\ff@backcol{##1}}% + }% + }% +} +\newcommand*{\@ff@disablecolor}{% + \def\flowframetextcol{}% + \def\flowframecol{}% + \renewcommand{\@s@tffcol}{}\renewcommand{\@s@tfftextcol}{}% + \renewcommand{\@ffbackground}[1]{##1}% } \newif\iflefttorightcolumns \lefttorightcolumnstrue -\DeclareOption{LR}{\lefttorightcolumnstrue} -\DeclareOption{RL}{\lefttorightcolumnsfalse} -\ifdim\overfullrule=0pt -\ExecuteOptions{final} -\else -\ExecuteOptions{draft} -\fi +\DeclareOptionX{LR}{\lefttorightcolumnstrue} +\DeclareOptionX{RL}{\lefttorightcolumnsfalse} \ifx\normalcolor\relax -\ExecuteOptions{nocolor} + \@ff@disablecolor \else -\ExecuteOptions{color} + \@ff@enablecolor \fi -\ProcessOptions +\ProcessOptionsX \ifx\normalcolor\relax -\ifthenelse{\equal{\flowframetextcol}{}}{}{% -\RequirePackage{color}} + \ifthenelse{\equal{\flowframetextcol}{}}% + {}% + {% + \RequirePackage{color}% + } \fi -\@ifundefined{chapter}{}{% -\newcommand*{\chapterfirstpagestyle}{plain} -\let\@ff@OLD@chapter\@chapter -\let\@ff@OLD@schapter\@schapter -\renewcommand{\@chapter}{% -\thispagestyle{\chapterfirstpagestyle}\@ff@OLD@chapter} -\renewcommand{\@schapter}{% -\thispagestyle{\chapterfirstpagestyle}\@ff@OLD@schapter} +\@ifundefined{chapter}{}% +{% + \newcommand*{\chapterfirstpagestyle}{plain}% + \let\@ff@OLD@chapter\@chapter + \let\@ff@OLD@schapter\@schapter + \renewcommand{\@chapter}{% + \thispagestyle{\chapterfirstpagestyle}% + \@ff@OLD@chapter + }% + \renewcommand{\@schapter}{% + \thispagestyle{\chapterfirstpagestyle}% + \@ff@OLD@schapter + }% + \newcommand*{\ffprechapterhook}{} + \let\@ff@OLD@ch@pter\chapter + \renewcommand{\chapter}{% + \ffprechapterhook + \@ff@OLD@ch@pter + } } \newcounter{maxflow} \c@maxflow=0\relax \newcounter{thisframe} \c@thisframe=0\relax -\@ifpackageloaded{hyperref}{% -\def\theHthisframe{\thepage.\arabic{thisframe}}}{} +\@ifpackageloaded{hyperref} +{% + \def\theHthisframe{\thepage.\arabic{thisframe}}% +}% +{} \newcommand*{\labelflowidn}[1]{% -{\def\@currentlabel{\thethisframe}\label{#1}}} + {% + \def\@currentlabel{\thethisframe}% + \label{#1}% + }% +} \newcounter{displayedframe} \c@displayedframe=0 -\@ifpackageloaded{hyperref}{% -\def\theHdisplayedframe{\thepage.\arabic{displayedframe}}}{} +\@ifpackageloaded{hyperref}% +{% + \def\theHdisplayedframe{\thepage.\arabic{displayedframe}}% +}% +{} \newcommand*{\labelflow}[1]{% -{\def\@currentlabel{\thedisplayedframe}\label{#1}}} + {% + \def\@currentlabel{\thedisplayedframe}% + \label{#1}% + }% +} \newcounter{maxstatic} \c@maxstatic=0\relax \newcounter{maxdynamic} @@ -165,1224 +269,2000 @@ \newlength\flowframerule \flowframerule=\fboxrule \newcommand*{\flowframeshowlayout}{% -\finishthispage -{\@ffdraft\mbox{}\finishthispage\clearpage}} + \finishthispage + {% + \@ffdraft\mbox{}\finishthispage\clearpage + }% +} \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 + }% +} \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 -}} -\def\cleardoublepage{\finishthispage -\if@twoside -\ifodd\c@page -\else -\hbox{}\finishthispage -\fi -\fi} + \ifvmode + \@colN=\c@thisframe\relax + \count@=\c@absolutepage\relax + \ifdim \pagetotal<\topskip + \hbox{}% + \fi + \newpage \write \m@ne {}\vbox {}\penalty -\@Mi + \ifnum\count@=\c@absolutepage\relax + \whiledo{\@colN<\c@maxflow \OR \@colN=\c@maxflow}% + {% + \@ff@chckifthispg{\@ff@pages@countreg}{\@colN}% + \if@notthiscol + \else + \c@thisframe=\@colN\relax + \hbox{}\newpage + \fi + \advance\@colN by 1\relax + }% + \fi + \fi +} +\def\cleardoublepage{% + \clearpage + \if@twoside + \ifodd\c@page + \else + \hbox{}% + \clearpage + \fi + \fi +} +\preto\newpage{\global\usedframebreaktrue} \@twocolumnfalse \@mparswitchfalse \newcommand{\globalreversemargin}{% -\global\@mparbottom\z@\global\@reversemargintrue} + \global\@mparbottom\z@ + \global\@reversemargintrue +} \newcommand{\globalnormalmargin}{% -\global\@mparbottom\z@\global\@reversemarginfalse} + \global\@mparbottom\z@\global + \@reversemarginfalse +} \newcommand{\@getmarginpos}[1]{% -\ifthenelse{\equal{#1}{inner}}{% -\if@twoside -\ifodd\c@page\def\ff@margin{left}\else\def\ff@margin{right}\fi -\else -\def\ff@margin{left}% -\fi -}{% -\ifthenelse{\equal{#1}{outer}}{% -\if@twoside -\ifodd\c@page\def\ff@margin{right}\else\def\ff@margin{left}\fi -\else -\def\ff@margin{right}% -\fi -}{% -\def\ff@margin{#1}}}% + \ifthenelse{\equal{#1}{inner}}% + {% + \if@twoside + \ifodd\c@page\def\ff@margin{left}\else\def\ff@margin{right}\fi + \else + \def\ff@margin{left}% + \fi + }% + {% + \ifthenelse{\equal{#1}{outer}}% + {% + \if@twoside + \ifodd\c@page\def\ff@margin{right}\else\def\ff@margin{left}\fi + \else + \def\ff@margin{right}% + \fi + }% + {% + \def\ff@margin{#1}% + }% + }% } \newcommand{\setmargin}{% -\@getmarginpos{% -\csname @ff@margin@\romannumeral\c@thisframe\endcsname}% -\ifthenelse{\equal{\ff@margin}{left}}% -{\globalreversemargin}{\globalnormalmargin}% + \@getmarginpos + {% + \csname @ff@margin@\romannumeral\c@thisframe\endcsname + }% + \ifthenelse{\equal{\ff@margin}{left}}% + {\globalreversemargin}% + {\globalnormalmargin}% } \newcommand{\newflowframe}{\@n@wflowframe} \@onlypreamble{\newflowframe} \newcommand{\@n@wflowframe}{% -\global\advance\c@maxflow by 1\relax -\expandafter\global\expandafter -\newif\csname ifcolumnframe\romannumeral\c@maxflow\endcsname -\@ifstar\@snewflowframe\@newflowframe + \global\advance\c@maxflow by 1\relax + \expandafter\global\expandafter + \newif\csname ifcolumnframe\romannumeral\c@maxflow\endcsname + \@ifstar\@snewflowframe\@newflowframe } \newcommand{\@snewflowframe}{% -\expandafter\global\expandafter -\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iftrue -\@@newflowframe} + \expandafter\global\expandafter + \let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iftrue + \@@newflowframe +} \newcommand{\@newflowframe}{% -\expandafter\global\expandafter -\let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iffalse -\@@newflowframe} + \expandafter\global\expandafter + \let\csname ifcolumnframe\romannumeral\c@maxflow\endcsname\iffalse + \@@newflowframe +} \newcommand{\@@newflowframe}[5][all]{% -\expandafter\global\expandafter -\newbox\csname column\romannumeral\c@maxflow\endcsname -\expandafter\global\expandafter -\newlength\csname colwidth\romannumeral\c@maxflow\endcsname -\expandafter\global\expandafter -\newlength\csname colheight\romannumeral\c@maxflow\endcsname -\expandafter\global\expandafter -\newlength\csname col@\romannumeral\c@maxflow @posx\endcsname -\expandafter\global\expandafter -\newlength\csname col@\romannumeral\c@maxflow @posy\endcsname -\expandafter\global\expandafter -\setlength\csname colwidth\romannumeral\c@maxflow\endcsname{#2} -\expandafter\global\expandafter -\setlength\csname colheight\romannumeral\c@maxflow\endcsname{#3} -\expandafter\global\expandafter -\setlength\csname col@\romannumeral\c@maxflow @posx\endcsname{#4} -\expandafter\global\expandafter -\setlength\csname col@\romannumeral\c@maxflow @posy\endcsname{#5} -\expandafter\global\expandafter -\newlength\csname col@\romannumeral\c@maxflow @evenx\endcsname -\expandafter\global\expandafter -\newlength\csname col@\romannumeral\c@maxflow @eveny\endcsname -\expandafter\global\expandafter -\setlength\csname col@\romannumeral\c@maxflow @evenx\endcsname{#4} -\expandafter\global\expandafter -\setlength\csname col@\romannumeral\c@maxflow @eveny\endcsname{#5} -\expandafter -\gdef\csname @ff@frametype@\romannumeral\c@maxflow\endcsname{fbox}% -\expandafter -\gdef\csname @ff@col@\romannumeral\c@maxflow\endcsname{\flowframecol} -\expandafter -\gdef\csname @ff@txtcol@\romannumeral\c@maxflow\endcsname{% -\flowframetextcol} -\expandafter -\gdef\csname @ff@backcol@\romannumeral\c@maxflow\endcsname{{none}} -\expandafter -\gdef\csname @ff@pages@\romannumeral\c@maxflow\endcsname{#1} -\expandafter -\gdef\csname @ff@offset@\romannumeral\c@maxflow\endcsname{compute} -\expandafter -\gdef\csname @ff@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}% + \expandafter + \gdef\csname @ff@xpages@\romannumeral\c@maxflow\endcsname{}% + \expandafter + \gdef\csname @ff@offset@\romannumeral\c@maxflow\endcsname{compute} + \expandafter + \gdef\csname @ff@angle@\romannumeral\c@maxflow\endcsname{0}% + \expandafter + \gdef\csname @ff@margin@\romannumeral\c@maxflow\endcsname{right} + \ifnum\c@thisframe=0\relax + \ifthenelse{\equal{#1}{all}\TE@or\equal{#1}{odd}}% + {% + \c@thisframe=\c@maxflow + \global\setlength{\hsize}{#2}% + \global\usedframebreaktrue + }% + {% + \ifthenelse{\equal{#1}{even}\TE@or\equal{#1}{none}}% + {}% + {% + \def\ff@pages{#1}% + \@for\@ff@pp:=\ff@pages\do + {% + \def\@ff@numstart{0}\def\@ff@numend{0}% + \@ff@getrange{\@ff@pp}% + \ifnum\@ff@numstart=0\relax + \def\@ff@numstart{1}% + \fi + \ifnum\@ff@numstart=1\relax + \c@thisframe=\c@maxflow + \global\setlength{\hsize}{#2}% + \global\usedframebreaktrue + \fi + }% + }% + }% + \fi + \@ifnextchar[% + {\@s@tflowframeid{\c@maxflow}}% + {% + \@s@tflowframeid{\c@maxflow}[\number\c@maxflow]% + }% +} \def\@s@tflowframeid#1[#2]{% -\edef\ff@label{#2}% -\@ff@checkuniqueidl{#1}{\ff@label}% -\expandafter -\xdef\csname @col@id@\romannumeral#1\endcsname{\ff@label}% + \edef\ff@label{#2}% + \@ff@checkuniqueidl{#1}{\ff@label}% + \expandafter + \xdef\csname @col@id@\romannumeral#1\endcsname{\ff@label}% } \newcommand*{\@ff@checkuniqueidl}[2]{% -{\@colN=0\relax -\whiledo{\@colN<\c@maxflow}{% -\advance\@colN by 1\relax -\ifnum\@colN=#1\relax -\else -\ifthenelse{\equal{#2}{% -\csname @col@id@\romannumeral\@colN\endcsname}}{% -\PackageError{flowfram}{Flow frame IDL '#2' already defined}{% -You can't assign this label, as it is already defined -for flow frame \number\@colN}}{}% -\fi -}}} + {% + \@colN=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \ifnum\@colN=#1\relax + \else + \ifthenelse + {% + \equal{#2}% + {% + \csname @col@id@\romannumeral\@colN\endcsname + }% + }% + {% + \PackageError{flowfram}% + {Flow frame IDL '#2' already defined}% + {% + You can't assign this label, as it is already defined + for flow frame \number\@colN + }% + }% + {}% + \fi + }% + }% +} \newcommand*{\getflowlabel}[1]{% -\csname @col@id@\romannumeral#1\endcsname} + \csname @col@id@\romannumeral#1\endcsname +} \newcommand*{\getflowid}[2]{% -\@flowframeid{#2}\edef#1{\number\ff@id}} -\newcommand*{\@flowframeid}[1]{\@colN=0\relax -\ff@id=0\relax -\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax -\ifthenelse{% -\equal{#1}{\csname @col@id@\romannumeral\@colN\endcsname}}{% -\ff@id=\@colN\relax -\@colN=\c@maxflow}{}}% -\ifnum\ff@id=0\relax -\PackageError{flowfram}{Can't find flow frame id '#1'}{}\fi} -\define@key{flowframe}{width}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'width' key}{}}{}% -\def\ff@width{#1}} -\define@key{flowframe}{height}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'height' key}{}}{}% -\def\ff@height{#1}} -\define@key{flowframe}{x}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'x' key}{}}{}% -\def\ff@x{#1}} -\define@key{flowframe}{y}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'y' key}{}}{}% -\def\ff@y{#1}} -\define@key{flowframe}{evenx}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'evenx' key}{}}{}% -\def\ff@evenx{#1}} -\define@key{flowframe}{eveny}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'eveny' key}{}}{}% -\def\ff@eveny{#1}} -\define@key{flowframe}{oddx}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'oddx' key}{}}{}% -\def\ff@oddx{#1}} -\define@key{flowframe}{oddy}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'oddy' key}{}}{}% -\def\ff@oddy{#1}} -\define@key{flowframe}{label}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'label' key}{}}{}% -\def\ff@label{#1}} -\define@key{flowframe}{border}[plain]{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'border' key - use -'none' for no border}{}}{}% -\ifthenelse{\equal{#1}{none}}{% -\def\ff@frame{false}}{\def\ff@frame{true}% -\ifthenelse{\equal{#1}{plain}}{\def\ff@frametype{fbox}}{% -\def\ff@frametype{#1}}}} -\define@key{flowframe}{bordercolor}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'bordercolor' key}{}}{}% -\def\ff@col{#1}} -\define@key{flowframe}{textcolor}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'textcolor' key}{}}{}% -\def\ff@txtcol{#1}} -\define@key{flowframe}{backcolor}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'backcolor' key}{}}{}% -\def\ff@backcol{#1}} -\define@key{flowframe}{pages}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'pages' key}{}}{}% -\def\ff@pages{#1}} -\define@key{flowframe}{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}}{}} + \@flowframeid{#2}% + \edef#1{\number\ff@id}% +} +\newcommand*{\@flowframeid}[1]{% + \@colN=0\relax + \ff@id=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \ifthenelse + {% + \equal{#1}{\csname @col@id@\romannumeral\@colN\endcsname}% + }% + {% + \ff@id=\@colN\relax + \@colN=\c@maxflow + }% + {}% + }% + \ifnum\ff@id=0\relax + \PackageError{flowfram}{Can't find flow frame id '#1'}{}% + \fi +} +\define@key{flowframe}{width}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'width' key}{}% + }% + {}% + \def\ff@width{#1}% +} +\define@key{flowframe}{height}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'height' key}{}% + }% + {}% + \def\ff@height{#1}% +} +\define@key{flowframe}{x}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'x' key}{}% + }% + {}% + \def\ff@x{#1}% +} +\define@key{flowframe}{y}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'y' key}{}% + }% + {}% + \def\ff@y{#1}% +} +\define@key{flowframe}{evenx}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'evenx' key}{}% + }% + {}% + \def\ff@evenx{#1}% +} +\define@key{flowframe}{eveny}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'eveny' key}{}% + }% + {}% + \def\ff@eveny{#1}% +} +\define@key{flowframe}{oddx}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'oddx' key}{}% + }% + {}% + \def\ff@oddx{#1}% +} +\define@key{flowframe}{oddy}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'oddy' key}{}% + }% + {}% + \def\ff@oddy{#1}% +} +\define@key{flowframe}{label}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'label' key}{}% + }% + {}% + \def\ff@label{#1}% +} +\define@key{flowframe}{border}[plain]% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}% + {% + Missing value for 'border' key - use + 'none' for no border% + }% + {}% + }% + {}% + \ifthenelse{\equal{#1}{none}}% + {% + \def\ff@frame{false}% + }% + {% + \def\ff@frame{true}% + \ifthenelse{\equal{#1}{plain}}% + {% + \def\ff@frametype{fbox}% + }% + {% + \def\ff@frametype{#1}% + }% + }% +} +\define@key{flowframe}{bordercolor}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'bordercolor' key}{}% + }% + {}% + \def\ff@col{#1}% +} +\define@key{flowframe}{textcolor}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'textcolor' key}{}% + }% + {}% + \def\ff@txtcol{#1}% +} +\define@key{flowframe}{backcolor}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'backcolor' key}{}% + }% + {}% + \def\ff@backcol{#1}% +} +\define@key{flowframe}{pages}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'pages' key}{}% + }% + {}% + \def\ff@pages{#1}% +} +\define@key{flowframe}{excludepages}% +{% + \def\ff@xpages{#1}% +} +\define@key{flowframe}{offset}% +{% + \def\ff@offset{#1}% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowframe}% + {% + Invalid value for key 'offset'% + }% + {% + 'offset' can either be 'compute' (to compute it according + to certain pre-defined rules) or a length% + }% + }% + {}% +} \define@key{flowframe}{angle}{\def\ff@angle{#1}% } -\define@key{flowframe}{margin}{% -\ifthenelse{\equal{#1}{left} \or \equal{#1}{right} -\or \equal{#1}{inner} \or \equal{#1}{outer}}{% -\def\ff@margin{#1}}{\PackageError{flowfram}{invalid value of -'margin' key}{Key 'margin' can only take the values -'left' or 'right'}}} -\define@key{flowframe}{clear}[true]{% -\ifthenelse{\equal{#1}{true}\or\equal{#1}{false}}{% -\def\ff@clear{#1}}{\PackageError{flowfram}{Key 'clear' is -boolean}{You can only specify the values 'true' or 'false'}}} -\define@key{flowframe}{style}{\ifthenelse{\equal{#1}{}}{% -\PackageError{flowfram}{Missing value for 'style' key}{}}{}% -\ifthenelse{\equal{#1}{none}}{\def\ff@style{relax}}{\def\ff@style{#1}}} -\define@key{flowframe}{shape}{\def\ff@shape{#1}% -} -\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}{margin}{left,right,inner,outer}% +{% + \def\ff@margin{#1}% +} +\define@choicekey{flowframe}{clear}{true,false}[true]{% + \def\ff@clear{#1}% +} +\define@key{flowframe}{style}% +{% + \ifthenelse{\equal{#1}{}}% + {% + \PackageError{flowfram}{Missing value for 'style' key}{}% + }% + {}% + \ifthenelse{\equal{#1}{none}}% + {% + \def\ff@style{relax}% + }% + {% + \def\ff@style{#1}% + }% +} +\define@key{flowframe}{shape}% +{% + \def\ff@shape{#1}% +} +\define@choicekey{flowframe}{valign}{c,t,b}% +{% + \def\ff@valign{#1}% +} \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}% + }% +} \newcommand*{\setflowframe}{\@ifstar\@ssetflowframe\@setflowframe} \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}% + }% +} \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 + }% + }% + }% + }% +} \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}{}% + }% +} +\newcommand*{\flowsetpagelist}[2]{% + \expandafter + \xdef\csname @ff@pages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting page range for flow frame + \number#1\space\space to "#2"}% +} +\newcommand*{\flowsetexclusion}[2]{% + \expandafter + \xdef\csname @ff@xpages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting exclusion for flow frame + \number#1\space\space to "#2"}% +} +\newcommand*{\flowaddexclusion}[2]{% + \ifcsempty{@ff@xpages@\romannumeral#1} + {% + \expandafter + \xdef\csname @ff@xpages@\romannumeral#1\endcsname{#2}% + }% + {% + \expandafter + \xdef\csname @ff@xpages@\romannumeral#1\endcsname{% + \csname @ff@xpages@\romannumeral#1\endcsname,#2}% + }% + \flf@message{Setting exclusion for flow frame + \number#1\space\space to + "\csname @ff@xpages@\romannumeral#1\endcsname"}% } \newcommand*{\@@flowframeswapcoords}[1]{% -\setlength{\@ff@tmp@x}% -{\csname col@\romannumeral#1@evenx\endcsname} -\expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname -{\csname col@\romannumeral#1@posx\endcsname}% -\expandafter\setlength\csname col@\romannumeral#1@posx\endcsname -{\@ff@tmp@x}% -\setlength{\@ff@tmp@y}% -{\csname col@\romannumeral#1@eveny\endcsname} -\expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname -{\csname col@\romannumeral#1@posy\endcsname}% -\expandafter\setlength\csname col@\romannumeral#1@posy\endcsname -{\@ff@tmp@y}% + \setlength{\@ff@tmp@x}% + {\csname col@\romannumeral#1@evenx\endcsname} + \expandafter\setlength\csname col@\romannumeral#1@evenx\endcsname + {\csname col@\romannumeral#1@posx\endcsname}% + \expandafter\setlength\csname col@\romannumeral#1@posx\endcsname + {\@ff@tmp@x}% + \setlength{\@ff@tmp@y}% + {\csname col@\romannumeral#1@eveny\endcsname} + \expandafter\setlength\csname col@\romannumeral#1@eveny\endcsname + {\csname col@\romannumeral#1@posy\endcsname}% + \expandafter\setlength\csname col@\romannumeral#1@posy\endcsname + {\@ff@tmp@y}% } \newcommand*{\ffswapoddeven}{% -\@ifstar\@sflowframeswapcoords\@flowframeswapcoords} + \@ifstar\@sflowframeswapcoords\@flowframeswapcoords +} \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}% + }% +} \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 + }% + }% + }% + }% +} \newcommand*{\flowframex}[1]{% -\csname col@\romannumeral#1@posx\endcsname} + \csname col@\romannumeral#1@posx\endcsname +} \newcommand*{\flowframey}[1]{% -\csname col@\romannumeral#1@posy\endcsname} + \csname col@\romannumeral#1@posy\endcsname +} \newcommand*{\flowframeevenx}[1]{% -\csname col@\romannumeral#1@evenx\endcsname} + \csname col@\romannumeral#1@evenx\endcsname +} \newcommand*{\flowframeeveny}[1]{% -\csname col@\romannumeral#1@eveny\endcsname} + \csname col@\romannumeral#1@eveny\endcsname +} \newcommand{\flowframewidth}[1]{% -\csname colwidth\romannumeral#1\endcsname} + \csname colwidth\romannumeral#1\endcsname +} \newcommand*{\flowframeheight}[1]{% -\csname colheight\romannumeral#1\endcsname} + \csname colheight\romannumeral#1\endcsname +} \def\@setframecol{\@ifnextchar[\@@setframecol\@@setfr@mecol} \def\@@setframecol[#1]#2\end#3#4#5{% -\expandafter\edef\csname @#5@#4@\romannumeral#3\endcsname{% -[#1]{#2}}} + \expandafter\edef\csname @#5@#4@\romannumeral#3\endcsname{% + [#1]{#2}}% +} \def\@@setfr@mecol#1\end#2#3#4{% -\expandafter\edef\csname @#4@#3@\romannumeral#2\endcsname{{#1}}} + \expandafter\edef\csname @#4@#3@\romannumeral#2\endcsname{{#1}}% +} \newcommand*{\newstaticframe}{\@n@wstaticframe} \newcommand*{\@n@wstaticframe}{% -\global\advance\c@maxstatic by 1\relax -\newboolean{staticframe\romannumeral\c@maxstatic}% -\@ifstar\@snewstaticframe\@newstaticframe + \global\advance\c@maxstatic by 1\relax + \newboolean{staticframe\romannumeral\c@maxstatic}% + \@ifstar\@snewstaticframe\@newstaticframe } \newcommand{\@snewstaticframe}{% -\setboolean{staticframe\romannumeral\c@maxstatic}{true}% -\@@newstaticframe} + \setboolean{staticframe\romannumeral\c@maxstatic}{true}% + \@@newstaticframe +} \newcommand{\@newstaticframe}{% -\setboolean{staticframe\romannumeral\c@maxstatic}{false}% -\@@newstaticframe} + \setboolean{staticframe\romannumeral\c@maxstatic}{false}% + \@@newstaticframe +} \newcommand*{\@@newstaticframe}[5][all]{% -\expandafter -\newbox\csname @staticframe@\romannumeral\c@maxstatic\endcsname -\expandafter -\newlength\csname @sf@\romannumeral\c@maxstatic @posx\endcsname -\expandafter -\newlength\csname @sf@\romannumeral\c@maxstatic @posy\endcsname -\expandafter\setlength -\csname @sf@\romannumeral\c@maxstatic @posx\endcsname{#4}% -\expandafter\setlength -\csname @sf@\romannumeral\c@maxstatic @posy\endcsname{#5}% -\expandafter\newlength -\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname -\expandafter\newlength -\csname @sf@\romannumeral\c@maxstatic @eveny\endcsname -\expandafter\setlength -\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{#4}% -\expandafter\setlength -\csname @sf@\romannumeral\c@maxstatic @eveny\endcsname{#5}% -{\@ff@tmp@x=#2\relax -\@ff@tmp@y=#3\relax -\expandafter -\xdef\csname @sf@dim@\romannumeral\c@maxstatic\endcsname{% -[c][\the\@ff@tmp@y][c]{\the\@ff@tmp@x}}}% -\expandafter -\def\csname @sf@col@\romannumeral\c@maxstatic\endcsname{% -\flowframecol}% -\expandafter -\def\csname @sf@txtcol@\romannumeral\c@maxstatic\endcsname{% -\flowframetextcol}% -\expandafter -\def\csname @sf@backcol@\romannumeral\c@maxstatic\endcsname{% -{none}}% -\expandafter -\xdef\csname @sf@pages@\romannumeral\c@maxstatic\endcsname{#1}% -\expandafter -\gdef\csname @sf@offset@\romannumeral\c@maxstatic\endcsname{% -compute}% -\expandafter -\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}% + \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]}% +} \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}% +} \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 + }% +} \newcommand*{\getstaticlabel}[1]{% -\csname @sf@id@\romannumeral#1\endcsname} + \csname @sf@id@\romannumeral#1\endcsname +} \newcommand*{\getstaticid}[2]{% -\@staticframeid{#2}\edef#1{\number\ff@id}} -\newcommand*{\@staticframeid}[1]{\@colN=0\relax -\ff@id=0\relax -\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax -\ifthenelse{% -\equal{#1}{\csname @sf@id@\romannumeral\@colN\endcsname}}{% -\ff@id=\@colN\relax -\@colN=\c@maxstatic}{}}% -\ifnum\ff@id=0\PackageError{flowfram}{Can't find static frame -id '#1'}{}\fi} + \@staticframeid{#2}\edef#1{\number\ff@id}% +} +\newcommand*{\@staticframeid}[1]{% + \@colN=0\relax + \ff@id=0\relax + \whiledo{\@colN<\c@maxstatic}% + {% + \advance\@colN by 1\relax + \ifthenelse + {% + \equal{#1}{\csname @sf@id@\romannumeral\@colN\endcsname}% + }% + {% + \ff@id=\@colN\relax + \@colN=\c@maxstatic + }% + {}% + }% + \ifnum\ff@id=0\relax + \PackageError{flowfram}% + {Can't find static frame id '#1'}{}% + \fi +} \newcommand*{\staticframex}[1]{% -\csname @sf@\romannumeral#1@posx\endcsname} + \csname @sf@\romannumeral#1@posx\endcsname +} \newcommand*{\staticframey}[1]{% -\csname @sf@\romannumeral#1@posy\endcsname} + \csname @sf@\romannumeral#1@posy\endcsname +} \newcommand*{\staticframeevenx}[1]{% -\csname @sf@\romannumeral#1@evenx\endcsname} + \csname @sf@\romannumeral#1@evenx\endcsname +} \newcommand*{\staticframeeveny}[1]{% -\csname @sf@\romannumeral#1@eveny\endcsname} + \csname @sf@\romannumeral#1@eveny\endcsname +} \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}% + }% +} \newcommand*{\setstaticframe}{% -\@ifstar\@ssetstaticframe\@setstaticframe} + \@ifstar\@ssetstaticframe\@setstaticframe +} \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}% + }% +} \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 + }% + }% + }% + }% +} \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}{}% + }% } %\newcommand*{\simpar}{\hfil\vadjust{\vskip\parskip}\break\indent} \newcommand*{\simpar}{\hfill\\\indent\mbox{}} \let\FLForgpar\par -\newcommand{\ffpshpar}{\edef\flf@next{\hangafter=\the\hangafter -\hangindent=\the\hangindent}\FLForgpar\flf@next -\edef\flf@next{\prevgraf=\the\prevgraf}\@ff@parshape\indent\mbox{}\flf@next} +\newcommand{\ffpshpar}{% + \edef\flf@next{\hangafter=\the\hangafter + \hangindent=\the\hangindent}% + \FLForgpar\flf@next + \edef\flf@next{\prevgraf=\the\prevgraf}% + \@ff@parshape\indent\mbox{}\flf@next +} \def\@ff@parshape{\parshape=0} \newcommand*{\@ff@sectionhead}[1]{% -\def\ff@sechead{#1}% -\ffpshpar -\@ifstar{\@s@ff@heading}{\@dblarg\@ff@heading}} + \def\ff@sechead{#1}% + \ffpshpar + \@ifstar{\@s@ff@heading}{\@dblarg\@ff@heading}% +} \def\@s@ff@heading#1{% -\@ifundefined{@ff@old\ff@sechead}{\PackageError{flowfram}{Unknown -heading command '\ff@sechead'}{}}{% -\begingroup -\edef\flf@next{\hangafter=\the\hangafter -\hangindent=\the\hangindent}\FLForgpar\flf@next -\let\par=\FLForgpar -\edef\flf@next{\prevgraf=\the\prevgraf}% -\csname @ff@old\ff@sechead\endcsname*{\@ff@parshape\flf@next -#1}% -\xdef\flf@next{\@ff@parshape -\prevgraf=\the\prevgraf}% -\endgroup -}% -\mbox{}\flf@next\let\flf@next\undefined} + \@ifundefined{@ff@old\ff@sechead}% + {% + \PackageError{flowfram}% + {Unknown heading command '\ff@sechead'}{}% + }% + {% + \begingroup + \edef\flf@next{\hangafter=\the\hangafter + \hangindent=\the\hangindent}% + \FLForgpar\flf@next + \let\par=\FLForgpar + \edef\flf@next{\prevgraf=\the\prevgraf}% + \csname @ff@old\ff@sechead\endcsname*{% + \@ff@parshape\flf@next #1}% + \xdef\flf@next{% + \@ff@parshape + \prevgraf=\the\prevgraf}% + \endgroup + }% + \mbox{}\flf@next + \let\flf@next\undefined +} \def\@ff@heading[#1]#2{% -\@ifundefined{@ff@old\ff@sechead}{\PackageError{flowfram}{Unknown -heading command '\ff@sechead'}{}}{% -\begingroup -\edef\flf@next{\hangafter=\the\hangafter -\hangindent=\the\hangindent}\FLForgpar\flf@next -\let\par=\FLForgpar -\edef\flf@next{\prevgraf=\the\prevgraf}% -\csname @ff@old\ff@sechead\endcsname[#1]{\@ff@parshape\flf@next -#2}% -\xdef\flf@next{\@ff@parshape -\prevgraf=\the\prevgraf}% -\endgroup}% -\mbox{}\flf@next\let\flf@next\undefined} + \@ifundefined{@ff@old\ff@sechead}% + {% + \PackageError{flowfram}% + {Unknown heading command '\ff@sechead'}{}% + }% + {% + \begingroup + \edef\flf@next{% + \hangafter=\the\hangafter + \hangindent=\the\hangindent}% + \FLForgpar\flf@next + \let\par=\FLForgpar + \edef\flf@next{\prevgraf=\the\prevgraf}% + \csname @ff@old\ff@sechead\endcsname[#1]{% + \@ff@parshape\flf@next #2}% + \xdef\flf@next{\@ff@parshape + \prevgraf=\the\prevgraf}% + \endgroup + }% + \mbox{}\flf@next + \let\flf@next\undefined +} \newcommand*{\@ff@setsecthead}{% -\let\@ff@oldsection=\section -\let\@ff@oldsubsection=\subsection -\let\@ff@oldsubsubsection=\subsubsection -\let\@ff@oldparagraph=\paragraph -\let\@ff@oldsubparagraph=\subparagraph -\def\section{\@ff@sectionhead{section}}% -\def\subsection{\@ff@sectionhead{subsection}}% -\def\subsubsection{\@ff@sectionhead{subsubsection}}% -\def\paragraph{\@ff@sectionhead{paragraph}}% -\def\subparagraph{\@ff@sectionhead{subparagraph}}% + \let\@ff@oldsection=\section + \let\@ff@oldsubsection=\subsection + \let\@ff@oldsubsubsection=\subsubsection + \let\@ff@oldparagraph=\paragraph + \let\@ff@oldsubparagraph=\subparagraph + \def\section{\@ff@sectionhead{section}}% + \def\subsection{\@ff@sectionhead{subsection}}% + \def\subsubsection{\@ff@sectionhead{subsubsection}}% + \def\paragraph{\@ff@sectionhead{paragraph}}% + \def\subparagraph{\@ff@sectionhead{subparagraph}}% } \def\@ff@getshape#1#2\relax{% -\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 + }% + }% +} \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}{}% + }% } \newbox\staticframe \newenvironment{staticcontents}[1]{% -\let\continueonframe=\@staticcontinueonframe -\@beginstaticcontents{#1}% -}{% -\@endstaticcontents -\ignorespaces} -\newenvironment{staticcontents*}[1]{\@staticframeid{#1}% -\let\continueonframe=\@staticscontinueonframe -\@beginstaticcontents{\ff@id}% -}{% -\@endstaticcontents -\ignorespaces} -\newcommand{\@beginstaticcontents}[1]{% -\@ifundefined{@staticframe@\romannumeral#1}{% -\PackageError{flowfram}{Static frame '#1' not defined}{}}{}% -\expandafter\let\expandafter\@ff@parshape\csname @sf@shape@\romannumeral#1\endcsname -\expandafter\@ff@getshape\@ff@parshape\relax -\ifcase\ff@shape -\edef\@sf@mpg{% -\noexpand -\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname -\noexpand\begingroup -\noexpand\let\noexpand\FLForgpar=\noexpand\par + \let\continueonframe=\@staticcontinueonframe + \@beginstaticcontents{#1}% }% -\or -\edef\@sf@mpg{% -\noexpand -\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname -\@ff@parshape -\noexpand\begingroup -\noexpand\let\noexpand\FLForgpar=\noexpand\par -\noexpand\let\noexpand\par=\noexpand\ffpshpar -\noexpand\@ff@setsecthead -}% -\or -\edef\@sf@mpg{% -\noexpand -\begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname -\noexpand\begingroup -\noexpand\@ff@disablesec -\noexpand\@ff@parshape +{% + \@endstaticcontents + \ignorespaces +} +\newenvironment{staticcontents*}[1]{% + \@staticframeid{#1}% + \let\continueonframe=\@staticscontinueonframe + \@beginstaticcontents{\ff@id}% }% -\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 +{% + \@endstaticcontents + \ignorespaces +} +\newcommand{\@beginstaticcontents}[1]{% + \@ifundefined{@staticframe@\romannumeral#1}% + {% + \PackageError{flowfram}{Static frame '#1' not defined}{}% + }% + {}% + \expandafter\let\expandafter\@ff@parshape\csname @sf@shape@\romannumeral#1\endcsname + \expandafter\@ff@getshape\@ff@parshape\relax + \ifcase\ff@shape + \edef\@sf@mpg{% + \noexpand + \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname + \noexpand\begingroup + \noexpand\let\noexpand\FLForgpar=\noexpand\par + }% + \or + \edef\@sf@mpg{% + \noexpand + \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname + \@ff@parshape + \noexpand\begingroup + \noexpand\let\noexpand\FLForgpar=\noexpand\par + \noexpand\let\noexpand\par=\noexpand\ffpshpar + \noexpand\@ff@setsecthead + }% + \or + \edef\@sf@mpg{% + \noexpand + \begin{minipage}\csname @sf@dim@\romannumeral#1\endcsname + \noexpand\begingroup + \noexpand\@ff@disablesec + \noexpand\@ff@parshape + }% + \fi + \edef\@sf@thisframe{\csname @staticframe@\romannumeral#1\endcsname}% + \begin{lrbox}{\staticframe}% + \edef\ff@txtcol{\csname @sf@txtcol@\romannumeral#1\endcsname}% + \@s@tfftextcol\noindent + \@sf@mpg + \setlength\parindent\sdfparindent } \newcommand*{\@endstaticcontents}{% -\ifnum\ff@shape=2\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}% +} \newcommand{\setstaticcontents}{% -\@ifstar\@sstaticconts\@staticconts} -\newcommand{\@sstaticconts}[2]{\begin{staticcontents*}{#1}% -#2\end{staticcontents*}} -\newcommand{\@staticconts}[2]{\begin{staticcontents}{#1}% -#2\end{staticcontents}} + \@ifstar\@sstaticconts\@staticconts +} +\newcommand{\@sstaticconts}[2]{% + \begin{staticcontents*}{#1}% + #2% + \end{staticcontents*}% +} +\newcommand{\@staticconts}[2]{% + \begin{staticcontents}{#1}% + #2% + \end{staticcontents}% +} +\newcommand*{\staticsetpagelist}[2]{% + \expandafter + \xdef\csname @sf@pages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting page range for static frame + \number#1\space\space to "#2"}% +} +\newcommand*{\staticsetexclusion}[2]{% + \expandafter + \xdef\csname @sf@xpages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting exclusion for static frame + \number#1\space\space to "#2"}% +} +\newcommand*{\staticaddexclusion}[2]{% + \ifcsempty{@sf@xpages@\romannumeral#1} + {% + \expandafter + \xdef\csname @sf@xpages@\romannumeral#1\endcsname{#2}% + }% + {% + \expandafter + \xdef\csname @sf@xpages@\romannumeral#1\endcsname{% + \csname @sf@xpages@\romannumeral#1\endcsname,#2}% + }% + \flf@message{Setting exclusion for static frame + \number#1\space\space to + "\csname @sf@xpages@\romannumeral#1\endcsname"}% +} \newcommand*{\@@staticframeswapcoords}[1]{% -\setlength{\@ff@tmp@x}% -{\csname @sf@\romannumeral#1@evenx\endcsname} -\expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname -{\csname @sf@\romannumeral#1@posx\endcsname}% -\expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname -{\@ff@tmp@x}% -\setlength{\@ff@tmp@y}% -{\csname @sf@\romannumeral#1@eveny\endcsname} -\expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname -{\csname @sf@\romannumeral#1@posy\endcsname}% -\expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname -{\@ff@tmp@y}% + \setlength{\@ff@tmp@x}% + {\csname @sf@\romannumeral#1@evenx\endcsname} + \expandafter\setlength\csname @sf@\romannumeral#1@evenx\endcsname + {\csname @sf@\romannumeral#1@posx\endcsname}% + \expandafter\setlength\csname @sf@\romannumeral#1@posx\endcsname + {\@ff@tmp@x}% + \setlength{\@ff@tmp@y}% + {\csname @sf@\romannumeral#1@eveny\endcsname} + \expandafter\setlength\csname @sf@\romannumeral#1@eveny\endcsname + {\csname @sf@\romannumeral#1@posy\endcsname}% + \expandafter\setlength\csname @sf@\romannumeral#1@posy\endcsname + {\@ff@tmp@y}% } \newcommand*{\sfswapoddeven}{% -\@ifstar\@sstaticframeswapcoords\@staticframeswapcoords} + \@ifstar\@sstaticframeswapcoords\@staticframeswapcoords +} \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}% + }% +} \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 + }% + }% + }% + }% +} \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 } \newcommand*{\@snewdynamicframe}{% -\setboolean{dynamicframe\romannumeral\c@maxdynamic}{true}% -\@@newdynamicframe} + \setboolean{dynamicframe\romannumeral\c@maxdynamic}{true}% + \@@newdynamicframe +} \newcommand*{\@newdynamicframe}{% -\setboolean{dynamicframe\romannumeral\c@maxdynamic}{false}% -\@@newdynamicframe} + \setboolean{dynamicframe\romannumeral\c@maxdynamic}{false}% + \@@newdynamicframe +} \newcommand*{\@@newdynamicframe}[5][all]{% -\expandafter -\gdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{}% -\expandafter -\newlength\csname @df@\romannumeral\c@maxdynamic @posx\endcsname -\expandafter -\newlength\csname @df@\romannumeral\c@maxdynamic @posy\endcsname -\expandafter\setlength -\csname @df@\romannumeral\c@maxdynamic @posx\endcsname{#4}% -\expandafter\setlength -\csname @df@\romannumeral\c@maxdynamic @posy\endcsname{#5}% -\expandafter\newlength -\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname -\expandafter\newlength -\csname @df@\romannumeral\c@maxdynamic @eveny\endcsname -\expandafter\setlength -\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname{#4}% -\expandafter\setlength -\csname @df@\romannumeral\c@maxdynamic @eveny\endcsname{#5}% -{\@ff@tmp@x=#2\relax -\@ff@tmp@y=#3\relax -\expandafter -\xdef\csname @df@dim@\romannumeral\c@maxdynamic\endcsname{% -[c][\the\@ff@tmp@y][t]{\the\@ff@tmp@x}}}% -\expandafter -\gdef\csname @df@col@\romannumeral\c@maxdynamic\endcsname{% -\flowframecol}% -\expandafter -\gdef\csname @df@txtcol@\romannumeral\c@maxdynamic\endcsname{% -\flowframetextcol}% -\expandafter -\gdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname{% -{none}}% -\expandafter -\gdef\csname @df@pages@\romannumeral\c@maxdynamic\endcsname{#1}% -\expandafter -\gdef\csname @df@frametype@\romannumeral\c@maxdynamic\endcsname{% -fbox}% -\expandafter -\gdef\csname @df@style@\romannumeral\c@maxdynamic\endcsname{relax}% -\expandafter -\gdef\csname @df@offset@\romannumeral\c@maxdynamic\endcsname{compute}% -\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}% + \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]}% +} \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}% +} \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 + }% +} \newcommand*{\getdynamiclabel}[1]{% -\csname @df@id@\romannumeral#1\endcsname} + \csname @df@id@\romannumeral#1\endcsname +} \newcommand*{\getdynamicid}[2]{% -\@dynamicframeid{#2}\edef#1{\number\ff@id}} -\newcommand*{\@dynamicframeid}[1]{\@colN=0\relax -\ff@id=0\relax -\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax -\ifthenelse{% -\equal{#1}{\csname @df@id@\romannumeral\@colN\endcsname}}{% -\ff@id=\@colN\relax -\@colN=\c@maxdynamic}{}}% -\ifnum\ff@id=0\PackageError{flowfram}{Can't find dynamic frame -id '#1'}{}\fi} + \@dynamicframeid{#2}\edef#1{\number\ff@id}% +} +\newcommand*{\@dynamicframeid}[1]{% + \@colN=0\relax + \ff@id=0\relax + \whiledo{\@colN<\c@maxdynamic}% + {% + \advance\@colN by 1\relax + \ifthenelse + {% + \equal{#1}{\csname @df@id@\romannumeral\@colN\endcsname}% + }% + {% + \ff@id=\@colN\relax + \@colN=\c@maxdynamic + }% + {}% + }% + \ifnum\ff@id=0\relax + \PackageError{flowfram}% + {Can't find dynamic frame id '#1'}{}% + \fi +} \newcommand*{\@getframeid}[2]{% -\@ifdefined{@#1frameid}{\csname @#1frameid\endcsname{#2}}{% -\PackageError{flowfram}{Unknown frame type `#1'}{Frame types can -be one of: flow, static or dynamic}}} + \@ifdefined{@#1frameid}% + {\csname @#1frameid\endcsname{#2}}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {Frame types can be one of: flow, static or dynamic}% + }% +} \newcommand*{\dynamicframex}[1]{% -\csname @df@\romannumeral#1@posx\endcsname} + \csname @df@\romannumeral#1@posx\endcsname +} \newcommand*{\dynamicframey}[1]{% -\csname @df@\romannumeral#1@posy\endcsname} + \csname @df@\romannumeral#1@posy\endcsname +} \newcommand*{\dynamicframeevenx}[1]{% -\csname @df@\romannumeral#1@evenx\endcsname} + \csname @df@\romannumeral#1@evenx\endcsname +} \newcommand*{\dynamicframeeveny}[1]{% -\csname @df@\romannumeral#1@eveny\endcsname} + \csname @df@\romannumeral#1@eveny\endcsname +} \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}% + }% +} \newcommand*{\setdynamicframe}{% -\@ifstar\@ssetdynamicframe\@setdynamicframe} + \@ifstar\@ssetdynamicframe\@setdynamicframe +} \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}% + }% +} \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 + }% + }% + }% + }% +} \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}% + }% +} +\newcommand*{\dynamicsetpagelist}[2]{% + \expandafter + \xdef\csname @df@pages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting page range for dynamic frame + \number#1\space\space to "#2"}% +} +\newcommand*{\dynamicsetexclusion}[2]{% + \expandafter + \xdef\csname @df@xpages@\romannumeral#1\endcsname{#2}% + \flf@message{Setting exclusion for dynamic frame + \number#1\space\space to "#2"}% +} +\newcommand*{\dynamicaddexclusion}[2]{% + \ifcsempty{@df@xpages@\romannumeral#1} + {% + \expandafter + \xdef\csname @df@xpages@\romannumeral#1\endcsname{#2}% + }% + {% + \expandafter + \xdef\csname @df@xpages@\romannumeral#1\endcsname{% + \csname @df@xpages@\romannumeral#1\endcsname,#2}% + }% + \flf@message{Setting exclusion for dynamic frame + \number#1\space\space to + "\csname @df@xpages@\romannumeral#1\endcsname"}% } \newcommand*{\@@dynamicframeswapcoords}[1]{% -\setlength{\@ff@tmp@x}% -{\csname @df@\romannumeral#1@evenx\endcsname}% -\expandafter\setlength -\csname @df@\romannumeral#1@evenx\endcsname -{\csname @df@\romannumeral#1@posx\endcsname}% -\expandafter\setlength -\csname @df@\romannumeral#1@posx\endcsname{\@ff@tmp@x}% -\setlength{\@ff@tmp@y}% -{\csname @df@\romannumeral#1@eveny\endcsname}% -\expandafter\setlength -\csname @df@\romannumeral#1@eveny\endcsname -{\csname @df@\romannumeral#1@posy\endcsname}% -\expandafter\setlength\csname @df@\romannumeral#1@posy\endcsname -{\@ff@tmp@y}% + \setlength{\@ff@tmp@x}% + {\csname @df@\romannumeral#1@evenx\endcsname}% + \expandafter\setlength + \csname @df@\romannumeral#1@evenx\endcsname + {\csname @df@\romannumeral#1@posx\endcsname}% + \expandafter\setlength + \csname @df@\romannumeral#1@posx\endcsname{\@ff@tmp@x}% + \setlength{\@ff@tmp@y}% + {\csname @df@\romannumeral#1@eveny\endcsname}% + \expandafter\setlength + \csname @df@\romannumeral#1@eveny\endcsname + {\csname @df@\romannumeral#1@posy\endcsname}% + \expandafter\setlength\csname @df@\romannumeral#1@posy\endcsname + {\@ff@tmp@y}% } \newcommand*{\dfswapoddeven}{% \@ifstar\@sdynamicframeswapcoords\@dynamicframeswapcoords} \newcommand*{\@sdynamicframeswapcoords}[1]{% -\@for\@ff@id:=#1\do{% -\@dynamicframeid{\@ff@id}% -\@@dynamicframeswapcoords{\ff@id}}} + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \@@dynamicframeswapcoords{\ff@id}}% +} \newcommand*{\@dynamicframeswapcoords}[1]{% -\ifthenelse{\equal{#1}{all}}{% -\ff@id=0\relax -\whiledo{\ff@id<\c@maxflow}{\advance\ff@id by 1\relax -\@@dynamicframeswapcoords{\ff@id}}% -}{% -\ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}{% -\ifthenelse{\equal{#1}{odd}}{\@colN=1}{\@colN=2}% -\whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}{% -\@@dynamicframeswapcoords{\@colN}% -\advance\@colN by 2\relax}% -}{% -\@for\@ff@id:=#1\do{% -\def\@ff@numstart{0}\def\@ff@numend{10000}% -\@ff@getrange{\@ff@id}% -\ifnum\@ff@numstart=0\relax - \def\@ff@numstart{1}% -\fi -\ifnum\@ff@numend>\c@maxflow - \def\@ff@numend{\c@maxflow}% -\fi -\@colN=\@ff@numstart -\whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}{% -\@@dynamicframeswapcoords{\@colN}% -\advance\@colN by 1\relax -}}}}} + \ifthenelse{\equal{#1}{all}}% + {% + \ff@id=0\relax + \whiledo{\ff@id<\c@maxflow}% + {% + \advance\ff@id by 1\relax + \@@dynamicframeswapcoords{\ff@id}% + }% + }% + {% + \ifthenelse{\equal{#1}{odd} \TE@or \equal{#1}{even}}% + {% + \ifthenelse{\equal{#1}{odd}}% + {\@colN=1}% + {\@colN=2}% + \whiledo{\@colN<\c@maxflow\TE@or\@colN=\c@maxflow}% + {% + \@@dynamicframeswapcoords{\@colN}% + \advance\@colN by 2\relax + }% + }% + {% + \@for\@ff@id:=#1\do{% + \def\@ff@numstart{0}% + \def\@ff@numend{10000}% + \@ff@getrange{\@ff@id}% + \ifnum\@ff@numstart=0\relax + \def\@ff@numstart{1}% + \fi + \ifnum\@ff@numend>\c@maxflow + \def\@ff@numend{\c@maxflow}% + \fi + \@colN=\@ff@numstart + \whiledo{\@colN<\@ff@numend \TE@or \@colN=\@ff@numend}% + {% + \@@dynamicframeswapcoords{\@colN}% + \advance\@colN by 1\relax + }% + }% + }% + }% +} \newenvironment{dynamiccontents}[1]{% -\def\@flf@{dynamiccontents}% -\xdynamiccontents{#1}}{% -\endxdynamiccontents + \def\@flf@{dynamiccontents}% + \xdynamiccontents{#1}}{% + \endxdynamiccontents } \newtoks\@dynamictok \def\xdynamiccontents#1{% -\def\@flf@idn{#1}% -\@dynamictok{}\@flf@get@body + \def\@flf@idn{#1}% + \@dynamictok{}\@flf@get@body } \long\def\@flf@get@body#1\end{% -\@flf@checkcontinued#1\continueonframe\@nil -\ifdfcontinued - \expandafter\flf@ta\expandafter{\@flf@tmpa}% - \edef\@flf@tmp{\the\@dynamictok\the\flf@ta}% - \@dynamictok\expandafter{\@flf@tmp}% -\else - \@dynamictok\expandafter{\the\@dynamictok#1}% -\fi -\@flf@find@end} + \@flf@checkcontinued#1\continueonframe\@nil + \ifdfcontinued + \expandafter\flf@ta\expandafter{\@flf@tmpa}% + \edef\@flf@tmp{\the\@dynamictok\the\flf@ta}% + \@dynamictok\expandafter{\@flf@tmp}% + \else + \@dynamictok\expandafter{\the\@dynamictok#1}% + \fi + \@flf@find@end +} \newif\ifdfcontinued \long\def\@flf@checkcontinued#1\continueonframe#2\@nil{% -\long\def\@flf@tmpa{#1}\long\def\@flf@tmpb{#2}% -\ifx\@flf@tmpb\@lempty - \dfcontinuedfalse -\else - \dfcontinuedtrue - \flf@getcontargs#2\@ff@text\@ff@nextid\@ff@rest -\fi + \long\def\@flf@tmpa{#1}\long\def\@flf@tmpb{#2}% + \ifx\@flf@tmpb\@lempty + \dfcontinuedfalse + \else + \dfcontinuedtrue + \flf@getcontargs#2\@ff@text\@ff@nextid\@ff@rest + \fi } \long\def\@lempty{} \def\flf@getcontargs{% -\@ifnextchar[{\@flf@getcontargs}{\@flf@getcontargs[]}} + \@ifnextchar[{\@flf@getcontargs}{\@flf@getcontargs[]}% +} \long\def\@flf@getcontargs[#1]#2#3\continueonframe#4#5#6{% -\def#4{#1}\def#5{#2}\def#6{#3}% + \def#4{#1}\def#5{#2}\def#6{#3}% } \def\@flf@find@end#1{% -\def\@tempa{#1}% -\global\let\flf@next=\relax -\ifdfcontinued - \@dynamictok\expandafter - {\the\@dynamictok\ffcontinuedtextlayout}% - \protected@edef\@tmpa{\the\@dynamictok{\@ff@text}}% - \@dynamictok\expandafter{\@tmpa}% - \toks@\expandafter{\@ff@rest}% - \edef\flf@next{\noexpand\@flf@get@body\noexpand\end{#1}% - \noexpand\begin{#1}{\@ff@nextid}\noexpand\par - \noexpand\noindent\noexpand\ignorespaces - \the\toks@\noexpand\end{#1}}% -\else - \ifx\@tempa\@flf@ - \let\flf@next=\@flf@endxdynamiccontents - \else + \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 } \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@}% } \newenvironment{dynamiccontents*}[1]{% -\def\@flf@{dynamiccontents*}% -\@dynamicframeid{#1}% -\xdynamiccontents{\ff@id}}{% -\enddynamiccontents + \def\@flf@{dynamiccontents*}% + \@dynamicframeid{#1}% + \xdynamiccontents{\ff@id}}{% + \enddynamiccontents } \newcommand{\setdynamiccontents}{% -\@ifstar\@ssetdynamiccontents\@setdynamiccontents} + \@ifstar\@ssetdynamiccontents\@setdynamiccontents +} \newcommand{\@ssetdynamiccontents}[2]{% -\@dynamicframeid{#1}\@setdynamiccontents{\ff@id}{#2}} + \@dynamicframeid{#1}\@setdynamiccontents{\ff@id}{#2}% +} \newcommand{\@setdynamiccontents}[2]{% -\ifnum#1>\c@maxdynamic -\PackageError{flowfram}{Dynamic frame \number#1\ does not exist}{% -You have specified dynamic frame number \number#1, but there are -only \number\c@maxdynamic\space dynamic frames currently defined}% -\else -\expandafter -\gdef\csname @dynamicframe@\romannumeral#1\endcsname{#2}% -\fi} + \ifnum#1>\c@maxdynamic + \PackageError{flowfram}% + {Dynamic frame \number#1\ does not exist}% + {% + You have specified dynamic frame number \number#1, but there are + only \number\c@maxdynamic\space dynamic frames currently defined% + }% + \else + \expandafter + \gdef\csname @dynamicframe@\romannumeral#1\endcsname{#2}% + \fi +} \newcommand{\appenddynamiccontents}{% -\@ifstar\@sappenddynamic\@appenddynamic} + \@ifstar\@sappenddynamic\@appenddynamic +} \newcommand{\@sappenddynamic}[2]{% -\@dynamicframeid{#1}\@appenddynamic{\ff@id}{#2}} + \@dynamicframeid{#1}\@appenddynamic{\ff@id}{#2}% +} \newcommand{\@appenddynamic}[2]{% -\ifnum#1>\c@maxdynamic - \PackageError{flowfram}{Dynamic frame \number#1 does not exist}{% - You have specified dynamic frame number \number#1, - but there are only - \number\c@maxdynamic\space dynamic frames currently defined}% -\else - \expandafter\@ff@addtolist - \csname @dynamicframe@\romannumeral#1\endcsname\entry{#2}% -\fi} + \ifnum#1>\c@maxdynamic + \PackageError{flowfram}% + {Dynamic frame \number#1 does not exist}% + {% + You have specified dynamic frame number \number#1, + but there are only + \number\c@maxdynamic\space dynamic frames currently defined% + }% + \else + \expandafter\@ff@addtolist + \csname @dynamicframe@\romannumeral#1\endcsname\entry{#2}% + \fi +} \newtoks\flf@ta \newtoks\flf@tb -\long\def\@ff@addtolist#1\entry#2{\flf@ta={{#2}}% -\flf@tb=\expandafter{#1}% -\xdef#1{\the\flf@tb\the\flf@ta}} -\newcommand{\continueonframe}{\PackageError{flowfram}{Can't continue -to new frame: not in static or dynamic frame}{% -\string\continueonframe\space may only -be used inside `staticcontents' or `dynamiccontents' environments -(of their starred versions)}} +\long\def\@ff@addtolist#1\entry#2{% + \flf@ta={{#2}}% + \flf@tb=\expandafter{#1}% + \xdef#1{\the\flf@tb\the\flf@ta}% +} +\newcommand{\continueonframe}{% + \PackageError{flowfram}% + {% + Can't continue to new frame: not in static or dynamic frame% + }% + {% + \string\continueonframe\space may only + be used inside `staticcontents' or `dynamiccontents' + environments (or their starred versions)% + }% +} \newcommand*{\@staticscontinueonframe}[2][]{% -\ffcontinuedtextlayout{#1}% -\end{staticcontents*}% -\begin{staticcontents*}{#2}\par\noindent\ignorespaces} + \ffcontinuedtextlayout{#1}% + \end{staticcontents*}% + \begin{staticcontents*}{#2}\par\noindent\ignorespaces +} \newcommand*{\@staticcontinueonframe}[2][]{% -\ffcontinuedtextlayout{#1}% -\end{staticcontents}% -\begin{staticcontents}{#2}\par\noindent\ignorespaces} + \ffcontinuedtextlayout{#1}% + \end{staticcontents}% + \begin{staticcontents}{#2}\par\noindent\ignorespaces +} \newcommand{\ffcontinuedtextlayout}[1]{% -\parfillskip=0pt\par\hfill\ffcontinuedtextfont{#1}} + \parfillskip=0pt\par\hfill + \ffcontinuedtextfont{#1}% +} \newcommand*{\ffcontinuedtextfont}[1]{\emph{\small #1}} \newcommand*{\computeleftedgeodd}[1]{% -\setlength{#1}{-1in}% -\addtolength{#1}{-\hoffset}% -\addtolength{#1}{-\oddsidemargin}} + \setlength{#1}{-1in}% + \addtolength{#1}{-\hoffset}% + \addtolength{#1}{-\oddsidemargin}% +} \newcommand*{\computeleftedgeeven}[1]{% -\setlength{#1}{-1in}% -\addtolength{#1}{-\hoffset}% -\addtolength{#1}{-\evensidemargin}} + \setlength{#1}{-1in}% + \addtolength{#1}{-\hoffset}% + \addtolength{#1}{-\evensidemargin}% +} \newcommand*{\computetopedge}[1]{% -\setlength{#1}{\textheight}% -\addtolength{#1}{\headheight}% -\addtolength{#1}{\headsep}% -\addtolength{#1}{1in}% -\addtolength{#1}{\voffset}% -\addtolength{#1}{\topmargin}} + \setlength{#1}{\textheight}% + \addtolength{#1}{\headheight}% + \addtolength{#1}{\headsep}% + \addtolength{#1}{1in}% + \addtolength{#1}{\voffset}% + \addtolength{#1}{\topmargin}% +} \newcommand*{\computebottomedge}[1]{% -\computetopedge{#1}% -\addtolength{#1}{-\paperheight}} + \computetopedge{#1}% + \addtolength{#1}{-\paperheight}% +} \newcommand*{\computerightedgeodd}[1]{% -\computeleftedgeodd{#1}% -\addtolength{#1}{\paperwidth}} + \computeleftedgeodd{#1}% + \addtolength{#1}{\paperwidth}% +} \newcommand*{\computerightedgeeven}[1]{% -\computeleftedgeeven{#1}% -\addtolength{#1}{\paperwidth}} + \computeleftedgeeven{#1}% + \addtolength{#1}{\paperwidth}% +} \newlength\ffareawidth \newlength\ffareaheight \newlength\ffareax @@ -1390,549 +2270,840 @@ be used inside `staticcontents' or `dynamiccontents' environments \newlength\ffareaevenx \newlength\ffareaeveny \newcommand*{\computeflowframearea}{% -\@ifstar\@scomputeffarea\@computeffarea} + \@ifstar\@scomputeffarea\@computeffarea +} \newcommand*{\@scomputeffarea}[1]{% -\setlength{\ffareax}{\paperwidth}% -\setlength{\ffareay}{\paperheight}% -\setlength{\@ff@tmp@x}{0pt}% -\setlength{\@ff@tmp@y}{0pt}% -\@for\@ff@id:=#1\do{\@flowframeid{\@ff@id}% -\ifnum\ffareax>\flowframex{\ff@id}% -\setlength{\ffareax}{\flowframex{\ff@id}}% -\fi -\ifnum\ffareay>\flowframey{\ff@id}% -\setlength{\ffareay}{\flowframey{\ff@id}}% -\fi -\setlength{\@ff@offset}{\flowframex{\ff@id}}% -\addtolength{@ff@offset}{\flowframewidth{\ff@id}}% -\ifnum\@ff@tmp@x<\@ff@offset -\setlength{\@ff@tmp@x}{\@ff@offset}% -\fi -\setlength{\@ff@offset}{\flowframey{\ff@id}}% -\addtolength{@ff@offset}{\flowframeheight{\ff@id}}% -\ifnum\@ff@tmp@y<\@ff@offset -\setlength{\@ff@tmp@y}{\@ff@offset}% -\fi -}% -\setlength{\ffareawidth}{\@ff@tmp@x}% -\addtolength{\ffareawidth}{-\ffareax}% -\setlength{\ffareaheight}{\@ff@tmp@y}% -\addtolength{\ffareaheight}{-\ffareay}} + \setlength{\ffareax}{\paperwidth}% + \setlength{\ffareay}{\paperheight}% + \setlength{\@ff@tmp@x}{0pt}% + \setlength{\@ff@tmp@y}{0pt}% + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \ifnum\ffareax>\flowframex{\ff@id}% + \setlength{\ffareax}{\flowframex{\ff@id}}% + \fi + \ifnum\ffareay>\flowframey{\ff@id}% + \setlength{\ffareay}{\flowframey{\ff@id}}% + \fi + \setlength{\@ff@offset}{\flowframex{\ff@id}}% + \addtolength{@ff@offset}{\flowframewidth{\ff@id}}% + \ifnum\@ff@tmp@x<\@ff@offset + \setlength{\@ff@tmp@x}{\@ff@offset}% + \fi + \setlength{\@ff@offset}{\flowframey{\ff@id}}% + \addtolength{@ff@offset}{\flowframeheight{\ff@id}}% + \ifnum\@ff@tmp@y<\@ff@offset + \setlength{\@ff@tmp@y}{\@ff@offset}% + \fi + }% + \setlength{\ffareawidth}{\@ff@tmp@x}% + \addtolength{\ffareawidth}{-\ffareax}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \addtolength{\ffareaheight}{-\ffareay}% +} \newcommand*{\@computeffarea}[1]{% -\setlength{\ffareax}{\paperwidth}% -\setlength{\ffareay}{\paperheight}% -\setlength{\@ff@tmp@x}{0pt}% -\setlength{\@ff@tmp@y}{0pt}% -\@for\@ff@id:=#1\do{% -\ff@id=\@ff@id\relax -\setlength{\@ff@offset}{\flowframex{\ff@id}}% -\ifdim\ffareax>\@ff@offset -\setlength{\ffareax}{\@ff@offset}% -\fi -\setlength{\@ff@offset}{\flowframey{\ff@id}}% -\ifdim\ffareay>\@ff@offset -\setlength{\ffareay}{\@ff@offset}% -\fi -\setlength{\@ff@offset}{\flowframex{\ff@id}}% -\addtolength{\@ff@offset}{\flowframewidth{\ff@id}}% -\ifdim\@ff@tmp@x<\@ff@offset -\setlength{\@ff@tmp@x}{\@ff@offset}% -\fi -\setlength{\@ff@offset}{\flowframey{\ff@id}}% -\addtolength{\@ff@offset}{\flowframeheight{\ff@id}}% -\ifdim\@ff@tmp@y<\@ff@offset -\setlength{\@ff@tmp@y}{\@ff@offset}% -\fi -}% -\setlength{\ffareawidth}{\@ff@tmp@x}% -\addtolength{\ffareawidth}{-\ffareax}% -\setlength{\ffareaheight}{\@ff@tmp@y}% -\addtolength{\ffareaheight}{-\ffareay}} + \setlength{\ffareax}{\paperwidth}% + \setlength{\ffareay}{\paperheight}% + \setlength{\@ff@tmp@x}{0pt}% + \setlength{\@ff@tmp@y}{0pt}% + \@for\@ff@id:=#1\do{% + \ff@id=\@ff@id\relax + \setlength{\@ff@offset}{\flowframex{\ff@id}}% + \ifdim\ffareax>\@ff@offset + \setlength{\ffareax}{\@ff@offset}% + \fi + \setlength{\@ff@offset}{\flowframey{\ff@id}}% + \ifdim\ffareay>\@ff@offset + \setlength{\ffareay}{\@ff@offset}% + \fi + \setlength{\@ff@offset}{\flowframex{\ff@id}}% + \addtolength{\@ff@offset}{\flowframewidth{\ff@id}}% + \ifdim\@ff@tmp@x<\@ff@offset + \setlength{\@ff@tmp@x}{\@ff@offset}% + \fi + \setlength{\@ff@offset}{\flowframey{\ff@id}}% + \addtolength{\@ff@offset}{\flowframeheight{\ff@id}}% + \ifdim\@ff@tmp@y<\@ff@offset + \setlength{\@ff@tmp@y}{\@ff@offset}% + \fi + }% + \setlength{\ffareawidth}{\@ff@tmp@x}% + \addtolength{\ffareawidth}{-\ffareax}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \addtolength{\ffareaheight}{-\ffareay}% +} \newcommand*{\@ff@swaplen}[2]{% -\setlength{\@ff@tmp@x}{#1}% -\setlength{#1}{#2}% -\setlength{#2}{\@ff@tmp@x}} + \setlength{\@ff@tmp@x}{#1}% + \setlength{#1}{#2}% + \setlength{#2}{\@ff@tmp@x}% +} \newcommand*{\@ff@getdim}[2]{% -\ifnum#2<1\relax - \PackageError{flowfram}{Frame IDNs start from 1}{% - You have specified a frame IDN of '\number#2'}% -\fi -\ifcase#1\relax - \PackageError{flowfram}{Unknown frame ID type '#1'}{% - Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)}% -\or - \ifnum#2>\c@maxflow\relax - \PackageError{flowfram}{Invalid flow frame IDN '\number#2'}{% - Flow frame IDNs go from 1 to \number\c@maxflow}% - \else - \setlength{\ffareax}{\flowframex{#2}}% - \setlength{\ffareay}{\flowframey{#2}}% - \setlength{\ffareaevenx}{\flowframeevenx{#2}}% - \setlength{\ffareaeveny}{\flowframeeveny{#2}}% - \setlength{\ffareawidth}{\flowframewidth{#2}}% - \setlength{\ffareaheight}{\flowframeheight{#2}}% - \fi -\or - \ifnum#2>\c@maxstatic\relax - \PackageError{flowfram}{Invalid static frame IDN '\number#2'}{% - Static frame IDNs go from 1 to \number\c@maxstatic}% - \else - \setlength{\ffareax}{\staticframex{#2}}% - \setlength{\ffareay}{\staticframey{#2}}% - \setlength{\ffareaevenx}{\staticframeevenx{#2}}% - \setlength{\ffareaeveny}{\staticframeeveny{#2}}% - \expandafter\expandafter\expandafter - \@ff@getstaticpos - \csname @sf@dim@\romannumeral#2\endcsname - \setlength{\ffareawidth}{\@ff@tmp@x}% - \setlength{\ffareaheight}{\@ff@tmp@y}% - \fi -\or - \ifnum#2>\c@maxdynamic\relax - \PackageError{flowfram}{Invalid dynamic frame IDN '\number#2'}{% - Dynamic frame IDNs go from 1 to \number\c@maxdynamic}% + \ifnum#2<1\relax + \PackageError{flowfram}% + {Frame IDNs start from 1}% + {% + You have specified a frame IDN of '\number#2'% + }% + \fi + \ifcase#1\relax + \PackageError{flowfram}% + {Unknown frame ID type '#1'}% + {% + Frame ID types are: 1 (flow), 2 (static) and 3 (dynamic)% + }% + \or + \ifnum#2>\c@maxflow\relax + \PackageError{flowfram}{Invalid flow frame IDN '\number#2'}{% + Flow frame IDNs go from 1 to \number\c@maxflow}% + \else + \setlength{\ffareax}{\flowframex{#2}}% + \setlength{\ffareay}{\flowframey{#2}}% + \setlength{\ffareaevenx}{\flowframeevenx{#2}}% + \setlength{\ffareaeveny}{\flowframeeveny{#2}}% + \setlength{\ffareawidth}{\flowframewidth{#2}}% + \setlength{\ffareaheight}{\flowframeheight{#2}}% + \fi + \or + \ifnum#2>\c@maxstatic\relax + \PackageError{flowfram}% + {Invalid static frame IDN '\number#2'}% + {% + Static frame IDNs go from 1 to \number\c@maxstatic + }% + \else + \setlength{\ffareax}{\staticframex{#2}}% + \setlength{\ffareay}{\staticframey{#2}}% + \setlength{\ffareaevenx}{\staticframeevenx{#2}}% + \setlength{\ffareaeveny}{\staticframeeveny{#2}}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos + \csname @sf@dim@\romannumeral#2\endcsname + \setlength{\ffareawidth}{\@ff@tmp@x}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \fi + \or + \ifnum#2>\c@maxdynamic\relax + \PackageError{flowfram}% + {Invalid dynamic frame IDN '\number#2'}% + {% + Dynamic frame IDNs go from 1 to \number\c@maxdynamic + }% + \else + \setlength{\ffareax}{\dynamicframex{#2}}% + \setlength{\ffareay}{\dynamicframey{#2}}% + \setlength{\ffareaevenx}{\dynamicframeevenx{#2}}% + \setlength{\ffareaeveny}{\dynamicframeeveny{#2}}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos + \csname @df@dim@\romannumeral#2\endcsname + \setlength{\ffareawidth}{\@ff@tmp@x}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \fi \else - \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 } \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 + \ifnum#2>\c@maxflow + \PackageError{flowfram}% + {Invalid flow frame IDN '\number#2'}% + {% + Flow frame IDNs go from 1 to \number\c@maxflow + }% + \else + \setlength{\ffareax}{\flowframeevenx{#2}}% + \setlength{\ffareay}{\flowframeeveny{#2}}% + \setlength{\ffareawidth}{\flowframewidth{#2}}% + \setlength{\ffareaheight}{\flowframeheight{#2}}% + \fi + \or + \ifnum#2>\c@maxstatic\relax + \PackageError{flowfram}% + {Invalid static frame IDN '\number#2'}% + {% + Static frame IDNs go from 1 to \number\c@maxstatic + }% + \else + \setlength{\ffareax}{\staticframeevenx{#2}}% + \setlength{\ffareay}{\staticframeeveny{#2}}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos + \csname @sf@dim@\romannumeral#2\endcsname + \setlength{\ffareawidth}{\@ff@tmp@x}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \fi + \or + \ifnum#2>\c@maxdynamic\relax + \PackageError{flowfram}% + {Invalid dynamic frame IDN '\number#2'}% + {% + Dynamic frame IDNs go from 1 to \number\c@maxdynamic + }% + \else + \setlength{\ffareax}{\dynamicframeevenx{#2}}% + \setlength{\ffareay}{\dynamicframeeveny{#2}}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos + \csname @df@dim@\romannumeral#2\endcsname + \setlength{\ffareawidth}{\@ff@tmp@x}% + \setlength{\ffareaheight}{\@ff@tmp@y}% + \fi \else - \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 } \newcommand*{\getstaticbounds}{% -\@ifstar\@sgetstaticbounds\@getstaticbounds} + \@ifstar\@sgetstaticbounds\@getstaticbounds +} \newcommand*{\@sgetstaticbounds}[1]{% -\@staticframeid{#1}\@getstaticbounds{\ff@id}} + \@staticframeid{#1}\@getstaticbounds{\ff@id}% +} \newcommand*{\@getstaticbounds}[1]{\@ff@getdim{2}{#1}} \newcommand*{\getstaticevenbounds}{% -\@ifstar\@sgetstaticevenbounds\@getstaticevenbounds} + \@ifstar\@sgetstaticevenbounds\@getstaticevenbounds +} \newcommand*{\@sgetstaticevenbounds}[1]{% -\@staticframeid{#1}\@getstaticevenbounds{\ff@id}} + \@staticframeid{#1}\@getstaticevenbounds{\ff@id}% +} \newcommand*{\@getstaticevenbounds}[1]{\@ff@getevendim{2}{#1}} \newcommand*{\getflowbounds}{% -\@ifstar\@sgetflowbounds\@getflowbounds} + \@ifstar\@sgetflowbounds\@getflowbounds +} \newcommand*{\@sgetflowbounds}[1]{% -\@flowframeid{#1}\@getflowbounds{\ff@id}} + \@flowframeid{#1}\@getflowbounds{\ff@id}% +} \newcommand*{\@getflowbounds}[1]{\@ff@getdim{1}{#1}} \newcommand*{\getflowevenbounds}{% -\@ifstar\@sgetflowevenbounds\@getflowevenbounds} + \@ifstar\@sgetflowevenbounds\@getflowevenbounds +} \newcommand*{\@sgetflowevenbounds}[1]{% -\@flowframeid{#1}\@getflowevenbounds{\ff@id}} + \@flowframeid{#1}\@getflowevenbounds{\ff@id}% +} \newcommand*{\@getflowevenbounds}[1]{\@ff@getevendim{1}{#1}} \newcommand*{\getdynamicbounds}{% -\@ifstar\@sgetdynamicbounds\@getdynamicbounds} + \@ifstar\@sgetdynamicbounds\@getdynamicbounds +} \newcommand*{\@sgetdynamicbounds}[1]{% -\@dynamicframeid{#1}\@getdynamicbounds{\ff@id}} + \@dynamicframeid{#1}\@getdynamicbounds{\ff@id}% +} \newcommand*{\@getdynamicbounds}[1]{\@ff@getdim{3}{#1}} \newcommand*{\getdynamicevenbounds}{% -\@ifstar\@sgetdynamicevenbounds\@getdynamicevenbounds} + \@ifstar\@sgetdynamicevenbounds\@getdynamicevenbounds +} \newcommand*{\@sgetdynamicevenbounds}[1]{% -\@dynamicframeid{#1}\@getdynamicevenbounds{\ff@id}} + \@dynamicframeid{#1}\@getdynamicevenbounds{\ff@id}% +} \newcommand*{\@getdynamicevenbounds}[1]{\@ff@getevendim{3}{#1}} \newif\ifFLFabove \newif\ifFLFbelow \newif\ifFLFleft \newif\ifFLFright \newcommand*{\checkifframeabove}{% -\@ifstar\@scheckifframeabove\@checkifframeabove} + \@ifstar\@scheckifframeabove\@checkifframeabove +} \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 +} \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 +} \newcommand*{\oddcheckifframeabove}{% -\@ifstar\@soddcheckifframeabove\@oddcheckifframeabove} + \@ifstar\@soddcheckifframeabove\@oddcheckifframeabove +} \newcommand*{\@soddcheckifframeabove}[4]{% -\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1bounds\endcsname{#2}% -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3bounds\endcsname{#4}% -\advance\ffareay by \ffareaheight\relax -\expandafter\ifdim\@ff@check>\ffareay - \FLFabovetrue -\else - \FLFabovefalse -\fi + \@ifundefined{@sget#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or flow% + }% + }% + {}% + \csname @sget#1bounds\endcsname{#2}% + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@sget#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or flow% + }% + }% + {}% + \csname @sget#3bounds\endcsname{#4}% + \advance\ffareay by \ffareaheight\relax + \expandafter\ifdim\@ff@check>\ffareay + \FLFabovetrue + \else + \FLFabovefalse + \fi } \newcommand*{\@oddcheckifframeabove}[4]{% -\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1bounds\endcsname{#2}% -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3bounds\endcsname{#4}% -\advance\ffareay by \ffareaheight\relax -\expandafter\ifdim\@ff@check>\ffareay - \FLFabovetrue -\else - \FLFabovefalse -\fi + \@ifundefined{@get#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1bounds\endcsname{#2}% + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@get#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3bounds\endcsname{#4}% + \advance\ffareay by \ffareaheight\relax + \expandafter\ifdim\@ff@check>\ffareay + \FLFabovetrue + \else + \FLFabovefalse + \fi } \newcommand*{\checkifframebelow}{% -\@ifstar\@scheckifframebelow\@checkifframebelow} + \@ifstar\@scheckifframebelow\@checkifframebelow +} \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 +} \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 +} \newcommand*{\oddcheckifframebelow}{% -\@ifstar\@soddcheckifframebelow\@oddcheckifframebelow} + \@ifstar\@soddcheckifframebelow\@oddcheckifframebelow +} \newcommand*{\@soddcheckifframebelow}[4]{% -\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1bounds\endcsname{#2}% -\advance\ffareay by \ffareaheight\relax -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3bounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareay - \FLFbelowtrue -\else - \FLFbelowfalse -\fi + \@ifundefined{@sget#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1bounds\endcsname{#2}% + \advance\ffareay by \ffareaheight\relax + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@sget#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3bounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareay + \FLFbelowtrue + \else + \FLFbelowfalse + \fi } \newcommand*{\@oddcheckifframebelow}[4]{% -\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1bounds\endcsname{#2}% -\advance\ffareay by \ffareaheight\relax -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3bounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareay - \FLFbelowtrue -\else - \FLFbelowfalse -\fi + \@ifundefined{@get#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1bounds\endcsname{#2}% + \advance\ffareay by \ffareaheight\relax + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@get#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3bounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareay + \FLFbelowtrue + \else + \FLFbelowfalse + \fi } \newcommand*{\checkifframeleft}{% -\@ifstar\@scheckifframeleft\@checkifframeleft} + \@ifstar\@scheckifframeleft\@checkifframeleft +} \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 +} \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 +} \newcommand*{\oddcheckifframeleft}{% -\@ifstar\@soddcheckifframeleft\@oddcheckifframeleft} + \@ifstar\@soddcheckifframeleft\@oddcheckifframeleft +} \newcommand*{\@soddcheckifframeleft}[4]{% -\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1bounds\endcsname{#2}% -\advance\ffareax by \ffareawidth\relax -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3bounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareax - \FLFlefttrue -\else - \FLFleftfalse -\fi + \@ifundefined{@sget#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1bounds\endcsname{#2}% + \advance\ffareax by \ffareawidth\relax + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@sget#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3bounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareax + \FLFlefttrue + \else + \FLFleftfalse + \fi } \newcommand*{\@oddcheckifframeleft}[4]{% -\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1bounds\endcsname{#2}% -\advance\ffareax by \ffareawidth\relax -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3bounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareax - \FLFlefttrue -\else - \FLFleftfalse -\fi + \@ifundefined{@get#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1bounds\endcsname{#2}% + \advance\ffareax by \ffareawidth\relax + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@get#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3bounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareax + \FLFlefttrue + \else + \FLFleftfalse + \fi } \newcommand*{\checkifframeright}{% -\@ifstar\@scheckifframeright\@checkifframeright} + \@ifstar\@scheckifframeright\@checkifframeright +} \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 +} \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 +} \newcommand*{\oddcheckifframeright}{% -\@ifstar\@soddcheckifframeright\@oddcheckifframeright} + \@ifstar\@soddcheckifframeright\@oddcheckifframeright +} \newcommand*{\@soddcheckifframeright}[4]{% -\@ifundefined{@sget#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1bounds\endcsname{#2}% -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@sget#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3bounds\endcsname{#4}% -\advance\ffareax by \ffareawidth\relax -\expandafter\ifdim\@ff@check>\ffareax - \FLFrighttrue -\else - \FLFrightfalse -\fi + \@ifundefined{@sget#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1bounds\endcsname{#2}% + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@sget#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3bounds\endcsname{#4}% + \advance\ffareax by \ffareawidth\relax + \expandafter\ifdim\@ff@check>\ffareax + \FLFrighttrue + \else + \FLFrightfalse + \fi } \newcommand*{\@oddcheckifframeright}[4]{% -\@ifundefined{@get#1bounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1bounds\endcsname{#2}% -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@get#3bounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3bounds\endcsname{#4}% -\advance\ffareax by \ffareawidth\relax -\expandafter\ifdim\@ff@check>\ffareax - \FLFrighttrue -\else - \FLFrightfalse -\fi + \@ifundefined{@get#1bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1bounds\endcsname{#2}% + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@get#3bounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3bounds\endcsname{#4}% + \advance\ffareax by \ffareawidth\relax + \expandafter\ifdim\@ff@check>\ffareax + \FLFrighttrue + \else + \FLFrightfalse + \fi } \newcommand*{\evencheckifframeabove}{% -\@ifstar\@sevencheckifframeabove\@evencheckifframeabove} + \@ifstar\@sevencheckifframeabove\@evencheckifframeabove +} \newcommand*{\@sevencheckifframeabove}[4]{% -\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1evenbounds\endcsname{#2}% -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3evenbounds\endcsname{#4}% -\advance\ffareay by \ffareaheight\relax -\expandafter\ifdim\@ff@check>\ffareay - \FLFabovetrue -\else - \FLFabovefalse -\fi + \@ifundefined{@sget#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1evenbounds\endcsname{#2}% + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@sget#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3evenbounds\endcsname{#4}% + \advance\ffareay by \ffareaheight\relax + \expandafter\ifdim\@ff@check>\ffareay + \FLFabovetrue + \else + \FLFabovefalse + \fi } \newcommand*{\@evencheckifframeabove}[4]{% -\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1evenbounds\endcsname{#2}% -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3evenbounds\endcsname{#4}% -\advance\ffareay by \ffareaheight\relax -\expandafter\ifdim\@ff@check>\ffareay - \FLFabovetrue -\else - \FLFabovefalse -\fi + \@ifundefined{@get#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1evenbounds\endcsname{#2}% + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@get#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3evenbounds\endcsname{#4}% + \advance\ffareay by \ffareaheight\relax + \expandafter\ifdim\@ff@check>\ffareay + \FLFabovetrue + \else + \FLFabovefalse + \fi } \newcommand*{\evencheckifframebelow}{% -\@ifstar\@sevencheckifframebelow\@evencheckifframebelow} + \@ifstar\@sevencheckifframebelow\@evencheckifframebelow +} \newcommand*{\@sevencheckifframebelow}[4]{% -\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1evenbounds\endcsname{#2}% -\advance\ffareay by \ffareaheight\relax -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3evenbounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareay - \FLFbelowtrue -\else - \FLFbelowfalse -\fi + \@ifundefined{@sget#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1evenbounds\endcsname{#2}% + \advance\ffareay by \ffareaheight\relax + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@sget#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3evenbounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareay + \FLFbelowtrue + \else + \FLFbelowfalse + \fi } \newcommand*{\@evencheckifframebelow}[4]{% -\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1evenbounds\endcsname{#2}% -\advance\ffareay by \ffareaheight\relax -\edef\@ff@check{\the\ffareay}% -\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3evenbounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareay - \FLFbelowtrue -\else - \FLFbelowfalse -\fi + \@ifundefined{@get#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }{}% + \csname @get#1evenbounds\endcsname{#2}% + \advance\ffareay by \ffareaheight\relax + \edef\@ff@check{\the\ffareay}% + \@ifundefined{@get#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3evenbounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareay + \FLFbelowtrue + \else + \FLFbelowfalse + \fi } \newcommand*{\evencheckifframeleft}{% -\@ifstar\@sevencheckifframeleft\@evencheckifframeleft} + \@ifstar\@sevencheckifframeleft\@evencheckifframeleft +} \newcommand*{\@sevencheckifframeleft}[4]{% -\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1evenbounds\endcsname{#2}% -\advance\ffareax by \ffareawidth\relax -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3evenbounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareax - \FLFlefttrue -\else - \FLFleftfalse -\fi + \@ifundefined{@sget#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1evenbounds\endcsname{#2}% + \advance\ffareax by \ffareawidth\relax + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@sget#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3evenbounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareax + \FLFlefttrue + \else + \FLFleftfalse + \fi } \newcommand*{\@evencheckifframeleft}[4]{% -\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1evenbounds\endcsname{#2}% -\advance\ffareax by \ffareawidth\relax -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3evenbounds\endcsname{#4}% -\expandafter\ifdim\@ff@check<\ffareax - \FLFlefttrue -\else - \FLFleftfalse -\fi + \@ifundefined{@get#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1evenbounds\endcsname{#2}% + \advance\ffareax by \ffareawidth\relax + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@get#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3evenbounds\endcsname{#4}% + \expandafter\ifdim\@ff@check<\ffareax + \FLFlefttrue + \else + \FLFleftfalse + \fi } \newcommand*{\evencheckifframeright}{% -\@ifstar\@sevencheckifframeright\@evencheckifframeright} + \@ifstar\@sevencheckifframeright\@evencheckifframeright +} \newcommand*{\@sevencheckifframeright}[4]{% -\@ifundefined{@sget#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#1evenbounds\endcsname{#2}% -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@sget#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @sget#3evenbounds\endcsname{#4}% -\advance\ffareax by \ffareawidth\relax -\expandafter\ifdim\@ff@check>\ffareax - \FLFrighttrue -\else - \FLFrightfalse -\fi + \@ifundefined{@sget#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#1evenbounds\endcsname{#2}% + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@sget#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @sget#3evenbounds\endcsname{#4}% + \advance\ffareax by \ffareawidth\relax + \expandafter\ifdim\@ff@check>\ffareax + \FLFrighttrue + \else + \FLFrightfalse + \fi } \newcommand*{\@evencheckifframeright}[4]{% -\@ifundefined{@get#1evenbounds}{\PackageError{flowfram}{Unknown frame -type `#1'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#1evenbounds\endcsname{#2}% -\edef\@ff@check{\the\ffareax}% -\@ifundefined{@get#3evenbounds}{\PackageError{flowfram}{Unknown frame -type `#3'}{Frame types may only be one of: static, dynamic or -flow}}{}% -\csname @get#3evenbounds\endcsname{#4}% -\advance\ffareax by \ffareawidth\relax -\expandafter\ifdim\@ff@check>\ffareax - \FLFrighttrue -\else - \FLFrightfalse -\fi + \@ifundefined{@get#1evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#1'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#1evenbounds\endcsname{#2}% + \edef\@ff@check{\the\ffareax}% + \@ifundefined{@get#3evenbounds}% + {% + \PackageError{flowfram}% + {Unknown frame type `#3'}% + {% + Frame types may only be one of: static, dynamic or + flow% + }% + }% + {}% + \csname @get#3evenbounds\endcsname{#4}% + \advance\ffareax by \ffareawidth\relax + \expandafter\ifdim\@ff@check>\ffareax + \FLFrighttrue + \else + \FLFrightfalse + \fi } \newcommand*{\FFaboveleft}{above left} \newcommand*{\FFaboveright}{above right} @@ -1944,1078 +3115,2773 @@ flow}}{}% \newcommand*{\FFbelow}{below} \newcommand*{\FFoverlap}{overlap} \DeclareRobustCommand*{\relativeframelocation}{% -\@ifstar\@srelativeframelocation\@relativeframelocation} + \@ifstar\@srelativeframelocation\@relativeframelocation +} \newcommand*{\@srelativeframelocation}[4]{% -\@scheckifframeabove{#1}{#2}{#3}{#4}% -\@scheckifframebelow{#1}{#2}{#3}{#4}% -\@scheckifframeleft{#1}{#2}{#3}{#4}% -\@scheckifframeright{#1}{#2}{#3}{#4}% -\ifFLFabove - \ifFLFleft - \FFaboveleft - \else - \ifFLFright - \FFaboveright - \else - \FFabove - \fi - \fi -\else - \ifFLFbelow + \@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 + \ifFLFright + \FFright + \else + \FFoverlap + \fi \fi \fi \fi -\fi } \newcommand*{\@relativeframelocation}[4]{% -\@checkifframeabove{#1}{#2}{#3}{#4}% -\@checkifframebelow{#1}{#2}{#3}{#4}% -\@checkifframeleft{#1}{#2}{#3}{#4}% -\@checkifframeright{#1}{#2}{#3}{#4}% -\ifFLFabove - \ifFLFleft - \FFaboveleft - \else - \ifFLFright - \FFaboveright - \else - \FFabove - \fi - \fi -\else - \ifFLFbelow + \@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 + \ifFLFright + \FFright + \else + \FFoverlap + \fi \fi \fi \fi -\fi } \DeclareRobustCommand*{\reldynamicloc}{% -\@ifstar\@sreldynamicloc\@reldynamicloc} -\newcommand*{\@sreldynamicloc}[2]{ -\@srelativeframelocation{dynamic}{#1}{dynamic}{#2}} -\newcommand*{\@reldynamicloc}[2]{ -\@relativeframelocation{dynamic}{#1}{dynamic}{#2}} + \@ifstar\@sreldynamicloc\@reldynamicloc +} +\newcommand*{\@sreldynamicloc}[2]{% + \@srelativeframelocation{dynamic}{#1}{dynamic}{#2}% +} +\newcommand*{\@reldynamicloc}[2]{% + \@relativeframelocation{dynamic}{#1}{dynamic}{#2}% +} \DeclareRobustCommand*{\relstaticloc}{% -\@ifstar\@srelstaticloc\@relstaticloc} -\newcommand*{\@srelstaticloc}[2]{ -\@srelativeframelocation{static}{#1}{static}{#2}} -\newcommand*{\@relstaticloc}[2]{ -\@relativeframelocation{static}{#1}{static}{#2}} + \@ifstar\@srelstaticloc\@relstaticloc +} +\newcommand*{\@srelstaticloc}[2]{% + \@srelativeframelocation{static}{#1}{static}{#2}% +} +\newcommand*{\@relstaticloc}[2]{% + \@relativeframelocation{static}{#1}{static}{#2}% +} \DeclareRobustCommand*{\relflowloc}{% -\@ifstar\@srelflowloc\@relflowloc} -\newcommand*{\@srelflowloc}[2]{ -\@srelativeframelocation{flow}{#1}{flow}{#2}} -\newcommand*{\@relflowloc}[2]{ -\@relativeframelocation{flow}{#1}{flow}{#2}} -\newcommand*{\setinitialframe}[1]{\c@thisframe=#1% -\global\usedframebreaktrue -\global\setlength{\hsize}{% -\csname colwidth\romannumeral\c@thisframe\endcsname}} + \@ifstar\@srelflowloc\@relflowloc +} +\newcommand*{\@srelflowloc}[2]{% + \@srelativeframelocation{flow}{#1}{flow}{#2}% +} +\newcommand*{\@relflowloc}[2]{% + \@relativeframelocation{flow}{#1}{flow}{#2}% +} +\newcommand*{\setinitialframe}[1]{% + \c@thisframe=#1% + \global\usedframebreaktrue + \global\setlength{\hsize} + {% + \csname colwidth\romannumeral\c@thisframe\endcsname + }% +} \newif\if@setfr@mes \@setfr@mesfalse \newcommand*{\setframes}{% -\ifnum\c@thisframe=0\relax -\PackageWarning{flowfram}{Can't find a flow frame on page 1. -\MessageBreak -Attempting to find the first page with a flow frame}% -\@nxtcol=1\relax -\c@curpg=1\relax -\@g@tnextcol{\@nxtcol}% -\advance\c@curpg by -1\relax - \whiledo{\c@curpg>0}{\advance\c@curpg by -1\relax - \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% -\@outputpage}% -\c@thisframe=\@nxtcol -\fi -\@setcol{\c@thisframe}\relax -\@setfr@mestrue -\edef\ff@txtcol{% -\csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}% -\@s@tfftextcol + \ifnum\c@thisframe=0\relax + \PackageWarning{flowfram}% + {Can't find a flow frame on page 1. + \MessageBreak + Attempting to find the first page with a flow frame% + }% + \@nxtcol=1\relax + \c@curpg=1\relax + \@g@tnextcol{\@nxtcol}% + \advance\c@curpg by -1\relax + \whiledo{\c@curpg>0}% + {% + \advance\c@curpg by -1\relax + \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% + \@outputpage + }% + \c@thisframe=\@nxtcol + \fi + \@setcol{\c@thisframe}\relax + \@setfr@mestrue + \edef\ff@txtcol{% + \csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}% + \@s@tfftextcol } \newcommand{\emulatetwocolumn}[1][]{% -\finishthispage -\setallflowframes{pages=none}% -\settoheight{\@ff@staticH}{#1}% -\settodepth{\@ff@tmp@y}{#1}% -\addtolength{\@ff@staticH}{\@ff@tmp@y}% -\ifdim\@ff@staticH>0pt\relax -\twocolumnStop[\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 } \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 } \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% + }% } +\newlength\fftolerance +\setlength\fftolerance{2pt} \newcommand{\@setcol}[1]{% -\ifnum\c@maxflow<#1\relax - \PackageError{flowfram}{Can't set frame '\number#1', doesn't - exist}{}% -\else - \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}% } -\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 } \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} -\newcommand{\@dothehead}{\vbox to \headheight{% -\color@hbox\normalcolor\hbox to \textwidth{% -\@thehead}\color@endbox}} + \global\let\@dbltoplist\@empty + \global\@colht\vsize + \begingroup + \@dblfloatplacement + \@makefcolumn\@dbldeferlist + \@whilesw \if@fcolmade \fi + {% + \@outputpage + \@makefcolumn\@dbldeferlist + }% + \endgroup + \else + \vbox{}% + \clearpage + \fi + \else + \setbox\@cclv\vbox{\box\@cclv\vfil}% + \@makecol\@opcol + \clearpage + \fi +} +\newcommand{\@dothehead}{% + \vbox to \headheight + {% + \color@hbox\normalcolor\hbox to \textwidth{\@thehead}% + \color@endbox + }% +} \newcommand{\@dothefoot}{% -\color@hbox\normalcolor\hbox to \textwidth{% -\@thefoot}\color@endbox} + \color@hbox\normalcolor\hbox to \textwidth{\@thefoot}% + \color@endbox +} \newcommand{\@dodynamicthehead}{} \newcommand{\@dodynamicthefoot}{} \def\@outputpage{% -\begingroup - \let\protect\noexpand - \@resetactivechars - \global\let\@@if@newlist\if@newlist - \global\@newlistfalse\@parboxrestore - \shipout\vbox{\set@typeset@protect - \aftergroup - \endgroup - \aftergroup - \set@typeset@protect - \reset@font\normalsize\normalsfcodes - \let\label\@gobble - \let\index\@gobble - \let\glossary\@gobble - \baselineskip\z@skip - \lineskip\z@skip - \lineskiplimit\z@ - \vskip\topmargin\moveright\@themargin - \vbox{% - \vskip\headheight - \vskip\headsep - \box\@outputbox - }}% - \global\let\if@newlist\@@if@newlist - \stepcounter{page}% - \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}% + \stepcounter{absolutepage}% + \setcounter{displayedframe}{0}% + \let\firstmark\botmark +} \newcommand*{\makedfheaderfooter}{% -\setlength{\@ff@tmp@y}{\textheight}% -\addtolength{\@ff@tmp@y}{\headsep}% -\newdynamicframe{\textwidth}{\headheight}{0pt}{\@ff@tmp@y}[header]% -\newdynamicframe{\textwidth}{\headheight}{0pt}{-\footskip}[footer]% -\renewcommand{\@dothehead}{}% -\renewcommand{\@dothefoot}{}% -\renewcommand{\@dodynamicthehead}{% -\@dynamicframeid{header}% -\expandafter -\def\csname @dynamicframe@\romannumeral\ff@id\endcsname{% -\vfill\@thehead\vfill}% -}% -\renewcommand{\@dodynamicthefoot}{% -\@dynamicframeid{footer}% -\expandafter -\def\csname @dynamicframe@\romannumeral\ff@id\endcsname{% -\vfill\@thefoot\vfill}% -}% + \setlength{\@ff@tmp@y}{\textheight}% + \addtolength{\@ff@tmp@y}{\headsep}% + \newdynamicframe{\textwidth}{\headheight}{0pt}{\@ff@tmp@y}[header]% + \newdynamicframe{\textwidth}{\headheight}{0pt}{-\footskip}[footer]% + \renewcommand{\@dothehead}{}% + \renewcommand{\@dothefoot}{}% + \renewcommand{\@dodynamicthehead}{% + \@dynamicframeid{header}% + \expandafter + \def\csname @dynamicframe@\romannumeral\ff@id\endcsname{% + \vfill\@thehead\vfill + }% + }% + \renewcommand{\@dodynamicthefoot}{% + \@dynamicframeid{footer}% + \expandafter + \def\csname @dynamicframe@\romannumeral\ff@id\endcsname{% + \vfill\@thefoot\vfill + }% + }% } \@onlypreamble{\makedfheaderfooter} \newcommand{\footnotecolor}{% -\@ifundefined{@ff@txtcol@\romannumeral\c@thisframe}{% -\normalcolor}{% -\edef\ff@txtcol{% -\csname @ff@txtcol@\romannumeral\c@thisframe\endcsname}% -\@s@tfftextcol}} + \@ifundefined{@ff@txtcol@\romannumeral\c@thisframe}% + {% + \normalcolor + }% + {% + \edef\ff@txtcol{% + \csname @ff@txtcol@\romannumeral\c@thisframe\endcsname + }% + \@s@tfftextcol + }% +} \renewcommand{\@makecol}{% -\ifvoid\footins - \setbox\@outputbox\box\@cclv -\else - \setbox\@outputbox\vbox{% -\boxmaxdepth\@maxdepth\@tempdima\dp\@cclv - \unvbox\@cclv - \vskip\skip\footins - \color@begingroup - \footnotecolor - \footnoterule - \unvbox\footins - \color@endgroup -}\fi -\xdef\@freelist{\@freelist \@midlist }% -\global\let\@midlist\@empty -\@combinefloats -\ifvbox\@kludgeins - \@makespecialcolbox -\else - \setbox\@outputbox\vbox to\@colht{% -\@texttop\dimen@\dp\@outputbox - \unvbox \@outputbox - \vskip -\dimen@\@textbottom -}\fi -\global\maxdepth\@maxdepth} -\def\@opcol{\@outputdblcol -\global\@mparbottom\z@ -\global\@textfloatsheight\z@ -\@floatplacement + \ifvoid\footins + \setbox\@outputbox\box\@cclv + \else + \setbox\@outputbox\vbox + {% + \boxmaxdepth\@maxdepth\@tempdima\dp\@cclv + \unvbox\@cclv + \vskip\skip\footins + \color@begingroup + \footnotecolor + \footnoterule + \unvbox\footins + \color@endgroup + }% + \fi + \xdef\@freelist{\@freelist\@midlist}% + \global\let\@midlist\@empty + \@combinefloats + \ifvbox\@kludgeins + \@makespecialcolbox + \else + \setbox\@outputbox\vbox to\@colht{% + \@texttop\dimen@\dp\@outputbox + \unvbox \@outputbox + \vskip -\dimen@\@textbottom + }% + \fi + \global\maxdepth\@maxdepth +} +\def\@opcol{% + \@outputdblcol + \global\@mparbottom\z@ + \global\@textfloatsheight\z@ + \@floatplacement } \newif\if@ff@moreframes \newcommand*{\@ff@checkifmoreframes}{% -\@ff@moreframesfalse -\@colN=\c@thisframe -\whiledo{\@colN<\c@maxflow}{% -\advance\@colN by 1\relax -\edef\ff@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 + \edef\ff@xpages{\csname @ff@xpages@\romannumeral\@colN\endcsname}% + \@for\@ff@pp:=\ff@xpages\do + {% + \ifnum0\@ff@pp=\@ff@pages@countreg\relax + \@endfortrue + \fi + }% + \if@endfor + \else + \edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}% + \@ff@checkpages{\ff@pages}% + \if@ff@moreframes + \@colN=\c@maxflow\relax + \fi + \fi + }% + \if@ff@moreframes + \else + \@ff@tmpN=\@ff@pages@countreg + \count@=0\relax + \loop + \advance\@ff@tmpN by 1\relax + \@colN=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \edef\ff@xpages{\csname @ff@xpages@\romannumeral\@colN\endcsname}% + \@for\@ff@pp:=\ff@xpages\do + {% + \ifnum0\@ff@pp=\@ff@tmpN\relax + \@endfortrue + \fi + }% + \if@endfor + \else + \edef\ff@pages{\csname @ff@pages@\romannumeral\@colN\endcsname}% + \@ff@checkpages[\@ff@tmpN]{\ff@pages}% + \if@ff@moreframes + \@colN=\c@maxflow\relax + \fi + \fi + }% + \if@ff@moreframes + \count@=4\relax + \else + \advance\count@ by 1\relax + \fi + \ifnum\count@<4 + \repeat + \fi +} +\newcommand*{\@ff@checkpages}[2][\@ff@pages@countreg]{% + \@for\@ff@pp:=#2\do{% + \@ff@checkthispage{#1}{\@ff@pp}% + }% } -\newcommand*{\@ff@checkpages}[2][\c@page]{% -\@for\@ff@pp:=#2\do{% -\@ff@checkthispage{#1}{\@ff@pp}}} \newcommand*{\@ff@checkthispage}[2]{% -\ifthenelse{\equal{#2}{all}\or\equal{#2}{even}\or\equal{#2}{odd}}{% -\@ff@moreframestrue}{% -\ifthenelse{\equal{#2}{none}}{}{% -\@ff@checknumrange{#1}{#2}}}} + \ifthenelse{\equal{#2}{all}\or\equal{#2}{even}\or\equal{#2}{odd}}% + {% + \@ff@moreframestrue + }% + {% + \ifthenelse{\equal{#2}{none}}% + {}% + {% + \@ff@checknumrange{#1}{#2}% + }% + }% +} \newcommand*{\@ff@checknumrange}[2]{% -\def\@ff@numstart{0}\def\@ff@numend{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 } \newcount\c@ffrangenum \newcommand*{\@ff@getrange}[1]{% -\expandafter\@ff@@getrange#1-\relax\end} + \expandafter\@ff@@getrange#1-\relax\end +} \def\@ff@@getrange#1#2\end{% -\ifx#1<\relax - \@ff@getrangeless#1#2\end -\else - \ifx#1>\relax - \@ff@getrangegreater#1#2\end + \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 } \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}% +} \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}% +} \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 } \def\@@@ff@getrange#1-\relax\end{% -\def\@ff@numend{#1}} + \def\@ff@numend{#1}% +} +\newcommand*{\@ff@output@adjustframes}{} +\newcommand*{\flowswitchonnext}{% + \@ifstar\@sflowswitchonnext\@flowswitchonnext +} +\newcommand{\@sflowswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +\newcommand{\@flowswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +\newcommand*{\flowswitchonnextodd}{% + \@ifstar\@sflowswitchonnextodd\@flowswitchonnextodd +} +\newcommand{\@sflowswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi + \@ff@chckifthispg{\count@}{\ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +\newcommand{\@flowswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi + \@ff@chckifthispg{\count@}{\@ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +\newcommand*{\flowswitchoffnext}{% + \@ifstar\@sflowswitchoffnext\@flowswitchoffnext +} +\newcommand{\@sflowswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +\newcommand{\@flowswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +\newcommand*{\flowswitchoffnextodd}{% + \@ifstar\@sflowswitchoffnextodd\@flowswitchoffnextodd +} +\newcommand{\@sflowswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \if@notthiscol + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{none}% + \else + \@ff@chckifthispg{\count@}{\ff@id}% + \if@notthiscol + \def\@ff@nextpages{none}% + \else + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \@ff@chckifthispg{\count@}{\ff@id}% + \if@notthiscol + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}{\@ff@nextpages}% + }% + }% +} +\newcommand{\@flowswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \if@notthiscol + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{none}% + \else + \@ff@chckifthispg{\count@}{\@ff@id}% + \if@notthiscol + \def\@ff@nextpages{none}% + \else + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \@ff@chckifthispg{\count@}{\@ff@id}% + \if@notthiscol + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@nextpages}% + }% + }% +} +\newcommand*{\flowswitchonnextonly}{% + \@ifstar\@sflowswitchonnextonly\@flowswitchonnextonly +} +\newcommand{\@sflowswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}{\number\count@}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +\newcommand{\@flowswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}{\number\count@}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +\newcommand*{\flowswitchonnextoddonly}{% + \@ifstar\@sflowswitchonnextoddonly\@flowswitchonnextoddonly +} +\newcommand{\@sflowswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \@ff@chckifthispg{\@ff@pages@countreg}{\ff@id}% + \if@notthiscol + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@ff@chckifthispg{\count@}{\ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@ff@chckifthispg{\count@}{\ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +\newcommand{\@flowswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% + \@ff@chckifthispg{\@ff@pages@countreg}{\@ff@id}% + \if@notthiscol + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@ff@chckifthispg{\count@}{\@ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@ff@chckifthispg{\count@}{\@ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +\newcommand*{\flowswitchoffnextonly}{% + \@ifstar\@sflowswitchoffnextonly\@flowswitchoffnextonly +} +\newcommand{\@sflowswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +\newcommand{\@flowswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +\newcommand*{\flowswitchoffnextoddonly}{% + \@ifstar\@sflowswitchoffnextoddonly\@flowswitchoffnextoddonly +} +\newcommand{\@sflowswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@flowframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +\newcommand{\@flowswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\flowaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +\newcommand*{\dynamicswitchonnext}{% + \@ifstar\@sdynamicswitchonnext\@dynamicswitchonnext +} +\newcommand{\@sdynamicswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +\newcommand{\@dynamicswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +\newcommand*{\dynamicswitchonnextodd}{% + \@ifstar\@sdynamicswitchonnextodd\@dynamicswitchonnextodd +} +\newcommand{\@sdynamicswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi + \@df@chckifthispg[\count@]{\ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +\newcommand{\@dynamicswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi + \@df@chckifthispg[\count@]{\@ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +\newcommand*{\dynamicswitchoffnext}{% + \@ifstar\@sdynamicswitchoffnext\@dynamicswitchoffnext +} +\newcommand{\@sdynamicswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +\newcommand{\@dynamicswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +\newcommand*{\dynamicswitchoffnextodd}{% + \@ifstar\@sdynamicswitchoffnextodd\@dynamicswitchoffnextodd +} +\newcommand{\@sdynamicswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{none}% + \else + \@df@chckifthispg[\count@]{\ff@id}% + \if@notthiscol + \def\@ff@nextpages{none}% + \else + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \@df@chckifthispg[\count@]{\ff@id}% + \if@notthiscol + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@nextpages}% + }% + }% +} +\newcommand{\@dynamicswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{none}% + \else + \@df@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol + \def\@ff@nextpages{none}% + \else + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \@df@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@nextpages}% + }% + }% +} +\newcommand*{\dynamicswitchonnextonly}{% + \@ifstar\@sdynamicswitchonnextonly\@dynamicswitchonnextonly +} +\newcommand{\@sdynamicswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}{\number\count@}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +\newcommand{\@dynamicswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}{\number\count@}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +\newcommand*{\dynamicswitchonnextoddonly}{% + \@ifstar\@sdynamicswitchonnextoddonly\@dynamicswitchonnextoddonly +} +\newcommand{\@sdynamicswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \@df@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@df@chckifthispg[\count@]{\ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@df@chckifthispg[\count@]{\ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +\newcommand{\@dynamicswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% + \@df@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@df@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@df@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +\newcommand*{\dynamicswitchoffnextonly}{% + \@ifstar\@sdynamicswitchoffnextonly\@dynamicswitchoffnextonly +} +\newcommand{\@sdynamicswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +\newcommand{\@dynamicswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +\newcommand*{\dynamicswitchoffnextoddonly}{% + \@ifstar\@sdynamicswitchoffnextoddonly\@dynamicswitchoffnextoddonly +} +\newcommand{\@sdynamicswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@dynamicframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +\newcommand{\@dynamicswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\dynamicaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +\newcommand*{\staticswitchonnext}{% + \@ifstar\@sstaticswitchonnext\@staticswitchonnext +} +\newcommand{\@sstaticswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +\newcommand{\@staticswitchonnext}[1]{% + \@for\@ff@id:=#1\do{% + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}{>\number\@ff@pages@countreg}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,>\number\@ff@pages@countreg}% + }% + \fi + }% +} +\newcommand*{\staticswitchonnextodd}{% + \@ifstar\@sstaticswitchonnextodd\@staticswitchonnextodd +} +\newcommand{\@sstaticswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi + \@sf@chckifthispg[\count@]{\ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +\newcommand{\@staticswitchonnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\count@\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \def\@ff@prepages{}% + \if@notthiscol + \else + \def\@ff@prepages{\number\@ff@pages@countreg,}% + \fi + \@sf@chckifthispg[\count@]{\@ff@id}% + \ifnum\count@=\@ff@pages@countreg\relax + \else + \if@notthiscol + \else + \edef\@ff@prepages{\@ff@prepages\number\count@,}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}% + {\@ff@prepages>\number\count@}% + }% + }% +} +\newcommand*{\staticswitchoffnext}{% + \@ifstar\@sstaticswitchoffnext\@staticswitchoffnext +} +\newcommand{\@sstaticswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +\newcommand{\@staticswitchoffnext}[1]{% + \@for\@ff@id:=#1\do{% + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol + \def\@ff@pages{none}% + \else + \def\@ff@pages{\number\@ff@pages@countreg}% + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +\newcommand*{\staticswitchoffnextodd}{% + \@ifstar\@sstaticswitchoffnextodd\@staticswitchoffnextodd +} +\newcommand{\@sstaticswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{none}% + \else + \@sf@chckifthispg[\count@]{\ff@id}% + \if@notthiscol + \def\@ff@nextpages{none}% + \else + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \@sf@chckifthispg[\count@]{\ff@id}% + \if@notthiscol + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}{\@ff@nextpages}% + }% + }% +} +\newcommand{\@staticswitchoffnextodd}[1]{% + \count@=\@ff@pages@countreg\relax + \ifodd\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{none}% + \else + \@sf@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol + \def\@ff@nextpages{none}% + \else + \def\@ff@nextpages{\number\count@}% + \fi + \fi + \else + \ifnum\@ff@pages@countreg=\count@\relax + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \@sf@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol + \def\@ff@nextpages{\number\@ff@pages@countreg}% + \else + \def\@ff@nextpages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@nextpages}% + }% + }% +} +\newcommand*{\staticswitchonnextonly}{% + \@ifstar\@sstaticswitchonnextonly\@staticswitchonnextonly +} +\newcommand{\@sstaticswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}{\number\count@}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +\newcommand{\@staticswitchonnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \if@notthiscol + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}{\number\count@}% + }% + \else + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}% + {\number\@ff@pages@countreg,\number\count@}% + }% + \fi + }% +} +\newcommand*{\staticswitchonnextoddonly}{% + \@ifstar\@sstaticswitchonnextoddonly\@staticswitchonnextoddonly +} +\newcommand{\@sstaticswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% + \@sf@chckifthispg[\@ff@pages@countreg]{\ff@id}% + \if@notthiscol + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@sf@chckifthispg[\count@]{\ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@sf@chckifthispg[\count@]{\ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\ff@id}{\@ff@pages}% + }% + }% +} +\newcommand{\@staticswitchonnextoddonly}[1]{% + \@for\@ff@id:=#1\do{% + \@sf@chckifthispg[\@ff@pages@countreg]{\@ff@id}% + \if@notthiscol + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@sf@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \else + \edef\@ff@pages{\number\count@}% + \advance\count@ by 1\relax + \edef\@ff@pages{\@ff@pages,\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\count@}% + \fi + \else + \ifodd\@ff@pages@countreg + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@sf@chckifthispg[\count@]{\@ff@id}% + \if@notthiscol + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \else + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg-\number\count@}% + \fi + \else + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \edef\@ff@pages{\number\@ff@pages@countreg,\number\count@}% + \fi + \fi + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticsetpagelist{\number\@ff@id}{\@ff@pages}% + }% + }% +} +\newcommand*{\staticswitchoffnextonly}{% + \@ifstar\@sstaticswitchoffnextonly\@staticswitchoffnextonly +} +\newcommand{\@sstaticswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +\newcommand{\@staticswitchoffnextonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +\newcommand*{\staticswitchoffnextoddonly}{% + \@ifstar\@sstaticswitchoffnextoddonly\@staticswitchoffnextoddonly +} +\newcommand{\@sstaticswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \@staticframeid{\@ff@id}% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticaddexclusion{\number\ff@id}{\number\count@}% + }% + }% +} +\newcommand{\@staticswitchoffnextoddonly}[1]{% + \count@=\@ff@pages@countreg\relax + \advance\count@ by 1\relax + \ifodd\count@\relax + \else + \advance\count@ by 1\relax + \fi + \@for\@ff@id:=#1\do{% + \expandafter\toks@\expandafter{\@ff@output@adjustframes}% + \xdef\@ff@output@adjustframes{% + \the\toks@ + \noexpand\staticaddexclusion{\number\@ff@id}{\number\count@}% + }% + }% +} +\newcommand*{\ffaddtoadjustframeshook}[1]{% + \@ff@addtolist\@ff@output@adjustframes\entry{#1}% +} \newif\if@notthiscol \newif\if@ff@nwpg \newcount\c@curpg \newcommand*{\@g@tnextcol}[1]{% -\@ff@checkifmoreframes -\if@ff@moreframes -\else -\PackageWarning{flowfram}{Run out of flows frames, -adding new one}% -\@onecolumn -#1=\c@maxflow -\fi -\@notthiscoltrue -\@ff@nwpgfalse -\@colN=#1\relax -\c@curpg=\c@page -\loop -\ifnum\@colN=\c@maxflow - \@colN=1\@ff@nwpgtrue - \advance\c@curpg by 1\relax -\else - \advance\@colN by 1\relax -\fi -\@ff@chckifthispg{\c@curpg}{\@colN}% -\if@notthiscol -\repeat -#1=\@colN + \@ff@output@adjustframes + \global\let\@ff@output@adjustframes\@empty + \@ff@checkifmoreframes + \if@ff@moreframes + \else + \PackageWarning{flowfram}% + {Run out of flows frames on page \number\@ff@pages@countreg, adding new one}% + \flf@doifverbose + {% + \def\flf@messinfo{Here's the list of flow frames:}% + \count@=0\relax + \loop + \advance\count@ by 1\relax + \expandafter\toks@\expandafter{\flf@messinfo\MessageBreak}% + \edef\flf@messinfo{\the\toks@ + \number\count@. + Pages: \csname @ff@pages@\romannumeral\count@\endcsname. + Exclusions: \csname @ff@xpages@\romannumeral\count@\endcsname. + }% + \ifnum\count@<\c@maxflow + \repeat + \PackageInfo{flowfram}{\flf@messinfo\@gobbletwo}% + }% + \@onecolumn + #1=\c@maxflow + \fi + \@notthiscoltrue + \@ff@nwpgfalse + \@colN=#1\relax + \c@curpg=\@ff@pages@countreg + \loop + \ifnum\@colN=\c@maxflow + \@colN=1\relax + \@ff@nwpgtrue + \advance\c@curpg by 1\relax + \else + \advance\@colN by 1\relax + \fi + \@ff@chckifthispg{\c@curpg}{\@colN}% + \if@notthiscol + \repeat + #1=\@colN\relax } \newcommand*{\@ff@chckifthispg}[2]{% -\@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 } \newcommand*{\@@ff@chckifthispg}[1]{% -\ifthenelse{\equal{\ff@pages}{none}}{}{% -\ifthenelse{\equal{\ff@pages}{all}}{\@notthiscolfalse}{% -\ifthenelse{\equal{\ff@pages}{odd}}{% -\ifodd#1\@notthiscolfalse\fi}{% -\ifthenelse{\equal{\ff@pages}{even}}{% -\ifodd#1\else\@notthiscolfalse\fi}{% -\@for\@ff@pp:=\ff@pages\do{% -\def\@ff@numstart{0}\def\@ff@numend{0}% -\@ff@getrange{\@ff@pp}% -\ifthenelse{#1<\@ff@numstart \or #1>\@ff@numend}{}{% -\@notthiscolfalse}% -}% -}}}}% + \ifthenelse{\equal{\ff@pages}{none}}% + {}% + {% + \ifthenelse{\equal{\ff@pages}{all}}% + {% + \@notthiscolfalse + }% + {% + \ifthenelse{\equal{\ff@pages}{odd}}% + {% + \ifodd#1\@notthiscolfalse\fi + }% + {% + \ifthenelse{\equal{\ff@pages}{even}}% + {% + \ifodd#1\else\@notthiscolfalse\fi + }% + {% + \@for\@ff@pp:=\ff@pages\do{% + \def\@ff@numstart{0}% + \def\@ff@numend{0}% + \@ff@getrange{\@ff@pp}% + \ifthenelse{#1<\@ff@numstart \or #1>\@ff@numend}% + {}% + {% + \@notthiscolfalse + }% + }% + }% + }% + }% + }% } -\newcommand*{\@sf@chckifthispg}[1]{% -\@notthiscoltrue -\edef\ff@pages{\csname @sf@pages@\romannumeral#1\endcsname}% -\@@ff@chckifthispg{\c@page}% +\newcommand*{\@sf@chckifthispg}[2][\@ff@pages@countreg]{% + \@notthiscoltrue + \edef\ff@pages{\csname @sf@pages@\romannumeral#2\endcsname}% + \@@ff@chckifthispg{#1}% } -\newcommand*{\@df@chckifthispg}[1]{% -\@notthiscoltrue -\edef\ff@pages{\csname @df@pages@\romannumeral#1\endcsname}% -\@@ff@chckifthispg{\c@page}% +\newcommand*{\@df@chckifthispg}[2][\@ff@pages@countreg]{% + \@notthiscoltrue + \edef\ff@pages{\csname @df@pages@\romannumeral#2\endcsname}% + \@@ff@chckifthispg{#1}% } \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 } \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}% + \edef\ff@col{\csname @ff@col@\romannumeral#1\endcsname}% + \edef\ff@txtcol{\csname @ff@txtcol@\romannumeral#1\endcsname}% + \edef\ff@backcol{\csname @ff@backcol@\romannumeral#1\endcsname}% + \@ff@setoffset{#1}% + \rotateframe{\csname @ff@angle@\romannumeral#1\endcsname}% + {% + \ifthenelse{\boolean{columnframe\romannumeral#1}}% + {% + \@ff@fbox + {\csname colwidth\romannumeral#1\endcsname}% + {\csname colheight\romannumeral#1\endcsname}% + {% + \expandafter\box\csname column\romannumeral#1\endcsname + }% + {% + \csname\ff@frametype\endcsname + }% + }% + {% + \@ff@box + {\csname colwidth\romannumeral#1\endcsname}% + {\csname colheight\romannumeral#1\endcsname}% + {% + \expandafter\box\csname column\romannumeral#1\endcsname + }% + }% + }% +} \newcommand*{\@docolbbox}[1]{% -\@ff@setoffset{#1}% -\def\ff@col{}\def\ff@txtcol{}% -\@fr@meifdraft{% -\@ff@box{\csname colwidth\romannumeral#1\endcsname}% -{\csname colheight\romannumeral#1\endcsname}{% -\expandafter\box\csname column\romannumeral#1\endcsname}}% -{F:\number#1;\csname @col@id@\romannumeral#1\endcsname}} -\newcommand{\@ff@fbox}[4]{{% -\fboxsep=\flowframesep\fboxrule=\flowframerule\@s@tffcol -\kern\@ff@offset -#4{\@ff@box{#1}{#2}{#3}}}} -\newcommand{\@ff@box}[3]{{\@ffbackground{\vbox to#2 -{\hb@xt@ #1{\hss{\@s@tfftextcol #3}\hss}\vss\kern\z@}}}} + \@ff@setoffset{#1}% + \def\ff@col{}\def\ff@txtcol{}% + \@fr@meifdraft + {% + \@ff@box + {\csname colwidth\romannumeral#1\endcsname}% + {\csname colheight\romannumeral#1\endcsname}% + {% + \expandafter\box\csname column\romannumeral#1\endcsname + }% + }% + {F:\number#1;\csname @col@id@\romannumeral#1\endcsname}% +} +\newcommand{\@ff@fbox}[4]{% + {% + \fboxsep=\flowframesep + \fboxrule=\flowframerule + \@s@tffcol + \kern\@ff@offset + #4{\@ff@box{#1}{#2}{#3}}% + }% +} +\newcommand{\@ff@box}[3]{% + {% + \@ffbackground + {% + \vbox to#2 {\hb@xt@ #1{\hss{\@s@tfftextcol #3}\hss}\vss\kern\z@}% + }% + }% +} \newcommand*{\@putcolbox}[1]{% -\@ff@chckifthispg{\c@page}{#1}% -\if@notthiscol -\else -\@killglue -\if@twoside -\ifodd\c@page -\expandafter\raise\csname col@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname col@\romannumeral#1@posx\endcsname -\@docolbox{#1}\hss}% -\else -\expandafter\raise\csname col@\romannumeral#1@eveny\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname col@\romannumeral#1@evenx\endcsname -\@docolbox{#1}\hss}% -\fi -\else -\expandafter\raise\csname col@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname col@\romannumeral#1@posx\endcsname -\@docolbox{#1}\hss}% -\fi -\fi + \@ff@chckifthispg{\@ff@pages@countreg}{#1}% + \if@notthiscol + \expandafter\ifvoid\csname column\romannumeral#1\endcsname + \else + \PackageWarning{flowfram}{Box \number#1\space is not void. + Dumping. This page: \number\@ff@pages@countreg. + Page list: "\csname @ff@pages@\romannumeral#1\endcsname". + Exclusion list: "\csname @ff@xpages@\romannumeral#1\endcsname". + (Maybe the page list was changed after this frame was + selected or maybe you should use package option pages=absolute)}% + \@notthiscolfalse + \fi + \fi + \if@notthiscol + \flf@message{Flow frame \number#1\space is not required on page + \number\@ff@pages@countreg}% + \else + \@killglue + \if@twoside + \ifodd\c@page + \expandafter\raise\csname col@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@posx\endcsname + \@docolbox{#1}\hss + }% + \else + \expandafter\raise\csname col@\romannumeral#1@eveny\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@evenx\endcsname + \@docolbox{#1}\hss + }% + \fi + \else + \expandafter\raise\csname col@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@posx\endcsname + \@docolbox{#1}\hss + }% + \fi + \fi } \newcommand*{\@putcolbbox}[1]{% -\@ff@chckifthispg{\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 + \@ff@chckifthispg{\@ff@pages@countreg}{#1}% + \if@notthiscol + \else + \@killglue + \if@twoside + \ifodd\c@page + \expandafter\raise\csname col@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@posx\endcsname + \@docolbbox{#1}\hss + }% + \else + \expandafter\raise\csname col@\romannumeral#1@eveny\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@evenx\endcsname + \@docolbbox{#1}\hss + }% + \fi + \else + \expandafter\raise\csname col@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname col@\romannumeral#1@posx\endcsname + \@docolbbox{#1}\hss + }% + \fi + \fi } \newcommand*{\@ff@s@t@doubleboxoffset}{% -\setlength{\@ff@offset}{-\flowframesep}% -\addtolength{\@ff@offset}{-3.75\flowframerule}% -\addtolength{\@ff@offset}{-.5pt}% + \setlength{\@ff@offset}{-\flowframesep}% + \addtolength{\@ff@offset}{-3.75\flowframerule}% + \addtolength{\@ff@offset}{-.5pt}% } \newcommand*{\@ff@s@t@ovalboxoffset}{% -\@ff@offset=-\fontdimen 8\tenln\relax -\advance\@ff@offset by -\flowframesep\relax + \@ff@offset=-\fontdimen 8\tenln\relax + \advance\@ff@offset by -\flowframesep\relax } \newcommand*{\@ff@s@t@Ovalboxoffset}{% -\@ff@offset=-\fontdimen 8\tenlnw\relax -\advance\@ff@offset by -\flowframesep\relax + \@ff@offset=-\fontdimen 8\tenlnw\relax + \advance\@ff@offset by -\flowframesep\relax } \newcommand*{\@ff@s@t@defaultoffset}{% -\@ff@offset=-\flowframesep\relax -\addtolength{\@ff@offset}{-\flowframerule}% + \@ff@offset=-\flowframesep\relax + \addtolength{\@ff@offset}{-\flowframerule}% } \newcommand*{\@ff@setoffset}[1]{% -\ifthenelse{\equal{\csname @ff@offset@\romannumeral#1\endcsname}% -{compute}}{% -\ifthenelse{\boolean{columnframe\romannumeral#1}}{% -\ifthenelse{% -\equal{\csname @ff@frametype@\romannumeral#1\endcsname}% -{doublebox}}{% -\@ff@s@t@doubleboxoffset -}{% -\ifthenelse{% -\equal{\csname @ff@frametype@\romannumeral#1\endcsname}% -{ovalbox}}{% -\@ff@s@t@ovalboxoffset -}{% -\ifthenelse{% -\equal{\csname @ff@frametype@\romannumeral#1\endcsname}% -{Ovalbox}}{% -\@ff@s@t@Ovalboxoffset}{% -\@ff@s@t@defaultoffset -}}}% -}{}% -}{% -\setlength{\@ff@offset}% -{\csname @ff@offset@\romannumeral#1\endcsname}}% + \ifthenelse + {\equal{\csname @ff@offset@\romannumeral#1\endcsname}{compute}}% + {% + \ifthenelse{\boolean{columnframe\romannumeral#1}}% + {% + \ifthenelse + {% + \equal{\csname @ff@frametype@\romannumeral#1\endcsname}% + {doublebox}% + }% + {% + \@ff@s@t@doubleboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @ff@frametype@\romannumeral#1\endcsname}% + {ovalbox}% + }% + {% + \@ff@s@t@ovalboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @ff@frametype@\romannumeral#1\endcsname}% + {Ovalbox}% + }% + {% + \@ff@s@t@Ovalboxoffset + }% + {% + \@ff@s@t@defaultoffset + }% + }% + }% + }% + {}% + }% + {% + \setlength{\@ff@offset}% + {\csname @ff@offset@\romannumeral#1\endcsname}% + }% } \newcommand*{\@sf@setoffset}[1]{% -\ifthenelse{% -\equal{\csname @sf@offset@\romannumeral#1\endcsname}% -{compute}}{% -\ifthenelse{\boolean{staticframe\romannumeral#1}}{% -\ifthenelse{% -\equal{\csname @sf@frametype@\romannumeral#1\endcsname}% -{doublebox}}{% -\@ff@s@t@doubleboxoffset -}{% -\ifthenelse{% -\equal{\csname @sf@frametype@\romannumeral#1\endcsname}% -{ovalbox}}{% -\@ff@s@t@ovalboxoffset -}{% -\ifthenelse{% -\equal{\csname @sf@frametype@\romannumeral#1\endcsname}% -{Ovalbox}}{% -\@ff@s@t@Ovalboxoffset -}{% -\@ff@s@t@defaultoffset -}}}% -}{}% -}{% -\setlength{\@ff@offset}% -{\csname @sf@offset@\romannumeral#1\endcsname}}% + \ifthenelse + {% + \equal{\csname @sf@offset@\romannumeral#1\endcsname}% + {compute}% + }% + {% + \ifthenelse{\boolean{staticframe\romannumeral#1}}% + {% + \ifthenelse + {% + \equal{\csname @sf@frametype@\romannumeral#1\endcsname}% + {doublebox}% + }% + {% + \@ff@s@t@doubleboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @sf@frametype@\romannumeral#1\endcsname}% + {ovalbox}% + }% + {% + \@ff@s@t@ovalboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @sf@frametype@\romannumeral#1\endcsname}% + {Ovalbox}% + }% + {% + \@ff@s@t@Ovalboxoffset + }% + {% + \@ff@s@t@defaultoffset + }% + }% + }% + }% + {}% + }% + {% + \setlength{\@ff@offset}% + {\csname @sf@offset@\romannumeral#1\endcsname}% + }% } \newcommand*{\@df@setoffset}[1]{% -\ifthenelse{% -\equal{\csname @df@offset@\romannumeral#1\endcsname}% -{compute}}{% -\setlength{\@ff@offset}{0pt}% -\ifthenelse{\boolean{dynamicframe\romannumeral#1}}{% -\ifthenelse{% -\equal{\csname @df@frametype@\romannumeral#1\endcsname}% -{doublebox}}{% -\@ff@s@t@doubleboxoffset -}{% -\ifthenelse{% -\equal{\csname @df@frametype@\romannumeral#1\endcsname}% -{ovalbox}}{% -\@ff@s@t@ovalboxoffset -}{% -\ifthenelse{% -\equal{\csname @df@frametype@\romannumeral#1\endcsname}% -{Ovalbox}}{% -\@ff@s@t@Ovalboxoffset}{% -\@ff@s@t@defaultoffset -}}}% -}{}% -}{% -\setlength{\@ff@offset}% -{\csname @df@offset@\romannumeral#1\endcsname}}% + \ifthenelse + {% + \equal{\csname @df@offset@\romannumeral#1\endcsname}% + {compute}% + }% + {% + \setlength{\@ff@offset}{0pt}% + \ifthenelse{\boolean{dynamicframe\romannumeral#1}}% + {% + \ifthenelse + {% + \equal{\csname @df@frametype@\romannumeral#1\endcsname}% + {doublebox}% + }% + {% + \@ff@s@t@doubleboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @df@frametype@\romannumeral#1\endcsname}% + {ovalbox}% + }% + {% + \@ff@s@t@ovalboxoffset + }% + {% + \ifthenelse + {% + \equal{\csname @df@frametype@\romannumeral#1\endcsname}% + {Ovalbox}% + }% + {% + \@ff@s@t@Ovalboxoffset + }% + {% + \@ff@s@t@defaultoffset + }% + }% + }% + }% + {}% + }% + {% + \setlength{\@ff@offset}% + {\csname @df@offset@\romannumeral#1\endcsname}% + }% } \newcommand*{\@putmarginbox}[1]{% -\@ff@chckifthispg{\c@page}{#1}% -\if@notthiscol -\else -\@killglue -\if@twoside -\ifodd\c@page -\edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}% -\edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}% -\else -\edef\ff@x{\csname col@\romannumeral#1@evenx\endcsname}% -\edef\ff@y{\csname col@\romannumeral#1@eveny\endcsname}% -\fi -\else -\edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}% -\edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}% -\fi -\setlength{\@ff@tmp@x}{\ff@x}% -\setlength{\@ff@tmp@y}{\ff@y}% -\@getmarginpos{\csname @ff@margin@\romannumeral#1\endcsname}% -\ifthenelse{\equal{\ff@margin}{left}}{% -\addtolength{\@ff@tmp@x}{-\marginparwidth}% -\addtolength{\@ff@tmp@x}{-\marginparsep}% -\ifthenelse{\boolean{columnframe\romannumeral#1}}{% -}{}% -}{% -\addtolength{\@ff@tmp@x}% -{\csname colwidth\romannumeral#1\endcsname}% -\addtolength{\@ff@tmp@x}{\marginparsep}% -\ifthenelse{\boolean{columnframe\romannumeral#1}}{% -}{}% -}% -\raise\@ff@tmp@y -\hb@xt@\z@{% -\expandafter\kern\@ff@tmp@x -\@fr@meifdraft{\@ff@box{\marginparwidth}% -{\csname colheight\romannumeral#1\endcsname}{}}% -{M:\number#1}\hss}\fi -\ignorespaces} + \@ff@chckifthispg{\@ff@pages@countreg}{#1}% + \if@notthiscol + \else + \@killglue + \if@twoside + \ifodd\c@page + \edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}% + \edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}% + \else + \edef\ff@x{\csname col@\romannumeral#1@evenx\endcsname}% + \edef\ff@y{\csname col@\romannumeral#1@eveny\endcsname}% + \fi + \else + \edef\ff@x{\csname col@\romannumeral#1@posx\endcsname}% + \edef\ff@y{\csname col@\romannumeral#1@posy\endcsname}% + \fi + \setlength{\@ff@tmp@x}{\ff@x}% + \setlength{\@ff@tmp@y}{\ff@y}% + \@getmarginpos{\csname @ff@margin@\romannumeral#1\endcsname}% + \ifthenelse{\equal{\ff@margin}{left}}% + {% + \addtolength{\@ff@tmp@x}{-\marginparwidth}% + \addtolength{\@ff@tmp@x}{-\marginparsep}% + \ifthenelse{\boolean{columnframe\romannumeral#1}}% + {}% + {}% + }% + {% + \addtolength{\@ff@tmp@x}% + {\csname colwidth\romannumeral#1\endcsname}% + \addtolength{\@ff@tmp@x}{\marginparsep}% + \ifthenelse{\boolean{columnframe\romannumeral#1}}% + {}% + {}% + }% + \raise\@ff@tmp@y + \hb@xt@\z@ + {% + \expandafter\kern\@ff@tmp@x + \@fr@meifdraft{\@ff@box{\marginparwidth}% + {\csname colheight\romannumeral#1\endcsname}{}}% + {M:\number#1}\hss + }% + \fi + \ignorespaces +} \newcommand*{\@ff@drawmargins}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxflow}{% -\advance\@colN by 1\relax -\makebox[0pt][l]{\@putmarginbox{\@colN}}% -}% + \@colN=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \makebox[0pt][l]{\@putmarginbox{\@colN}}% + }% +} +\def\@ff@getstaticpos[#1][#2][#3]#4{% + \@ff@tmp@x=#4\relax + \@ff@tmp@y=#2\relax + \def\ff@valign{#3}% } -\def\@ff@getstaticpos[#1][#2][#3]#4{\@ff@tmp@x=#4\relax -\@ff@tmp@y=#2\relax -\def\ff@valign{#3}} \newcommand*{\@dostaticbox}[1]{% -\edef\ff@frametype{% -\csname @sf@frametype@\romannumeral#1\endcsname}% -\edef\ff@col{\csname @sf@col@\romannumeral#1\endcsname}% -\edef\ff@backcol{\csname @sf@backcol@\romannumeral#1\endcsname}% -\@sf@setoffset{#1}% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname -\rotateframe{\csname @sf@angle@\romannumeral#1\endcsname}{% -\ifthenelse{\boolean{staticframe\romannumeral#1}}{% -\@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}{% -\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname} -{\csname\ff@frametype\endcsname}% -}{% -\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% -{\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname}% -}}} + \edef\ff@frametype{% + \csname @sf@frametype@\romannumeral#1\endcsname + }% + \edef\ff@col{\csname @sf@col@\romannumeral#1\endcsname}% + \edef\ff@backcol{\csname @sf@backcol@\romannumeral#1\endcsname}% + \@sf@setoffset{#1}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname + \rotateframe + {\csname @sf@angle@\romannumeral#1\endcsname}% + {% + \ifthenelse{\boolean{staticframe\romannumeral#1}}% + {% + \@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}% + {% + \expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname + } + {\csname\ff@frametype\endcsname}% + }% + {% + \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% + {% + \expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname + }% + }% + }% +} \newcommand*{\@dostaticbbox}[1]{% -\edef\ff@col{}% -\@sf@setoffset{#1}% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname -\@fr@meifdraft{% -\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% -{\expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname}% -}{S:\number#1;\csname @sf@id@\romannumeral#1\endcsname}} + \edef\ff@col{}% + \@sf@setoffset{#1}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @sf@dim@\romannumeral#1\endcsname + \@fr@meifdraft + {% + \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% + {% + \expandafter\usebox\csname @staticframe@\romannumeral#1\endcsname + }% + }% + {S:\number#1;\csname @sf@id@\romannumeral#1\endcsname}% +} \newcommand*{\@putstaticbox}[1]{% -\@sf@chckifthispg{#1}% -\if@notthiscol\else -\@killglue -\if@twoside -\ifodd\c@page -\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname -\@dostaticbox{#1}\hss}% -\else -\expandafter\raise\csname @sf@\romannumeral#1@eveny\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @sf@\romannumeral#1@evenx\endcsname -\@dostaticbox{#1}\hss}% -\fi -\else -\expandafter\raise\csname @sf@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @sf@\romannumeral#1@posx\endcsname -\@dostaticbox{#1}\hss}% + \@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} +} \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 +} \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 + \ifthenelse{\boolean{@sf@clear@\romannumeral\@colN}}% + {% + \global\sbox + {% + \csname @staticframe@\romannumeral\@colN\endcsname + }% + {}% + }% + {}% + }% +} \newcommand*{\@resetdyn@mics}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax -\ifthenelse{\boolean{@df@clear@\romannumeral\@colN}}{% -\expandafter\global\expandafter -\gdef\csname @dynamicframe@\romannumeral\@colN\endcsname{}}{}}} + \@colN=0\relax + \whiledo{\@colN<\c@maxdynamic}% + {% + \advance\@colN by 1\relax + \ifthenelse{\boolean{@df@clear@\romannumeral\@colN}}% + {% + \expandafter\global\expandafter + \gdef\csname @dynamicframe@\romannumeral\@colN\endcsname{}% + }% + {}% + }% +} \newcommand*{\@dodfparbox}[1]{% -\expandafter\let\expandafter -\@ff@parshape\csname @df@shape@\romannumeral#1\endcsname -\expandafter\@ff@getshape\@ff@parshape\relax -\ifcase\ff@shape -\expandafter\expandafter\expandafter -\parbox\csname @df@dim@\romannumeral#1\endcsname -{% -\setlength\parindent\sdfparindent -\csname\ff@style\endcsname{\ff@contents}}% -\or -\expandafter\expandafter\expandafter -\parbox\csname @df@dim@\romannumeral#1\endcsname -{% -\setlength\parindent\sdfparindent -\csname\ff@style\endcsname{{% -\let\oldpar=\par -\let\par=\ffpshpar -\@ff@setsecthead -\@ff@parshape -\ff@contents\oldpar}}}% -\or -\expandafter\expandafter\expandafter -\parbox\csname @df@dim@\romannumeral#1\endcsname -{% -\setlength\parindent\sdfparindent -\csname\ff@style\endcsname{{\@ff@disablesec\@ff@parshape -\ff@contents\par}}}% -\fi + \expandafter\let\expandafter + \@ff@parshape\csname @df@shape@\romannumeral#1\endcsname + \expandafter\@ff@getshape\@ff@parshape\relax + \ifcase\ff@shape + \expandafter\expandafter\expandafter + \parbox\csname @df@dim@\romannumeral#1\endcsname + {% + \setlength\parindent\sdfparindent + \csname\ff@style\endcsname{\ff@contents}% + }% + \or + \expandafter\expandafter\expandafter + \parbox\csname @df@dim@\romannumeral#1\endcsname + {% + \setlength\parindent\sdfparindent + \csname\ff@style\endcsname + {{% + \let\oldpar=\par + \let\par=\ffpshpar + \@ff@setsecthead + \@ff@parshape + \ff@contents\oldpar + }}% + }% + \or + \expandafter\expandafter\expandafter + \parbox\csname @df@dim@\romannumeral#1\endcsname + {% + \setlength\parindent\sdfparindent + \csname\ff@style\endcsname + {{% + \@ff@disablesec\@ff@parshape + \ff@contents\par + }}% + }% + \fi } \newcommand*{\@dodynamicbox}[1]{% -\edef\ff@frametype{% -\csname @df@frametype@\romannumeral#1\endcsname}% -\edef\ff@col{\csname @df@col@\romannumeral#1\endcsname}% -\edef\ff@txtcol{\csname @df@txtcol@\romannumeral#1\endcsname}% -\edef\ff@backcol{\csname @df@backcol@\romannumeral#1\endcsname}% -\edef\ff@style{\csname @df@style@\romannumeral#1\endcsname}% -\def\ff@contents{\csname @dynamicframe@\romannumeral#1\endcsname}% -\@df@setoffset{#1}% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname -\rotateframe{\csname @df@angle@\romannumeral#1\endcsname}{% -\ifthenelse{\boolean{dynamicframe\romannumeral#1}}{% -\@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}% -{\@dodfparbox{#1}}% -{\csname\ff@frametype\endcsname}% -}{% -\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}{% -\@dodfparbox{#1}}% -}}} + \edef\ff@frametype{% + \csname @df@frametype@\romannumeral#1\endcsname + }% + \edef\ff@col{\csname @df@col@\romannumeral#1\endcsname}% + \edef\ff@txtcol{\csname @df@txtcol@\romannumeral#1\endcsname}% + \edef\ff@backcol{\csname @df@backcol@\romannumeral#1\endcsname}% + \edef\ff@style{\csname @df@style@\romannumeral#1\endcsname}% + \def\ff@contents{\csname @dynamicframe@\romannumeral#1\endcsname}% + \@df@setoffset{#1}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname + \rotateframe{\csname @df@angle@\romannumeral#1\endcsname}% + {% + \ifthenelse{\boolean{dynamicframe\romannumeral#1}}% + {% + \@ff@fbox{\@ff@tmp@x}{\@ff@tmp@y}% + {\@dodfparbox{#1}}% + {\csname\ff@frametype\endcsname}% + }% + {% + \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% + {% + \@dodfparbox{#1}% + }% + }% + }% +} \newcommand*{\@dodynamicbbox}[1]{% -\edef\ff@col{}% -\@df@setoffset{#1}% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname -\@fr@meifdraft{% -\@ff@box{\@ff@tmp@x}{\@ff@tmp@y}{% -\expandafter\expandafter\expandafter -\parbox\csname @df@dim@\romannumeral#1\endcsname -{}}% -}{D:\number#1;\csname @df@id@\romannumeral#1\endcsname}} + \edef\ff@col{}% + \@df@setoffset{#1}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @df@dim@\romannumeral#1\endcsname + \@fr@meifdraft + {% + \@ff@box{\@ff@tmp@x}{\@ff@tmp@y}% + {% + \expandafter\expandafter\expandafter + \parbox\csname @df@dim@\romannumeral#1\endcsname + {}% + }% + }% + {D:\number#1;\csname @df@id@\romannumeral#1\endcsname}% +} \newcommand*{\@putdynamicbox}[1]{% -\@df@chckifthispg{#1}% -\if@notthiscol\else -\@killglue -\if@twoside -\ifodd\c@page -\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname -\@dodynamicbox{#1}\hss}\ignorespaces -\else -\expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname -\@dodynamicbox{#1}\hss}\ignorespaces -\fi -\else -\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname -\@dodynamicbox{#1}\hss}\ignorespaces -\fi -\fi} + \@df@chckifthispg{#1}% + \if@notthiscol + \else + \@killglue + \if@twoside + \ifodd\c@page + \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname + \@dodynamicbox{#1}\hss + }% + \ignorespaces + \else + \expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname + \@dodynamicbox{#1}\hss + }% + \ignorespaces + \fi + \else + \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname + \@dodynamicbox{#1}\hss + }% + \ignorespaces + \fi + \fi +} \newcommand*{\@putdynamicbbox}[1]{% -\@df@chckifthispg{#1}% -\if@notthiscol\else -\@killglue -\if@twoside -\ifodd\c@page -\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname -\@dodynamicbbox{#1}\hss}\ignorespaces -\else -\expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname -\@dodynamicbbox{#1}\hss}\ignorespaces -\fi -\else -\expandafter\raise\csname @df@\romannumeral#1@posy\endcsname -\hb@xt@\z@{% -\expandafter\kern \csname @df@\romannumeral#1@posx\endcsname -\@dodynamicbbox{#1}\hss}\ignorespaces -\fi -\fi} + \@df@chckifthispg{#1}% + \if@notthiscol + \else + \@killglue + \if@twoside + \ifodd\c@page + \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname + \@dodynamicbbox{#1}\hss + }% + \ignorespaces + \else + \expandafter\raise\csname @df@\romannumeral#1@eveny\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@evenx\endcsname + \@dodynamicbbox{#1}\hss + }% + \ignorespaces + \fi + \else + \expandafter\raise\csname @df@\romannumeral#1@posy\endcsname + \hb@xt@\z@ + {% + \expandafter\kern \csname @df@\romannumeral#1@posx\endcsname + \@dodynamicbbox{#1}\hss + }% + \ignorespaces + \fi + \fi +} \newcommand*{\@@doheader}{% -\setlength\@ff@tmp@y{\textheight}% -\addtolength{\@ff@tmp@y}{\headsep}% -\def\ff@col{}% -\def\ff@txtcol{}% -\def\ff@backcol{{none}}% -\@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothehead}}% + \setlength\@ff@tmp@y{\textheight}% + \addtolength{\@ff@tmp@y}{\headsep}% + \def\ff@col{}% + \def\ff@txtcol{}% + \def\ff@backcol{{none}}% + \@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothehead}}% } \newcommand*{\@@dofooter}{% -\setlength\@ff@tmp@y{-\footskip}% -\def\ff@col{}% -\def\ff@txtcol{}% -\def\ff@backcol{{none}}% -\@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothefoot}}% -} -\newcommand{\@s@tfr@mes}[1]{{\@picht\textheight -\setbox\@picbox\hb@xt@ \textwidth -\bgroup \hbox \bgroup #1\relax -\egroup -\hss \egroup -\ht\@picbox\@picht \dp\@picbox -\z@ \mbox{\box \@picbox}}} + \setlength\@ff@tmp@y{-\footskip}% + \def\ff@col{}% + \def\ff@txtcol{}% + \def\ff@backcol{{none}}% + \@ff@box{0pt}{\@ff@tmp@y}{\makebox[0pt][l]{\@dothefoot}}% +} +\newcommand{\@s@tfr@mes}[1]{% + {% + \@picht\textheight + \setbox\@picbox\hb@xt@ \textwidth + \bgroup + \hbox + \bgroup + #1\relax + \egroup + \hss + \egroup + \ht\@picbox\@picht + \dp\@picbox\z@ + \mbox{\box\@picbox}% + }% +} \newcommand*{\@ff@doallflowframes}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax -\@putcolbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \@putcolbox{\@colN}% + }% } \newcommand*{\@ff@doallflowframesbbox}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxflow}{\advance\@colN by 1\relax -\@putcolbbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxflow}% + {% + \advance\@colN by 1\relax + \@putcolbbox{\@colN}% + }% } \newcommand*{\@ff@doallstatics}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax -\@putstaticbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxstatic}% + {% + \advance\@colN by 1\relax + \@putstaticbox{\@colN}% + }% } \newcommand*{\@ff@doallstaticsbbox}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxstatic}{\advance\@colN by 1\relax -\@putstaticbbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxstatic}% + {% + \advance\@colN by 1\relax + \@putstaticbbox{\@colN}% + }% } \newcommand*{\@ff@doalldynamics}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax -\@putdynamicbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxdynamic}% + {% + \advance\@colN by 1\relax + \@putdynamicbox{\@colN}% + }% } \newcommand*{\@ff@doalldynamicsbbox}{% -\@colN=0\relax -\whiledo{\@colN<\c@maxdynamic}{\advance\@colN by 1\relax -\@putdynamicbbox{\@colN}}% + \@colN=0\relax + \whiledo{\@colN<\c@maxdynamic}% + {% + \advance\@colN by 1\relax + \@putdynamicbbox{\@colN}% + }% } \newcommand*{\@ff@dotypeblock}{% -\makebox[0pt][l]{\@fr@meifdraft[\setffdrafttypeblockcolor]{% -\vbox to \textheight{\hbox to \textwidth{}}}{}}} + \makebox[0pt][l]% + {% + \@fr@meifdraft[\setffdrafttypeblockcolor]% + {% + \vbox to \textheight{\hbox to \textwidth{}}% + }% + {}% + }% +} \newlength\ffevenoffset \newcommand*{\@ff@do@allframes}{% -\ffevenoffset=0pt\relax -\if@twoside - \ifodd\c@page - \else - \ffevenoffset=-\oddsidemargin\relax - \advance\ffevenoffset by \evensidemargin\relax - \kern\ffevenoffset\relax + \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 + }% + }% +} \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 + \c@curpg=\@ff@pages@countreg + \@g@tnextcol{\@nxtcol}% + \if@ff@nwpg + \global\@firstcolumntrue + \@setcolbox\c@thisframe + \if@specialpage + \global\@specialpagefalse + \@nameuse{ps@\@specialstyle}\relax + \fi + \if@twoside + \ifodd\count\z@ + \let\@thehead\@oddhead + \let\@thefoot\@oddfoot + \else + \let\@thehead\@evenhead + \let\@thefoot\@evenfoot + \fi + \else \let\@thehead\@oddhead \let\@thefoot\@oddfoot - \else - \let\@thehead\@evenhead - \let\@thefoot\@evenfoot \fi + \@begindvi + \@dodynamicthehead\@dodynamicthefoot + \vbadness=\@M + \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% + \@combinedblfloats + \@outputpage + \advance\c@curpg by -\@ff@pages@countreg\relax + \whiledo{\c@curpg>0}% + {% + \advance\c@curpg by -1\relax + \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% + \@outputpage + } + \begingroup + \@dblfloatplacement + \@startdblcolumn + \@whilesw \if@fcolmade \fi + {\@outputpage \@startdblcolumn }% + \endgroup + \@resetst@tics + \@resetdyn@mics \else - \let\@thehead\@oddhead - \let\@thefoot\@oddfoot - \fi - \@begindvi - \@dodynamicthehead\@dodynamicthefoot - \vbadness=\@M - \setbox\@outputbox\vbox{\hbox to \textwidth{\@ff@do@allframes}}% - \@combinedblfloats - \@outputpage -\advance\c@curpg by -\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 + \global\@firstcolumnfalse + \@setcolbox\c@thisframe + \fi + \global\c@thisframe=\@nxtcol + \@setcol{\c@thisframe}\relax + \global\@colht\vsize } \def\@dblfloatplacement{% \global\@dbltopnum\c@dbltopnumber \global\@dbltoproom\dbltopfraction\@colht\@textmin \@colht\advance\@textmin -\@dbltoproom \@fpmin\dblfloatpagefraction\vsize - \@fptop \@dblfptop \@fpsep \@dblfpsep \@fpbot \@dblfpbot} + \@fptop \@dblfptop \@fpsep \@dblfpsep \@fpbot \@dblfpbot +} \newenvironment{statictable}{\def\@captype{table}}{} \newenvironment{staticfigure}{\def\@captype{figure}}{} \newif\ifffvadjust \ffvadjusttrue \renewcommand*{\onecolumn}{\@onecolumn} \newcommand*{\@onecolumn}[1][all]{% -\@onecolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}} + \@onecolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}% +} \newlength\columnheight \newcommand*{\onecolumninarea}{\@onecolumninarea} \@onlypreamble{\onecolumninarea} \newcommand*{\@onecolumninarea}[5][all]{% -\setlength{\columnheight}{#3}% -\ifffvadjust\adjustheight{\columnheight}\fi% -\@n@wflowframe[#1]{#2}{\columnheight}{#4}{#5}} + \setlength{\columnheight}{#3}% + \ifffvadjust + \adjustheight{\columnheight}% + \fi + \@n@wflowframe[#1]{#2}{\columnheight}{#4}{#5}% +} \renewcommand*{\twocolumn}{\@twocolumn} \newcommand*{\@twocolumn}[1][all]{% -\@twocolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}} + \@twocolumninarea[#1]{\textwidth}{\textheight}{0pt}{0pt}% +} \newcommand*{\twocolumninarea}{\@twocolumninarea} \@onlypreamble{\twocolumninarea} \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 @@ -3038,27 +5904,36 @@ adding new one}% \fi } \newcommand*{\Ncolumn}[2][all]{% -\Ncolumninarea[#1]{#2}{\textwidth}{\textheight}{0pt}{0pt}} + \Ncolumninarea[#1]{#2}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\Ncolumn} \newcommand*{\Ncolumninarea}[6][all]{% -\ifnum#2>2\relax - \@Ncolumninarea[#1]{#2}{#3}{#4}{#5}{#6}% -\else - \ifcase#2\relax - \PackageError{flowfram}{% - You have requested 0 flowframes!}{% - It does not make much sense to ask to create 0 flow frames}% - \or - \onecolumninarea[#1]{#3}{#4}{#5}{#6}% - \or - \twocolumninarea[#1]{#3}{#4}{#5}{#6}% + \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} @@ -3093,48 +5968,73 @@ adding new one}% \newlength{\vcolumnsep} \setlength{\vcolumnsep}{\columnsep} \newcommand*{\onecolumntop}[3][all]{% -\onecolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}} + \onecolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\onecolumntop} \newcommand*{\onecolumnStop}[2][all]{% -\onecolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}} + \onecolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}% +} \newcommand*{\onecolumnDtop}[2][all]{% -\onecolumntopinarea[#1]{dynamic}{#2}{\textwidth}{\textheight}{0pt}{0pt}} + \onecolumntopinarea[#1]{dynamic}{#2}{\textwidth}{\textheight}{0pt}{0pt}% +} \newcommand*{\newframe}[6][all]{% -\ifthenelse{\equal{#2}{flow}}{% -\@n@wflowframe[#1]{#3}{#4}{#5}{#6}% -}{% -\ifthenelse{\equal{#2}{dynamic}}{% -\@n@wdynamicframe[#1]{#3}{#4}{#5}{#6}}{% -\ifthenelse{\equal{#2}{static}}{% -\@n@wstaticframe[#1]{#3}{#4}{#5}{#6}}{% -\PackageError{flowfram}{Unknown frame type '#2'}{% -Available frame types are: 'flow', 'static' and 'dynamic'}}}}} + \ifthenelse{\equal{#2}{flow}}% + {% + \@n@wflowframe[#1]{#3}{#4}{#5}{#6}% + }% + {% + \ifthenelse{\equal{#2}{dynamic}}% + {% + \@n@wdynamicframe[#1]{#3}{#4}{#5}{#6}% + }% + {% + \ifthenelse{\equal{#2}{static}}% + {% + \@n@wstaticframe[#1]{#3}{#4}{#5}{#6}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#2'}% + {% + Available frame types are: 'flow', 'static' and 'dynamic'% + }% + }% + }% + }% +} \newlength\@ff@staticH \newcommand*{\onecolumntopinarea}[7][all]{% -\setlength{\@ff@staticH}{#3}% -\setlength{\@ff@tmp@y}{#5}% -\addtolength{\@ff@tmp@y}{-\@ff@staticH}% -\setlength{\columnheight}{\@ff@tmp@y}% -\addtolength{\columnheight}{-\vcolumnsep}% -\ifffvadjust\adjustheight{\columnheight}\fi% -\addtolength{\@ff@tmp@y}{#7}% -\newframe[#1]{#2}{#4}{\@ff@staticH}{#6}{\@ff@tmp@y}% -\@n@wflowframe[#1]{#4}{\columnheight}{#6}{#7}% + \setlength{\@ff@staticH}{#3}% + \setlength{\@ff@tmp@y}{#5}% + \addtolength{\@ff@tmp@y}{-\@ff@staticH}% + \setlength{\columnheight}{\@ff@tmp@y}% + \addtolength{\columnheight}{-\vcolumnsep}% + \ifffvadjust + \adjustheight{\columnheight}% + \fi + \addtolength{\@ff@tmp@y}{#7}% + \newframe[#1]{#2}{#4}{\@ff@staticH}{#6}{\@ff@tmp@y}% + \@n@wflowframe[#1]{#4}{\columnheight}{#6}{#7}% } \@onlypreamble{\onecolumntopinarea} \newcommand*{\onecolumnStopinarea}[6][all]{% -\onecolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}} + \onecolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}% +} \newcommand*{\onecolumnDtopinarea}[6][all]{% -\onecolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}} + \onecolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}% +} \newcommand*{\twocolumntop}[3][all]{% -\twocolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}} + \twocolumntopinarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\twocolumntop} \newcommand*{\twocolumnStop}[2][all]{% -\@twocolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}} + \@twocolumntopinarea[#1]{static}{#2}{\textwidth}{\textheight}{0pt}{0pt}% +} \newcommand*{\twocolumnDtop}[2][all]{% -\twocolumntop[#1]{dynamic}{#2}} + \twocolumntop[#1]{dynamic}{#2}% +} \newcommand*{\twocolumntopinarea}{\@twocolumntopinarea} \newcommand*{\@twocolumntopinarea}[7][all]{% \setlength{\@ff@staticH}{#3}% @@ -3168,35 +6068,48 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} } \@onlypreamble{\twocolumntopinarea} \newcommand*{\twocolumnStopinarea}[6][all]{% -\twocolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}} + \twocolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}% +} \newcommand*{\twocolumnDtopinarea}[6][all]{% -\twocolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}} + \twocolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}% +} \newcommand*{\Ncolumntop}[4][all]{% -\Ncolumntopinarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}} + \Ncolumntopinarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\Ncolumntop} \newcommand*{\NcolumnStop}[3][all]{% -\Ncolumntop[#1]{static}{#2}{#3}} + \Ncolumntop[#1]{static}{#2}{#3}% +} \newcommand*{\NcolumnDtop}[3][all]{% -\Ncolumntop[#1]{dynamic}{#2}{#3}} + \Ncolumntop[#1]{dynamic}{#2}{#3}% +} \newcommand*{\Ncolumntopinarea}[8][all]{% -\ifnum#3>2\relax - \@Ncolumntopinarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}% -\else - \ifcase#3\relax - \PackageError{flowfram}{% - You have requested 0 flowframes!}{% - It does not make much sense to ask to create 0 flow frames} - \or - \onecolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% - \or - \twocolumntopinarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% + \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} \newcommand*{\@Ncolumntopinarea}[8][all]{% @@ -3207,7 +6120,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} \addtolength{\@ff@tmp@y}{#8}% \newframe[#1]{#2}{#5}{\@ff@staticH}{#7}{\@ff@tmp@y}% \addtolength{\columnheight}{-\vcolumnsep}% - \ifffvadjust\adjustheight{\columnheight}\fi% + \ifffvadjust + \adjustheight{\columnheight}% + \fi \@colN=#3\relax \advance\@colN by -1\relax \setlength{\columnwidth}{#5}% @@ -3234,22 +6149,29 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} \repeat } \newcommand*{\NcolumnStopinarea}[7][all]{% -\Ncolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}{#7}} + \Ncolumntopinarea[#1]{static}{#2}{#3}{#4}{#5}{#6}{#7}% +} \newcommand*{\NcolumnDtopinarea}[7][all]{% -\Ncolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}{#7}} + \Ncolumntopinarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}{#7}% +} \newcommand*{\onecolumnbottom}[3][all]{% -\onecolumnbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}} + \onecolumnbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\onecolumnbottom} \newcommand*{\onecolumnSbottom}[2][all]{% -\onecolumnbottom[#1]{static}{#2}} + \onecolumnbottom[#1]{static}{#2}% +} \newcommand*{\onecolumnDbottom}[2][all]{% -\onecolumnbottom[#1]{dynamic}{#2}} + \onecolumnbottom[#1]{dynamic}{#2}% +} \newcommand*{\onecolumnbottominarea}[7][all]{% \setlength{\@ff@staticH}{#3}% \setlength{\columnheight}{#5}% \addtolength{\columnheight}{-\@ff@staticH}% \addtolength{\columnheight}{-\vcolumnsep}% - \ifffvadjust\adjustheight{\columnheight}\fi% + \ifffvadjust + \adjustheight{\columnheight}% + \fi \setlength{\@ff@tmp@y}{#5}% \addtolength{\@ff@tmp@y}{-\columnheight}% \addtolength{\@ff@tmp@y}{#7}% @@ -3258,16 +6180,21 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} } \@onlypreamble{\onecolumnbottominarea} \newcommand*{\onecolumnSbottominarea}[6][all]{% -\onecolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}} + \onecolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}% +} \newcommand*{\onecolumnDbottominarea}[6][all]{% -\onecolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}} + \onecolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}% +} \newcommand*{\twocolumnbottom}[3][all]{% -\twocolumnSbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}} + \twocolumnSbottominarea[#1]{#2}{#3}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\twocolumnbottom} \newcommand*{\twocolumnSbottom}[2][all]{% -\twocolumnbottom[#1]{static}{#2}} + \twocolumnbottom[#1]{static}{#2}% +} \newcommand*{\twocolumnDbottom}[2][all]{% -\twocolumnbottom[#1]{dynamic}{#2}} + \twocolumnbottom[#1]{dynamic}{#2}% +} \newcommand*{\twocolumnbottominarea}[7][all]{% \setlength{\@ff@staticW}{#4}% \setlength{\@ff@staticH}{#3}% @@ -3304,35 +6231,44 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} } \@onlypreamble{\twocolumnbottominarea} \newcommand*{\twocolumnSbottominarea}[6][all]{% -\twocolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}} + \twocolumnbottominarea[#1]{static}{#2}{#3}{#4}{#5}{#6}% +} \newcommand*{\twocolumnDbottominarea}[6][all]{% -\twocolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}} + \twocolumnbottominarea[#1]{dynamic}{#2}{#3}{#4}{#5}{#6}% +} \newcommand*{\Ncolumnbottom}[4][all]{% -\Ncolumnbottominarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}} + \Ncolumnbottominarea[#1]{#2}{#3}{#4}{\textwidth}{\textheight}{0pt}{0pt}% +} \@onlypreamble{\Ncolumnbottom} \newcommand*{\NcolumnSbottom}[3][all]{% -\Ncolumnbottom[#1]{static}{#2}{#3}} + \Ncolumnbottom[#1]{static}{#2}{#3}% +} \newcommand*{\NcolumnDbottom}[3][all]{% -\Ncolumnbottom[#1]{dynamic}{#2}{#3}} + \Ncolumnbottom[#1]{dynamic}{#2}{#3}% +} \newcommand*{\Ncolumnbottominarea}[8][all]{% -\ifnum#3>2\relax - \@Ncolumnbottominarea[#1]{#2}{#3}{#4}{#5}{#6}{#7}{#8}% -\else - \ifcase#3\relax - \PackageError{flowfram}{% - You have requested 0 flowframes!}{% - It does not make much sense to ask to create 0 flow frames} - \or - \onecolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% - \or - \twocolumnbottominarea[#1]{#2}{#4}{#5}{#6}{#7}{#8}% + \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} \newcommand*{\@NcolumnSbottominarea}[8][all]{% @@ -3340,7 +6276,9 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} \setlength{\columnheight}{#6}% \addtolength{\columnheight}{-\@ff@staticH}% \addtolength{\columnheight}{-\vcolumnsep}% - \ifffvadjust\adjustheight{\columnheight}\fi + \ifffvadjust + \adjustheight{\columnheight}% + \fi \newframe[#1]{#2}{#5}{\@ff@staticH}{#7}{#8}% \setlength{\@ff@tmp@y}{#6}% \addtolength{\@ff@tmp@y}{-\columnheight}% @@ -3372,259 +6310,311 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} \repeat } \newcommand*{\NcolumnSbottominarea}[1][all]{% -\Ncolumnbottominarea[#1]{static}} + \Ncolumnbottominarea[#1]{static}% +} \newcommand*{\NcolumnDbottominarea}[1][all]{% -\Ncolumnbottominarea[#1]{dynamic}} + \Ncolumnbottominarea[#1]{dynamic}% +} \newcount\@ff@adjh \newcommand*{\adjustheight}[1]{% -\@ff@adjh=#1\relax -\divide\@ff@adjh by \baselineskip\relax -#1=\baselineskip\relax -\multiply#1 by \@ff@adjh\relax + \@ff@adjh=#1\relax + \divide\@ff@adjh by \baselineskip\relax + #1=\baselineskip\relax + \multiply#1 by \@ff@adjh\relax } \newcommand*{\adjustcolsep}{% -\multiply\columnsep by 2\relax -\addtolength{\columnsep}{\marginparwidth}} + \multiply\columnsep by 2\relax + \addtolength{\columnsep}{\marginparwidth}% +} \newlength\@ff@staticW \newcommand*{\vtwotone}[1][all]{% -\def\ff@pages{#1}\@vtwotone} + \def\ff@pages{#1}% + \@vtwotone +} \newcommand*{\@vtwotone}[1][0pt]{\@@vtwotonebottom{#1}{\paperheight}} \newcommand*{\@@vtwotonebottom}[8]{% -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@x}{#1}% -\addtolength{\@ff@tmp@x@even}{#1}% -\@nextvband{\ff@pages}{#2}{#3}{#4}{#5}% -\@nextvband{\ff@pages}{#2}{#6}{#7}{#8}% + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@x}{#1}% + \addtolength{\@ff@tmp@x@even}{#1}% + \@nextvband{\ff@pages}{#2}{#3}{#4}{#5}% + \@nextvband{\ff@pages}{#2}{#6}{#7}{#8}% } \@onlypreamble{\vtwotone} \newcommand*{\vtwotonebottom}[1][all]{% -\def\ff@pages{#1}\@vtwotonebottom} + \def\ff@pages{#1}% + \@vtwotonebottom +} \@onlypreamble{\vtwotonebottom} \newcommand*{\@vtwotonebottom}[2][0pt]{\@@vtwotonebottom{#1}{#2}} \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}% } \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}% } \newcount\@thisstrip \newcommand*{\vNtone}[1][all]{% -\def\ff@pages{#1}\@vNtone} + \def\ff@pages{#1}% + \@vNtone +} \newcommand*{\@vNtone}[2][0pt]{% -\@@vNtone{#1}{#2}{\paperheight}} + \@@vNtone{#1}{#2}{\paperheight}% +} \newcommand*{\@@vNtone}[3]{% -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@x}{#1}% -\addtolength{\@ff@tmp@x@even}{#1}% -\@thisstrip=#2\relax -\setlength{\@ff@staticH}{#3}% -\@nextvNband% + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@x}{#1}% + \addtolength{\@ff@tmp@x@even}{#1}% + \@thisstrip=#2\relax + \setlength{\@ff@staticH}{#3}% + \@nextvNband } \newcommand*{\@nextvNband}{% -\ifnum\@thisstrip>0\relax - \let\flf@next\@@nextvNband -\else - \let\flf@next\relax -\fi -\advance\@thisstrip by -1\relax -\flf@next} + \ifnum\@thisstrip>0\relax + \let\flf@next\@@nextvNband + \else + \let\flf@next\relax + \fi + \advance\@thisstrip by -1\relax + \flf@next +} \newcommand*{\@@nextvNband}[3]{% -\@nextvband{\ff@pages}{\@ff@staticH}{#1}{#2}{#3}\@nextvNband} + \@nextvband{\ff@pages}{\@ff@staticH}{#1}{#2}{#3}% + \@nextvNband +} \@onlypreamble{\vNtone} \newcommand*{\vNtonebottom}[1][all]{% -\def\ff@pages{#1}\@vNtonebottom} + \def\ff@pages{#1}% + \@vNtonebottom +} \@onlypreamble{\vNtonebottom} \newcommand*{\@vNtonebottom}[3][0pt]{% -\@@vNtone{#1}{#2}{#3}} + \@@vNtone{#1}{#2}{#3}% +} \newcommand*{\vNtonetop}[1][all]{% -\def\ff@pages{#1}\@vNtonetop} + \def\ff@pages{#1}% + \@vNtonetop +} \@onlypreamble{\vNtonetop} \newcommand*{\@vNtonetop}[3][0pt]{% -\@@vNtonetop{#1}{#2}{#3}} + \@@vNtonetop{#1}{#2}{#3}% +} \newcommand*{\@@vNtonetop}[3]{% -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computetopedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@y}{-#3}% -\addtolength{\@ff@tmp@x}{#1}% -\addtolength{\@ff@tmp@x@even}{#1}% -\@thisstrip=#2\relax -\setlength{\@ff@staticH}{#3}% -\@nextvNband% + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computetopedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@y}{-#3}% + \addtolength{\@ff@tmp@x}{#1}% + \addtolength{\@ff@tmp@x@even}{#1}% + \@thisstrip=#2\relax + \setlength{\@ff@staticH}{#3}% + \@nextvNband% } \newcommand*{\htwotone}[1][all]{% -\def\ff@pages{#1}\@htwotone} + \def\ff@pages{#1}% + \@htwotone +} \newcommand*{\@htwotone}[1][0pt]{\@@htwotoneleft{#1}{\paperwidth}} \newcommand*{\@@htwotoneleft}[8]{% -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@y}{#1}% -\@nexthband{\ff@pages}{#2}{#3}{#4}{#5}% -\@nexthband{\ff@pages}{#2}{#6}{#7}{#8}% + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@y}{#1}% + \@nexthband{\ff@pages}{#2}{#3}{#4}{#5}% + \@nexthband{\ff@pages}{#2}{#6}{#7}{#8}% } \@onlypreamble{\htwotone} \newcommand*{\htwotoneleft}[1][all]{% -\def\ff@pages{#1}\@htwotoneleft} + \def\ff@pages{#1}% + \@htwotoneleft +} \@onlypreamble{\htwotoneleft} \newcommand*{\@htwotoneleft}[2][0pt]{\@@htwotoneleft{#1}{#2}} \newcommand*{\htwotoneright}[1][all]{% -\def\ff@pages{#1}\@htwotoneright} + \def\ff@pages{#1}% + \@htwotoneright +} \@onlypreamble{\htwotoneright} \newcommand*{\@htwotoneright}[2][0pt]{\@@htwotoneright{#1}{#2}} \newcommand*{\@@htwotoneright}[8]{% -\computerightedgeodd{\@ff@tmp@x}% -\if@twoside - \computerightedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@y}{#1}% -\addtolength{\@ff@tmp@x}{-#2}% -\addtolength{\@ff@tmp@x@even}{-#2}% -\@nexthband{\ff@pages}{#2}{#3}{#4}{#5}% -\@nexthband{\ff@pages}{#2}{#6}{#7}{#8}% + \computerightedgeodd{\@ff@tmp@x}% + \if@twoside + \computerightedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@y}{#1}% + \addtolength{\@ff@tmp@x}{-#2}% + \addtolength{\@ff@tmp@x@even}{-#2}% + \@nexthband{\ff@pages}{#2}{#3}{#4}{#5}% + \@nexthband{\ff@pages}{#2}{#6}{#7}{#8}% } \newcommand*{\hNtone}[1][all]{% -\def\ff@pages{#1}\@hNtone} + \def\ff@pages{#1}% + \@hNtone +} \@onlypreamble{\hNtone} \newcommand*{\@hNtone}[2][0pt]{% -\@@hNtone{#1}{#2}{\paperwidth}} + \@@hNtone{#1}{#2}{\paperwidth}% +} \newcommand*{\@@hNtone}[3]{% -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@y}{#1}% -\@thisstrip=#2\relax -\setlength{\@ff@staticW}{#3}% -\@nexthNband% + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@y}{#1}% + \@thisstrip=#2\relax + \setlength{\@ff@staticW}{#3}% + \@nexthNband } \newcommand*{\hNtoneleft}[1][all]{% -\def\ff@pages{#1}\@hNtoneleft} + \def\ff@pages{#1}% + \@hNtoneleft +} \@onlypreamble{\hNtoneleft} \newcommand*{\@hNtoneleft}[3][0pt]{% -\@@hNtone{#1}{#2}{#3}} + \@@hNtone{#1}{#2}{#3}% +} \newcommand*{\hNtoneright}[1][all]{% -\def\ff@pages{#1}\@hNtoneright} + \def\ff@pages{#1}% + \@hNtoneright +} \@onlypreamble{\hNtoneright} \newcommand*{\@hNtoneright}[3][0pt]{% -\@@hNtoneright{#1}{#2}{#3}} + \@@hNtoneright{#1}{#2}{#3}% +} \newcommand*{\@@hNtoneright}[3]{% -\computerightedgeodd{\@ff@tmp@x}% -\if@twoside - \computerightedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\addtolength{\@ff@tmp@y}{#1}% -\addtolength{\@ff@tmp@x}{-#3}% -\addtolength{\@ff@tmp@x@even}{-#3}% -\@thisstrip=#2\relax -\setlength{\@ff@staticW}{#3}% -\@nexthNband% + \computerightedgeodd{\@ff@tmp@x}% + \if@twoside + \computerightedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \addtolength{\@ff@tmp@y}{#1}% + \addtolength{\@ff@tmp@x}{-#3}% + \addtolength{\@ff@tmp@x@even}{-#3}% + \@thisstrip=#2\relax + \setlength{\@ff@staticW}{#3}% + \@nexthNband } \newcommand*{\@nexthband}[5]{% -\setlength{\@ff@staticH}{#3}% -\ifthenelse{\equal{#5}{}}{% -\newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}}% -{\newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}[#5]}% -\expandafter\global\expandafter -\setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname{% -\@ff@tmp@x@even}% -\@setframecol#4\end{\c@maxstatic}{backcol}{sf}% -\addtolength{\@ff@tmp@y}{\@ff@staticH}% + \setlength{\@ff@staticH}{#3}% + \ifthenelse{\equal{#5}{}}% + {% + \newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}% + }% + {% + \newstaticframe[#1]{#2}{\@ff@staticH}{\@ff@tmp@x}{\@ff@tmp@y}[#5]% + }% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname + {\@ff@tmp@x@even}% + \@setframecol#4\end{\c@maxstatic}{backcol}{sf}% + \addtolength{\@ff@tmp@y}{\@ff@staticH}% } \newcommand*{\@nexthNband}{% -\ifnum\@thisstrip>0\relax - \let\flf@next\@@nexthNband% -\else - \let\flf@next\relax% -\fi -\advance\@thisstrip by -1\relax -\flf@next} + \ifnum\@thisstrip>0\relax + \let\flf@next\@@nexthNband + \else + \let\flf@next\relax + \fi + \advance\@thisstrip by -1\relax + \flf@next +} \newcommand*{\@@nexthNband}[3]{% -\@nexthband{\ff@pages}{\@ff@staticW}{#1}{#2}{#3}\@nexthNband} + \@nexthband{\ff@pages}{\@ff@staticW}{#1}{#2}{#3}% + \@nexthNband +} \newcommand*{\makebackgroundframe}[1][all]{% -\ifnum\c@maxstatic>0\relax - \PackageWarning{flowfram}{Background frame is not - first static frame to be defined. All previously defined - static frames may be obscured.}% -\fi -\computeleftedgeodd{\@ff@tmp@x}% -\if@twoside - \computeleftedgeeven{\@ff@tmp@x@even}% -\else - \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% -\fi -\computebottomedge{\@ff@tmp@y}% -\newstaticframe[#1]{\paperwidth}{\paperheight}{\@ff@tmp@x}% -{\@ff@tmp@y}% -\expandafter\global\expandafter -\setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname -{\@ff@tmp@x@even}} + \ifnum\c@maxstatic>0\relax + \PackageWarning{flowfram}% + {% + Background frame is not first static frame to be + defined. All previously defined static frames may be + obscured.% + }% + \fi + \computeleftedgeodd{\@ff@tmp@x}% + \if@twoside + \computeleftedgeeven{\@ff@tmp@x@even}% + \else + \setlength{\@ff@tmp@x@even}{\@ff@tmp@x}% + \fi + \computebottomedge{\@ff@tmp@y}% + \newstaticframe[#1]{\paperwidth}{\paperheight}{\@ff@tmp@x}% + {\@ff@tmp@y}% + \expandafter\global\expandafter + \setlength\csname @sf@\romannumeral\c@maxstatic @evenx\endcsname + {\@ff@tmp@x@even}% +} \newlength\ffcolumnseprule \setlength{\ffcolumnseprule}{2pt} \newcommand*{\ffruledeclarations}{} \newcommand*{\insertvrule}{\@ifstar\@sinsertvrule\@insertvrule} \newcommand*{\@insertvrule}[1][0pt]{% -\@ifnextchar[{\@@insertvrule[#1]}{\@@insertvrule[#1][0pt]}} + \@ifnextchar[{\@@insertvrule[#1]}{\@@insertvrule[#1][0pt]}% +} \newlength\@ff@left@x \newlength\@ff@left@y \newlength\@ff@left@evenx @@ -3632,592 +6622,908 @@ Available frame types are: 'flow', 'static' and 'dynamic'}}}}} \newlength\@ff@left@width \newlength\@ff@left@height \def\@@insertvrule[#1][#2]#3#4#5#6{% -\ifthenelse{\equal{#3}{flow}}{% -\def\@ff@type@i{1}}{\ifthenelse{\equal{#3}{static}}{% -\def\@ff@type@i{2}}{\ifthenelse{\equal{#3}{dynamic}}{% -\def\@ff@type@i{3}}{\PackageError{flowfram}{Unknown frame -type '#3'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\ifthenelse{\equal{#5}{flow}}{% -\def\@ff@type@ii{1}}{\ifthenelse{\equal{#5}{static}}{% -\def\@ff@type@ii{2}}{\ifthenelse{\equal{#5}{dynamic}}{% -\def\@ff@type@ii{3}}{\PackageError{flowfram}{Unknown frame -type '#5'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\@@insert@vrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}% + \ifthenelse{\equal{#3}{flow}}% + {% + \def\@ff@type@i{1}% + }% + {% + \ifthenelse{\equal{#3}{static}}% + {% + \def\@ff@type@i{2}% + }% + {% + \ifthenelse{\equal{#3}{dynamic}}% + {% + \def\@ff@type@i{3}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#3'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \ifthenelse{\equal{#5}{flow}}% + {% + \def\@ff@type@ii{1}% + }% + {% + \ifthenelse{\equal{#5}{static}}% + {% + \def\@ff@type@ii{2}% + }% + {% + \ifthenelse{\equal{#5}{dynamic}}% + {% + \def\@ff@type@ii{3}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#5'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \@@insert@vrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}% } \newcommand*{\@@insert@vrule}[6]{% -\@ff@getdim{#3}{#4}% -\setlength{\@ff@left@x}{\ffareax}% -\setlength{\@ff@left@y}{\ffareay}% -\setlength{\@ff@left@width}{\ffareawidth}% -\setlength{\@ff@left@height}{\ffareaheight}% -\@ff@getdim{#5}{#6}% -\ifnum\@ff@left@x>\ffareax\relax - \@ff@swaplen{\@ff@left@x}{\ffareax}% - \@ff@swaplen{\@ff@left@y}{\ffareax}% - \@ff@swaplen{\@ff@left@evenx}{\ffareaevenx}% - \@ff@swaplen{\@ff@left@eveny}{\ffareaevenx}% - \@ff@swaplen{\@ff@left@width}{\ffareawidth}% - \@ff@swaplen{\@ff@left@height}{\ffareaheight}% -\fi -\setlength{\@ff@tmp@x}{\@ff@left@x} -\addtolength{\@ff@tmp@x}{\@ff@left@width}% -\setlength{\@ff@staticW}{\ffareax}% -\addtolength{\@ff@staticW}{-\@ff@tmp@x}% -\setlength{\@ff@staticH}{\@ff@left@y}% -\addtolength{\@ff@staticH}{\@ff@left@height}% -\setlength{\@ff@tmp@y}{\ffareay}% -\addtolength{\@ff@tmp@y}{\ffareaheight}% -\ifnum\@ff@tmp@y>\@ff@staticH - \setlength{\@ff@staticH}{\@ff@tmp@y}% -\fi -\ifnum\@ff@left@y<\ffareay\relax - \setlength{\@ff@tmp@y}{\@ff@left@y}% -\else + \@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@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@y}{\ffareaheight}% + \ifnum\@ff@tmp@y>\@ff@staticH + \setlength{\@ff@staticH}{\@ff@tmp@y}% + \fi + \ifnum\@ff@left@y<\ffareay\relax + \setlength{\@ff@tmp@y}{\@ff@left@y}% + \else + \setlength{\@ff@tmp@y}{\ffareay}% + \fi + \addtolength{\@ff@staticH}{-\@ff@tmp@y}% + \newstaticframe{\@ff@staticW}{\@ff@staticH}% + {\@ff@tmp@x}{\@ff@tmp@y}% + \addtolength{\@ff@staticH}{#1}% + \addtolength{\@ff@staticH}{#2}% + \setstaticcontents{\c@maxstatic}{% + \ffruledeclarations + \ffvrule{#2}{\ffcolumnseprule}{\@ff@staticH}}% + \ifcase#3\relax + \or \edef\@ff@pages{\csname @ff@pages@\romannumeral#4\endcsname}% + \or \edef\@ff@pages{\csname @sf@pages@\romannumeral#4\endcsname}% + \or \edef\@ff@pages{\csname @df@pages@\romannumeral#4\endcsname}% + \fi + \setstaticframe{\c@maxstatic}{pages=\@ff@pages}% + \addtolength{\@ff@tmp@x}{\@ff@left@evenx}% + \addtolength{\@ff@tmp@x}{-\@ff@left@x}% + \addtolength{\@ff@tmp@y}{\@ff@left@eveny}% + \addtolength{\@ff@tmp@y}{-\@ff@left@y}% + \setstaticframe{\c@maxstatic}{evenx=\@ff@tmp@x,eveny=\@ff@tmp@y}% } \newcommand*{\ffvrule}[3]{% -\hfill \rule[-#1]{#2}{#3}\hfill\mbox{}} + \hfill \rule[-#1]{#2}{#3}\hfill\mbox{}% +} \newcommand*{\@sinsertvrule}[1][0pt]{% -\@ifnextchar[{\@@sinsertvrule[#1]}{\@@sinsertvrule[#1][0pt]}} + \@ifnextchar[{\@@sinsertvrule[#1]}{\@@sinsertvrule[#1][0pt]}% +} \def\@@sinsertvrule[#1][#2]#3#4#5#6{% -\ifthenelse{\equal{#3}{flow}}{% -\def\@ff@type@i{1}\@flowframeid{#4}\@ff@tmpN=\ff@id}{% -\ifthenelse{\equal{#3}{static}}{% -\def\@ff@type@i{2}\@staticframeid{#4}\@ff@tmpN=\ff@id}{% -\ifthenelse{\equal{#3}{dynamic}}{% -\def\@ff@type@i{3}\@dynamicframeid{#4}\@ff@tmpN=\ff@id}{% -\PackageError{flowfram}{Unknown frame -type '#3'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\ifthenelse{\equal{#5}{flow}}{% -\def\@ff@type@ii{1}\@flowframeid{#6}}{% -\ifthenelse{\equal{#5}{static}}{% -\def\@ff@type@ii{2}\@staticframeid{#6}}{% -\ifthenelse{\equal{#5}{dynamic}}{% -\def\@ff@type@ii{3}\@dynamicframeid{#6}}{% -\PackageError{flowfram}{Unknown frame -type '#5'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\@@insert@vrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}% -{\@ff@type@ii}{\ff@id}% + \ifthenelse{\equal{#3}{flow}}% + {% + \def\@ff@type@i{1}% + \@flowframeid{#4}% + \@ff@tmpN=\ff@id + }% + {% + \ifthenelse{\equal{#3}{static}}% + {% + \def\@ff@type@i{2}\@staticframeid{#4}\@ff@tmpN=\ff@id + }% + {% + \ifthenelse{\equal{#3}{dynamic}}% + {% + \def\@ff@type@i{3}% + \@dynamicframeid{#4}% + \@ff@tmpN=\ff@id + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#3'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \ifthenelse{\equal{#5}{flow}}% + {% + \def\@ff@type@ii{1}\@flowframeid{#6}% + }% + {% + \ifthenelse{\equal{#5}{static}}% + {% + \def\@ff@type@ii{2}% + \@staticframeid{#6}% + }% + {% + \ifthenelse{\equal{#5}{dynamic}}% + {% + \def\@ff@type@ii{3}% + \@dynamicframeid{#6}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#5'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \@@insert@vrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}% + {\@ff@type@ii}{\ff@id}% } \newcommand*{\inserthrule}{\@ifstar\@sinserthrule\@inserthrule} \newcommand*{\@inserthrule}[1][0pt]{% -\@ifnextchar[{\@@inserthrule[#1]}{\@@inserthrule[#1][0pt]}} + \@ifnextchar[{\@@inserthrule[#1]}{\@@inserthrule[#1][0pt]}% +} \def\@@inserthrule[#1][#2]#3#4#5#6{% -\ifthenelse{\equal{#3}{flow}}{% -\def\@ff@type@i{1}}{\ifthenelse{\equal{#3}{static}}{% -\def\@ff@type@i{2}}{\ifthenelse{\equal{#3}{dynamic}}{% -\def\@ff@type@i{3}}{\PackageError{flowfram}{Unknown frame -type '#3'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\ifthenelse{\equal{#5}{flow}}{% -\def\@ff@type@ii{1}}{\ifthenelse{\equal{#5}{static}}{% -\def\@ff@type@ii{2}}{\ifthenelse{\equal{#5}{dynamic}}{% -\def\@ff@type@ii{3}}{\PackageError{flowfram}{Unknown frame -type '#5'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\@@insert@hrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}% + \ifthenelse{\equal{#3}{flow}}% + {% + \def\@ff@type@i{1}% + }% + {% + \ifthenelse{\equal{#3}{static}}% + {% + \def\@ff@type@i{2}% + }% + {% + \ifthenelse{\equal{#3}{dynamic}}% + {% + \def\@ff@type@i{3}}% + {% + \PackageError{flowfram}% + {Unknown frame type '#3'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \ifthenelse{\equal{#5}{flow}}% + {% + \def\@ff@type@ii{1}% + }% + {% + \ifthenelse{\equal{#5}{static}}% + {% + \def\@ff@type@ii{2}% + }% + {% + \ifthenelse{\equal{#5}{dynamic}}% + {% + \def\@ff@type@ii{3}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#5'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \@@insert@hrule{#1}{#2}{\@ff@type@i}{#4}{\@ff@type@ii}{#6}% } \newcommand*{\@@insert@hrule}[6]{% -\@ff@getdim{#3}{#4}% -\setlength{\@ff@left@x}{\ffareax}% -\setlength{\@ff@left@y}{\ffareay}% -\setlength{\@ff@left@width}{\ffareawidth}% -\setlength{\@ff@left@height}{\ffareaheight}% -\@ff@getdim{#5}{#6}% -\ifnum\@ff@left@y>\ffareay\relax - \@ff@swaplen{\@ff@left@x}{\ffareax}% - \@ff@swaplen{\@ff@left@y}{\ffareay}% - \@ff@swaplen{\@ff@left@width}{\ffareawidth}% - \@ff@swaplen{\@ff@left@height}{\ffareaheight}% -\fi -\setlength{\@ff@tmp@y}{\@ff@left@y}% -\addtolength{\@ff@tmp@y}{\@ff@left@height}% -\setlength{\@ff@staticH}{\ffareay}% -\addtolength{\@ff@staticH}{-\@ff@tmp@y}% -\setlength{\@ff@staticW}{\@ff@left@x}% -\addtolength{\@ff@staticW}{\@ff@left@width}% -\setlength{\@ff@tmp@x}{\ffareax}% -\addtolength{\@ff@tmp@x}{\ffareawidth}% -\ifnum\@ff@tmp@x>\@ff@staticW\relax - \setlength{\@ff@staticW}{\@ff@tmp@x}% -\fi -\ifnum\@ff@left@x<\ffareax\relax - \setlength{\@ff@tmp@x}{\@ff@left@x}% -\else + \@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}% } \newcommand*{\ffhrule}[3]{% -\hspace*{-#1}\rule{#2}{#3}} + \hspace*{-#1}\rule{#2}{#3}% +} \newcommand*{\@sinserthrule}[1][0pt]{% -\@ifnextchar[{\@@sinserthrule[#1]}{\@@sinserthrule[#1][0pt]}} + \@ifnextchar[{\@@sinserthrule[#1]}{\@@sinserthrule[#1][0pt]}% +} \def\@@sinserthrule[#1][#2]#3#4#5#6{% -\ifthenelse{\equal{#3}{flow}}{% -\def\@ff@type@i{1}\@flowframeid{#4}\@ff@tmpN=\ff@id}{% -\ifthenelse{\equal{#3}{static}}{% -\def\@ff@type@i{2}\@staticframeid{#4}\@ff@tmpN=\ff@id}{% -\ifthenelse{\equal{#3}{dynamic}}{% -\def\@ff@type@i{3}\@dynamicframeid{#4}\@ff@tmpN=\ff@id}{% -\PackageError{flowfram}{Unknown frame -type '#3'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\ifthenelse{\equal{#5}{flow}}{% -\def\@ff@type@ii{1}\@flowframeid{#6}}{% -\ifthenelse{\equal{#5}{static}}{% -\def\@ff@type@ii{2}\@staticframeid{#6}}{% -\ifthenelse{\equal{#5}{dynamic}}{% -\def\@ff@type@ii{3}\@dynamicframeid{#6}}{% -\PackageError{flowfram}{Unknown frame -type '#5'}{Available frame types are: 'flow', 'static' -or 'dynamic'}}}}% -\@@insert@hrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}% -{\@ff@type@ii}{\ff@id}% + \ifthenelse{\equal{#3}{flow}}% + {% + \def\@ff@type@i{1}% + \@flowframeid{#4}% + \@ff@tmpN=\ff@id + }% + {% + \ifthenelse{\equal{#3}{static}}% + {% + \def\@ff@type@i{2}% + \@staticframeid{#4}% + \@ff@tmpN=\ff@id + }% + {% + \ifthenelse{\equal{#3}{dynamic}}% + {% + \def\@ff@type@i{3}% + \@dynamicframeid{#4}% + \@ff@tmpN=\ff@id + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#3'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \ifthenelse{\equal{#5}{flow}}% + {% + \def\@ff@type@ii{1}% + \@flowframeid{#6}% + }% + {% + \ifthenelse{\equal{#5}{static}}% + {% + \def\@ff@type@ii{2}% + \@staticframeid{#6}% + }% + {% + \ifthenelse{\equal{#5}{dynamic}}% + {% + \def\@ff@type@ii{3}% + \@dynamicframeid{#6}% + }% + {% + \PackageError{flowfram}% + {Unknown frame type '#5'}% + {% + Available frame types are: 'flow', 'static' + or 'dynamic'% + }% + }% + }% + }% + \@@insert@hrule{#1}{#2}{\@ff@type@i}{\@ff@tmpN}% + {\@ff@type@ii}{\ff@id}% } \newcommand*{\dfchaphead}{% -\@ifstar\@sdynamicchap\@dynamicchap} + \@ifstar\@sdynamicchap\@dynamicchap +} \newcommand{\DFchapterstyle}[1]{#1} \newcommand{\DFschapterstyle}[1]{#1} \newcommand{\@dynamicchap}[1]{% -\@ifundefined{chapter}{\PackageError{flowfram}{Chapters aren't -defined}{The document -class you are using does not define chapters}}{% -\let\@ff@OLDmakechapterhead\@makechapterhead -\let\@ff@OLDmakeschapterhead\@makeschapterhead -\renewcommand{\DFchapterstyle}[1]{\@ff@OLDmakechapterhead{##1}}% -\renewcommand{\DFschapterstyle}[1]{\@ff@OLDmakeschapterhead{##1}}% -\xdef\@makechapterhead##1{% -\noexpand\@setdynamiccontents{\number#1}{% -\noexpand\DFchapterstyle{##1}}}% -\xdef\@makeschapterhead##1{% -\noexpand\@setdynamiccontents{\number#1}{% -\noexpand\DFschapterstyle{##1}}}% -}} + \@ifundefined{chapter}% + {% + \PackageError{flowfram}% + {Chapters aren't defined}% + {% + The document class you are using does not + define chapters% + }% + }% + {% + \let\@ff@OLDmakechapterhead\@makechapterhead + \let\@ff@OLDmakeschapterhead\@makeschapterhead + \renewcommand{\DFchapterstyle}[1]{\@ff@OLDmakechapterhead{##1}}% + \renewcommand{\DFschapterstyle}[1]{\@ff@OLDmakeschapterhead{##1}}% + \xdef\@makechapterhead##1{% + \noexpand\@setdynamiccontents{\number#1}% + {% + \noexpand\DFchapterstyle{##1}% + }% + }% + \xdef\@makeschapterhead##1{% + \noexpand\@setdynamiccontents{\number#1}% + {% + \noexpand\DFschapterstyle{##1}% + }% + }% + }% +} \newcommand{\@sdynamicchap}[1]{% -\@dynamicframeid{#1}\@dynamicchap{\ff@id}} + \@dynamicframeid{#1}% + \@dynamicchap{\ff@id}% +} \newcounter{maxthumbtabs} -\@ifundefined{chapter}{% -\newcommand*{\defaultthumbtabtype}{section}}{ -\newcommand*{\defaultthumbtabtype}{chapter} +\@ifundefined{chapter}% +{% + \newcommand*{\defaultthumbtabtype}{section}% +}% +{% + \newcommand*{\defaultthumbtabtype}{chapter}% } \newcommand*{\@ttb@type}{\defaultthumbtabtype} \newcommand*{\makethumbtabs}[2][0pt]{% -\@ifnextchar[{\@makethumbtabs[#1]{#2}}{% -\@makethumbtabs[#1]{#2}[\defaultthumbtabtype]}% + \@ifnextchar[% + {\@makethumbtabs[#1]{#2}}% + {% + \@makethumbtabs[#1]{#2}[\defaultthumbtabtype]% + }% } \def\@makethumbtabs[#1]#2[#3]{% -\@ifundefined{#3}{\PackageError{flowfram}{% -Unknown section type '#3'}{}}{% -\renewcommand{\@ttb@type}{#3}% -\ifthenelse{\equal{#3}{chapter}}{\@makethumbchapter}{% -\ifthenelse{\equal{#3}{part}}{\@makethumbpart}{% -\@makethumbsection{#3}}}} -\@starttoc{ttb}% -\@dothumbtabs{#1}{#2}% -} -\newcommand{\@makethumbchapter}{ -\let\@ttb@old@chapter\@chapter -\def\@chapter[##1]##2{% -\@ttb@old@chapter[##1]{##2}% -\addtocontents{ttb}{\protect\thumbtab - {\thepage}{\thechapter}{##1}{chapter.\thechapter}}% -\@afterheading -}} -\newcommand{\@makethumbpart}{ -\let\@ttb@old@part\@part -\@ifundefined{@endpart}{% -\def\@part[##1]##2{\@ttb@old@part[##1]{##2}% -\addtocontents{ttb}{\protect\thumbtab - {\thepage}{\thepart}{##1}{part.\thepage}}% -\@afterheading}}{% -\let\@ttb@old@endpart\@endpart -\def\@part[##1]##2{% -\def\@parttitle{##1}% -\@ttb@old@part[##1]{##2}% -}% -\def\@endpart{% -\addtocontents{ttb}{% -\protect\thumbtab{\thepage}% -{\thepart}{\@parttitle}{part.\thepage}}% -\@ttb@old@endpart -}}} + \@ifundefined{#3}% + {% + \PackageError{flowfram}% + {% + Unknown section type '#3'% + }% + {}% + }% + {% + \renewcommand{\@ttb@type}{#3}% + \ifthenelse{\equal{#3}{chapter}}% + {% + \@makethumbchapter + }% + {% + \ifthenelse{\equal{#3}{part}}% + {\@makethumbpart}% + {% + \@makethumbsection{#3}% + }% + }% + }% + \@starttoc{ttb}% + \@dothumbtabs{#1}{#2}% +} +\newcommand{\@makethumbchapter}{% + \let\@ttb@old@chapter\@chapter + \def\@chapter[##1]##2{% + \@ttb@old@chapter[##1]{##2}% + \addtocontents{ttb}{\protect\thumbtab + {\thepage}{\thechapter}{##1}{chapter.\thechapter}}% + \@afterheading + }% +} +\newcommand{\@makethumbpart}{% + \let\@ttb@old@part\@part + \@ifundefined{@endpart}% + {% + \def\@part[##1]##2{% + \@ttb@old@part[##1]{##2}% + \addtocontents{ttb}{\protect\thumbtab + {\thepage}{\thepart}{##1}{part.\thepage}}% + \@afterheading + }% + }% + {% + \let\@ttb@old@endpart\@endpart + \def\@part[##1]##2{% + \def\@parttitle{##1}% + \@ttb@old@part[##1]{##2}% + }% + \def\@endpart{% + \addtocontents{ttb}% + {% + \protect\thumbtab{\thepage}% + {\thepart}{\@parttitle}{part.\thepage}% + }% + \@ttb@old@endpart + }% + }% +} \newcommand*{\@makethumbsection}[1]{% -\let\@ttb@old@sect=\@sect -\def\@sect##1##2##3##4##5##6[##7]##8{% -\@ttb@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}% -\ifthenelse{\equal{##1}{#1}}{% -\addtocontents{ttb}{% -\protect\thumbtab{\thepage}{\csname the#1\endcsname}% -{##7}{#1.\csname the#1\endcsname}}% -\@afterheading}{}% -}} + \let\@ttb@old@sect=\@sect + \def\@sect##1##2##3##4##5##6[##7]##8{% + \@ttb@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}% + \ifthenelse{\equal{##1}{#1}}% + {% + \addtocontents{ttb}% + {% + \protect\thumbtab{\thepage}{\csname the#1\endcsname}% + {##7}{#1.\csname the#1\endcsname}% + }% + \@afterheading + }% + {}% + }% +} \newcommand{\thumbtab}[4]{% -\stepcounter{maxthumbtabs}% -\expandafter -\gdef\csname thumbtab@pages@\romannumeral\c@maxthumbtabs\endcsname -{#1}% -\expandafter -\gdef\csname thumbtab@num@\romannumeral\c@maxthumbtabs\endcsname -{#2}% -\expandafter -\gdef\csname thumbtab@title@\romannumeral\c@maxthumbtabs\endcsname -{#3}% -\expandafter -\gdef\csname thumbtab@link@\romannumeral\c@maxthumbtabs\endcsname -{#4}} + \stepcounter{maxthumbtabs}% + \expandafter + \gdef\csname thumbtab@pages@\romannumeral\c@maxthumbtabs\endcsname{#1}% + \expandafter + \gdef\csname thumbtab@num@\romannumeral\c@maxthumbtabs\endcsname{#2}% + \expandafter + \gdef\csname thumbtab@title@\romannumeral\c@maxthumbtabs\endcsname{#3}% + \expandafter + \gdef\csname thumbtab@link@\romannumeral\c@maxthumbtabs\endcsname{#4}% +} \newcommand*{\@dothumbtabs}[2]{% -\@colN=0\relax -\whiledo{\@colN<\c@maxthumbtabs}{% - \advance\@colN by 1\relax - \edef\ff@pages{% - \csname thumbtab@pages@\romannumeral\@colN\endcsname}% - \ifnum\@colN=\c@maxthumbtabs - \expandafter - \xdef\csname thumbtab@pages@\romannumeral\@colN\endcsname{% - \ff@pages,>\ff@pages}% - \else + \@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}% } \newlength{\thumbtabwidth} \setlength{\thumbtabwidth}{1cm} -\@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}}% + }% } \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 +} \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}% } \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}% +} \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}% +} \newcount\@greyscale \newcommand{\@@dothumbtabs}[2]{% -\setlength{\@ff@tmp@y}{\textheight}% -\addtolength{\@ff@tmp@y}{-#2}% -\addtolength{\@ff@tmp@y}{-#1}% -\computerightedgeodd{\@ff@tmp@x}% -\addtolength{\@ff@tmp@x}{-\thumbtabwidth}% -\computeleftedgeeven{\@ff@tmp@x@even}% -\@ff@tmpN=0\relax -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% - \advance\@ff@tmpN by 1\relax - \@greyscale=\@ff@tmpN\relax - \multiply\@greyscale by 60\relax - \divide\@greyscale by \c@maxthumbtabs - \advance\@greyscale by 25\relax - \edef\@ff@greyscale{0.\number\@greyscale}% - \newdynamicframe[none]{\thumbtabwidth}{#2}% - {\@ff@tmp@x}{\@ff@tmp@y}[thumbtab\number\@ff@tmpN]% - \expandafter\global\expandafter - \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname - {\@ff@tmp@x@even}% - \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}{% - \expandafter - \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% - \noexpand\thumbtabformat{% - \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\ - \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname - }{#2}}% - }{% - \if@ttb@title - \expandafter - \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% - \noexpand\thumbtabformat{% - \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname - }{#2}}% - \fi - \if@ttb@num + \setlength{\@ff@tmp@y}{\textheight}% + \addtolength{\@ff@tmp@y}{-#2}% + \addtolength{\@ff@tmp@y}{-#1}% + \computerightedgeodd{\@ff@tmp@x}% + \addtolength{\@ff@tmp@x}{-\thumbtabwidth}% + \computeleftedgeeven{\@ff@tmp@x@even}% + \@ff@tmpN=0\relax + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax + \@greyscale=\@ff@tmpN\relax + \multiply\@greyscale by 60\relax + \divide\@greyscale by \c@maxthumbtabs + \advance\@greyscale by 25\relax + \edef\@ff@greyscale{0.\number\@greyscale}% + \newdynamicframe[none]{\thumbtabwidth}{#2}% + {\@ff@tmp@x}{\@ff@tmp@y}[thumbtab\number\@ff@tmpN]% + \expandafter\global\expandafter + \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname + {\@ff@tmp@x@even}% + \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}% + {% \expandafter - \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% - \noexpand\thumbtabformat{% - \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname - }{#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}} - \newdynamicframe[none]{\thumbtabwidth}{#2}% - {\@ff@tmp@x}{\@ff@tmp@y}[thumbtabindex\number\@ff@tmpN]% - \expandafter\global\expandafter - \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname - {\@ff@tmp@x@even}% - \expandafter - \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}{% + }% \expandafter - \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% - \noexpand\thumbtabindexformat{% - \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname}{% - \csname thumbtab@num@\romannumeral\@ff@tmpN\endcsname\ - \csname thumbtab@title@\romannumeral\@ff@tmpN\endcsname - }{#2}}% - }{% - \if@ttb@title + \xdef\csname @df@backcol@\romannumeral\c@maxdynamic\endcsname + {[gray]{\@ff@greyscale}} + \newdynamicframe[none]{\thumbtabwidth}{#2}% + {\@ff@tmp@x}{\@ff@tmp@y}[thumbtabindex\number\@ff@tmpN]% + \expandafter\global\expandafter + \setlength\csname @df@\romannumeral\c@maxdynamic @evenx\endcsname + {\@ff@tmp@x@even}% + \expandafter + \ifthenelse{\boolean{@ttb@title}\and\boolean{@ttb@num}}% + {% \expandafter - \xdef\csname @dynamicframe@\romannumeral\c@maxdynamic\endcsname{% - \noexpand\thumbtabindexformat{% - \csname thumbtab@link@\romannumeral\@ff@tmpN\endcsname}{% - \csname thumbtab@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}% -}% }% \newcommand*{\enablethumbtabs}{% -\ifnum\c@maxthumbtabs>0 -\@ff@tmpN=0\relax -\@dynamicframeid{thumbtab1}% -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% -\advance\@ff@tmpN by 1\relax -\edef\@ff@pages{\csname thumbtab@pages@\romannumeral\@ff@tmpN\endcsname}% -\@@setdynamicframe{\ff@id}{pages=\@ff@pages}% -\advance\ff@id by 2\relax -}% -\else\PackageWarning{flowfram}{No thumb tabs defined}\fi} + \ifnum\c@maxthumbtabs>0\relax + \@ff@tmpN=0\relax + \@dynamicframeid{thumbtab1}% + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax + \edef\@ff@pages{\csname thumbtab@pages@\romannumeral\@ff@tmpN\endcsname}% + \@@setdynamicframe{\ff@id}{pages=\@ff@pages}% + \advance\ff@id by 2\relax + }% + \else + \PackageWarning{flowfram}{No thumb tabs defined}% + \fi +} \newcommand*{\disablethumbtabs}{% -\ifnum\c@maxthumbtabs>0 -\@ff@tmpN=0\relax -\@dynamicframeid{thumbtab1}% -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% -\advance\@ff@tmpN by 1\relax -\expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname -{none}% -\advance\ff@id by 1\relax -\expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname -{none}% -\advance\ff@id by 1\relax -}\fi} + \ifnum\c@maxthumbtabs>0\relax + \@ff@tmpN=0\relax + \@dynamicframeid{thumbtab1}% + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax + \expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname + {none}% + \advance\ff@id by 1\relax + \expandafter\xdef\csname @df@pages@\romannumeral\ff@id\endcsname + {none}% + \advance\ff@id by 1\relax + }% + \fi +} \newcommand*{\thumbtabindex}{% -\ifnum\c@maxthumbtabs>0\relax -\@ff@tmpN=0\relax -\@dynamicframeid{thumbtabindex1}% -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% -\advance\@ff@tmpN by 1\relax -\expandafter -\xdef\csname @df@pages@\romannumeral\ff@id\endcsname{\c@page}% -\edef\@ff@doafter{% -\noexpand\afterpage{% -\noexpand\setdynamicframe{\number\ff@id}{pages=none}}} -\@ff@doafter -\advance\ff@id by 2\relax -}\fi} + \ifnum\c@maxthumbtabs>0\relax + \@ff@tmpN=0\relax + \@dynamicframeid{thumbtabindex1}% + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax + \expandafter + \xdef\csname @df@pages@\romannumeral\ff@id\endcsname{\c@page}% + \edef\@ff@doafter{% + \noexpand\afterpage + {% + \noexpand\setdynamicframe{\number\ff@id}{pages=none}% + }% + }% + \@ff@doafter + \advance\ff@id by 2\relax + }% + \fi +} \newcommand{\setthumbtab}[2]{% -\ifthenelse{\equal{#1}{all}}{% -\@ff@tmpN=0\relax -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% -\advance\@ff@tmpN by 1\relax -\@setthumbtab{\@ff@tmpN}{#2}}}{% -\@for\@ttb@id:=#1\do{\@setthumbtab{\@ttb@id}{#2}}}} + \ifthenelse{\equal{#1}{all}}% + {% + \@ff@tmpN=0\relax + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax + \@setthumbtab{\@ff@tmpN}{#2}% + }% + }% + {% + \@for\@ttb@id:=#1\do{\@setthumbtab{\@ttb@id}{#2}}% + }% +} \newcommand{\@setthumbtab}[2]{% -\ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}{% -\PackageWarning{flowfram}{Can't find thumbtab number '#1', -ttb file may not be up-to-date}}{% -\@dynamicframeid{thumbtab\number#1}% -\@@setdynamicframe{\ff@id}{#2}% -\@dynamicframeid{thumbtabindex\number#1}% -\@@setdynamicframe{\ff@id}{#2}}} + \ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}% + {% + \PackageWarning{flowfram}% + {% + Can't find thumbtab number '#1', ttb file may not be + up-to-date% + }% + }% + {% + \@dynamicframeid{thumbtab\number#1}% + \@@setdynamicframe{\ff@id}{#2}% + \@dynamicframeid{thumbtabindex\number#1}% + \@@setdynamicframe{\ff@id}{#2}% + }% +} \newcommand{\setthumbtabindex}[2]{% -\ifthenelse{\equal{#1}{all}}{% -\@ff@tmpN=0\relax -\whiledo{\@ff@tmpN<\c@maxthumbtabs}{% -\advance\@ff@tmpN by 1\relax -\@setthumbtabindex{\@ff@tmpN}{#2}}}{% -\@for\@ttb@id:=#1\do{\@setthumbtabindex{\@ttb@id}{#2}}}} + \ifthenelse{\equal{#1}{all}}% + {% + \@ff@tmpN=0\relax + \whiledo{\@ff@tmpN<\c@maxthumbtabs}% + {% + \advance\@ff@tmpN by 1\relax + \@setthumbtabindex{\@ff@tmpN}{#2}% + }% + }% + {% + \@for\@ttb@id:=#1\do{\@setthumbtabindex{\@ttb@id}{#2}}% + }% +} \newcommand{\@setthumbtabindex}[2]{% -\ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}{% -\PackageWarning{flowfram}{Can't find thumbtab number `\number#1', -ttb file may not be up-to-date}}{% -\@dynamicframeid{thumbtabindex\number#1}% -\@@setdynamicframe{\ff@id}{#2}}} + \ifthenelse{\(\c@maxthumbtabs<#1\) \or \(#1<1\)}% + {% + \PackageWarning{flowfram}% + {% + Can't find thumbtab number `\number#1', + ttb file may not be up-to-date% + }% + }% + {% + \@dynamicframeid{thumbtabindex\number#1}% + \@@setdynamicframe{\ff@id}{#2}% + }% +} \newcommand*{\tocandthumbtabindex}{% -\aligntoctrue -\tableofcontents -\thumbtabindex -\aligntocfalse + \aligntoctrue + \tableofcontents + \thumbtabindex + \aligntocfalse } \newcommand*{\@ttb@minitoctype}{\@ttb@type} \let\@ttb@old@starttoc\@starttoc \newif\if@storetoc \@storetocfalse \renewcommand*{\@starttoc}[1]{% -\if@storetoc - \@ttb@storetoc{#1}% -\else - \@ttb@old@starttoc{#1}% -\fi} + \if@storetoc + \@ttb@storetoc{#1}% + \else + \@ttb@old@starttoc{#1}% + \fi +} \newcommand*{\@ttb@storetoc}[1]{% -\begingroup -\makeatletter -\@storefileconts{\jobname.#1}% -\if@filesw - \expandafter\newwrite\csname tf@#1\endcsname - \immediate\openout\csname tf@#1\endcsname\jobname.#1\relax -\fi -\@nobreakfalse -\endgroup} -\newcommand*{\@storefileconts}[1]{\IfFileExists{#1}{% -\@@storefileconts\@filef@und}{% -\PackageInfo{flowfram}{No file #1.}}} + \begingroup + \makeatletter + \@storefileconts{\jobname.#1}% + \if@filesw + \expandafter\newwrite\csname tf@#1\endcsname + \immediate\openout\csname tf@#1\endcsname\jobname.#1\relax + \fi + \@nobreakfalse + \endgroup +} +\newcommand*{\@storefileconts}[1]{% + \IfFileExists{#1}% + {% + \@@storefileconts\@filef@und + }% + {% + \PackageInfo{flowfram}{No file #1.}% + }% +} \newcount\c@maxtocunits \newcount\c@maxminitoc \newcommand{\@@storefileconts}[1]{% -\@ifundefined{\@ttb@minitoctype}{\@ttb@minitoclevel=6\relax}{% -\expandafter\@ttb@minitoclevel\expandafter - =\csname @ttb@\@ttb@minitoctype @level\endcsname}% -\newread\@ttb@toc -\openin\@ttb@toc=#1\relax -\c@maxtocunits=0\relax -\c@maxminitoc=0\relax -\whiledo{\not\boolean{eof}\@ttb@toc}{% -\read\@ttb@toc to\tocline -\@addtotoclist{\tocline}{\c@maxtocunits}% -}% -\closein\@ttb@toc} + \@ifundefined{\@ttb@minitoctype}% + {% + \@ttb@minitoclevel=6\relax + }% + {% + \expandafter\@ttb@minitoclevel\expandafter + =\csname @ttb@\@ttb@minitoctype @level\endcsname + }% + \newread\@ttb@toc + \openin\@ttb@toc=#1\relax + \c@maxtocunits=0\relax + \c@maxminitoc=0\relax + \whiledo{\not\boolean{eof}\@ttb@toc}% + {% + \read\@ttb@toc to\tocline + \@addtotoclist{\tocline}{\c@maxtocunits}% + }% + \closein\@ttb@toc +} \newif\if@contsline \newcount\@ttb@level \newcount\@ttb@minitoclevel \newcommand{\@addtotoclist}[2]{% -\expandafter\@checkcontentsline#1\end -\if@contsline -\expandafter\@gettype#1\end -\ifthenelse{\equal{\@ttb@contstype}{\@ttb@type}}{% -\global\advance#2 by 1\relax -}{% -}% -\fi -\@ifundefined{@toc@\romannumeral#2}{% -\flf@ta=\expandafter{#1}% -\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@ta}}{% -\flf@ta=\expandafter{#1}% -\flf@tb=\expandafter\expandafter\expandafter{\csname @toc@\romannumeral#2\endcsname}% -\expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@tb\the\flf@ta}}% -\if@minitoc + \expandafter\@checkcontentsline#1\end \if@contsline - \@ifundefined{\@ttb@contstype}{\@ttb@level=6}{% - \@ttb@level=\csname @ttb@\@ttb@contstype @level\endcsname}% - \relax - \ifnum\@ttb@level=\@ttb@minitoclevel - \global\advance\c@maxminitoc by 1\relax - \expandafter - \gdef\csname @minitoc@\romannumeral\c@maxminitoc\endcsname{}% - \else - \ifnum\@ttb@level>\@ttb@minitoclevel - \flf@ta=\expandafter{#1}\relax - \flf@tb=\expandafter\expandafter\expandafter - {\csname @minitoc@\romannumeral\c@maxminitoc\endcsname}\relax + \expandafter\@gettype#1\end + \ifthenelse{\equal{\@ttb@contstype}{\@ttb@type}}% + {% + \global\advance#2 by 1\relax + }% + {}% + \fi + \@ifundefined{@toc@\romannumeral#2}% + {% + \flf@ta=\expandafter{#1}% + \expandafter\xdef\csname @toc@\romannumeral#2\endcsname{\the\flf@ta}% + }% + {% + \flf@ta=\expandafter{#1}% + \flf@tb=\expandafter\expandafter\expandafter + {\csname @toc@\romannumeral#2\endcsname}% + \expandafter\xdef\csname @toc@\romannumeral#2\endcsname{% + \the\flf@tb\the\flf@ta}% + }% + \if@minitoc + \if@contsline + \@ifundefined{\@ttb@contstype}% + {\@ttb@level=6}% + {% + \@ttb@level=\csname @ttb@\@ttb@contstype @level\endcsname + }% + \relax + \ifnum\@ttb@level=\@ttb@minitoclevel + \global\advance\c@maxminitoc by 1\relax \expandafter - \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 } \def\@ttb@part@level{-1} \def\@ttb@chapter@level{0} @@ -4227,124 +7533,174 @@ ttb file may not be up-to-date}}{% \def\@ttb@paragraph@level{4} \def\@ttb@subparagraph@level{5} \long\def\@checkcontentsline#1#2\end{% -\ifx#1\contentsline - \@contslinetrue -\else - \@contslinefalse -\fi} + \ifx#1\contentsline + \@contslinetrue + \else + \@contslinefalse + \fi +} \def\@gettype\contentsline#1#2\end{% -\def\@ttb@contstype{#1}} + \def\@ttb@contstype{#1}% +} \newif\ifaligntoc \aligntocfalse - \let\@ttb@old@tableofcontents\tableofcontents \renewcommand{\tableofcontents}{% -\@storetoctrue -\@ttb@old@tableofcontents -\ifaligntoc - \@printalignedtoc -\else - \@printtoc -\fi -\@storetocfalse -\global\c@minitoc=0\relax} + \@storetoctrue + \@ttb@old@tableofcontents + \ifaligntoc + \@printalignedtoc + \else + \@printtoc + \fi + \@storetocfalse + \global\c@minitoc=0\relax +} \newlength\beforeminitocskip \setlength{\beforeminitocskip}{0pt} \newlength\afterminitocskip \setlength{\afterminitocskip}{\baselineskip} \newcommand*{\dominitoc}[1]{% -\if@minitoc \@dominitoc{#1}\fi} + \if@minitoc + \@dominitoc{#1}% + \fi +} \newcommand*{\@dominitoc}[1]{\@@dominitoc{#1}} -\newcommand{\minitocstyle}[1]{\normalfont\normalsize\normalcolor -#1} +\newcommand{\minitocstyle}[1]{% + \normalfont\normalsize\normalcolor + #1% +} \newcommand*{\@@dominitoc}[1]{% -{\minitocstyle{% -\vskip\beforeminitocskip -\csname @minitoc@\romannumeral#1\endcsname}} -\vskip\afterminitocskip} + {% + \minitocstyle + {% + \vskip\beforeminitocskip + \csname @minitoc@\romannumeral#1\endcsname + }% + }% + \vskip\afterminitocskip +} \newcommand*{\appenddfminitoc}{% -\renewcommand{\beforeminitocskip}{\baselineskip}% -\@ifstar\@sappendminitocdf\@appendminitocdf} + \renewcommand{\beforeminitocskip}{\baselineskip}% + \@ifstar\@sappendminitocdf\@appendminitocdf +} \newcommand*{\@sappendminitocdf}[1]{% -\renewcommand{\@dominitoc}[1]{% -\@sappenddynamic{#1}{\@@dominitoc{##1}}}} + \renewcommand{\@dominitoc}[1]{% + \@sappenddynamic{#1}{\@@dominitoc{##1}}% + }% +} \newcommand*{\@appendminitocdf}[1]{% -\renewcommand{\@dominitoc}[1]{% -\@appenddynamic{#1}{\@@dominitoc{##1}}}} + \renewcommand{\@dominitoc}[1]{% + \@appenddynamic{#1}{\@@dominitoc{##1}}% + }% +} \newcommand*{\@printtoc}{% -\@colN=0\relax -\csname @toc@\romannumeral\@colN\endcsname -\whiledo{\@colN<\c@maxtocunits}{% -\advance\@colN by 1\relax -\csname @toc@\romannumeral\@colN\endcsname}} + \@colN=0\relax + \csname @toc@\romannumeral\@colN\endcsname + \whiledo{\@colN<\c@maxtocunits}% + {% + \advance\@colN by 1\relax + \csname @toc@\romannumeral\@colN\endcsname + }% +} \newcommand{\@printalignedtoc}{% -\@ff@tmpN=0\relax -\@ifundefined{@toc@\romannumeral\@ff@tmpN}{% -}{% -\csname @toc@\romannumeral\@ff@tmpN\endcsname -\par\noindent\hrulefill -}% -\whiledo{\@ff@tmpN<\c@maxtocunits}{% -\advance\@ff@tmpN by 1\relax -\ifnum\@ff@tmpN>\c@maxthumbtabs -\csname @toc@\romannumeral\@ff@tmpN\endcsname -\else -\@dynamicframeid{thumbtabindex\number\@ff@tmpN}% -\expandafter\expandafter\expandafter -\@ff@getstaticpos\csname @df@dim@\romannumeral\ff@id\endcsname -\vbox to \@ff@tmp@y{% -\noindent\parbox{\linewidth}{% -\csname @toc@\romannumeral\@ff@tmpN\endcsname}% -\vfill -\par\noindent\hrulefill -}% -\fi}} + \@ff@tmpN=0\relax + \@ifundefined{@toc@\romannumeral\@ff@tmpN}% + {}% + {% + \csname @toc@\romannumeral\@ff@tmpN\endcsname + \par\noindent\hrulefill + }% + \whiledo{\@ff@tmpN<\c@maxtocunits}% + {% + \advance\@ff@tmpN by 1\relax + \ifnum\@ff@tmpN>\c@maxthumbtabs + \csname @toc@\romannumeral\@ff@tmpN\endcsname + \else + \@dynamicframeid{thumbtabindex\number\@ff@tmpN}% + \expandafter\expandafter\expandafter + \@ff@getstaticpos\csname @df@dim@\romannumeral\ff@id\endcsname + \vbox to \@ff@tmp@y + {% + \noindent\parbox{\linewidth}% + {% + \csname @toc@\romannumeral\@ff@tmpN\endcsname + }% + \vfill + \par\noindent\hrulefill + }% + \fi + }% +} \newcounter{minitoc} \newif\if@minitoc \@minitocfalse \newcommand*{\enableminitoc}[1][\@ttb@type]{% -\@minitoctrue -\setcounter{minitoc}{0}% -\@ifundefined{#1}{% -\PackageError{flowfram}{Sectioning type `#1' not defined}{}}{% -\renewcommand{\@ttb@minitoctype}{#1}% -\ifthenelse{\equal{#1}{chapter}}{\@makeminitocchapter}{% -\ifthenelse{\equal{#1}{part}}{\@makeminitocpart}{% -\@makeminitocsection{#1}}}}% + \@minitoctrue + \setcounter{minitoc}{0}% + \@ifundefined{#1}% + {% + \PackageError{flowfram}{Sectioning type `#1' not defined}{}% + }% + {% + \renewcommand{\@ttb@minitoctype}{#1}% + \ifthenelse{\equal{#1}{chapter}}% + {% + \@makeminitocchapter + }% + {% + \ifthenelse{\equal{#1}{part}}% + {\@makeminitocpart}% + {% + \@makeminitocsection{#1}% + }% + }% + }% } \@onlypreamble{\enableminitoc} -\newcommand{\@makeminitocchapter}{ -\let\@mtoc@old@chapter\@chapter -\def\@chapter[##1]##2{% -\@mtoc@old@chapter[##1]{##2}% -\stepcounter{minitoc}% -\dominitoc{\c@minitoc}% -\@afterheading -}} -\newcommand{\@makeminitocpart}{ -\@ifundefined{@endpart}{% -\let\@mtoc@old@part\@part -\def\@part[##1]##2{% -\@mtoc@old@part[##1]{##2}% -\stepcounter{minitoc}% -\dominitoc{\c@minitoc}% -\@afterheading -}}{% -\let\@mtoc@old@endpart\@endpart -\def\@endpart{% -\stepcounter{minitoc}% -\dominitoc{\c@minitoc}% -\@mtoc@old@endpart -}}} +\newcommand{\@makeminitocchapter}{% + \let\@mtoc@old@chapter\@chapter + \def\@chapter[##1]##2{% + \@mtoc@old@chapter[##1]{##2}% + \stepcounter{minitoc}% + \dominitoc{\c@minitoc}% + \@afterheading + }% +} +\newcommand{\@makeminitocpart}{% + \@ifundefined{@endpart}% + {% + \let\@mtoc@old@part\@part + \def\@part[##1]##2{% + \@mtoc@old@part[##1]{##2}% + \stepcounter{minitoc}% + \dominitoc{\c@minitoc}% + \@afterheading + }% + }% + {% + \let\@mtoc@old@endpart\@endpart + \def\@endpart{% + \stepcounter{minitoc}% + \dominitoc{\c@minitoc}% + \@mtoc@old@endpart + }% + }% +} \newcommand{\@makeminitocsection}[1]{% -\let\@mtoc@old@sect=\@sect -\def\@sect##1##2##3##4##5##6[##7]##8{% -\@mtoc@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}% -\ifthenelse{\equal{##1}{#1}}{% -\stepcounter{minitoc}% -\dominitoc{\c@minitoc}\@afterheading}{}% -}} + \let\@mtoc@old@sect=\@sect + \def\@sect##1##2##3##4##5##6[##7]##8{% + \@mtoc@old@sect{##1}{##2}{##3}{##4}{##5}{##6}[##7]{##8}% + \ifthenelse{\equal{##1}{#1}}% + {% + \stepcounter{minitoc}% + \dominitoc{\c@minitoc}% + \@afterheading + }% + {}% + }% +} \endinput %% %% End of file `flowfram.sty'. diff --git a/Master/tlpkg/libexec/ctan2tds b/Master/tlpkg/libexec/ctan2tds index cb26eab323e..318fdc1592f 100755 --- a/Master/tlpkg/libexec/ctan2tds +++ b/Master/tlpkg/libexec/ctan2tds @@ -171,7 +171,6 @@ chomp ($Build = `cd $Master/../Build/source && pwd`); 'booktabs-fr', "&MAKEnosymlinks", 'boondox', "&MAKEcopy", 'borceux', "&MAKEborceux", - 'nrclc', "die 'skipping, requires compilation'", 'bridge', "die 'skipping, latex 2.09'", 'bsheaders', "die 'skipping, license unstated, ca.2005, await request'", 'burmese', "&MAKEflatten", |