Latest news 2024-07-03: Ebook sale (1st – 31st July 2024): short story cybercrime fiction Unsocial Media free; short story cybercrime fiction Smile for the Camera free; short story noir crime fiction I’ve Heard the Mermaid Sing free; crime fiction novel The Private Enemy US$1.99; illustrated children’s story The Foolish Hedgehog US$0.99.

flowfram package FAQ

This is the FAQ for the flowfram package. See also the user guide and the documented code

General Queries

What happens if no more flow frames are defined? 🔗

If all my flow frames are only defined on, say, pages 1-10, what happens if I then add some extra text so that the document exceeds 10 pages? The output routine will create a new flow frame the size of the typeblock, and use that.

2013-12-08 17:19:39


Can I use the formatted page number in page lists? 🔗

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 flows 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:

  1. 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 flow frame defined on page 15, not on page A.
  2. 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.

2013-12-08 17:22:29


What happens if I use a command or environment that switches to two-column mode (e.g. theindex) 🔗

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. I recommend that you set up your own frames for use in the index.

2013-12-08 17:22:20


Why has the text from my flow frame appeared in a static or dynamic frame? 🔗

Assuming you haven't inadvertently set that text as the contents of the static or dynamic frame, the frames are most likely overlapping. 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 approximate1 analogy: TeX has a sheet of paper on the table, and has pencilled2 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.

1The pedantic may point out that TeX may make several attempts to fill in the flow frames depending on penalties and so on.

2Actually it hasn't drawn anything really, but it has in its mind's eye.

2013-12-14 09:53:12


Why do I get lots of overfull hbox messages? 🔗

Possibly because you have narrow frames, and TeX can't find a good place to break the lines. If you are only getting them on even pages and are using a twoside option with your class file, this has been fixed in version 1.05.

2013-12-08 17:33:09


Can I make an arbitrary shaped frame? 🔗

As from version 1.03, you can assign certain irregular shapes to static or dynamic frames, using the shape key. 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, however you can use TeX's \parshape command within flow frames. (See the sample file sample-news.pdf.)

2013-12-08 17:35:07


How do I change the vertical alignment of material inside a static or dynamic frame? 🔗

As from version 1.03, you can use the valign key in \setstaticframe or \setdynamicframe.

2013-12-08 17:36:24


Can I mix keywords and page lists? 🔗

No. You can either specify the pages as odd, even, all or none, or you can specify the pages as a page list, e.g. <3,5-7,10,>14. If you want frames to only appear on, say, odd numbered pages between 11 and 19, then initially define the frame with none for the pages setting, and then on page 10, use pages=odd, and on page 20, use pages=none for the frame in question.

2013-12-08 17:37:31


How do I compute the distance from the edge of the page instead of the typeblock? 🔗

The following commands all take a length as the argument. The distance from the typeblock to the paper edge will be stored in the length. You can then use this value to go from an absolute position to a relative position.

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
% compute the distance from the typeblock to the paper edge
% Add the absolute co-ordinates to get co-ordinates
% relative to the typeblock

2013-12-08 17:40:29


How do I find out a frame's dimensions and location? 🔗

As from version 1.08, you can use the commands \getflowbounds, \getstaticbounds and \getdynamicbounds. Each of these commands requires a single argument that identifies the required frame. If the starred form is used, the argument should be the frame's identification label, otherwise it should be the frame's identification number. These commands set the lengths \ffareawidth, \ffareaheight, \ffareax and \ffareay.

2013-12-08 17:41:40


What is the package called flowfram instead of flowframe? 🔗

Because a long time ago in prehistoric times when digital dinosaurs roamed the Internet, package authors were asked to limit their filenames to eight dot three, so all my old packages have that limitation. This restriction was lifted quite some time ago, but it's too late to change the name now.

2015-10-22 03:25:31


Unexpected Output

The lines at the beginning of my flow frames are the wrong width. 🔗

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. (This is due to TeX's output routine mechanism and can't be changed by flowfram.) You can fix the problem by inserting \framebreak at the point where the frame break occurs.

2013-12-08 17:44:56


My frames shift to the right when I add a border. 🔗

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.

2013-12-08 17:45:44


