Nicola L. C. Talbot
Date: 23rd January 2010
Key words and phrases: LaTeX; text frames; posters; brochures; magazines; newspapers
Dr Nicola Talbot
School of Computing Sciences
University of East Anglia
Norwich. Norfolk. NR4 7TJ.
United Kingdom
http://theoval.cmp.uea.ac.uk/~nlct/
This chapter provides a brief overview of the package, the package options and the various frame types.
The flowfram package is a LaTeX2e package designed to enable you to create text frames in a document such that the contents of the 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.
The flowfram package provides three types of frame: flow frames, static frames and dynamic frames with dimensions and positions specified by the user1.1. 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 Modifying Frame Attributes. Note that unless otherwise stated, all co-ordinates are relative to the bottom left hand corner of the typeblock. If you have a two-sided document, the absolute position of the typeblock may vary depending on the values of \oddsidemargin and \evensidemargin, and all the frames will shift accordingly unless otherwise indicated.
Since floats (such as figures and tables) can only go in flow frames, this package provides the additional environments: staticfigure and statictable which can be used in static frames and dynamic frames. Unlike their figure and table counterparts, they are fixed in place, and so do not take an optional placement specifier. The \caption and \label commands can be used within staticfigure and statictable as usual, but remember that if the frame is displayed on multiple pages, you may end up with multiply defined labels.
The standard figure and table commands will behave as usual in the flow frames, but their starred versions, figure* and table* behave no differently from figure and table1.2.
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 flowfram after hyperref and any colour package (e.g. color).
The flowfram package has the package option draft which will draw the bounding boxes for each frame that has been defined. At the bottom right of each bounding box (except for the bounding box denoting the typeblock), a marker will be shown in the form: [T:idn;idl], where T is a single letter denoting the frame type, idn is the identification number (IDN) for the frame and idl is the identification label (IDL) for that frame. Values of T are: F (flow frame), S (static frame) or D (dynamic frame). Markers of the form: [M:idn] indicate that the bounding box is the area taken up by the margin for flow frame with IDN idn. Note that even if a frame has been rotated, the bounding box will not be rotated.
If you want to show or hide specific types of bounding boxes, you can use one of the following commands:
You can see the layout for the current page (irrespective of whether or not the draft option has been set) using the command:
The flowfram package also has the options nocolor and norotate 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.)
The material on each page is placed in the following order:
This ordering can be used to determine if you want something to overlay or underlay everything else on the page. Note that the frames 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.1.3
The flowfram package now comes with a LaTeX2HTML style file flowfram.perl. However this style file is not meant to emulate the flowfram package, but is provided to facilitate creating a plain HTML document from the LaTeX source. All frame-related information is ignored. By default, the contents of any static or dynamic frames are ignored, but this can be changed using
\HTMLset{showstaticcontents}{1}to show the contents of the static frames or
\HTMLset{showdynamiccontents}{1}to show the contents of the dynamic frames (where
\HTMLset
is defined in the html 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.
This chapter describes how to define new frames, and how to identify and set frame contents. See also Predefined Layouts.
The flow frame is the principle type of frame. The text of the 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. To define a new flow frame use:
\newflowframe[page list]{width}{height}{x}{y}[label]
where width is the width of the frame, height is the height of the frame, (x,y) is the position of the bottom left hand corner of the frame relative to the bottom left hand corner of the typeblock2.1. The first optional argument, page list, indicates the list of pages for which this frame is defined.
A page list can either be specified by the keywords:
all, odd, even or none, or
by a comma-separated list of either individual page numbers or
page ranges. If page list is
omitted, all is assumed.
A page range can be a closed
range (e.g. 2-8
) or an open range (e.g.
<10
or >5
). For example: <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 counter2.2,
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).
Each frame has its own unique IDN, 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 IDL to the frame using the final optional argument label.
You can retrieve the IDL for a given flow frame from its IDN using:
Conversely, you can retrieve the IDN for a given flow frame from its IDL using:
where cmd is a control sequence which will be used to store the frame's IDN. For example:
The label for the first flow frame is ``\getflowlabel{1}''. The flow frame labelled ``main'' has IDN \getflowid{\myid}{main}\myid.(See also Counters.)
Note that \getflowlabel doesn't perform any check to determine whether the supplied IDN is valid, but \getflowid will generate an error if the supplied IDL is undefined.
By default, the flow frame will not have a border, but the starred form
\newflowframe*[page list]{width}{height}{x}{y}[label]
will place a plain border around the flow frame. (See Modifying frame attributes if you want a different border.)
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.
In the PDF version of this document, I used the command
\newflowframe{0.6\textwidth}{\textheight}{0pt}{0pt}[main]to define the main flow frame2.3.
You can force text to move immediately to the next defined flow frame using one of the commands: \newpage, \pagebreak or \framebreak. The first two work in an analogous way to the way they work in standard two column mode. The last one, \framebreak, 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 \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 \clearpage, or for two-sided documents, to start on the next odd page do \cleardoublepage.
A static frame is a rectangular area in which text neither flows into nor flows out of.2.4 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.
As from version 1.03 it is now possible to have static frames with non-rectangular contents, see Non-Rectangular Frames for further details.
A new static frame is defined using the command:
\newstaticframe[page list]{width}{height}{x}{y}[label]
where, as with \newflowframe, width is the width of the frame, height is the height of the frame, (x,y) is the position of the bottom left hand corner of the frame relative to the bottom left hand corner of the typeblock. The first optional argument, page list, indicates the page list for which this static frame should appear, and the final optional argument, label is a unique textual IDL which you can use to identify this frame. If no label is specified, you can refer to this frame by its unique IDN. The first static frame to be defined has IDN 1, the second has IDN 2, and so on.
You can retrieve the IDL for a given static frame from its IDN using:
Conversely, you can retrieve the IDN for a given static frame from its IDL using:
where cmd is a control sequence which will be used to store the frame's IDN. For example:
The label for the first static frame is ``\getstaticlabel{1}''. The static frame labelled ``backleft'' has IDN \getstaticid{\myid}{backleft}\myid.
Note that \getstaticlabel doesn't perform any check to determine whether the supplied IDN is valid, but \getstaticid will generate an error if the supplied IDL is undefined.
As with \newflowframe, there is a starred version
\newstaticframe*[page list]{width}{height}{x}{y}[label]
which will place a border around that static frame.
To set the contents of a particular static frame, you can either use the staticcontents environment:
\begin{staticcontents}
{IDN}
contents
\end{staticcontents}
where IDN is the unique IDN associated with that static frame and contents is the contents of the static frame, or you can use the command:
\setstaticcontents{IDN}{contents}
which will do the same thing.
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:
\begin{staticcontents*}
{IDL}
contents
\end{staticcontents*}
or the equivalent:
\setstaticcontents*{IDL}{contents}
In the body of staticcontents or staticcontents*, or in the second argument of \setstaticcontents or \setstaticcontents*, you can move onto another static frame using:
\continueonframe[continuation text]{id}
If staticcontents* or \setstaticcontents* are being used, id refers to the IDL of the next static frame, otherwise id 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
\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*}is equivalent to:
\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*}where
governs how the continuation text should be displayed. The font used to display the continuation text is given by
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 \continueonframe. For example:
\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*}
A dynamic frame is similar to a static frame 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.2.5)
As from version 1.03 it is now possible to have dynamic frames with non-rectangular contents, see Non-Rectangular Frames for further details.
To create a new dynamic frame, use the command:
\newdynamicframe[page list]{width}{height}{x}{y}[label]
The parameters are exactly the same as for \newflowframe and \newstaticframe. Again, each dynamic frame has an associated unique IDN, starting from 1 for the first dynamic frame to be defined, and a unique IDL can also be set using the final optional argument label.
You can retrieve the IDL for a given dynamic frame from its IDN using:
Conversely, you can retrieve the IDN for a given dynamic frame from its IDL using:
where cmd is a control sequence which will be used to store the frame's IDN.
For example:
The label for the first dynamic frame is ``\getdynamiclabel{1}''. The dynamic frame labelled ``chaphead'' has IDN \getdynamicid{\myid}{chaphead}\myid.
Note that \getdynamiclabel doesn't perform any check to determine whether the supplied IDN is valid, but \getdynamicid will generate an error if the supplied IDL is undefined.
As with the other frame types, there is also a starred version
\newdynamicframe*[page list]{width}{height}{x}{y}[label]
which will place a plain border around the dynamic frame. For example, in the PDF version of this document I used the command
\newdynamicframe{0.38\textwidth}{\textheight}{0.62\textwidth}{0pt}[chaphead]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 \setdynamicframe defined in Modifying Frame Attributes.)
The contents of a dynamic frame are set using the command:
\setdynamiccontents{id}{contents}
where id is the unique IDN associated with that dynamic frame, and contents is the contents of the dynamic frame. Alternatively, if you have assigned an IDL, label, to the dynamic frame, you can use the starred version:
\setdynamiccontents*{label}{contents}
As with most LaTeX commands, you can't use verbatim text in contents.
As from version 1.09, the contents can also be set using the dynamiccontents environment:
\begin{dynamiccontents}
{id}
contents
\end{dynamiccontents}
or the dynamiccontents* environment:
\begin{dynamiccontents*}
{label}
contents
\end{dynamiccontents*}
Note that you can't use verbatim text within the dynamiccontents or dynamiccontents* environments.
You can additionally append text to a dynamic frame using either:
\appenddynamiccontents{id}{contents}
or:
\appenddynamiccontents*{label}{contents}
If \chapter is defined, you can make the chapter titles appear in a dynamic frame using the command
where IDN is the IDN of the dynamic frame. There is also a starred version of this command if you want to use the IDL instead of the IDN. For example, in the PDF version of this document, I used the command:
\dfchaphead*{chaphead}
The headers and footers can be turned into dynamic frames using the command
This will create two dynamic frames with IDLs header and footer. The page style will be used as usual, but you can then move or resize the header and footer using \setdynamicframe (described later).
In the body of dynamiccontents or dynamiccontents*, you can move onto another dynamic frame using:
\continueonframe[continuation text]{id}
If this command occurs within dynamiccontents*, id 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
\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*}is equivalent to:
\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*}where
governs how the continuation text should be displayed. The font used to display the continuation text is given by
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 \continueonframe. For example:
\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*}
This chapter describes how to modify frame attributes, such as the size and location.
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.
Flow frame attributes are modified using either the command:
\setflowframe{idn list}{key-val list}
or the starred version:
\setflowframe*{label list}{key-val list}
or the attributes for all flow frames can be set using:
\setallflowframes{key-val list}
Static frame attributes are modified using either the command:
\setstaticframe{idn list}{key-val list}
or the starred version:
\setstaticframe*{label list}{key-val list}
or the attributes for all static frames can be set using:
\setallstaticframes{key-val list}
Dynamic frame attributes are modified using either the command:
\setdynamicframe{idn list}{key-val list}
or the starred version:
\setdynamicframe*{label list}{key-val list}
or the attributes for all dynamic frames can be set using:
\setalldynamicframes{key-val list}
In each of the above, idn list can either be one of the keywords: all, odd or even (indicating all frames of that type, frames of that type whose IDN 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.
For the starred versions, label list should be a comma-separated list of IDLs. Note that you can't use the above keywords or have ranges in label list.
The key-val list argument must be a comma-separated list of key=value pairs, indicating which attributes to modify. The available values are as follows:
For example, in the PDF version of this document, I used the commands
\setflowframe*{main}{evenx=0.4\textwidth} \setdynamicframe*{chaphead}{evenx=0pt}to switch the positions of the flow frame and dynamic frame containing the document text and chapter headings, respectively, on even pages.
You can swap the odd and even values using the commands:
(for flow frames)
(for static frames) or
(for dynamic frames). These commands all have starred versions which take the frame's IDL instead of its IDN.
For example, to make the first static frame have an oval border:
\setstaticframe{1}{border=ovalbox}Or you can define your own border:
\newcommand{\greenyellowbox}[1]{\fcolorbox{green}{yellow}{#1}} \setstaticframe{1}{border=greenyellowbox}
This next example uses the tikz package to define a fancy frame, so you need to use:
\usepackage{tikz} \usetikzlibrary{snakes}The border command is defined as follows:
\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); }}This makes a bumpy border, but it uses \flowframesep to determine the gap between the border and the text and uses \flowframerule to set the line width. This ensures that the offset (see below) is correctly computed.
This new border can now be applied to a frame:
\setstaticframe{1}{border=fancyborder}
The above examples can compute their own offsets, however, if you were to do, for example:
\newcommand{\thickgreenyellowbox}[1]{% {\setlength{\fboxsep}{5pt}\setlength{\fboxrule}{6pt}% \fcolorbox{green}{yellow}{#1}}}Then you would have to specify the offset. In this example, the offset is -5pt-6pt=-11pt, so you would need to do:
\setstaticframe{1}{border=thickgreenyellowbox,offset=-11pt}
[rgb]{0,1,0}
.
For example:
\setallflowframes{border=doublebox,bordercolor=[rgb]{1,0,0.5}}
[rgb]{0,1,0}
.
[rgb]{0,1,0}
. 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).
\setdynamicframe{1}{pages=1,5,8-10}
For example, in the PDF version of this document, I prevented the chapter heading reappearing on every page using the command:
\setdynamicframe*{chaphead}{clear}
If you want to put \label in a static or dynamic frame, you should use the clear key to prevent the label from being multiply defined.
\setalldynamicframes{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:
\setalldynamicframes{style=textbf}which will make the text for all the dynamic frames come out in bold. To unset a style, do
style=none
.
This setting is only available for dynamic frames.
As from version 1.03, it is now possible to specify non-rectangular static or dynamic frames (but not flow frames). Note that the bounding box will still appear as a rectangle despite the frame's shape setting. You may use either TeX's \parshape command, or the \shapepar command defined in Donald Arseneau's shapepar package (if using \shapepar, remember to include the shapepar package.)
Note that it is better to use \parshape instead of \shapepar as the latter is more restrictive and requires more processing. However, \shapepar provides greater flexibility in the type of shape that can be used.
To restore a frame to its default rectangular setting use shape=\relax.
For those unfamiliar with TeX's \parshape command,
the syntax is as follows:
\parshape=n i1 l1
i2 l2 ...
in ln
where n is the number of (ij lj) pairs and
ij specifies the left
indentation for the jth line and
lj specifies the length of
the jth line.
For example, to create a zigzag shaped static frame (whose IDN is shapedt):
\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 }}
The syntax for \shapepar is more complicated, see
the shapepar documentation for more details. In general:
\shapepar{shape specs}
The shapepar package has four predefined shapes:
\squareshape, \diamondshape,
\heartshape and \nutshape.
For example, to assign a heart shape to the static frame whose IDL is shapedb:
\setstaticframe*{shapedb}{shape={\shapepar\heartshape}}To reset the frame back to its original rectangular shape do:
\setstaticframe*{shapedb}{shape=\relax}
The 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.
This chapter describes some of the commands provided to determine the locations and dimensions of frames.
This chapter describes some of the commands available that can be used to determine the locations and dimensions of frames. See the accompanying document flowfram.pdf for more details of these commands or for other commands not listed here.
As mentioned earlier, when you create new frames, you must specify their location relative to the typeblock, but what if you want to position a frame a set distance from the edge of the paper? The flowfram package provides the following commands that compute the distance from the typeblock to the paper boundary:
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 length.
As above, but for even pages.
This computes the top edge of the page, relative to the bottom of the typeblock, and stores the result in length.
This computes the bottom edge of the page, relative to the bottom of the typeblock, and stores the result in length.
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 length.
As above, but for even pages.
Note that in all cases length must be a LaTeX length command.
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):
% 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}
It is possible to determine the dimensions and locations of a frame using one of the following commands:
For each command, the starred version takes an IDL as the argument, and the unstarred version takes an IDN as the argument. Each command stores the relevant information in the lengths \ffareawidth, \ffareaheight, \ffareax and \ffareay.
For other related commands, see the section "Determining Dimensions and Locations" in the accompanying document flowfram.pdf.
To print the relative location of one frame from another do:
\relativeframelocation{type1}{idn1}{type2}{idn2}
where type1 and idn1 indicate the type and IDN of the first frame, and type2 and idn2 indicate the type and IDN of the second frame. There is also a starred version:
\relativeframelocation*{type1}{idl1}{type2}{idll}
where idl1 and idl2 indicate the IDL of the first and second frames, respectively. Both the above commands will print one of the following:
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.
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.
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.
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.
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 \relativeframelocation may use the wrong page settings if it is used at the start of the page.
For example, the PDF version of this document defined a flow frame labelled main and a dynamic frame labelled chaphead which is used to display the chapter headings. The following code
The dynamic frame is \relativeframelocation*{dynamic}{chaphead}{flow}{main} of the flow frame.produces: The dynamic frame is on the left of the flow frame.
There are some short cut commands for frames of the same type:
This is equivalent to:
\relativeframelocation{dynamic}{idn1}{dynamic}{idn2}
This is equivalent to:
\relativeframelocation{static}{idn1}{static}{idn2}
This is equivalent to:
\relativeframelocation{flow}{idn1}{flow}{idn2}
Each of the above commands also has a starred version that uses the
IDL instead of the IDN.
These commands may be used in the optional argument of \continueonframe for frames that are on the same page. For example:
\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}
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 flowfram.pdf.
This chapter describes commands that create frames arranged in a predefined layout.
The flowfram package has a number of commands which create frames in a predefined layout. These commands may only be used in the preamble.
The standard LaTeX commands \onecolumn and \twocolumn are redefined to create one or two flow frames that fill the entire typeblock separated from each other (in the case of \twocolumn) by a gap of width \columnsep. 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 \baselineskip. You can switch off this automatic adjustment using the command:
The \onecolumn and \twocolumn commands also take an optional argument which is the page list for which those flow frames are defined. In addition to \onecolumn and \twocolumn, the following commands are also defined:
This creates n column flow frames each separated by a distance of \columnsep.
\onecolumninarea[pages]{width}{height}{x}{y}
This creates a single flow frame to fill the given area, adjusting the height so that it is an integer multiple of \baselineskip.
\twocolumninarea[pages]{width}{height}{x}{y}
This creates two column flow frames separated by a distance of \columnsep filling the entire area specified, again adjusting the height so that it is an integer multiple of \baselineskip. The columns are separated by a gap of \columnsep.
\Ncolumninarea[pages]{n}{width}{height}{x}{y}
This is a more general form of \twocolumninarea making n flow frames instead of two.
As well as the column-style flow frames defined above, it is also possible to define n columns with an additional frame spanning either above or below them. There will be a vertical gap of approximately5.1 \vcolumnsep between the columns and the extra frame. In each of the following definitions, the argument pages is the page list for which the frames are defined, n is the number of columns required, type is the type of frame to go above or below the columns (this may be one of: flow, static or dynamic). The area in which the new frames should fill is defined by width, height (the width and height of the area) and x, y (the position of the bottom left hand corner of the area relative to the bottom left hand corner of the typeblock.)
The height of the additional frame at the top or bottom of the columns is given by H.
\onecolumntopinarea[pages]{type}{H}{width}{height}{x}{y}
This creates one flow frame with a type frame above it, filling the area specified.
\twocolumntopinarea[pages]{type}{H}{width}{height}{x}{y}
This creates two column-style flow frames with a type frame above them, filling the area specified.
\Ncolumntopinarea[pages]{type}{n}{H}{width}{height}{x}{y}
This creates n column-style flow frames with a type frame above them, filling the area specified.
\onecolumnbottominarea[pages]{type}{H}{width}{height}{x}{y}
This creates one flow frame with a type frame underneath it, filling the area specified.
\twocolumnbottominarea[pages]{type}{H}{width}{height}{x}{y}
This creates two column-style flow frames with a type frame below them, filling the area specified.
\Ncolumnbottominarea[pages]{type}{n}{H}{width}{height}{x}{y}
This creates n column-style flow frames with a type frame below them, filling the area specified.
The following commands are special cases of the above:
\onecolumnStopinarea[pages]{H}{width}{height}{x}{y}
This is equivalent to:
\onecolumntopinarea[pages]{static}{H}{width}{height}{x}{y}
\onecolumnDtopinarea[pages]{H}{width}{height}{x}{y}
This is equivalent to:
\onecolumntopinarea[pages]{dynamic}{H}{width}{height}{x}{y}
As \onecolumntopinarea where the area is the entire typeblock.
This is equivalent to: \onecolumntop[pages]{static}{H}
This is equivalent to: \onecolumntop[pages]{dynamic}{H}
\twocolumnStopinarea[pages]{H}{width}{height}{x}{y}
This is equivalent to:
\twocolumntopinarea[pages]{static}{H}{width}{height}{x}{y}
\twocolumnDtopinarea[pages]{H}{width}{height}{x}{y}
This is equivalent to:
\twocolumntopinarea[pages]{dynamic}{H}{width}{height}{x}{y}
As \twocolumntopinarea where the area is the entire typeblock.
This is equivalent to: \twocolumntop[pages]{static}{H}
This is equivalent to: \twocolumntop[pages]{dynamic}{H}
\NcolumnStopinarea[pages]{n}{H}{width}{height}{x}{y}
This is equivalent to:
\Ncolumntopinarea[pages]{static}{n}{H}{width}{height}{x}{y}
\NcolumnDtopinarea[pages]{n}{H}{width}{height}{x}{y}
This is equivalent to:
\Ncolumntopinarea[pages]{dynamic}{n}{H}{width}{height}{x}{y}
\Ncolumntop[pages]{type}{n}{H}
As \Ncolumntopinarea where the area is the entire typeblock.
This is equivalent to: \Ncolumntop[pages]{static}{n}{H}
This is equivalent to: \Ncolumntop[pages]{dynamic}{n}{H}
\onecolumnSbottominarea[pages]{H}{width}{height}{x}{y}
This is equivalent to:
\onecolumnbottominarea[pages]{static}{H}{width}{height}{x}{y}
\onecolumnDbottominarea[pages]{H}{width}{height}{x}{y}
This is equivalent to:
\onecolumnbottominarea[pages]{dynamic}{H}{width}{height}{x}{y}
\onecolumnbottom[pages]{type}{H}
As \onecolumnbottominarea where the area is the entire typeblock.
This is equivalent to: \onecolumnbottom[pages]{static}{H}
This is equivalent to: \onecolumnbottom[pages]{dynamic}{H}
\twocolumnSbottominarea[pages]{H}{width}{height}{x}{y}
This is equivalent to:
\twocolumnbottominarea[pages]{static}{H}{width}{height}{x}{y}
\twocolumnDbottominarea[pages]{H}{width}{height}{x}{y}
This is equivalent to:
\twocolumnbottominarea[pages]{dynamic}{H}{width}{height}{x}{y}
\twocolumnbottom[pages]{type}{H}
As \twocolumnbottominarea where the area is the entire typeblock.
This is equivalent to: \twocolumnbottom[pages]{static}{H}
This is equivalent to: \twocolumnbottom[pages]{dynamic}{H}
\NcolumnSbottominarea[pages]{n}{H}{width}{height}{x}{y}
This is equivalent to:
\Ncolumnbottominarea[pages]{static}{n}{H}{width}{height}{x}{y}
\NcolumnDbottominarea[pages]{n}{H}{width}{height}{x}{y}
This is equivalent to:
\Ncolumnbottominarea[pages]{dynamic}{n}{H}{width}{height}{x}{y}
\Ncolumnbottom[pages]{type}{n}{H}
As \Ncolumnbottominarea where the area is the entire typeblock.
This is equivalent to: \Ncolumnbottom[pages]{static}{n}{H}
This is equivalent to: \Ncolumnbottom[pages]{dynamic}{n}{H}
The default behaviour for the commands defined above is to create the flow frames from left to right. However if you are typesetting from right to left, you will probably prefer to define the flow frames in the reverse order. This can be done via the package option RL. Alternatively you can use the command:
before using commands such as \twocolumn or \Ncolumn. Two switch back to left-to-right columns use:
Static frames 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, pages is the page list for which those static frames are defined (all is the default). For the vertical strips: xoffset is the amount by which the frames should be shifted horizontally (0pt by default), W1 is the width of the first frame, with colour specified by C1 and IDL L1, and so on up to Wn the width of the nth frame with colour specified by Cn and IDL Ln. For the vertical strips: yoffset is the amount by which the frames should be shifted vertically (0pt by default), H1 is the height of the first frame, with colour specified by C1 and IDL L1, and so on up to Hn the height of the nth frame with colour specified by Cn and IDL Ln.
NOTE: unlike the earlier commands, these commands are all relative to the actual page, not the typeblock. 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.
The colour specification must be completely enclosed in braces,
for example {[rgb]{1,0,1}}
not [rgb]{1,0,1}
.
\vtwotone[pages][xoffset]{W1}{C1}{L1}{W2}{C2}{L2}
Defines two static frames 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.)
\vNtone[pages][xoffset]{n}{W1}{C1}{L1}...{Wn}{Cn}{Ln}
This is similar to \vtwotone but with n static frames instead of two.
\vtwotonebottom[pages][xoffset]{H}{W1}{C1}{L1}{W2}{C2}{L2}
This is similar to \vtwotone but the static frames are only H high, instead of the entire height of the page. The frames are aligned along the bottom edge of the page.
\vtwotonetop[pages][xoffset]{H}{W1}{C1}{L1}{W2}{C2}
{L2}
This is similar to \vtwotone but the static frames are only H 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 \vtwotonetop commands were used, one for the even pages, and the other for the odd pages.)
\vNtonebottom[pages][xoffset]{H}{n}{W1}{C1}{L1}... {Wn}{Cn}{Ln}
This is a general version of \vtwotonebottom for n frames instead of two.
\vNtonetop[pages][xoffset]{H}{n}{W1}{C1}{L1}... {Wn}{Cn}{Ln}
This is a general version of \vtwotonetop for n frames instead of two.
\htwotone[pages][yoffset]{H1}{C1}{L1}{H2}{C2}{L2}
This defines two static frames to create a two tone horizontal strip effect.
\hNtone[pages][yoffset]{n}{H1}{C1}{L1}... {Hn}{Cn}{Ln}
This is similar to \htwotone but with n static frames instead of two.
\htwotoneleft[pages][yoffset]{W}{H1}{C1}{L1}{H2}{C2}{L2}
This is similar to \htwotone but the static frames are only W wide, instead of the entire width of the page. The frames are aligned along the left edge of the page.
\htwotoneright[pages][yoffset]{W}{H1}{C1}{L1}{H2}{C2}{L2}
This is similar to \htwotone but the static frames are only W wide, instead of the entire width of the page. The frames are aligned along the right edge of the page.
\hNtoneleft[pages][yoffset]{W}{n}{H1}{C1}{L1}... {Hn}{Cn}{Ln}
This is a general version of \htwotoneleft for n frames instead of two.
\hNtoneright[pages][yoffset]{W}{n}{H1}{C1}{L1}... {Hn}{Cn}{Ln}
This is a general version of \htwotoneright for n frames instead of two.
To make a single static frame covering the entire page, use:
\makebackgroundframe[pages][IDL]
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.
You can create vertical or horizontal rules between two frames using the commands:
\insertvrule[y top][y bottom]{T1}{IDN1}{T2}{IDN2}
This creates a new static frame which fits between T1 frame with IDN IDN1 and T2 frame with IDN IDN2, 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 y top (default 0pt) extends the rule by that much above the highest point, and the second optional argument y bottom (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
Note that this has changed as from version 1.09: versions prior to 1.09 used \columnseprule.
The vertical rule drawn by \insertvrule is created using the command:
\ffvrule{offset}{width}{height}
This can be redefined if a more ornate rule is required (see below).
\inserthrule[x left][x right]{T1}{IDN1}{T2}{IDN2}
This creates a new static frame which fits between T1 frame with IDN IDN1 and T2 frame with IDN IDN2, 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 x left (default 0pt) extends the rule by that much before the leftmost point, and the second optional argument x right (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
The horizontal rule drawn by \inserthrule is created using the command:
\ffhrule{offset}{width}{height}
This can be redefined if a more ornate rule is required (see below).
The default value for \ffcolumnseprule is 2pt. Both \insertvrule and \inserthrule have starred versions which allow you to identify the frame by IDL instead of IDN. The frame types, T1 and T2 can be one of the following keywords: flow, static or dynamic.
The command
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:
\twocolumnStop{2in} \renewcommand{\ffruledeclarations}{\color{red}} \insertvrule{flow}{1}{flow}{2} \renewcommand{\ffruledeclarations}{\color{blue}} \inserthrule{static}{1}{flow}{1}This will create a layout with two columns (flow frames 1 and 2) with a static frame 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.)
In the following example, the rules have been redefined to use a zigzag pattern (which is obtained using the tikz package):
\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}
This chapter describes how to create thumbtabs and minitocs, such as those used in the PDF version of this document.
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: ttbtitle (show title--default), ttbnotitle (don't show the title), ttbnum (show the number) and ttbnonum (don't show the number--default).
If you want thumbtabs in your document, you need to use the command
\makethumbtabs[y offset]{height}[section type]
in the document preamble. By default, the topmost thumbtab is level with the top of the typeblock, but can be shifted vertically using the first optional argument y offset. Each thumbtab will be height high, and will correspond to the sectioning type section type. If section type is omitted, chapters will be used if the \chapter command is defined, otherwise sections will be used. The width of the thumbtabs is given by the length
which is 1cm by default. The command
will display the thumbtab index (all thumbtabs) on the current page. You then need to use
to start the individual thumbtabs and
to make them go away. You can align the table of contents with the thumbtabs6.1 using the command
instead of the commands \tableofcontents and \thumbtabindex. If you are using the hyperref package, the text on the thumbtab index will be a hyperlink to the corresponding part of the document. Note that when using \tocandthumbtabindex you may need to shift the thumbtabs vertically up or down to make sure that they align correctly with the table of contents.
The format of the text on the thumbtabs is given by the command
for the thumbtab index entries, and
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 norotate 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.
The thumbtab attributes can be changed using
\setthumbtab{n}{key value list}
where n is the thumbtab number starting from 1 (for the top thumbtab) to the value given by the counter maxthumbtabs (for the bottom thumbtab). Note that these numbers are not related to the associated frame IDN. You may also use the keyword all instead of n to indicate that the new attributes should apply to all thumbtabs.
To just change the settings for the thumbtab index, use
\setthumbtabindex{n}{key value list}
The key value list for both these commands is the same as that for \setdynamicframe. Again n may either be the thumbtab index or the keyword all.
By default, the thumbtabs have a grey background. In the PDF version of this document, I used:
\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}}to change the thumbtab background colour to shades of blue.
I also changed the style of the thumbtab text using:
\newcommand{\thumbtabstyle}[1]{{\hypersetup{linkcolor=white}% \textbf{\large\sffamily #1}}} \setthumbtab{all}{style=thumbtabstyle,textcolor=white}Note that the style uses \hypersetup6.2 to change the colour of the hyperlink text, since the hyperlink overrides the text colour.
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
The default section type is the same as that used by the thumbtabs.
If you want the minitocs to appear in a dynamic frame, you can use
where IDN is the IDN of the appropriate dynamic frame. There is also a starred version available if you want to use the IDL instead of the IDN.
For example, in the PDF version of this document I used the command:
\appenddfminitoc*{chaphead}in the preamble, which appended the minitocs to the dynamic frame with IDL chaphead.
The style of the minitoc text is given by the command
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
and the gap after the minitoc is given by the length
These lengths may be changed using \setlength.
This section describes style macros, lengths and counters used by the flowfram package.
This sets the colour of the bounding box when it is displayed in draft mode. The default value is:
\color[gray]{0.8}
. For example, if you want a darker grey,
do:
\renewcommand{\setffdraftcolor}{\color[gray]{0.3}}
This sets the colour of
the bounding box of the typeblock when it is displayed
in draft mode. The default value is: \color[gray]{0.9}
.
For example, if you want a medium grey, do:
\renewcommand{\setffdrafttypeblockcolor}{\color[gray]{0.5}}
This sets the font size for the bounding box markers in
draft mode. The default value is: \small\sffamily
.
For example, if you want a larger font, do:
\renewcommand{\fflabelfont}{\large\sffamily}
This sets the declarations that affect the rules created using \insertvrule and \inserthrule. The default definition does nothing. See Vertical and Horizontal Rules for further details.
This sets text in the continuation font. The default definition
does \emph{\small
text}
. See
Static Frames
and Dynamic
Frames for further details.
This is the distance from the right hand side of the bounding box at which to place the bounding box marker. The default value is: 1pt
This is the gap between the text of the frame and its border, for the standard border types.
This is the width of the frame's border, if using a border given by a frame making command that uses \fboxsep to set its border width (e.g. \fbox).
This is the paragraph indentation within static or dynamic frames. The default value is 0pt.
This is the approximate vertical distance between the top frame and the column frames when using \Ncolumntop etc. (The height of the flow frame may be adjusted to make it an integer multiple of \baselineskip.)
This is the horizontal distance between the column frames when using \Ncolumn or \Ncolumntop etc
This is the width of vertical rules created using \insertvrule or the height of horizontal rules created using \inserthrule.
This is the vertical distance before the minitoc.
This is the vertical distance after the minitoc.
\the
counter name. However the value of these counters
should not be modified.
This is analogous to the standard \label command, but will always refer to the IDN of the current flow frame. It can then be referenced using \ref{label}. Note that this will always refer to the current flow frame even when used in the contents of a static or dynamic frame.
Don't use more than one instance of \labelflowid in a given flow frame for a given page or you will get a "multiply defined references" warning.
and reference it elsewhere in the document using \ref{label}. For example, if you are using a column layout, you might want to do something like:
This text is about hippos\labelflow{hippos}. % Somewhere else in the document See column~\ref{hippos} on page~\pageref{hippos} for information on hippos.Don't use more than one instance of \labelflow in a given flow frame for a given page or you will get a "multiply defined references" warning. Note that \labelflow will always refer to the current flow frame even when used in the contents of a static or dynamic frame.
This chapter should be consulted if you experience any problems using the flowfram package.
For an up-to-date list of frequently asked questions, see the flowfram FAQ. If you have a query that is not addressed here, please try there before contacting me.
The output routine will create a new flow frame the size of the typeblock and use that.
No.
When the output routine finishes with one flow frame it looks for the next flow frame defined on that page. If there are none left, it then searches through the page list of all the defined flow frames 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:
You can assign certain irregular shapes to static or dynamic frames, using the shape key (see Non-Rectangular Frames). Note that the bounding box will still appear as a rectangle with the dimensions of the given frame which may not correspond to the assigned shape. This function is not available for flow frames.
Assuming you haven't inadvertently set that text as the contents of the static or dynamic frame, the frames are most likely overlapping (see Frame Stacking Order). In an attempt to clarify what's going on, suppose you have defined a static frame, a dynamic frame and two flow frames. The following is an approximate8.1 analogy: TeX has a sheet of paper on the table, and has pencilled8.2 in a rectangle denoting the typeblock. 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 static frame, the next two (which I shall call sheets 2 and 3) represent the flow frames, and the last one (which I shall call sheet 4) represents the dynamic frame. 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 static frame, 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 dynamic frame, 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 flow frame 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 typeblock. 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.)
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 flow frame into a neighbouring frame. Check the log file for warnings or use the draft option to the document class which will place a filled rectangle on the end of overfull lines.
Probably because you have narrow frames. It's better to use ragged right formatting when the frames are narrow.
Probably because you have used \label in a static or dynamic frame that is displayed on more than one page. Try using the clear key to ensure that the frame is always cleared at the end of each page.
As from version 1.01, any \onecolumn or \twocolumn 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, ffuserguide.tex, for an example.
Use the valign key in \setstaticframe or \setdynamicframe (new to version 1.03).
See Determining the Location of the Typeblock.
Yes, Jpgfdraw which can be downloaded from: http://theoval.cmp.uea.ac.uk/~nlct/jpgfdraw/
This is a problem that will occur if you have flow frames with different widths, as the change in \hsize does not come into effect until a paragraph break. So if you have a paragraph that spans two flow frames, the end of the paragraph at the beginning of the second flow frame will retain the width it had at the start of the paragraph at the bottom of the previous flow frame. You can fix the problem by inserting \framebreak at the point where the frame break occurs (see Prematurely Ending a Flow Frame).
This may occur if you use a border that is not recognised by the flowfram package. You will need to set the offset using the offset key (see Modifying Frame Attributes).
This can happen if you have, say, an A4 document, and
ghostscript has letter as the default paper size. You can
change the default paper size by editing the file gs_init.ps
.
Change:
% Optionally choose a default paper size other than U.S. letter. % (a4)to:
% Optionally choose a default paper size other than U.S. letter. (a4)
All your flow frames 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
static frames or dynamic frames filled in, and nothing
outside of them, just do \mbox{}\clearpage
.
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.
See the previous answer.
The paragraph indentation in static or dynamic frames is governed by the length \sdfparindent which is set to 0pt by default. To make the indentation the same as that used by flow frames place the following in the preamble:
\setlength{\sdfparindent}{\parindent}
Remember that the contents of the dynamic frames are not set until the page is shipped out, and the contents will be set in the order of IDN, 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.
This will happen if your \parshape specification exceeds the linewidth. For example:
\parshape=1 0.4\linewidth 0.7\linewidthThis specifies a line with overall length
1.1\linewidth
which is too long.
Illegal unit of measure (pt inserted)
All lengths must have units. Remember to include the units when defining new frames. The following keys require lengths: width, height, x, y and offset8.3.
Missing number, treated as zero
LaTeX is expecting a number. There are a number of possible causes:
\set
typeframe
commands, or when setting
the contents of static frames or dynamic frames.
Flow frame IDL '
label' already defined
All IDLs within each frame type must be unique. There are similar error messages for duplicate IDLs for static frames and dynamic frames.
Can't find flow frame id
You have specified a non-existent flow frame IDL. There are similar error messages for static frames and dynamic frames. Check to make sure you have spelt the label correctly, and check you are using the correct frame type command. (For example, if a static frame has the IDL mylabel, and you attempt to do \setflowframe*{mylabel}{options}, then you will get this error, because mylabel refers to a static frame not a flow frame.)
Key 'clear' is boolean
The clear key can only have the values true or false.
Key 'clear' not available
The clear key is only available for static or dynamic frames.
Key 'style' not available
The style key is only available for dynamic frames.
Key 'margin' not available
The margin key is only available for flow frames.
Key 'shape' not available
The shape key is only available for static or dynamic frames.
Dynamic frame style '
style' not defined
The specified style style 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.
Argument of \fbox has an extra }
This error will occur if you do, say, border=\fbox
instead of border=fbox
. Remember not to include
the initial backslash.
Not in outer par mode
You can not have floats (such as figures, tables or marginal notes) in static or dynamic frames. If you want a figure or table within a static or dynamic frame use staticfigure or statictable.
Somethings wrong---maybe missing \item
Assuming that all your list type of environments start with \item, 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.
No room for a new \skip
You have exceeded TeX's 256 register limit. Use the etex package.
\verb illegal in command argument
As a general rule, you can't use verbatim text in a command argument. This rule applies to all the commands defined by the flowfram package. See also below.
\verb illegal in command argument
when using
verbatim text inside the dynamiccontents environment.
You can not use verbatim text inside either the starred or unstarred version of the dynamiccontents environment. (See earlier.)