The contents of my all my flow frames are shifted to the right 🔗

This has been fixed in version 1.04.

2013-12-08 17:46:30


I have a vertical white strip along the right hand side of every page. 🔗

This can happen if you are using the DVI format as an intermediate step and have, say, an A4 document, but ghostscript has letter as the default paper size. You can change the default paper size by editing the file Change:

% Optionally choose a default paper size other than U.S. letter.
% (a4)
% Optionally choose a default paper size other than U.S. letter.
Alternatively, consider switching to PDFLaTeX.

2013-12-08 17:48:30


I don't have any output 🔗

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 or dynamic frames filled in, and nothing outside of them, just do \mbox{}\clearpage.

2013-12-08 17:49:14


The last page hasn't appeared 🔗

This is the same problem as I don't have any output.

2013-12-08 17:50:17


My longtables don't look right 🔗

Unfortunately flowfram and longtable don't work well together as they both change the output routine. Try using the supertabular package instead.

2013-12-08 17:51:27


The contents of my static or dynamic frame has shifted to the left when I used \parshape 🔗

This will happen if your \parshape specification exceeds the linewidth. For example:

\parshape=1 0.4\linewidth 0.7\linewidth
This specifies a line with overall length 1.1\linewidth which is too long.

2013-12-08 17:52:15


I get extra pages at the end of the document 🔗

This should now be fixed in version 1.07.

2013-12-08 17:52:41


This should now be fixed in version 1.08.

2013-12-08 17:53:21


I changed the value of \columnseprule but it hasn't made a difference 🔗

As from version 1.09, the flowfram package uses \ffcolumnseprule instead of \columnseprule to avoid conflict with multicol.

2013-12-08 17:54:25


Error Messages

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 offset. (offset can also have the value compute.)

2013-12-08 17:56:09


Missing number, treated as zero 🔗

LaTeX is expecting a number. There are a number of possible causes:

  1. You have used an IDL instead of an IDN. If you want to refer to a frame by its label, you need to remember to use the starred versions of the \settypeframe commands, or when setting the contents of static frames or dynamic frames.
  2. When specifying page lists, you have mixed keywords with page ranges. For example: 1,even is invalid.

2013-12-08 17:57:50


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.

2013-12-08 17:59:01


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.)

2013-12-08 18:00:23


Key 'clear' is boolean 🔗

The clear key can only have the values true or false.

2013-12-08 18:01:26


Key 'clear' not available 🔗

The clear key is only available for static and dynamic frames.

2013-12-08 18:02:20


Key 'style' not available 🔗

The style key is only available for dynamic frames.

2013-12-08 18:02:54


Key 'margin' not available 🔗

The margin key is only available for flow frames.

2013-12-08 18:03:29


Key 'shape' not available 🔗

The shape key is only available for static and dynamic frames.

2013-12-08 18:04:14


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.

2013-12-08 18:05:31


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.

2013-12-08 18:06:19


Not in outer par mode 🔗

You can not have floats (such as figures, tables or marginal notes) in static frames or dynamic frames. If you want a figure or table within a static frame or dynamic frame use staticfigure or statictable.

2013-12-08 18:07:06


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 rerun.

2013-12-08 18:08:10


Undefined control sequence (\@ldc@l@r) 🔗

This seems to happen when the draft option is used without a colour package, such as color or xcolor, in conjunction with PDFLaTeX. It doesn't seem to happen with LaTeX. For some reason with PDFLaTeX the \color command is defined in the begin document hook, but not the command \@ldc@l@r which is the cause of this error message. You can avoid this error message by including the color package. You can use the monochrome option if you don't want any colour in your document:


2013-12-08 18:09:53


Undefined control sequence (\@nil) 🔗

This has been fixed in version 1.02.

2013-12-08 18:10:24


Undefined control sequence (\c@dynamic) 🔗

This has been fixed in version 1.08.

2013-12-08 18:10:58


No room for a new \skip 🔗

You have exceeded TeX's 256 register limit. Use the etex package.

2013-12-08 18:11:45


I get an error 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. (This is because the contents of dynamic frames are stored in a macro.) Try using a static frame and use staticcontents instead. See also Why doesn’t verbatim work within …?

2013-12-08 18:13:45