\usepackage{flowfram}[=1.18]
Note that v1.18 was never publicly released but is just a minor
change to v1.17 to allow for rollback with corrections.
If an example shows the icon 📥🖹 then you can click on that icon to try downloading the example source code from a location relative to this document. You can also try using:
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 flowfram package.
Advanced users wanting further details of the package should read
the documented code flowfram-code.pdf. Sample files are provided
with the documentation.
The flowfram package is a LaTeX 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. There’s an
optional helper application called FlowframTk (distributed
separately) if you prefer to use a graphical user interface to set up the
document layout (see §7.3).
Each frame has an identification number (IDN) that’s unique to the particular
type of frame that may be used to identify it. You may also
assign an identification label (IDL) for reference purposes to make it easier to
remember. In general, a command or environment with both a starred and unstarred
version that requires an ID will need the IDN for the
unstarred version and the IDL for the starred version.
Some commands may allow keywords (all, odd
or even) instead of a numeric value for the unstarred versions.
If the geometry package is required, it’s best to load it
first and setup the page dimensions before flowfram is loaded. You can
load geometry afterwards and the typeblock dimensions will
automatically be updated after it has been loaded, but they won’t be
correct if you later change the settings with
These lengths identify the dimensions and vertical offset of the
typeblock to ensure that all defined frames are in the
correct relative positions. If these dimensions change then the
available area used by commands like
If you need to switch frames on and off, it’s best to use the
pages=absolute package option if the page
counter is reset in the document.
Note that this example document has narrow columns with a small gap
between them. This can cause overfull lines and a cramped layout,
but it’s for illustrative purposes only.
In Example 1 the page counter is reset by
The flowfram package provides three types of frame:
flow frames, static frames and dynamic frames,
each with a custom width, height and position. (These may be changed
later, see §2.4.4.)
The main contents of the document environment flow from
one flow frame to the next in the order of definition
(for the flow frames that are valid on the current page),
whereas the contents of the static and dynamic frames
are set explicitly using commands such as
The page list (pages), exclusion list
(excludepages), and the hide and
hidethis settings determine whether or not a
frame is valid for a particular page.
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.
First, some flow frames are defined. I’ve given them labels
to make them easier to reference when changing their attributes:
Order of definition matters. The above are defined in the order:
upper (IDN 1), lower (IDN 2), and
middle (IDN 3). This means that the document text
will start in upper, flow into lower, and then
into middle.
A custom counter helps to demonstrate the order in which contents
are processed:
Next a dynamic frame is defined:
Some things to note from Example 2:
Static frames are always positioned on the page
first, so the sample static frame is drawn first and is
partially obscured by the other frames with overlapping positions.
Although the flow frames were filled first (because the
document text came before
So it’s important to consider the order when defining frames
but it’s also important to consider the frame type and when and how
the different types of frame are filled and processed.
Some options may only be set when the package is loaded, some may be
set in the preamble (before any command affected by the setting
is used) and a few may be used anywhere. For those options that may be
changed after the package has loaded, you can set them with:
Available options are listed in the sections below or see
§9.3 for an alphabetical list.
Thumbtabs are dynamic frames with a special label that can be created with
Each thumbtab frame has a corresponding index frame which may
be shown in the table of contents. This requires adjusting the
Mini-tocs are a sub-set of the table of contents that may be
displayed at the start of the applicable sectioning unit. This may
or may not be the same unit as the thumbtabs (if also
present). The default is to match them if both thumbtabs and
mini-tocs are required. The mini-toc information is
obtained when flowfram’s modified
This means that if the adjust-toc=off option is used to
restore the
Specifies whether
Adjust the table of contents, including the header. This may change
the way the page header is displayed, if a page style with headers
is used.
Adjust the table of contents, but not the header.
Don’t adjust the table of contents. There’s no support for
thumbtab indexes or mini-tocs with this setting.
Classes that support
If
Make
Indicates whether or not thumbtab indexes should be shown in
Divide the table of contents into blocks that are the
same height as the corresponding thumbtab.
This assumes that the start of the table of contents
is aligned with the vertical offset identified when the
thumbtabs were created. If the thumbtabs are shifted
too far up or down the will need to be adjusted
in the first optional argument of
Don’t align the sub-block in the table of contents with the corresponding
thumbtab and only show the thumbtab indexes on the first
page of the table of contents.
Show the thumbtab indexes on every page of the table of
contents.
Don’t show the thumbtab indexes in the table of
contents.
Indicates whether or not unstarred sectional units should have
thumbtabs. Note that this is not the same as unstarred but
unnumbered sectional units in the front matter or
back matter. (See matter-thumbtabs below, for that.)
This option will have no effect if thumbtabs aren’t enabled
when the applicable sectional units occur.
Indicates if unstarred sectional units outside of the main matter
should have thumbtabs. Unstarred commands such as
This setting will have no effect if thumbtabs aren’t enabled
outside of the main matter.
Only support thumbtabs for unstarred (numbered) units in the
main matter.
Support thumbtabs for all unstarred units.
Only support thumbtabs for unstarred (numbered) units in the
main matter and back matter but not in the front matter.
Only support thumbtabs for unstarred (numbered) units in the
main matter and front matter but not in the back matter.
Indicates which thumbtabs should have
Only have
Have
Don’t have
Indicates how the text should be shown on the thumbtabs.
Turn the text sideways. This will either rotate the text to the
right or to the left, depending on whether or not a two-sided layout
is on and whether or not the current page is odd or even.
Rotate the text to the right.
Rotate the text to the left.
Stacks the letters vertically. This doesn’t look very good and is
just provided for backward-compatibility.
No rotation or stacking.
Indicates whether or not the number or title should be shown in
the thumbtabs (if enabled).
Only show the title.
Only show the number (if applicable).
Show both the number (if applicable) and the title
Don’t show either the number or title.
The flowfram package redefines the standard sectioning
commands so that they have a second optional argument (which is used
for the corresponding thumbtab title, if enabled), but it first
saves the original definitions to use as an underlying command.
Normally it will only pass the first optional argument to the
underlying command.
If you are using a class, such as memoir, that also has a second optional
argument, then this option identifies whether or not the second
optional argument should also be passed to the underlying command.
If flowfram detects that memoir has been loaded, it will
automatically implement
sections-extra-option=original-and-thumbtab
otherwise it will implement
sections-extra-option=thumbtab-only.
Only use the second optional argument as the thumbtab title
(if applicable) and don’t pass it to the underlying command.
The underlying command has a second optional argument and any second
optional argument should be both passed to the underlying command
and used as the thumbtab title (if enabled).
The underlying command has a second optional
argument and any second optional argument provided should simply be passed
to the underlying command and not used as the thumbtab title.
Indicates whether or not
If
Don’t adjust the page styles.
Indicates whether or not
Convert to uppercase.
Don’t change the case.
Indicates whether or not
Convert to uppercase.
Don’t change the case.
Use the given to set the font used by
If is empty (but the equal sign
Use the given to set the font used by
Controls how the ffempty page style behaves with
dynamic header and footer frames. Remember that with
the default dynamic-page-style=adjust,
If you have decorated the header or footer dynamic frame, such
as setting a border or background colour, then simply setting the header
and footer to empty (the usual behaviour of the empty page
style), the header and footer frames will still be visible. This may
or may not be desired.
The ffempty page style will set the header and footer text
to empty but the frames will still be visible.
This option automatically sets
dynamic-empty-page-style=show.
The ffempty page style will behave like the ffplain
style. The header and footer frames will be visible.
This option automatically sets
dynamic-empty-page-style=show.
The ffempty page style will behave like the
ffheadings style. The header and footer frames will be visible.
This option automatically sets
dynamic-empty-page-style=show.
The ffempty page style will behave like the
ffmyheadings style. The header and footer frames will be visible.
The ffempty page style will do nothing, so the previous
page style will remain in effect. The header and footer frames will be visible.
This option automatically sets
dynamic-empty-page-style=show.
The header and footer frames will have the hide attribute
set by the ffempty page style. No other change will be
made, but since the frames will no longer be shown, the frame
content won’t be visible.
Note that if
The header and footer frames won’t have the hide (or
hidethis) attribute set by the ffempty page
style. Whatever dynamic-empty-page-style setting was in effect
before dynamic-empty-page-style=hide will continue.
These options govern column commands, such as
The order that the flow frames are
defined matters, as the output routine selects the next
flow frame in order of definition (that is, in ascending order of
IDN) and cycles back to the start when a page is shipped out.
So if the first flow frame to be defined is on the left, the
document text will start on the left, but if the first
flow frame to be defined is on the right, then the document
text will start on the right.
The column commands, such as
The column commands, such as
The flowfram package redefines
Ignore any instance of
Like column-changes=ignore but does
Switch to the designated frames, which will first need to be
identified. If you use
Similarly if you use
The first non-headed flow frame is identified by
and the second non-headed flow frame is identified by
.
If the optional arguments are omitted, then this just establishes
the two flow frames to use.
To identify a frame for the header and the two flow frames
accompanying it, the optional arguments are required:
is the frame type for the header (flow,
dynamic or static). Note that dynamic frames
are best for this, although they can cause dependent counters to go
out-of-sync. The header frame is identified with
. The first headed flow frame is identified
with and the second headed flow frame is
identified with .
All frames have an associated page list that determines
which pages they should be shown on. By default, this uses the
page counter, but as that is sometimes reset (for example,
when changing from front matter to main matter) this can
be ambiguous. Version 1.14 introduced the absolutepage
counter which is incremented every time a page is shipped out and
should not be reset, which allows for unambiguous references in the
page lists.
Use the absolutepage counter.
Use the standard page counter. Note that the page lists
always uses the numeric value (1, 2, etc) not the formatted value
(i, ii, etc). This is the default setting for backward
compatibility.
If true, don’t rotate frames, regardless of the
angle setting.
The remaining options are provided for backward-compatibility.
Equivalent to setting both prohibit-frame-rotation=true and
thumbtab-text=stack.
The original version of flowfram was released in 2005 when
there was less support for rotation, so the default was no frame
rotation and no thumbtab text rotation. This is no longer
applicable, so this is no longer the default.
If true, this option is equivalent to setting both
prohibit-frame-rotation=false and
thumbtab-text=rotate-right.
If false, this option is equivalent to norotate.
Include the title in the thumbtabs (if enabled). This doesn’t affect
whether or not the number is shown. Use the thumbtabs option
instead.
Don’t include the title in the thumbtabs (if enabled). This doesn’t affect
whether or not the number is shown. Use the thumbtabs option
instead.
Include the number in the thumbtabs (if enabled). This doesn’t affect
whether or not the title is shown. Use the thumbtabs option
instead.
Don’t include the number in the thumbtabs (if enabled). This doesn’t affect
whether or not the title is shown. Use the thumbtabs option
instead.
If true, enable colour support. Note that the color package is
now always loaded regardless of this option but setting this value
to false will prevent the textcolor, backcolor
and bordercolor frame options from having an effect.
Equivalent to color=false.
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 table. This is because
the arbitrary layout of the flow frames makes it difficult
to determine where to put them.
If you really need floats to behave normally on a particular page,
you can temporarily restore the normal output routine with
Since floats can’t go in the content of static frames or
dynamic frames, the flowfram package provides two
environments that may be used instead. Unlike their figure and
table counterparts, they are fixed in place, and
so do not take an optional placement specifier.
Simulate a figure in a static or dynamic frame.
Simulate a table in a static or dynamic frame.
The
The flowfram package’s draft option 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:
There are conditionals that govern what types of bounding boxes should
be shown. The draft option sets all these conditionals to
true. You can instead selectively switch on or off the applicable
conditions instead of using draft or in addition to using
draft.
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 modifies the output routine to ensure
that all frames are placed in the correct location and that
This can cause a conflict with other packages that rely on an unaltered
output routine or expect
If you need to use a command or environment that requires the normal
output routine, you can restore it with:
You can later revert back to flowfram’s output routine with:
If the
These hooks are largely redundant now that there are more convenient hooks
provided with the new LaTeX hook management system, but they are
retained for backward-compatibility.
If you want to use a different style, you will need to redefine
Chapter titles can be placed in a dynamic frame. See
§2.4.1 for further details.
This chapter describes how to define new frames, and how to
identify and set frame contents. See also §4.3.
There are three types of frame: flow frames,
static frames and dynamic frames. They each have their
own set of commands to define a new frame and to set the
frame’s attributes. Their identifying labels (IDLs)
and numbers (IDNs) are unique to each type of frame.
For example, the first flow frame to be defined will have
IDN 1, but the first static frame and the first
dynamic frame will also have IDN 1.
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.
The first optional argument, , 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 is
omitted, all is assumed.
A page range can be a closed range (such as,
With the pages=absolute package option, the numbers in the
page list refer to the absolute page number (as given by the
absolutepage counter). 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 flow 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 flow frame when you want to modify its
settings. Alternatively, you can assign a unique IDL to the
flow frame using the final optional argument .
If omitted, the IDL will be the same as its IDN.
There is no equivalent command that will expand to the IDN.
Instead you need to fetch the value with:
For example, suppose the first flow frame has been defined
with:
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.
You can force text to move immediately to the next defined
flow frame using
The
If a paragraph spans two flow frames of unequal width without
using
If you want to start a new page, rather than simply move to the
next flow frame, use the command
A static frame is a rectangular area in which text neither
flows into nor flows out of. That is, you have to explicitly set the contents of
this frame. A static frame may have non-rectangular content (see
§3.2).
There is no equivalent command that will expand to the IDN.
Instead you need to fetch the value with:
For example:
For advanced users:
Unlike dynamic frames, which store their contents in a global
token list variable, static frames set their contents in a
box. A box variable,
The actual box variable associated with the static frame
contents is then set after the flowfram/staticbox/after
hook. Since this always occurs within the staticcontents
or staticcontents* environment (either explicitly or
implicitly via
Although text can’t flow into or out of a static frame, it’s
possible to simulate this effect.
For example, if
This command is actually just a convenient shortcut where the
behaviour is determined by the encapsulating command or environment.
For example:
The optional argument specifies some continuation text to place
at the end of the first frame.
If is omitted, then (for static frames) the
default is:
By default,
The formatting of the supplied is applied by:
For example:
Alternatively, just redefine
The content of the continuation static frame will start with:
Both arguments are always numeric irrespective of whether or not the
starred or unstarred version of staticcontents or
The default definition simply ignores its arguments and expands to:
The arguments of
Now the defaults are changed:
The lipsum package is used for filler text.
Note that because of the narrow columns, there are some overfull
lines.
When you set the contents of a static frame, the contents are
immediately typeset and stored in a TeX “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.
However, if
A dynamic frame is similar to a
static frame except that its contents
are re-typeset on each page. As with static frames, a
dynamic frame may have non-rectangular content
(see §3.2).
The contents must be set and will remain the same until changed.
There are some special types of dynamic frames that have their content
automatically set. The clear attribute may be set to automatically
clear the contents whenever a page is shipped out but this
may interfere with the special dynamic frames.
Special frames have special labels that should not be
assigned to non-special dynamic frames:
header, footer,
evenheader, evenfooter (see
§2.4.2),
thumbtab, thumbtabindex,
eventhumbtab, and eventhumbtabindex
(see §6.1).
There is no equivalent command that will expand to the IDN.
Instead you need to fetch the value with:
For example, if the first dynamic frame is defined as:
The contents of a dynamic frame may be set with either a
command or an environment but, in either case, the content can’t
include any verbatim material.
Unlike static frames, you can append content to a
dynamic frame.
If
This feature was originally implemented with
The flowfram package redefines all the standard sectioning commands
(
To avoid this problem,
There are hooks available in the event that there are other
problematic commands that may need adjusting. These hooks are only
defined if
For example, this hook can be used to change the text colour of just
the heading without affecting the colour of any content that is
subsequently added to the frame:
For example, the PDF version of this document defines a new dynamic frame called
chaphead and uses it for chapter headings:
The document class is scrbook so the KOMA-Script
command that adds extra vertical space is redefined to do nothing
(since the dynamic frame has its own custom dimensions):
A mini-toc is also added to the same frame (see
§6.2):
I then defined a custom command to add a summary after the chapter
heading:
Modern classes, such as memoir and the KOMA-Script classes
provide ways of adjusting the style of chapter headings. These can be
adjusted, as in the example above. However, if you are using the
standard book or report class, flowfram will
adjust the definitions to make it easier to change the style.
Page headers and footers can be turned into dynamic frames
using:
Below, header frame and
footer frame refer to the dynamic frames
with the special labels header and
footer, but also (if applicable) to the
evenheader and evenfooter frames
created with FlowframTk.
The flowfram package provides page styles that are customised
for header and footer frames, which are listed below.
Remember that you can set the frame style with the style
setting, but you may prefer to modify the helper commands instead
(which may counteract the style setting):
For example, suppose you have created fancy header and footer frames with a background and border. It may look strange to have these
frames showing with empty content, so the default setting hides them
as well. However, if you still want the frames to show, then you
would need to change the dynamic-empty-page-style option to a
setting that doesn’t hide them, such as
dynamic-empty-page-style=empty.
This style sets
If
If
In either case, if ffempty is set to hide the special
header and footer frames, the ffheadings style will ensure that
hide and hidethis are set to false
to counteract any previous instance of ffempty.
As with static frames, in the body of dynamiccontents
or dynamiccontents* or within the text of
In this case, if
For example, suppose I have defined two dynamic frames labelled
frame1 (IDN 1) and frame2 (IDN 2), then:
When
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 frames attributes are modified using:
Static frames attributes are modified using:
Dynamic frames attributes are modified using:
In each of the above
In the case of the unstarred version the
can either be a list or range of IDNs that
identify the required frames or one of the
keywords all, odd or even.
The all keyword is essentially equivalent to using the
corresponding
The argument is a comma-separated list of = settings. Make sure that you group the if it
contains one or more commas or equal signs. Available options are
listed in §3.1.
Some attributes are shared by all types of frame but some are only
available for a particular type of frame.
The frame’s IDL can be assigned with the label
option. This may be needed when a frame is created by a helper
command, such as
The frame’s page list is set when the frame is defined. The
default is all. The pages
option may be used to change the page list.
The value may be either or .
Allowed values for :
Otherwise the value should be ,
a list or range of numbers identifying on which page or pages the
frame should be shown.
Ranges may be closed, such as 3-9 (which indicates pages 3
to 9 inclusive), or open-ended, such as <3 (which indicates
any page less than 3) or >9 (which indicates any page
greater than 9). The may be a single range or a
comma-separated list of individual pages or ranges, such as
<3,5-12,>20.
The page list may also be set using:
The numbers refer to the counter identified by the pages
package option. With pages=relative, the numbers
refer to the value of the page counter (not the formatted text
obtained with
Certain pages can be excluded from a frame’s page list. For
example, if a frame’s page list is set to all
but it has excludepages={2,9} then the frame will be
shown on all pages except for page 2 and page 9. Note that in this
case the value is just a list of numbers.
See also §3.3 for switching frames on and off
mid-document.
It’s also possible to set the exclusion list the following commands:
A frame can also be omitted if the boolean hide option is set.
If true, this overrides the page list and omits the frame for all
pages.
A frame can also be omitted if the boolean hidethis option is set.
If true, this overrides the page list and omits the frame for
this pages. The value will be reset when the current page is shipped
out.
This boolean option is only available for static frame
and dynamic frame. If true, the frame contents will be cleared
on each new page.
In the PDF version of this document, I have used
I’ve also used
This option is only available for static frames and dynamic frames. The value
should be a dimension (either explicit, such as
The dimension won’t be evaluated until the contents of the frame are
typeset. For static frames this is when the frame content is
set, and for dynamic frames this is every time the frame is
placed on the page by the output routine.
This option is only available for dynamic frames. The value
may be the keyword none (equivalent to @firstofone)
or the name of a declaration or a text-block command (without the leading backslash).
For example:
Bear in mind that text-block commands such as
Example 1 provided a custom command:
If you are not using FlowframTk and you need more than one
command to apply the style then you will need to define your own
custom command and use that instead (as in Example 1).
This key is only available for static frames and
dynamic frames and sets the paragraph shape for the frame
contents. See §3.2 for further details.
This key is only available for static frames and
dynamic frames and sets the vertical alignment of the content
within the frame. The default is c for static frames
and t for dynamic frames.
This option is only available for flow frames and indicates
on which side of the flow frame the margin should be placed.
The value may be one of the keywords: inner,
outer, left or right.
For two-sided documents, inner places the margin on the
left for odd pages and on the right for even pages, and
outer places the margin on the right for odd pages and on
the left for even pages.
For one-sided documents, inner is the same as left
(place to the left of the frame) and outer is the same as
right (place to the right of the frame).
Sets the frame’s offset to take the border into account.
The value may be a dimension or the keyword compute, which
will compute the offset if the frame has a known border (
If the frame has a border set and it takes up extra space (caused by
the padding between the border and the text and the size of the
frame) then this attribute needs to be set to shift the frame so
that the bottom left corner of the text area within the frame is at
the designated x and y-coordinates.
Set the width of the frame to the given . This is
available for all types of frame but be careful not to change this value
after any content has been added to the frame.
The width can be obtained for a flow frame with:
Set the height of the frame to the given . This is
available for all types of frame but be careful not to change this value
after any content has been added to the frame.
The height can be obtained for a flow frame with:
Set the x-coordinate of the frame for all pages on which it’s
defined. This is available for all types of frame.
Note that x= is equivalent to setting
both oddx= and
evenx=.
Set the y-coordinate of the frame for all pages on which it’s
defined. This is available for all types of frame.
Note that y= is equivalent to setting
both oddy= and
eveny=.
Set the frame’s x-coordinate for all even pages on which it’s
defined (only applicable if the document is two-sided).
For example:
The even-page x-coordinate can be obtained for a flow frame with:
Set the frame’s y-coordinate for all even pages on which it’s
defined (only applicable if the document is two-sided).
The even-page y co-ordinate can be obtained for a flow frame with:
Set the frame’s x-coordinate for all odd pages (or all pages
for one-sided documents) on which it’s defined.
The odd-page x-coordinate can be obtained for a flow frame with:
Set the frame’s y-coordinate for all odd pages (or all pages
for one-sided documents) on which it’s defined.
The odd-page y-coordinate can be obtained for a flow frame with:
There are also commands available to swap the odd and even
co-ordinates:
Rotates the frame by degrees. Note the bounding boxes are
not rotated in draft mode.
Sets the frame’s border. The may be the keyword
plain (use a plain border, equivalent to
border=fbox), false (no border) or
may be the control sequence name (without the leading backslash) of
a frame making command. If you set a border for a frame, you may also need to
specify the offset if the default computation is
incorrect.
The fancybox package provides the commands
For example, to make the first static frame have an oval border:
Synonym for bordercolor.
Synonym for bordercolor.
Synonym for bordercolor.
Synonym for backcolor.
Synonym for backcolor.
Synonym for backcolor.
Synonym for textcolor.
Synonym for textcolor.
Synonym for textcolor.
The need to know where page breaks occur can make it hard for a LaTeX to HTML
parser that doesn’t use a LaTeX engine to generate HTML output.
The arbitrary location of frames can make it hard to support
the flowfram package. As from version 2.0, there is now an
option specifically to help support parsers that don’t have access
to the output routine.
When the document is processed by LaTeX, this option simply writes
information to the aux file. The aux command depends on
whether or not the html option was in the preamble or in
the document environment.
This command will be written to the aux file if
the html option was set in the preamble.
This command will be written to the aux file if
the html option was set in the document environment.
Both commands have the same syntax. The first argument is a
number that starts at 1 and is incremented every time that the
html option is applied. The option is the
value of the html option. The is the frame
type, which will either be static or dynamic. The
argument is the frame’s IDN. The final two
arguments, and , are the values of
It’s up to the LaTeX to HTML parser to choose what options in
to implement. The following are options recognised by
the TeX Parser Library, which is used by the system that creates
the HTML helpset files for some of my Java GUI applications, including
FlowframTk:
This boolean option indicates that the frame contents should be
shown at this point. If this value is true, then the following
options govern how the content is shown.
If true, the content should be encapsulated in a
If div=true, then the
If div=true, then the
If true, the content should be converted to an image. This typically
indicates that the content is too complicated to convert to HTML.
If image=true, the image should have the given MIME
type.
If image=true, the image’s
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
The
To restore a static or dynamic frame to its default rectangular
setting, use shape
For those unfamiliar with TeX’s
For example, to create a zigzag shaped static frame (whose
IDL is
The syntax for
For example, to assign a heart shape to the static frame whose
IDL is shapedb:
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.
Modifying the page list (or the page exclusion list) within the
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.
The commands described in this section update the page lists
(and possibly the exclusion list) 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:
These commands all have the same syntax with one argument that may
be a comma-separated list. The starred version uses
the IDLs and the unstarred version uses the IDNs.
The flowfram package comes with a sample file
sample-pages.tex that uses some of these commands.
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-code.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. Since odd and even pages may have a different offset
if
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):
It is possible to determine the dimensions and locations
of a frame using one of the following commands.
For each command, the starred version identifies the frame by
its IDL and the unstarred version identifies it by its
IDN. The results are stored in the length registers
For other related commands, see the section “Determining Dimensions
and Locations” in the accompanying document
flowfram-code.pdf.
If you want to a textual description to appear in the document of
the relative location of one frame from another you can use:
The text produced will be obtained with one of the following
commands, which may be added to a language hook if required.
There are some short cut commands for frames of the
same type:
These commands may be used in the optional argument of
An alternative approach is to save the query in the aux file
to ensure that the page counter is correct:
On the next run, the information can be retrieved with:
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 result from the calculation is saved as one of the placeholder
commands,
You will only be able to find out an exact match with
If you simply need to know more generally, you can use the following
commands:
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-code.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 distance between the
flow frames created with these commands is given by
the standard
The standard LaTeX commands
The syntax for these commands is slightly different:
Draft mode draws grey rectangles to show the location of the
typeblock, frames and the margin area (where the text of
The plain border around the second flow frame is wider than
the actual frame area. In this case, the flowfram package
knows the appropriate offset for the plain border. Custom
borders may require the use of the offset option.
If you are creating the frames with FlowframTk then
there’s an area in which you can specify the inner padding between
the border and the area for the text.
You can switch off the automatic height adjustment using the command:
As well as the column-style flow frames defined
in §5.1, it is also possible to define
columns with an additional frame spanning either
above or below them. There will be a vertical gap of
approximately
In each of the following definitions,
the argument is the page list for which
the frames are defined, is the number of
columns required, 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 ,
(the width and height of the area) and ,
(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 and ,
respectively.
The following commands are special cases of the above:
The top/bottom frame for each of the above commands is defined
with:
The default behaviour for the column style commands defined
in §§5.1 & 5.2 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:
Remember that it’s the order of definition that determines
the next flow frame to be selected by the
output routine (that’s valid for the current page).
This setting simply switches round the order
of definition in the column-style shortcut commands.
Static frames can be used to produce a backdrop, and there
are a number of commands that define static frames and
automatically set the backcolor attribute to
create a rectangular patch of colour.
In the following definitions, is the page list
for which those static frames are defined (all is
the default). The arguments , …, are the
labels to assign to the 1st, …, th new frame that will
be created by the applicable command.
The arguments , …, are the colour
specifications for the , …, frame. The colour
specification must be completely enclosed in the etc
argument braces. For example {[rgb]{1,0,1}} (one argument)
not [rgb]{1,0,1} (optional argument followed by mandatory
argument).
For the horizontal stripes: is the amount by which
the frames should be shifted horizontally (0pt by default),
is the width of frame , and so on up to
, the width of frame .
For the vertical stripes: is the amount by which the
frames should be shifted vertically (0pt by default),
is the height of frame , and so on up to
, the height of frame .
You can create vertical or horizontal rules between two
frames using the commands described below. The arguments
and identify the frame type
(static, flow or dynamic). For the
unstarred version, the frames should be identified by their
IDN and for the starred version they should be identified by
their IDL.
The new frame’s y position and height are calculated from the
lowest point of the lowest frame (of and ) to the
highest point of the highest of the reference frames.
The first optional argument (default 0pt)
extends the height of the new frame by that much above the highest point.
The second optional argument (default 0pt) increases
the height of the new frame by that much but also lowers the
y position by that amount. If either of the optional
arguments are negative, the frame will be shortened instead of
extended.
The contents of this new frame are set to a vertical rule that
extends the full height of the frame.
The width of the rule is given by:
The vertical rule drawn by
The command:
The new frame’s x position and width are calculated from the
leftmost point of the furthest left frame (of and ) to the
rightmost point of the furthest right of the reference frames.
The first optional argument (default 0pt)
extends the width of the new frame by that much above the rightmost point.
The second optional argument (default 0pt) increases
the width of the new frame by that much but also lowers the
x position by that amount. If either of the optional
arguments are negative, the frame will be shortened instead of
extended.
The contents of this new frame are set to a horizontal rule that
extends the full width of the frame.
The height of the rule is given by
The horizontal rule drawn by
The lipsum package is used for filler text. The document
body sets the content for the first static frame (the top one):
Remember that because the static frame contents are set in a
box, any change to
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
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 (of a hard copy). Each thumbtab is in fact
a dynamic frame.
There are two dynamic frames per thumbtab: the
thumbtab index shown in the table of contents and the
main thumbtab shown in the applicable part of the document.
These frames are given special labels:
thumbtabindex for the th
thumbtab index and
thumbtab for the th thumbtab.
Options that govern the thumbtab settings are listed in
§1.2.1.
Each dynamic frame corresponding to a thumbtab and
thumbtab index is then defined by
When
The final optional argument
indicates what section unit should be used for the thumbtabs.
If omitted, obtained by expanding:
Make sure that you have set all your preferred thumbtab
settings before using
Once the thumbtab dynamic frames have been defined and
setup, the thumbtab indexing must be enabled.
You may put
You can stop indexing thumbtabs with:
The thumbtab index frames will automatically be shown in the
table of contents unless you have used
adjust-toc=off, which prevents flowfram from
redefining
There are commands available to customized the format of the
thumbtab content.
Regardless of whether or not hyperref has been loaded,
Since thumbtab frames are just dynamic frames, it is
possible to change their attributes with
Instead, the thumbtab frame attributes can be changed with:
For example:
Note that isn’t the same as the frame’s IDN.
The first argument may be the keyword all, which indicates all thumbtabs
frames.
To just change the settings for the thumbtab index, use:
By default, the thumbtabs have a grey background (unless you
have created them with FlowframTk). In the PDF version of this document, I set the
background colours with:
I then defined my own custom command for the frame style:
In the PDF version of this document, after each chapter heading, there is a mini table of
contents (mini-toc) for that chapter. To enable
mini-tocs, use the command:
The mini-toc will normally appear immediately after the
corresponding section heading. If you prefer the mini-toc to
appear in a dynamic frame, you can use:
For example, in the PDF version of this document, I have:
Recall from §2.4.1 that
This means that if you have something like:
The style of the mini-toc text is governed by:
The mini-toc has vertical spacing before and after it.
This section describes style macros, lengths and counters used
by the flowfram package.
The following macros can be changed using
The following are lengths, which can be changed using
The following are counters that can be accessed via
FlowframTk is a Java graphical application that may be used to
create images from shapes that are defined by control points
(vector graphics). Bitmaps and text can also be added.
The latest stable version can be found on CTAN but
experimental releases are also available
on GitHub.
The application can be invoked from the command line with:
An image created in FlowframTk can be exported as a LaTeX (tex) file that contains a pgfpicture environment
(provided by the pgf package) with the basic layer commands
that replicate (as near as possible) the image created in
FlowframTk. By way of example, Figure 1.1 was
created using FlowframTk (with the isometric grid).
Any document that inputs one of these exported files will need to
include the pgf package, but the exported file may also
contain some bespoke commands needed to emulate certain effects,
such as outlined text. These are provided by the
flowframtkutils package (see
§8.4) which automatically loads pgf.
If all you want is to include the exported image in your document,
then you don’t need to load the flowfram package in your document
(but you will need to ensure that flowfram is installed in
order to load the supplementary flowframtkutils package, if
required).
The flowfram package is too fragile and has the potential to
conflict with too many other classes or packages to load it unnecessarily.
The shape attribute is only available for
static or dynamic frames. It can be set automatically if you want to
use FlowframTk’s export to document class or package
function (§8.3) but if you want a shaped
paragraph in a flow frame or if you don’t need to use the
flowfram package but would like a shaped paragraph in an
ordinary document, then you can create the desired shape in
FlowframTk and use the “Parshape” or “Shapepar” function
(be sure to set the normal font size first in FlowframTk’s
TeX configuration settings). This will calculate the
parameters for the applicable command and create a file that
contains the command and arguments needed to shape a paragraph.
Simply
Whilst creating images is something that can also be done by other vector
graphics applications (some of which may create more readable
tikz code), FlowframTk can also create a LaTeX package
(sty) or class file (cls) that uses the flowfram
package. In this case, instead of reproducing the image, the shapes
may be used to identify flow frames, static frames or
dynamic frames. The definitions (
When using FlowframTk to construct flowfram data, you
need to first establish the typeblock and then identify the
shapes that should represent frames. Any shapes that aren’t
identified as such won’t be exported. (This is useful if, for
example, you have shapes that provide guides for the positioning of
other shapes.) You can choose whether the shape itself should be used as a
border (or background, if it’s filled) for the corresponding frame
or whether to simply use the shape’s bounding box as the location
and size of the frame.
You may also define dynamic frames with special labels
but make sure you have an up-to-date version of both flowfram
and FlowframTk to ensure they are properly implemented.
With at least FlowframTk version 0.8.8, you can use the Flow
Frame Wizard to ensure that the correct labels are used.
The flowframtkutils package is provided with flowfram
v2.0+ to assist with files that have been exported from FlowframTk.
It provides the bespoke commands that may be written to those files.
Ensure that you have at least version 0.8.8 of FlowframTk
to support newer commands.
All options that can be passed to flowfram can also be passed
to a package (sty) or class (cls) created by FlowframTk. However,
flowframtkutils itself only has the following options, which
can only be set when the package is loaded:
If true, when flowframtkutils is loaded, it will automatically
load the decorations.text PGF library after loading the pgf
package. Note that this library doesn’t support all of
FlowframTk’s text-path settings. See the FlowframTk
documentation for further details.
If true, when flowframtkutils is loaded, it will try to
provide the appropriate support for outline text and will redefine
If pdfLaTeX or LuaLaTeX is used, this option will input the
pdf-trans.tex file, which contains generic pdfTeX code to
render text as an outline. This code includes pdfTeX primitives,
so if LuaLaTeX is used, the luatex85 package will
automatically be loaded with this option to ensure they are defined.
If a different engine is used, this option will load the
pst-char package instead, which will use PSTricks to render
the outline.
Many of the flowfram-related commands provided by the
flowframtkutils package aren’t intended for general use, as
they are provided to simplify the code written by FlowframTk
to ensure that the bespoke files are correctly integrated with the
flowfram package with the class/package export function.
Most of the user-level commands described here are those used when
exporting an image to a file containing the pgfpicture
environment. (The “jdr” prefix is a throwback to
FlowframTk’s original name, JpgfDraw.)
If you export to a complete document, FlowframTk version 0.8.8
and above will search for the flowframtkutils package using
kpsewhich. If it’s found, FlowframTk will assume it’s
available for use. If not, or if an older version of
FlowframTk is used, it will provide the definition of the
“jdr” commands if they are required.
The
The filename identified by is input but
the command first locally sets the input search path to match the graphics
search path used by
If the optional argument is present, a transformation can be applied
to the image. For example, if it turns out to be too large for the
page, you could go back to FlowframTk and shrink it or you
can use the scaling options in
If enabled by the outline option,
For example, large bold “ABC” rendered with a green outline
that’s filled with red:
Used for encapsulated images,
If FlowframTk was instructed to include the title and creation
date, this command will be written to the exported (tex) document file.
This is only applicable when the export to a complete document is used, rather than
export to a file just containing the image code.
Available options:
If hyperref has been loaded, this will use
If hyperref has been loaded, this will use
If you provide a description for an object, it will be included as a
comment. This can help to identify the relevant parts of the code
but you may prefer to have hooks to allow you to add content from
the document (rather than editing the exported image file).
For example, to add tagging for accessibility or to
uncover elements of the image in beamer. With FlowframTk
v0.8.8+, you can specify what type of hook you want:
paired, encapsulated or no hook.
Alternatively, you can choose to encapsulate each object, which will
instead use the following hook:
The common arguments in these hooks are:
This is the class responsible for writing the PGF code to render (as
closely as possible) the object. That is, the final argument for
A simplistic way of adding overlays would be to export using the
paired commands and add
The flowframtkutils package provides a function that may be
used in the definition of
This recognises the settings that may be set in the optional argument
of
The default is to use beamer’s
If you later want to change the settings you can use:
The
For example, assuming that the file image.tex was created
by FlowframTk with the “Object Markup” option set to “Encapsulated”:
There are two ways of adding annotations. You can either add the
text and, if applicable, a line with an arrow head to the image in
FlowframTk and tag them. Then you can use the
tag-overlay option to uncover them. Alternatively,
you can use the annote option to automatically add
annotations based on each object’s tag or description.
This second method is less precise as the annotation is placed
relative to the object’s bounding box, which may be at a distance
from a non-rectangular shape, but may be sufficient for simple
images.
Available options are listed below.
If the is not empty, this option automatically sets
auto-overlay=false.
The key may be any of:
group, path, text, text-path,
symmetric-path, scaled-pattern,
spiral-pattern, rotational-pattern or
bitmap.
For example:
If the is not empty, this option automatically sets
auto-overlay=false.
These are available settings for use in the
fallback-overlay option value.
They can also be set with
These are available settings for use in the
annote-arrow option value.
They can also be set with
Remember to include the arrows.meta PGF library if you want
to use any of the meta arrows. For example with:
For example:
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.
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 §3.2).
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 §1.1). 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
approximate analogy (not strictly accurate as TeX may make several
attempts to fill in the flow frames due to penalties etc):
TeX has a sheet of paper on the table, and has
pencilled 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
Use the valign attribute.
See §4.1.
Yes, FlowframTk (see §7.3).
This is a problem that will occur if you have flow frames
with different widths, as the change in
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
§2.4.4).
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:
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
See the previous answer.
The paragraph indentation in static or dynamic frames is governed
by the length
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
occurring within dynamic frames, they may not be set in the same
order as they are in your input file.
This will happen if your
All lengths must have units. Remember to include the
units when defining new frames. The following
frame options require lengths: width, height,
x, y,
oddx, oddy,
evenx, eveny,
parindent and offset (although
offset can also have the value compute).
LaTeX is expecting a number. There are a number of
possible causes:
All IDLs within each frame type must be
unique. There are similar error messages for duplicate
IDLs for static frames and dynamic frames.
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 “
The clear key can only have the values true
or false.
The clear key is only available for static or dynamic frames.
The style key is only available for dynamic frames.
The margin key is only available for flow frames.
The shape key is only available for static or dynamic frames.
The specified 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.
This error will occur if you do, say,
border=
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.
Assuming that all your list type of environments start
with
As a general rule, you can’t use verbatim in a command
argument. This rule applies to all the commands defined by the
flowfram package. See also below.
You can not use commands or environments inside either the
dynamiccontents or dynamiccontents* environment.
Adjust the value of
The vertical space after mini-tocs. §6.2; 146
Appends the mini-toc to the dynamic frame identified by (the IDN for the unstarred version or the IDL for the starred version). The mini-toc support needs to be enabled with
Appends the given content to the dynamic frames identified by , which is the frame’s IDN (unstarred) or IDL (starred). If is present, they will be applied to the frame at the same time. §2.4; 53
The vertical space before mini-tocs. §6.2; 145
Modified by flowfram, this has an additional optional argument for the thumbtab titles (see sections-extra-option if you are using a class that also has a second optional argument). Note that the starred version also has both optional arguments.
The page style for the first page of a chapter. §1.6; 33
Adapts
Similar to
Computes the position of the bottom edge of the page, relative to the bottom of the typeblock. §4.1; 102
Computes the minimum area surrounding the listed flow frames (identified by their IDL for the starred version and their IDN for the unstarred version) and stores the results in
Computes the position of the leftmost edge of the page, relative to the left side of the typeblock for even pages. §4.1; 101
Computes the position of the leftmost edge of the page, relative to the left side of the typeblock for odd pages. §4.1; 101
Computes the position of the rightmost edge of the page, relative to the left side of the typeblock for even pages. §4.1; 102
Computes the position of the rightmost edge of the page, relative to the left side of the typeblock for odd pages. §4.1; 102
Computes the position of the top edge of the page, relative to the bottom of the typeblock. §4.1; 101
Ends the current staticcontents or dynamiccontents and starts a new environment of the same type for the frame given by . If the starred version of the environment was used then refers to the next frame’s IDL otherwise it refers to its IDN. If is omitted then
Expands to the default section type to be used by
Old method for putting chapter title in a dynamic frame.
Used with
Used to format the page footer in the header and footer frame
page styles for even pages. §2.4.2; 61
Used to format the page header in the header and footer frame
page styles for even pages. §2.4.2; 61
Used to format the page footer in the header and footer frame
page styles for odd pages. §2.4.2; 61
Used to format the page header in the header and footer frame
page styles for odd pages. §2.4.2; 61
Swap the odd and even co-ordinates for all listed dynamic frames. §3.1.3; 85
The thumbtab frames created by
Appends to the exclusion list for the dynamic frame identified by its IDN. §3.1.1; 74
Expands to the even-page x-coordinate of the dynamic frame identified by its IDN. §3.1.3; 82
Expands to the even-page y-coordinate of the dynamic frame identified by its IDN. §3.1.3; 83
Expands to the height of the dynamic frame identified by its IDN. §3.1.3; 81
Expands to the width of the dynamic frame identified by its IDN. §3.1.3; 80
Expands to the x-coordinate of the dynamic frame identified by its IDN. §3.1.3; 83
Expands to the y-coordinate of the dynamic frame identified by its IDN. §3.1.3; 84
Sets the exclusion list for the dynamic frame identified by its IDN. §3.1.1; 74
Sets the page list for the dynamic frame identified by its IDN. §3.1.1; 72
Switch off the listed dynamic frames from the next page onwards. §3.3; 96
Switch off the listed dynamic frames from the next odd page onwards (after that they will be off for both even and odd pages). §3.3; 97
Switch off the listed dynamic frames for the next odd page only. §3.3; 97
Switch off the listed dynamic frames for the next page only. §3.3; 97
Switch on the listed dynamic frames from the next page onwards. §3.3; 96
Switch on the listed dynamic frames from the next odd page onwards (after that they will show on both even and odd pages). §3.3; 97
Switch on the listed dynamic frames for the next odd page only. §3.3; 97
Switch on the listed dynamic frames for the next page only. §3.3; 97
Enables mini-tocs at the start of the given sectional unit. §6.2; 144
The thumbtab frames created by
Text used to describe one frame is above another. §4.3; 105
Text used to describe one frame above left from another. §4.3; 104
Text used to describe one frame above right from another. §4.3; 104
Used by commands like
Used by commands like
Used by commands like
Used by commands like
Text used to describe one frame is below another. §4.3; 105
Text used to describe one frame below left from another. §4.3; 105
Text used to describe one frame below right from another. §4.3; 105
The default font declarations for the chapter heading. §2.4.1; 58
The paragraph style for the chapter header. §2.4.1; 58
Typesets the chapter name (Chapter/Appendix) and number. §2.4.1; 59
The font command for the chapter name and number. §2.4.1; 59
Vertical space after chapter header. §2.4.1; 58
Separator between the chapter number and title. §2.4.1; 59
Vertical space before chapter header. §2.4.1; 58
The font command for the chapter title. §2.4.1; 59
The width/height of the rules created by
Used
Used by
Default used by both
Default continuation text if the optional argument of
Default behaviour of
Default continuation text if the optional argument of
Placed at the start of a dynamic frame with continued content where is the IDN of the previous frame and is the IDN of the continuation frame. §2.4.3; 67
Used to draw the rule for
Font declarations used for the annotation labels shown in draft mode. §7.1; 147
When drawing the bounding boxes in draft mode (but not for the typeblock), this is the distance between the bounding box outline and the label. §7.2; 148
Text used to describe one frame is to the left of another. §4.3; 105
Text used to describe overlapping frames. §4.3; 105
Hook added to the start of
Text used to describe one frame is to the right of another. §4.3; 105
Used by
Placed at the start of a static frame with continued content where is the IDN of the previous frame and is the IDN of the continuation frame. §2.3.1; 47
Swap the odd and even co-ordinates for all listed flow frames. §3.1.3; 84
The tolerance used when determining whether or not to warn when moving between flow frames of different widths. §2.1.1; 38
Sets the
Sets the
Used to draw the rule for
Similar to the way
Simulate a paragraph break inside
Appends to the exclusion list for the flow frame identified by its IDN. §3.1.1; 74
Does nothing. This command is written to the aux file if the html option is used in the document environment. It’s provided for the benefit of LaTeX to HTML parsers. §3.1.5; 89
Does nothing. This command is written to the aux file if the html option is used in the preamble. It’s provided for the benefit of LaTeX to HTML parsers. §3.1.5; 89
Used by the ffheadings page style to format the chapter mark. §2.4.2; 61
Expands to the even-page x-coordinate of the flow frame identified by its IDN. §3.1.3; 82
Expands to the even-page y-coordinate of the flow frame identified by its IDN. §3.1.3; 82
Expands to the height of the flow frame identified by its IDN. §3.1.3; 80
The width of the rule for the border of frames, if the standard border is used. This is initialised to
The gap between the text and the border of frames, if the standard border is used. This is initialised to
Finishes the current page, temporarily sets draft mode, and prints an empty page. §1.4; 30
Expands to the width of the flow frame identified by its IDN. §3.1.3; 80
Expands to the x-coordinate of the flow frame identified by its IDN. §3.1.3; 83
Expands to the y-coordinate of the flow frame identified by its IDN. §3.1.3; 84
Prefix inserted before the chapter number. §2.4.2; 62
Separator used between the chapter or section number and the title (when the number is shown). §2.4.2; 62
Restore the original output routine (the current page will be finished and output first). §1.5; 31
Used by the ffheadings page style to format the section mark. §2.4.2; 61
Set any options that may be adjusted after the package has loaded. §1.2; 10
Used by the ffheadings page style to format the subsection mark.
Encapsulates an object that forms part of an image. §8.4.2; 161
Marks the end of an object that forms part of the image. Should always be paired with a matching
Set the document title and creation date. §8.4.2; 159
Normally just expands to . §8.4.2; 160
Set the PDF creation date. §8.4.2; 159
Set the document title. §8.4.2; 159
Marks the start of an object that forms part of the image. Should always be paired with a matching
Set the options for
Redefines
The low-level function used by
Used by
Used by
Restore flowfram’s modified output routine (the current page will be finished and output first). §1.5; 32
Sets the exclusion list for the flow frame identified by its IDN. §3.1.1; 74
Sets the page list for the flow frame identified by its IDN. §3.1.1; 72
Switch off the listed flow frames from the next page onwards. §3.3; 95
Switch off the listed flow frames from the next odd page onwards (after that they will be off for both even and odd pages). §3.3; 96
Switch off the listed flow frames for the next odd page only. §3.3; 96
Switch off the listed flow frames for the next page only. §3.3; 96
Switch on the listed flow frames from the next page onwards. §3.3; 95
Switch on the listed flow frames from the next odd page onwards (after that they will show on both even and odd pages). §3.3; 95
Switch on the listed flow frames for the next odd page only. §3.3; 96
Switch on the listed flow frames for the next page only. §3.3; 96
Forces a break from one frame to another. This creates a paragraph break in order to ensure the output routine adjusts to the new frame width but gives the effect of a continuous paragraph (although this may cause excess spacing). §2.1.1; 37
Gets the bounds for the dynamic frame identified by (the IDL for the starred version and the IDN for the unstarred version) and stores the results in
Defines the command to expand to the IDN of the dynamic frame identified by its IDL. §2.4; 51
Expands to the IDL of the dynamic frame identified by its IDN. §2.4; 51
Gets the bounds for the flow frame identified by (the IDL for the starred version and the IDN for the unstarred version) and stores the results in
Defines the command to expand to the IDN of the flow frame identified by its IDL. §2.1; 36
Expands to the IDL of the flow frame identified by its IDN. §2.1; 36
Gets the bounds for the static frame identified by (the IDL for the starred version and the IDN for the unstarred version) and stores the results in
Defines the command to expand to the IDN of the static frame identified by its IDL. §2.2; 40
Expands to the IDL of the static frame identified by its IDN. §2.2; 40
As
As
As
Defines two vertically stacked static frames where the first frame has height , background colour and label , and the second frame has height , background colour and label . Both frames have the width set to
As
As
If true, the column commands, such as
Set to
Tests if the saved result from
Tests if the saved result from
Tests if the saved result from
Tests if the saved result from
Tests if the saved result from
If true, the bounding boxes of all frames will be drawn in grey on the page. §1.4; 30
If true, the flow frame margins will be drawn in grey on the page. §1.4; 29
If true, the typeblock will be drawn in grey on the page. §1.4; 29
If the optional argument is omitted, this just inputs , otherwise it applies a transformation according to the options. §8.4.2; 157
Creates a horizontal rule between two frames. The starred version references the frames by their IDL otherwise the frames are referenced by their IDN. The rule will extend from the leftmost point of the two frames minus to the rightmost point of the two frames plus . §5.4.4; 133
Creates a vertical rule between two frames. The starred version references the frames by their IDL otherwise the frames are referenced by their IDN. The rule will extend from the highest point of the two frames plus to the lowest point of the two frames minus . §5.4.4; 132
Used for encapsulated images, this is designed to prevent problems if numerical rounding errors cause the image to be larger than the available area. §8.4.2; 158
If enabled by the outline option, this will attempt to render as an outline using (if pdf-trans.tex was loaded) or (if pst-char was loaded). If not enabled, this command will generate a warning and just do . §8.4.2; 158
Labels the current flow frame with
Labels the current flow frame with
Sets the
Sets the
Creates a single static frame that covers the entire page. This command, if required, should come before any other static frames that are shown on any of the pages in otherwise it will obscure them. §5.4.3; 131
Creates the header and footer dynamic frames to use for the page header and footer. They can then be moved, resized or styled as required. This command will set the ffheadings package style and, depending on the dynamic-page-style setting, may adjust the standard page styles. §2.4.2; 60
Create thumbtabs for the given section type with the given height, where the first thumbtab is offset from the top of the typeblock by . This command first inputs the ttb file to read the information from the previous run and the opens the file to allow information from this run to be written to it. Note that the thumbtab dynamic frames will have the hide attribute switched on. This will be switched off by
The style used to format the mini-toc. §6.2; 145
Creates flow frames that fit in the typeblock separated by the distance given by
As
Creates a frame of the given type (flow, static or dynamic) and height and side-by-side flow frames that all fit in the given area such that the first frame is below the other frames, separated by
As
As
As
As
Creates flow frames that span the given area separated by the distance given by
As
As
As
As
As
Creates a frame of the given type (flow, static or dynamic) and height and side-by-side flow frames that all fit in the given area such that the first frame is above the other frames, separated by
Defines a new dynamic frame with the given dimensions and location. If is provided, that will be set as the frame’s IDL otherwise the IDL will be the same as the IDN. §2.4; 50
Defines a new flow frame with the given dimensions and location. If is provided, that will be set as the frame’s IDL otherwise the IDL will be the same as the IDN. §2.1; 35
Defines a new frame of the given with the given dimensions and location. If is provided, that will be set as the frame’s IDL otherwise the IDL will be the same as the IDN. §5.2; 126
Defines a new static frame with the given dimensions and location. If is provided, that will be set as the frame’s IDL otherwise the IDL will be the same as the IDN. §2.2; 40
Creates a flow frame that spans the typeblock, with the height adjusted if the conditional
As
Creates a frame of the given type (flow, static or dynamic) and height and a flow frame that fit in the given area so that the first frame is below the second frame, separated by
As
As
As
As
Creates a flow frame that spans the given area, with the height adjusted if the conditional
As
As
As
As
As
Creates a frame of the given type (flow, static or dynamic) and height and a flow frame that fit in the given area so that the first frame is above the second frame, separated by
Modified by flowfram, this has an additional optional argument for the thumbtab titles (see sections-extra-option if you are using a class that also has a second optional argument). Note that the starred version also has both optional arguments.
Fetches the information saved on the previous run with
Produces a textual description of the relative location of the frame identified by to the frame identified by (the starred version references the frames by their IDL and the unstarred version references them by their IDN). §4.3; 104
Shortcut for
Shortcut for
Shortcut for
Similar to
The default paragraph indentation within static and dynamic frames (may be overridden for individual frames through the parindent option). §7.2; 148
Modified by flowfram, this has an additional optional argument for the thumbtab titles (see sections-extra-option if you are using a class that also has a second optional argument). Note that the starred version also has both optional arguments.
Sets the attributes in for all defined dynamic frames. §3; 70
Sets the attributes in for all defined flow frames. §3; 69
Sets the attributes in for all defined static frames. §3; 69
Sets the content of the dynamic frames identified by , which is the frame’s IDN (unstarred) or IDL (starred). If is present, they will be applied to the frame at the same time. §2.4; 52
Sets the attributes for the given dynamic frames, identified by the list of IDs, which each identify a frame by its IDN (unstarred) or IDL (starred). §3; 70
Sets the colour of the bounding box outlines in draft mode. §7.1; 147
Sets the colour of the typeblock outline in draft mode. §7.1; 147
Sets the attributes for the given flow frames, identified by the list of IDs, which each identify a frame by its IDN (unstarred) or IDL (starred). §3; 69
For use with column-changes=switch, this command identifies the flow frame to use if
Sets the content of the given static frames identified by , which is the frame’s IDN (unstarred) or IDL (starred). If is present, they will be applied to the frame at the same time. §2.3; 41
Sets the attributes for the given static frames, identified by the list of IDs, which each identify a frame by its IDN (unstarred) or IDL (starred). §3; 69
Sets the given attributes for all of the dynamic frames for the thumbtab with the identified index or for all thumbtabs if the first argument is the keyword all. §6.1; 142
Sets the given attributes for the thumbtab index frame with the identified index or for all thumbtabs index frames if the first argument is the keyword all. §6.1; 142
For use with column-changes=switch, this command identifies the frames to use if
Swap the odd and even co-ordinates for all listed static frames. §3.1.3; 85
Sets the
Sets the
Sets the
Sets the
Sets the
Sets the
Old name for
Appends to the exclusion list for the static frame identified by its IDN. §3.1.1; 74
Temporary box register used in as an intermediate when setting the contents of a static frame. §2.3; 42
Expands to the even-page x-coordinate of the static frame identified by its IDN. §3.1.3; 82
Expands to the even-page y-coordinate of the static frame identified by its IDN. §3.1.3; 83
Expands to the height of the static frame identified by its IDN. §3.1.3; 80
Expands to the width of the static frame identified by its IDN. §3.1.3; 80
Expands to the x-coordinate of the static frame identified by its IDN. §3.1.3; 83
Expands to the y-coordinate of the static frame identified by its IDN. §3.1.3; 84
Sets the exclusion list for the static frame identified by its IDN. §3.1.1; 74
Sets the page list for the static frame identified by its IDN. §3.1.1; 72
Switch off the listed static frames from the next page onwards. §3.3; 98
Switch off the listed static frames from the next odd page onwards (after that they will be off for both even and odd pages). §3.3; 98
Switch off the listed static frames for the next odd page only. §3.3; 98
Switch off the listed static frames for the next page only. §3.3; 98
Switch on the listed static frames from the next page onwards. §3.3; 97
Switch on the listed static frames from the next odd page onwards (after that they will show on both even and odd pages). §3.3; 98
Switch on the listed static frames for the next odd page only. §3.3; 98
Switch on the listed static frames for the next page only. §3.3; 98
Used to format the thumbtab text. §6.1; 141
If hyperref is loaded, this command will be redefined to create a hyperlink for the thumbtab frame content. §6.1; 141
Used internally by flowfram’s modified
Used to format the content of the thumbtab index frames. §6.1; 141
Used to format the content of the thumbtab (non-index) frames. §6.1; 141
The default width of thumbtabs. §6.1; 138
Creates two flow frames that fit in the typeblock separated by the distance given by
As
Creates a frame of the given type (flow, static or dynamic) and height and two side-by-side flow frames that all fit in the given area such that the first frame is below the other two frames, separated by
As
As
As
As
Creates two flow frames that span the given area separated by the distance given by
As
As
As
As
As
Creates a frame of the given type (flow, static or dynamic) and height and two side-by-side flow frames that all fit in the given area such that the first frame is above the other two frames, separated by
A length (dimension) that stores the height of the typeblock (initialised to
A length (dimension) that stores the vertical offset of the typeblock (initialised to the sum of
A length (dimension) that stores the width of the typeblock (initialised to
The vertical distance between the top/bottom frame and the column flow frames when using commands like
As
As
As
Defines two side-by-side static frames where the first frame has width , background colour and label , and the second frame has width , background colour and label . Both frames have the height set to
As
As
Sets the contents of the dynamic frame identified by its IDN. Note that verbatim text can’t occur within the environment body. §2.4; 52
Sets the contents of the dynamic frame identified by its IDL. Note that verbatim text can’t occur within the environment body. §2.4; 53
Sets the contents of the static frame identified by its IDN. §2.3; 41
Sets the contents of the static frame identified by its IDL. §2.3; 41
Simulate a figure in a static or dynamic frame. §1.3; 28
Simulate a table in a static or dynamic frame. §1.3; 28
Package for constructing custom document columns and fixed frames. §1.2; 9
If true and
Specifies whether or not the table of contents should be adjusted to support thumbtab indexes and mini-tocs. §1.2.1; 11
Adjust the table of contents, including the header. 11
Adjust the table of contents, but not the header. 11
Don’t adjust the table of contents, which means there won’t be any support for thumbtab indexes or mini-tocs. 11
Classes that support
Don’t alter secnumdepth in the back matter. 12
Suppress section numbers in the back matter (
If true, enable colour support. §1.2.4; 27
Indicates what to do if
Clear the page but otherwise ignore any instance of
Ignore any instance of
Switch to the designated frames. 23
Switches on draft mode. §1.2.4; 25
Controls how the ffempty page style behaves with dynamic header and footer frames. §1.2.2; 20
The header and footer frames have their contents set to empty but will still be shown on the page. 20
Behaves like ffheadings. 20
The hide attribute will be switched on with
The style will do nothing, retaining the current page style. 21
Behaves like ffmyheadings. 21
The hide or hidethis attribute won’t be switched on by the ffempty style. 21
Indicates whether or not
Don’t change the case of the header. 18
Change the header to uppercase. 18
Use the given to set the font used by
Use the given to set the font used by
Indicates whether or not to adjust the standard page styles if the header and footer are converted into dynamic frames. §1.2.2; 17
If used,
Don’t adjust the empty, plain, headings and myheadings page styles. 18
Indicates whether or not
Don’t change the case of the sub-header. 19
Change the sub-header to uppercase. 19
Switches off draft mode. §1.2.4; 25
The column commands, such as
Indicates whether or not unstarred sectional units outside of the main matter should have thumbtabs. §1.2.1; 13
Support thumbtabs for unstarred units everywhere. 14
Only have thumbtabs for unstarred units in the main matter. 13
Only have thumbtabs for unstarred units in the main matter and front matter but not in the back matter. 14
Only have thumbtabs for unstarred units in the main matter and back matter but not in the front matter. 14
Equivalent to color=false. §1.2.4; 27
Prevents frame rotation and sets thumbtab-text=stack. §1.2.4; 26
Indicates which value page lists refer to. §1.2.4; 24
All page lists refer to the absolutepage counter. 25
All page lists refer to the page counter. 25
If true, disable frame rotation. §1.2.4; 26
The column commands, such as
If true, enables frame rotation and sets thumbtab-text=rotate-right. §1.2.4; 26
Indicates whether or not the second optional argument of sectioning commands should be passed to the original or just be used for the thumbtab title. §1.2.1; 16
Indicates that the underlying command has a second optional argument and any second optional argument should simply be passed and not used as the thumbtab title. 17
Indicates that the underlying command has a second optional argument and any second optional argument should be both passed to the underlying command and used as the thumbtab title (if enabled). 17
Indicates that the second optional argument (if present) should only be used as the thumbtab title (if enabled) and not passed to the underlying command. 17
Indicates which thumbtabs should have
Have
Don’t have
Only have
Indicates how the text should be shown in the thumbtabs. §1.2.1; 15
No rotation or stacking. 15
Rotate the text to the left. 15
Rotate the text to the right. 15
Turn the text sideways. 15
Stack the letters vertically. 15
Indicates whether or not the number or title should be shown in the thumbtabs. §1.2.1; 16
Show both the number (if applicable) and the title. 16
Don’t show either the number or title. 16
Only show the number (if applicable). 16
Only show the title. 16
Sets whether or not to show the thumbtab index frames in the table of contents (if thumbtabs have been created). §1.2.1; 12
Separate the table of contents into blocks that are the same height as the corresponding thumbtab (for single-paged table of contents only). 12
Don’t show the thumbtab indexes in the table of contents. 13
Show the thumbtab indexes on every page of the table of contents. 13
Don’t align sub-blocks of the table of contents with the thumbtabs and only show the thumbtab indexes on the first page of the table of contents. 12
Don’t include the number in the thumbtabs (if enabled). §1.2.4; 27
Don’t include the title in the thumbtabs (if enabled). §1.2.4; 26
Include the number in the thumbtabs (if enabled). §1.2.4; 27
Include the title in the thumbtabs (if enabled). §1.2.4; 26
Indicates whether or not unstarred units should have thumbtabs. §1.2.1; 13
Switches on/off verbose mode. §1.2.4; 25
Supplementary package for use with flowframtk. §8.4; 155
If true, provide support for outline text according to the TeX engine. §8.4.1; 156
If true, provide support for text along a path. §8.4.1; 156
List of Examples[link]
texdoc -l ffuserguide-example
where is the example number zero-padded to three digits to find out if the example files are installed on your device.
1. Introduction[link]
\FlowFramRestoreOR and then restore flowfram’s
modified output routine with \FlowFramUnrestoreOR if necessary (see
§1.5).
\geometry.
The lengths governing the typeblock are:
\textwidth.
\textheight.
\topmargin, \headheight, \headsep and \voffset.
\onecolumn,
\twocolumn and \Ncolumn might be incorrect.
\onecolumn
and \twocolumn are slightly shorter than the typeblock
due to the default adjustment setting (see §5.1).
\documentclass[11pt]{book}
\usepackage[a4paper,outer=3in,marginparwidth=2cm,
columnsep=4pt]{geometry}
\usepackage[pages=absolute,draft]{flowfram}
\usepackage{lipsum}% provide dummy text
\pagestyle{plain}
\onecolumn[1][single]% only use on page 1
\setflowframe*{single}{margin=inner}
\twocolumn[>1][left,right]% all pages except p.1
\setflowframe*{left}{margin=left}
\setflowframe*{right}{margin=right}
\newdynamicframe{2in}{\typeblockheight}% width & height
{\typeblockwidth+\columnsep}{0pt}% position
[sidepanel]% label
\newcommand{\Hugebf}{\Huge\bfseries}
\setdynamicframe*{sidepanel}
{evenx={-2in-\columnsep}, style={Hugebf}}
\setdynamiccontents*{sidepanel}{Side Panel on
Page \thepage.}
\begin{document}
First page.\marginpar{note1}
\mainmatter
Start sample.\marginpar{note2} \lipsum[3-5]
End sample.\marginpar{note3}
\end{document}
\mainmatter
(which also does \cleardoublepage).
With pages=relative, the page list “1” refers
to any page where the page counter is 1 so the “single”
flow frame would be used on both the first and third page and
the “left” and “right” flow frames (which have
page list >1) wouldn’t be selected on the third page but
would still be selected on the second page. However, with
pages=absolute the page lists now refer to the
absolute page.
\setstaticcontents
(see §2.2)
and \setdynamiccontents (see §2.4).
\oddsidemargin
and \evensidemargin, and all the frames will shift
accordingly unless otherwise indicated. Alternative positions for
even pages can be set with the evenx and eveny
attributes but those co-ordinates are still relative to the position of the even
page typeblock.
1.1. Frame Stacking Order[link]
\parshape or \shapepar/\Shapepar.)
This will need the fancybox package for the \newflowframe
{0.4\typeblockwidth}% width
{0.6\typeblockwidth}% height
{0pt}% x
{0.6\typeblockwidth}% y
[upper]% label
\setflowframe*{upper}{border=plain}
\newflowframe
{0.4\typeblockwidth}% width
{0.6\typeblockwidth}% height
{0.6\typeblockwidth}% x
{0pt}% y
[lower]% label
\setflowframe*{lower}{border=shadowbox}
\newflowframe
{0.4\typeblockwidth}% width
{0.6\typeblockwidth}% height
{0.3\typeblockwidth}% x
{0.3\typeblockwidth}% y
[middle]% label
\setflowframe*{middle}{backcolor=yellow}
\shadowbox command.
(More complex borders can be created with tikz or
using FlowframTk.)
\newcounter{sample}
The contents are then set so that the sample counter is
incremented and shown, and an image (provided by mwe) is displayed
(this will need the graphicx package):
\newdynamicframe
{0.5\typeblockwidth}% width
{0.5\typeblockwidth}% height
{0.75\typeblockwidth}% x
{0.25\typeblockwidth}% y
[sample]% label
Labels are unique to the particular frame’s type.
A static frame is defined in a similar way and, in this case, it
happens to have the same label (sample) as the dynamic frame. This isn’t a
problem as they are different types of frame. However, it can be a
bit confusing.
\setdynamiccontents*{sample}{%
\hfill\stepcounter{sample}
Sample \thesample\␣(dynamic).\par
\includegraphics[width=\linewidth]
{example-image-a}
}
The document uses the lipsum package to provide sample
text:
\newstaticframe
{0.5\typeblockwidth}% width
{0.5\typeblockwidth}% height
{0.5\typeblockwidth}% x
{0.4\typeblockwidth}% y
[sample]% label
START.
(sample
Frames must be defined in the preamble, but the contents of
static or dynamic frames may be set in the document body.
This example sets the sample static frame content
after the sample text (but it’s still on page 1):
\stepcounter{sample}\thesample).
\lipsum[1-2]
END.
\setstaticcontents*{sample}{%
\stepcounter{sample}
Sample \thesample\␣(static).\par
\includegraphics[width=\linewidth]
{example-image-b}
}
\setstaticcontents was placed at the end
of the one-paged document. The first increment of the sample counter occurs
at the start of the first paragraph of the document text, so the
counter has the value 1 when \setstaticcontents is processed.
Therefore the contents of the static frame shows “Sample 2”.
\setstaticcontents), they are still drawn on
top of the static frame.
\setstaticcontents then the first page may be completed before the
contents of the static frame are set. In which case, the
“B” image won’t show until the next page and the sample
counter increment won’t occur until after it has been incremented by
the dynamic frame when the first page is shipped.
1.2. Package Options[link]
1.2.1. Thumbtabs, Contents and Mini-Tocs[link]
\makethumbtabs (see §6.1). If enabled,
they correspond to a particular sectioning unit (such as chapter),
with the frame’s content set to the number or the title or both.
These dynamic frames are aligned against the edge of the page
and are designed to be shown only in the applicable sectioning unit.
\tableofcontents command to show the index frames. The relevant
sub-block in the table of contents may be adjusted so that it fills
the height of the corresponding thumbtab index frame
\enablethumbtabs.
This can later be suspended with \disablethumbtabs.
While the thumbtabs are disabled, options such as
unstarred-thumbtabs and matter-thumbtabs will have no effect.
\tableofcontents
parses the toc file.
\tableofcontents definition that’s in
effect when flowfram is first loaded, then neither
mini-tocs nor thumbtab indexes can be supported.
\tableofcontents should be adjusted to allow
for thumbtab indexes and mini-tocs.
This may take one of the following values:
\backmatter tend to suppress the
chapter number but not section numbers. As this can cause
interference, flowfram by default adds code to \backmatter
that sets secnumdepth to -1. This option may be used to
prevent this.
\backmatter is defined, flowfram’s additional code
won’t alter secnumdepth.
\backmatter (if defined) set secnumdepth to -1.
\tableofcontents and whether or not to align them. Note that
the alignment setting should only be used if the table of contents
is on a single page. It’s not appropriate for longer content.
This setting has no effect with adjust-toc=off.
\makethumbtabs.
This setting is only applicable for singled-paged table of contents.
\chapter are not usually numbered outside of the
main matter but behave slightly differently to the starred
version. For example, \chapter without a star may not be
numbered but may be added to the table of contents.
This setting does not affect the starred version.
\hyperlinks (if supported).
You will need to load hyperref if you want \hyperlinks.
\hyperlinks in the thumbtab indexes that are
shown in the table of contents.
\hyperlinks in all the thumbtabs.
\hyperlinks in any of the thumbtabs.
1.2.2. Dynamic Frames[link]
\makedfheaderfooter should
adjust the standard page styles. If this option is required, it should be set
before \makedfheaderfooter otherwise it will be too late to
have an effect.
\makedfheaderfooter is used, it will set (\let) the
empty, plain, headings and
myheadings page styles to ffempty,
ffplain, ffheadings and ffmyheadings.
\chaptermark (if chapters are
defined) or \sectionmark (otherwise) with the ffheadings and
ffmyheadings styles should change the case of the header
text.
\sectionmark (if chapters are
defined) or \subsectionmark (otherwise) with the ffheadings and
ffmyheadings styles should change the case of the sub-header
text.
\chaptermark (if chapters are available) or \sectionmark
(otherwise) with ffheadings. The may be
declarations or the final command in may be a text-block
command.
= will
still be required) no font change will be applied. For example, you
may prefer to use the dynamic frame’s style command
instead.
\sectionmark (if chapters are available) or \subsectionmark
(otherwise) with ffheadings. The may be
declarations or the final command in may be a text-block
command. Again the may be empty.
\makedfheaderfooter will set the empty page style to
ffempty.
The initial setting is
dynamic-empty-page-style=empty,
dynamic-empty-page-style=hide.
This means that
dynamic-empty-page-style=show
will revert back to showing empty frames.
\thispagestyle is used instead of \pagestyle
then hidethis instead of hide will be set.
1.2.3. Column Command Options[link]
\onecolumn,
\onecolumninarea, \twocolumn and \twocolumninarea,
which create one or more flow frames arranged as columns (see
§5.1). This includes column commands that
additionally create a frame to go above or below the column
flow frames (see §5.2).
\twocolumn, will
create flow frames from left to right. This is the default.
\twocolumn, will
create flow frames from right to left. The RL option may be set
in the preamble but should be set before the applicable commands are
used (see also §5.3).
\onecolumn and
\twocolumn for use in the preamble to define a single
flow frame (\onecolumn) or two flow frames
(\twocolumn). However, some commands provided by the kernel or
other classes or packages may try to use \onecolumn and
\twocolumn to adjust the page layout. This option indicates
what to do if these commands are encountered in the document
environment.
\onecolumn or \twocolumn
found in the document environment. In the case of
\twocolumn, if the optional argument is present, it will simply
be added to the page content.
\clearpage.
\onecolumn or
\onecolumninarea in the preamble (see
§5.1), the first instance will automatically
identify the flow frame to use for any \onecolumn found
in the document. Alternatively, you can identify the required
flow frame with:
\twocolumn or
\twocolumninarea, the first instance will automatically
identify the flow frames to use for any \twocolumn found
in the document. However, this is a little more complicated as
a frame for the header and shorter columns are also needed in
the event that \twocolumn is used with its optional argument.
Commands such as \twocolumnStop or \twocolumnDtop
will identify the frames to use in this case.
You can also identify the desired frames with:
1.2.4. Other[link]
\chapter is defined, the pre-chapter hook commands
\ffprechapterhook and \chapterfirstpagestyle will be
defined (see §1.6).
1.3. Floats[link]
\FlowFramRestoreOR (see §1.5). Note
that all the defined frame won’t be used until you revert back
to flowfram’s output routine with \FlowFramUnrestoreOR.
\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. You may want to
consider setting the clear attribute to automatically
clear the frame contents on every page.
1.4. Draft Mode[link]
[:;], where is a single
letter denoting the frame type, is the IDN
for the frame and is the IDL for that
frame. Values of are: F (flow frame),
S (static frame) or D (dynamic frame).
Markers of the form: [M:] indicate that the
bounding box is the area taken up by the margin for flow frame
with IDN .
1.5. Output Routine[link]
\textwidth and \textheight and related dimensions are
correctly set. In particular, it removes the page header and
footer code from their normal place to allow for the header and
footer to be placed in dynamic frames with arbitrary
dimensions and locations.
\textwidth and \textheight to
reflect the one column size. For example, the geometry
package’s showframes option will be confused and may draw
the outline of the typeblock shorter or narrower that it ought
to be, which will consequently push the footer frame out of place.
Therefore, if you want to view the page layout, use
flowfram’s draft option instead.
\finishthispage) and
setup a normal one column page layout with \textheight set
to \typeblockheight and \textwidth set to
\typeblockwidth. The absolutepage counter will still be
incremented in the build/page/after hook but none of the
static frames, flow frames or dynamic frames
will appear on the page. The header and footer will be restored to
their usual location. The figure* and table*
environments and \onecolumn and \twocolumn commands
will also be restored to normal.
\clearpage) and select the
first flow frame that’s valid for the new page. The
figure* and table* environments will once again behave like
their unstarred counterparts. Likewise \onecolumn and
\twocolumn will return to their document environment
behaviour.
1.6. Chapters[link]
\chapter command has been defined, the flowfram
package will add the following commands to the
cmd/chapter/before hook:
Note that these two flowfram commands won’t be defined if \ffprechapterhook
\thispagestyle{\chapterfirstpagestyle}
\chapter hasn’t
been defined or if adjust-pre-chapter=false has been used.
\chapterfirstpagestyle to the name of the relevant page style.
Note that some classes provide their own way of adjusting the style
of the first page of each chapter.
2. Defining New Frames[link]
2.1. Flow Frames[link]
2-8) or
an open range (such as, <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 integer value of
the page counter 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).
Then later in the document:
\newflowframe{0.6\textwidth}{\textheight}{0pt}{0pt}[main]
The label for the first flow frame
is ``
\getflowlabel{1}''.
The flow frame labelled ``main'' has
IDN \getflowid{\myid}{main}\myid.
2.1.1. Prematurely Ending a Flow Frame[link]
\newpage or \pagebreak. These work
in an analogous way to the way they work in standard two-column
mode.
\hsize until the last
paragraph of the previous column (flow frame in this case) 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. The optional argument is as for \pagebreak.
\framebreak command is similar to \newpage in that it
forces a break in the flow of the document text but, unlike
\newpage, if \framebreak is used mid-paragraph it forces
a break without given the appearance of a break in the paragraph.
\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 FlowframTk) you can adjust
the tolerance to suppress these warnings.
\fftolerance. If you want to change the
tolerance, you need to change the value of this register using an
appropriate length command, such as \setlength. For example, to suppress warnings where
the difference in width is less than 3pt, do:
\setlength{\fftolerance}{3pt}
\clearpage,
or for two-sided documents, to start on the next odd page
do \cleardoublepage.
\cleardoublepage but ensures that the next page is even.
\finishthispage. This ensures that
each remaining valid flow frame on the current page is shipped
out with empty content.
2.2. Static Frames[link]
\newflowframe: is the width of
the static frame, is the height of the frame,
(,) 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,
, indicates the page list for which this
static frame should appear, and the final optional argument,
is a unique textual IDL which you can use to
identify this static 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. The starred version assigns a plain
border to the frame.
The label for the first static frame
is ``
\getstaticlabel{1}''.
The static frame labelled ``backleft'' has IDN
\getstaticid{\myid}{backleft}\myid.
2.3. Setting the Contents[link]
\staticframe, is used
for temporary storage when the content is set in an lrbox
environment.
\staticframe box is set.
\staticframe box is set.
\setstaticcontents), any changes made by the
hooks will be scoped by the usual environment grouping.
2.3.1. Continued Text[link]
\continueonframe is used while setting the content
of a static frame then refers to another
static frame. It will match the encapsulating command or
environment. (For dynamic frames, see
§2.4.3.)
\continueonframe is used within the body of
staticcontents then refers to the next
static frame’s IDN (since staticcontents
references the frame by its IDN), but if \continueonframe
is used within the body of staticcontents* then
refers to the next static frame’s IDL (since
staticcontents* references the frame by its IDL).
This is simply a shortcut for:
\begin{staticcontents}{1}
Some text…
\continueonframe[Continued/]{2}
Some more text…
\end{staticcontents}
Whereas:
\begin{staticcontents}{1}
Some text…
\ffcontinuedtextlayout{Continued/}
\end{staticcontents}
\begin{staticcontents}{2}
\ffstaticpostcontinued{1}{2}
Some more text…
\end{staticcontents}
This is a shortcut for:
\begin{staticcontents*}{leftframe}
Some text…
\continueonframe[Continued/]{rightframe}
Some more text…
\end{staticcontents*}
where is the IDN of leftframe and
is the IDN of rightframe.
\begin{staticcontents*}{leftframe}
Some text…
\ffcontinuedtextlayout{Continued/}
\end{staticcontents*}
\begin{staticcontents*}{rightframe}
\ffstaticpostcontinued{}{}
Some more text…
\end{staticcontents*}
\continueonframe causes a
change in scope so any local changes made before the command won’t
still be in effect after it.
\ffdefaultstaticcontinuetext ignores its arguments and
simply expands to:
\ffdefaultdynamiccontinuetext so if you do, for
example:
then this text will be used as the default for both
static frames and dynamic frames.
\renewcommand{\ffdefaultcontinuetext}{Continued/}
\continueonframe is not the same
as omitting the optional argument. This has changed in version 2.0.
In earlier versions, the default value was simply empty.
\emph{\small }.
\continueonframe.
\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*}
\ffcontinuedtextlayout and
\ffdefaultpostcontinued. However, there seems little point in using
\continueonframe in this case. You may just as well use two
staticcontents environments to set the contents separately.
\continueonframe occurs).
The second argument is the IDN of the continuation frame.
\setstaticcontents was used (the second argument is an integer
variable whereas the first is the actual number).
which is what suppresses the normal paragraph indentation at the start of the
continuation frame content.
\par \noindent \ignorespaces
\ffstaticpostcontinued provides a way of referencing
back to the previous frame.
\relativeframelocation (see §4.3)
but first some layout commands described in §5.2
are used to create a flow frame with
a static frame above it and another flow frame with a
static frame below it.
I’ve assigned IDLs to the static frames:
upper for the first one and lower for the second
one. I’ve also given both static frames a border to make them
stand out. The second (lower) has also been given its own
paragraph indentation rather than using the default (given by \onecolumnStopinarea{1in}
{0.5\typeblockwidth-10pt}{\typeblockheight}
{0pt}{0pt}
\setstaticframe{\value{maxstatic}}
{label=upper,border=plain}
\onecolumnSbottominarea{1in}
{0.5\typeblockwidth-10pt}{\typeblockheight}
{0.5\typeblockwidth+10pt}{0pt}
\setstaticframe{\value{maxstatic}}
{label=lower,border=plain,parindent=1em}
\sdfparindent).
and then content is added to both static frames but
\renewcommand{\ffdefaultstaticcontinuetext}[2]{%
Continued
\relativeframelocation{static}{#2}{static}{#1}%
}
\renewcommand{\ffstaticpostcontinued}[2]{%
\ffcontinuedtextlayout{%
Continued from
\relativeframelocation{static}{#1}{static}{#2}%
}%
\ffdefaultpostcontinued
}
\continueonframe is used to transition between the two.
The optional argument isn’t present so the default will be used:
\begin{staticcontents*}{upper}
Some text…
\continueonframe{lower}
resuming where we left off…
Next paragraph.
\end{staticcontents*}
2.3.2. Important Notes[link]
\label 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.
2.4. Dynamic Frames[link]
\newflowframe: is the width of
the dynamic frame, is the height of the frame,
(,) 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,
, indicates the page list for which this
dynamic frame should appear, and the final optional argument,
is a unique textual IDL which you can use to
identify this dynamic frame. If no label is specified, you
can refer to this frame by its unique IDN.
The first dynamic frame to be defined has IDN 1, the second
has IDN 2, and so on. The starred version assigns a plain
border to the frame.
then later in the document:
\newdynamicframe{0.38\textwidth}{\textheight}{0.62\textwidth}{0pt}[chaphead]
The label for the first dynamic
frame is ``
\getdynamiclabel{1}''.
The dynamic frame labelled ``chaphead'' has IDN
\getdynamicid{\myid}{chaphead}\myid.
2.4.1. Putting Chapter Titles in a Dynamic Frame[link]
\chapter is defined, you can make the chapter heading appear
in a dynamic frame instead of in its usual place in the flow of
document text. There is no facility for placing other sectional types in a
dynamic frame.
\dfchaphead
which hacked the internal commands commonly used in the definition
of \chapter but this is problematic and doesn’t work with some
classes so version 2.0 provides a new approach. The old
\dfchaphead command is still available but its use is now
deprecated.
\chapter is defined.
\chapter to set
the contents of the identified dynamic frame which will
replace any previous content.
\chapter is only redefined if it’s already defined). The
modified \chapter places the original definition in the content
of the chosen dynamic frame, but there are some problems with
this approach. Normally, the contents of a dynamic frame
aren’t expanded until the output routine positions the frame on the
page, and since dynamic frames are always positioned after
flow frames this can cause counters and labels to be
out-of-sync.
\ChapterInDynamic ensures
that the chapter heading is first expanded by putting it in a box of
the same width as the dynamic frame, but it first needs to
locally disable problematic commands, such as \clearpage.
This means that the page break usually performed by \chapter is
now implemented with:
\clearpage or
\cleardoublepage, depending on the standard openright
setting.
This command is only available if \chapter is defined.
\chapter is defined.
\dfchapterclearpage.
\appenddynamiccontents.
\parbox, it will be scoped.
\AddToHook{flowfram/chaphead/box/before}{\color{blue}}
\parbox, it will be scoped.
Note that this provides a different horizontal position for even
pages (specified with evenx) and the frame contents are
automatically cleared on each new page (otherwise the chapter
heading would show on every page).
\newdynamicframe{0.38\textwidth}{\textheight}{0.62\textwidth}{0pt}[chaphead]
\setdynamicframe*{chaphead}{evenx=0pt,clear}
\ChapterInDynamic*{chaphead}
and the chapter heading text is changed to blue:
\renewcommand\chapterheadstartvskip{}
\addtokomafont{chapter}{\color{blue}}
\appenddfminitoc*{chaphead}
For example, this chapter starts with:
\newcommand{\chapdesc}[1]{%
\appenddynamiccontents*
{chaphead}{\par \normalfont \emph{#1}}%
}
\chapter{Defining New Frames}\label{sec:newframes}
\chapdesc{This chapter describes how to define new frames…}
\@makechapterhead
matches the definition provided by book or report.
\vspace*{50pt} but this command is set to \relax in
the flowfram/chaphead/box/before hook as leading vertical
space is generally redundant at the start of a dynamic frame
that has been specifically dedicated to holding the chapter heading.
\vspace*{40pt}.
\parindent to zero and sets ragged right formatting.
\ffchapterdefaultfont). The default definition is
\normalfont \bfseries.
\chaptername or
\appendixname) and number. The default definition
expands to .
2.4.2. Putting Headers and Footers in a Dynamic Frame[link]
\setdynamicframe (see §2.4.4).
Additionally, the page style will be set to ffheadings.
\newdynamicframe with these
special labels for this behaviour to work.
You need to use the applicable command or application function.
The frame content needs to be set to the appropriate code to ensure
that it reflects the current page style. It’s important not to use
the clear=true setting or otherwise clear the content of
these frames as this function would then be lost.
\chapter is defined and picks
up the dynamic-page-style-header-font and dynamic-header-case settings.
\chapter is defined. If it isn’t defined,
the dynamic-page-style-header-font and dynamic-header-case settings
will apply. If \chapter is defined,
the dynamic-page-style-subheader-font and dynamic-subheader-case settings
will apply.
\chapter is defined, this
is initialised to .␣ (period followed by a space)
otherwise it is initialised to \quad.
\chapter is
defined, the initial definition is \@chapapp␣
(\chaptername or \appendixname followed by a space)
otherwise the initial definition is empty.
\@oddhead, \@evenhead,
\@oddfoot and \@evenfoot), as per the empty style, but
also hides the special header and footer frames. This action may
be changed with the dynamic-empty-page-style setting.
\thepage centred in the footer. More
precisely, this style sets \@oddfoot to:
and sets \dfOddFooterStyle{\thepage}
\@evenfoot to:
Both \dfEvenFooterStyle{\thepage}
\@oddhead and \@evenhead are set to empty.
Additionally, if ffempty is set to hide the special
header and footer frames, the ffplain style will ensure that
hide and hidethis are set to false
to counteract any previous instance of ffempty.
\chapter is defined. Note that the page
number is still placed in the footer frame, as per the
ffplain style. The right and left marks are placed in the
applicable header frame.
\@oddfoot to
\dfOddFooterStyle{\thepage}
\@evenfoot to:
\dfEvenFooterStyle{\thepage}
\@oddhead to:
and \dfOddHeaderStyle{\rightmark}
\@evenhead to:
\dfOddHeaderStyle{\leftmark}
\chapter is defined, \chaptermark is redefined to
encapsulate the mark with \flowframchapterheader and
\sectionmark is redefined to encapsulate the mark with
\flowframsectionheader.
\chapter is not defined, \sectionmark is redefined to
encapsulate the mark with \flowframsectionheader and
\subsectionmark is redefined to encapsulate the mark with
\flowframsubsectionheader.
\chapter is defined
the \chaptermark and \sectionmark will be redefined to do
nothing, otherwise \sectionmark and \subsectionmark will
be redefined to do nothing.
\makedfheaderfooter will redefine the standard page styles
(empty, plain, headings and
myheadings) to the analogous ffempty,
ffplain, ffheadings or ffmyheadings style.
2.4.3. Continued Text[link]
\setdynamiccontents,
you can move onto another dynamic frame using:
to simulate text flowing from one dynamic frame to another.
This command must not be hidden inside the definition of another
command.
\continueonframe[]{}
\continueonframe command forces a break in the text whilst at the same time
trying to justify it, so overly large space may occur.
\continueonframe occurs within
dynamiccontents*, refers to the IDL of the
other dynamic frame, otherwise it refers to the IDN of
the other dynamic frame. It’s not possible to continue onto a
different type of frame.
is essentially the same as:
\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*}
\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}
\ffdynamicpostcontinued{1}{2}
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*}
\continueonframe is used with dynamic frames it has
analogous commands to those used with static frames.
If the optional is omitted, the default is obtained
with:
\ffdefaultstaticcontinuetext where the first argument is
the IDN of the previous dynamic frame and the second
argument is the IDN of the continuation dynamic frame.
The default definition ignores its arguments and simply expands to
\ffdefaultcontinuetext.
\ffstaticpostcontinued where the first argument is
the IDN of the previous dynamic frame and the second
argument is the IDN of the continuation dynamic frame.
The default definition ignores its arguments and simply expands to
\ffdefaultpostcontinued.
2.4.4. Important Notes[link]
\continueonframe can’t be used in the
argument of any of the commands that append to the contents of a
dynamic frame, such as \appenddynamiccontents.
\continueonframe causes a change in scope so any local
changes made before the command won’t still be in effect after it.
3. Modifying Frame Attributes[link]
\setframe commands, if the starred
version is used then should be a comma-separated list
of IDLs that identify the frames for which the attributes
need to be applied. Note that you can’t use ranges or the keywords
described below with the starred versions.
\setallframes. The odd
keyword indicates that all frames with an odd IDN should be
set. The even keyword indicates that all frames with an
even IDN should be set.
3.1. Set Frame Options[link]
3.1.1. Identification and Scope[link]
\Ncolumn (see §4.3).
In general, it’s best to set the IDL when the frame is defined.
(If you do not specify a label when you first define a frame
it will be given a label identical to its IDN.)
\setpagelist commands and must be a
number that identifies a specific frame.
\thepage). This can be ambiguous if the
page counter is reset in the document. With
pages=absolute, the numbers refer to the value of the
absolutepage counter, which should not be reset in the
document and is incremented by the output routine whenever a page is
shipped out.
\thepage is now 1, if that’s outside the range of the selected
flow frame then you may lose text.
3.1.2. Content Attributes[link]
\ChapterInDynamic to put the chapter
titles in a dynamic frame called chaphead. This isn’t
a special frame, but the contents are reset every time \chapter
is used. I’ve also used \appenddfminitoc which then appends the
chapter’s mini-toc to that frame. And finally, I have a custom
command that appends a brief summary. For example, this chapter is
started with:
However, I only want this content visible on the first page of the
chapter, so I’ve set the clear option for the
chaphead frame. This ensures that the content is cleared
whenever a new page starts.
\chapter{Modifying Frame Attributes}\label{sec:modattr}
\chapdesc{This chapter describes how to modify frame attributes,
such as the size and location.}
\makedfheaderfooter and
\makethumbtabs. This automatically defines a set of special
dynamic frames. In this case, the clear option
should not be set as clearing the content will remove the code that
ensures the header, footer and thumbtab show the correct
information.
5pt, or a
variable, such as \sdfparindent, or an expression, such as
1em + 0.1). The default is \linewidth\sdfparindent.
The above will encapsulate the contents of the dynamic frame
identified by IDN 1 with \setdynamicframe{1}{style={emph}}
\emph.
\emph and
\textbf introduce grouping which may result in subtle spacing
issues. If this is a problem, try using the analogous declaration
instead. For example:
The frame content is already scoped and no extra grouping is
introduced with this method for standard rectangular frames.
(Extra grouping is added for shaped frames.)
\setdynamicframe{1}{style={em}}
and the sidepanel dynamic frame had
style=Hugebf set. This command could have been
defined as:
\newcommand{\Hugebf}{\Huge\bfseries}
but if you try this out you would find that the interline spacing
is much smaller. This is because the paragraph doesn’t end until after the
styling command so the line skip for \newcommand{\Hugebf}[1]{\textbf{\Huge #1}}
\Huge is wrong. The text
is Huge but the line spacing is normal size.
emph (as for style) but may also be a list of
declarations (with optionally a final text-block command).
When FlowframTk exports the information, if the “Style”
field contains one or more backslashes it will use
commands provided by flowframtkutils to define a custom
command that can then be used in the style option.
3.1.3. Layout Attributes[link]
\fbox,
\ovalbox, \Ovalbox and \doublebox). If the border is
unknown then the offset for \fbox will be used.
This changes the horizontal position of the flow frame labelled
main and the dynamic frame labelled chaphead
on even pages (provided the document has the two-sided setting on).
\setflowframe*{main}{evenx={0.4\typeblockwidth}}
\setdynamicframe*{chaphead}{evenx=0pt}
\setflowframe.)
\setstaticframe.)
\setdynamicframe.)
3.1.4. Appearance[link]
\shadowbox,
\doublebox, \ovalbox and \Ovalbox, which may all be
used as a border. For example, border=ovalbox.
Remember to load the fancybox package if you want to use any
of these commands as a border.
Or you can define your own border, for example with \setstaticframe{1}{border=ovalbox}
\fcolorbox:
In this case, the border incorporates colour so the
bordercolor and backcolor settings should be
none.
\newcommand{\greenyellowbox}[1]{\fcolorbox{green}{yellow}{#1}}
\setstaticframe{1}{border=greenyellowbox}
\color.
\color.
\color.
in the
preamble.
\color[]{}3.1.5. HTML[link]
\thepage and \theabsolutepage.
div
element.
style attribute should be
set to .
class attribute should be
set to .
alt attribute should
be set to .
3.2. Non-Rectangular Frames[link]
\parshape command, or the \shapepar/\Shapepar
commands defined in Donald Arseneau’s shapepar package (if
using \shapepar or \Shapepar, remember to include the
shapepar package.)
\parshape
or \shapepar/\Shapepar from a shape (limitations may apply).
You can either export the parameters to a TeX file that
can simply be \input at the start of a paragraph or, if you are
creating a static or dynamic frame you can set the “Shape”
selector to “Parshape” or “Shapepar” as applicable.
Use the “Configure TeX Settings” dialog to specify whether you
want \shapepar or \Shapepar for the “Shapepar” setting.
See the FlowframTk manual for further details.
\shapepar or \Shapepar commands provide
greater flexibility in the type of shape that can be used. However,
be aware of the advice given in the shapepar documentation.
\parshape\parshape 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 key for static or dynamic frames, the effects of
\par and the sectioning commands (\section and below) are
modified to allow the paragraph shape to extend beyond a single
paragraph, and to allow sectioning commands (but not \chapter
or \part).
\shapepar/\Shapepar\shapepar or \Shapepar 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 \FLFsimpar, 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. In general, \Shapepar is better suited
for use as a frame shape than \shapepar. See the
shapepar documentation for more details of these commands.
\relax.
\parshape command,
the syntax is:
where is the number of ( )
pairs and specifies the left
indentation for the jth line and specifies the length of
the jth line.
\parshape= …
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
}}
\parshape
command in the appropriate places in the frame content instead of
in the shape option.
\shapepar and \Shapepar is more complicated, see
the shapepar documentation for more details. In general:
The shapepar package has some predefined shapes, such as
\shapepar{}
\squareshape, \diamondshape,
\heartshape and \nutshape.
To reset the frame back to its original rectangular shape
do:
\setstaticframe*{shapedb}{shape={\shapepar\heartshape}}
\setstaticframe*{shapedb}{shape=\relax}
3.3. Switching Frames On and Off On-The-Fly[link]
This will set the dynamic frame whose IDN is 1 to be visible for
the first page of chapter 1. However, if you do
\dynamicswitchonnextodd{1}
\mainmatter
\chapter{Introduction}
This will have a different effect as \mainmatter
\dynamicswitchonnextodd{1}
\chapter{Introduction}
\mainmatter issues a
\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).
4. Locations and Dimensions[link]
4.1. Determining the Location of the Typeblock[link]
\oddsidemargin and \evensidemargin have different
values, there are separate commands for horizontal measurements on odd and even pages.
% define two new lengths to store the x and y coords
\newlength{\myX}
\newlength{\myY}
% compute the distance from 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}
4.2. Determining the Dimensions and Locations of Frames[link]
\ffareax (the x-coordinate), \ffareay (the
y-coordinate), \ffareawidth (the frame’s width)
and \ffareaheight (the frame’s height).
4.3. Relative Locations[link]
\relativeframelocation may use the wrong page settings if it
is used at the start of the page. You may prefer to use
\SaveRelativeFrameLocation instead.
\relativeframelocation where both frame
types are dynamic. The starred version references the
dynamic frames by their IDL and the unstarred version
references them by their IDN.
\relativeframelocation where both frame
types are static. The starred version references the
static frames by their IDL and the unstarred version
references them by their IDN.
\relativeframelocation where both frame
types are flow. The starred version references the
flow frames by their IDL and the unstarred version
references them by their IDN.
\continueonframe for frames that are on the same page.
For example:
Alternatively, they may be used in the default continued text, as in
Example 3.
\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}
\SaveRelativeFrameLocation
was used will now be correct. The argument is a label that may be used to
reference the information and has the usual restrictions that apply
to labels. The remaining arguments are as for \relativeframelocation.
\SaveRelativeFrameLocation.
This will produce the usual undefined reference double question mark ?? and
a warning on the first run.
The dynamic frame is
produces:
\SaveRelativeFrameLocation*
{chapheadmain}% label
{dynamic}{chaphead}{flow}{main}% frames
\RefSavedRelativeLocation{chapheadmain}
of the flow frame.
\FFabove etc. You can test for any of these commands
with:
\IfSavedRelativeLocationEq. For example, \FFabove will
only match if the first frame is above the second frame but not to
the right or to the left (that is, their horizontal positions
overlap).
5. Predefined Layouts[link]
\columnsep length register.
\marginpar) that may occur in the
middle columns, you can use \adjustcolsep to automatically
adjust the value of \columnsep to ensure that there’s
sufficient room. This is simply a shortcut that sets \columnsep
to twice its existing value plus the value of \marginparwidth.
\columnsep, make sure you do
it before using the column commands. Changing it afterwards will
have no effect on any flow frames that have already been
created.
5.1. Column Styles[link]
\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.
\newflowframe which picked up a following optional argument.
\columnsep. The first
argument is as for \onecolumn. The second
argument may either be a single label, in which case it applies to
the second column, or (v2.0+) two comma-separated labels where the first one
should apply to the first flow frame and the second should
apply to the second flow frame. For example:
The RL package option will define the columns starting from
the right, so the right-hand column will be filled first.
The default LR package option will define the columns starting
from the left, so the left-hand column will be filled first.
Likewise for all the other commands described in this section that
create more than one flow frame.
\twocolumn[all][frame1,frame2]
\baselineskip.
\twocolumn.
Remember that the page geometry needs to be set first.
The lipsum package is used to provide dummy text to pad out
the document.
\documentclass[12pt]{article}
\usepackage[a4paper,margin=1in]{geometry}
\usepackage[draft]{flowfram}
\usepackage{lipsum}
\twocolumn% create two flow frames
\setflowframe{2}{border=plain}% add border to second frame
\begin{document}
\lipsum[1-3]
\end{document}
\marginpar is placed). Note that the top border of both
flow frames is slightly below the top border of the
typeblock. This is due to the automatic vertical adjustment.
\columnsep, adjusting their height according to the
\ifffvadjust setting. This is similar to \twocolumn but
the final optional argument is a single label for the last
flow frame to be created.
\ifffvadjust setting.
\columnsep filling the area specified,
adjusting their height according to the \ifffvadjust setting.
\twocolumninarea making
flow frames instead of two.
The final optional argument is a single label for the last
flow frame to be created.
5.2. Column Styles with an Additional Frame[link]
\vcolumnsep between the columns
and the extra frame.
\vcolumnsep,
as the flow frames will be adjusted (if the default
\ffvadjusttrue setting is in effect) so that their height
is an integer multiple of \baselineskip, which may increase the gap.
\onecolumntopinarea[]{static}{}{}{}{}{}[]
\onecolumntopinarea[]{dynamic}{}{}{}{}{}[]
\onecolumntopinarea where the area is given by the
typeblock.
\onecolumntop[]{static}{}[]
\onecolumntop[]{dynamic}{}[]
\twocolumntopinarea[]{static}{}{}{}{}{}[]
\twocolumntopinarea[]{dynamic}{}{}{}{}{}[]
\twocolumntopinarea where the area is the entire
typeblock.
\twocolumntop[]{static}{}[]
\twocolumntop[]{dynamic}{}[]
\Ncolumntopinarea[]{static}{}{}{}{}{}{}[]
\Ncolumntopinarea[]{dynamic}{}{}{}{}{}{}[]
\Ncolumntopinarea where the area is the entire typeblock.
\Ncolumntop[]{static}{}{}[]
\Ncolumntop[]{dynamic}{}{}[]
\onecolumnbottominarea[]{static}{}{}{}{}{}[]
\onecolumnbottominarea[]{dynamic}{}{}{}{}{}[]
\onecolumnbottominarea where the area is the entire typeblock.
\onecolumnbottom[]{static}{}[]
\onecolumnbottom[]{dynamic}{}[]
\twocolumnbottominarea[]{static}{}{}{}{}{}[]
\twocolumnbottominarea[]{dynamic}{}{}{}{}{}[]
\twocolumnbottominarea where the area is the entire typeblock.
\twocolumnbottom[]{static}{}[]
\twocolumnbottom[]{dynamic}{}[]
\Ncolumnbottominarea[]{static}{}{}{}{}{}{}[]
\Ncolumnbottominarea[]{dynamic}{}{}{}{}{}{}[]
\Ncolumnbottominarea where the area is the entire typeblock.
\Ncolumnbottom[]{static}{}{}[]
\Ncolumnbottom[]{dynamic}{}{}[]
\newframe[]{}{}{}{}[]
5.3. Right to Left Columns[link]
\twocolumn or
\Ncolumn. To switch back to left-to-right columns use the
LR option or:
You can test the current setting with the conditional:
\newflowframe.
5.4. Backdrop Effects[link]
5.4.1. Vertical stripe effects[link]
\vtwotone but with
static frames instead of two.
\vtwotone but the static frames are only
high, instead of the entire height of the page.
The frames are aligned along the bottom edge of the page.
\vtwotone but the static frames are only
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.)
\vtwotonebottom for
frames instead of two.
\vtwotonetop for
frames instead of two.
5.4.2. Horizontal stripe effect[link]
\htwotone but with
static frames instead of two.
\htwotone but the statics are only
wide, instead of the entire width of the page.
The frames are aligned along the left edge of the page.
\htwotone but the statics are only
wide, instead of the entire width of the page.
The frames are aligned along the right edge of the page.
\htwotoneleft for
frames instead of two.
\htwotoneright for
frames instead of two.
5.4.3. Background Frame[link]
5.4.4. Vertical and Horizontal Rules[link]
\columnseprule (provided by the LaTeX kernel).
\insertvrule is created using
the command:
\ffruledeclarations must come before the
static frame is created. (Remember that the contents of a
static frame are set in a box so the declaration is used at
that point.)
\ffcolumnseprule.
\inserthrule is created using
the command:
\ffruledeclarations.
As with \insertvrule, any redefinition of these commands must
be made before \inserthrule to have an effect.
\twocolumnStop) and
the creates a vertical rule between the two flow frames
and a horizontal rule between the top static frame and the two
flow frames, bit first the rules are redefined to use a
zigzag pattern (achieved with the tikz package).
\usepackage{flowfram}
\usepackage{tikz}
\usetikzlibrary{decorations.pathmorphing}
\twocolumnStop{1in}
\renewcommand{\ffvrule}[3]{%
\hfill \tikz{%
\draw[decorate,decoration=zigzag,
line width=#2,yshift=-#1]
(0,0) -- (0pt,#3); }%
\hfill \mbox{}}
\insertvrule{flow}{1}{flow}{2}
\renewcommand{\ffhrule}[3]{%
\tikz{%
\draw[decorate,decoration=zigzag,
line width=#3,xshift=-#1] (0,0) -- (#2,0pt);
}}
\inserthrule{static}{1}{flow}{1}
\setstaticcontents{1}{Top Frame}\lipsum[1-5]
\ffvrule or \ffhrule must occur before
the corresponding \insertvrule or \inserthrule for the
change to have an effect.
6. Thumbtabs and Minitocs[link]
6.1. Thumbtabs[link]
\makethumbtabs in the preamble. This reads information in from
the ttb file created during the previous LaTeX run. As with the table of contents, you need a rerun to ensure that
the thumbtab information is correct.
\makethumbtabs with the
contents set according to the information read from the ttb file. If
a dynamic frame with the corresponding special label has
already been defined, that will be used instead of defining a new
frame. (This will be the case with any package or class files that have
been exported from FlowframTk where thumbtab frames have
been setup.)
\makethumbtabs will fall back on the
default thumbtab frame style for the missing frames.
\makethumbtabs creates a dynamic frame, the
argument is the height of each thumbtab frame.
The default y position puts the first thumbtab level with
the top of the typeblock and each following thumbtab is
shifted below the last by . The first optional argument
(a dimension) will shift all the thumbtabs
vertically by . The width of each thumbtab is
given by:
\setlength but only changes
that are made before \makethumbtabs will have any effect. The
evenx position will automatically be calculated. If the
frame was already defined, no change will be made to its attributes.
\chapter is defined, otherwise it’s
section.
\makethumbtabs. For example:
\flowframsetup{
thumbtabs=number,
thumbtab-text=normal
}
\makethumbtabs{0.75in}
\makethumbtabs and \enablethumbtabs in your document.
\enablethumbtabs in the preamble (after
\makethumbtabs) in which case any front matter
sectional units may have associated thumbtabs, depending on
the matter-thumbtabs option. Alternatively, place
\enablethumbtabs just before the first sectional unit that
should appear as a thumbtab. For example:
\tableofcontents
\mainmatter
\enablethumbtabs
\chapter{Introduction}
End of last chapter.
\appendix
\disablethumbtabs
\chapter{Supplementary Material}
\tableofcontents. If you have done this and want the
thumbtab indexes to appear elsewhere, you can switch them on
with:
\thumbtabhyperlinkformat will
automatically be redefined to use \hyperlink.
\thumbtabhyperlinkformat will format the text with:
\thumbtabformat if
you prefer, but the thumbtab-text options will no longer have
an effect after that.
\thumbtabhyperlinkformat. The \thumbtabindexformat
command will be redefined by the thumbtab-links option.
\thumbtabformat. The \thumbtabregularformat
command will be redefined by the thumbtab-links option.
\setdynamicframe.
However, the dynamic frames won’t be defined until
\makethumbtabs finds the relevant information in the ttb
file. This means that you will get an error on the first run when
the frames are not defined.
This is essentially equivalent to:
\setthumbtab{1}{backcolor=[rgb]{0.15,0.15,1}}
\setdynamicframe*
{thumbtabindex1,thumbtab1}
{backcolor=[rgb]{0.15,0.15,1}}
\setthumbtab but only changes the thumbtab
index frames.
For example:
This is essentially equivalent to:
\setthumbtabindex{1}{backcolor=[rgb]{0.15,0.15,1}}
\setdynamicframe*
{thumbtabindex1}
{backcolor=[rgb]{0.15,0.15,1}}
\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}}
\setthumbtab{9}{backcolor=[rgb]{0.55,0.55,1}}
\newcommand{\thumbtabstyle}{%
\centering\bfseries\large\sffamily
}
\setthumbtab{all}{valign=c,style=thumbtabstyle,textcolor=white}
6.2. Minitocs[link]
\enableminitoc.
\appenddfminitoc*{chaphead}
\ChapterInDynamic
causes the corresponding sectioning command to reset the contents of
the identified dynamic frame. The \appenddfminitoc
command will cause the corresponding sectioning command to append to
the contents of the associated dynamic frame.
for the same dynamic frame , then
\ChapterInDynamic*{}
\enableminitoc
\appenddfminitoc*{}
\chapter will first set the contents with
the section heading and will then append the mini-toc.
If \ChapterInDynamic isn’t used or has a different frame, then
the behaviour of \appenddfminitoc will depend on whether or not
the clear attribute has been set on the mini-toc
frame. If the clear attribute is not set then the
mini-toc code will only be appended once. (Otherwise the frame
would end up accumulating all the mini-tocs.)
\minitocstyle command is placed inside a group so any
declarations will be scoped.
\setlength.
7. Global Settings[link]
7.1. Macros[link]
\renewcommand:
For example, if you want a darker grey, do:
\color[gray]{0.8}
\renewcommand{\setffdraftcolor}{\color[gray]{0.3}}
\color[gray]{0.9}
\small\sffamily
7.2. Lengths[link]
\setlength:
\fboxsep when flowfram loads. It
won’t be automatically updated if \fboxsep is later changed.
\fboxsep
to set its border width (for example, \fbox).
\Ncolumntop etc.
(The height of the flow frame may be adjusted if
the ffvadjust setting is on.)
This length should be changed before the frames are defined for the
change to have effect.
\columnsep length is provided by the LaTeX kernel and is
used in LaTeX’s normal two-column mode. With flowfram it’s
used for the horizontal distance between the column frames
that are created with commands such as \Ncolumn. This length
should be changed before the frames are defined for the change to
have effect.
7.3. Counters[link]
\value{}
or .
\the\label command, but will
always refer to the IDN of the current flow frame. It can
then be referenced using \ref.
\ref. For example, if
your document has a column layout:
This text is about hippos
\labelflow{hippos}.
…
% Somewhere else in the document:
See column~\ref{hippos} on page~\pageref{hippos}
for information on hippos.
8. FlowframTk[link]
Depending on how it has been installed, you may also be able to
start it from your operating system’s application menu or from a
desktop shortcut.
flowframtk8.1. Export to Image[link]
8.2. Compute Parameters for
\parshape or
\shapepar[link]\input the file (that was created by FlowframTk’s Parshape
or Shapepar function) at the start of the paragraph that
should be shaped. Take care not to insert a paragraph break between
inputting the file and the start of the text. See the
FlowframTk user manual for further details.
\parindent is a TeX primitive and shapepar
provides generic code, this function may be used with other TeX formats, such as plain TeX.
8.3. Export to Document Class or Package[link]
\newflowframe,
\newstaticframe and \newdynamicframe) will be written to the
exported sty or cls file. You may find that using this
graphical interface is an easier approach to defining frames
than trying to calculate the locations and dimensions using LaTeX commands. When you use FlowframTk’s export function to
create a document class or package, the created file will contain
the code to automatically load both flowfram and
flowframtkutils (but make sure that you have at least version
0.8.8 of FlowframTk).
8.4. The flowframtkutils Package[link]
8.4.1. Options[link]
\jdroutline as appropriate.
8.4.2. Provided Commands[link]
\includeteximage command is provided with
\ProvideDocumentCommand
rather than defined as a new command, as it may be defined in a similar manner by
other packages.
This command isn’t written to any exported file by FlowframTk
but is provided by flowframtkutils to include an exported
image (tex) file in a document. You can simply input the file
with commands like \input, but \includeteximage provides
some extra features.
\includegraphics. This means that you can
save your exported image tex file to the same location as your
other image files.
\includeteximage. The recognised
keys are just a subset of those recognised by graphicx:
scale, angle, width, height
and alt. Bear in mind that scaling the image will also
scale any text within the image.
\jdroutline will attempt
to render as an outline using (if
pdf-trans.tex was loaded) or (if
pst-char was loaded). If not enabled, this command will
generate a warning and just do .
\jdroutline
{2 Tr 0 1 0 rg 1 0 0 RG}
{fillstyle=solid,linecolor=green,fillcolor=red}
{\bfseries\Huge ABC}
\jdrimagebox is designed to prevent
problems if numerical rounding errors cause the image to be larger
than the available area. It’s used when FlowframTk exports to
a complete document that encapsulates the image. (Rather than
exporting to a tex file that can be input from an existing document.)
The following commands are only written to exported files by
FlowframTk v0.8.8+ if it’s detected that flowframtkutils
is available.
.
(The title is the image’s description.)
\flowframtkSetTitle{}.
\flowframtkSetCreationDate{}\hypersetup to
set the PDF creation date, otherwise if \pdfinfo has been
defined that will be used instead.
\hypersetup to
set the document title meta data, otherwise if \pdfinfo has been
defined that will be used instead. Awkward characters within the
title will be marked up with:
\pdfinfo is
required, then this will expand to the detokenized . For example, if the image’s description was set to
“A House (with a pond)” in FlowframTk, and the image is
exported as a complete document with meta data, then the document
preamble would contain (for the given timestamp):
\flowframtkimageinfo{
title={A House \flowframtkimgtitlechar{(}{\(}with a pond\flowframtkimgtitlechar{)}{\)}},
creationdate={D:20250815192214+01'00'}
}
\flowframtkendobject must always be the same as its matching
\flowframtkstartobject. The numbering starts at 0 for the
entire image and then increments for each object within the image,
descending down groups.
JDRPath for a
path (which may consist of lines, curves and moves),
JDRText for text or JDRBitmap for bitmaps.
\flowframtkencapobject or the content between
\flowframtkstartobject and \flowframtkendobject.
This is true, even if the object needs to be temporarily converted
for the export. For example, a text area with gradient paint may be
converted to a filled path if the “To Path” export setting has
been applied. The PGF code will then be path construction code not
\pgftext, but the class name will still be JDRText.
.
\pgfpoint{}{}\pause:
\renewcommand{\flowframtkendobject}[7]{\pause}
\flowframtkencapobject. To use this
function, first make sure that you export to an image with the
“Encapsulated” setting on. Then anywhere before the image is
included in the document, use:
\flowframtkencapobject to use the low-level
function:
(There shouldn’t be any need to use this function directly.)
\FlowFramTkUtilsSetOverlayEncap to govern the way that
objects are uncovered.
\uncover command but two
helper functions are used (which both required LaTeX3 syntax to be
enabled if you need to redefine them).
Uncovers from a slide. The default definition is:
\uncover<>{}
\uncover<->{}
\flowframtkutils_uncover_encap:nnnnnnnn function is still a little
experimental, but it basically works as follows:
\documentclass{beamer}
\usepackage{flowframtkutils}
\FlowFramTkUtilsSetOverlayEncap
[
object-overlay={path = 1, text = 2},
annote,
annote-text=description-or-tag
]
\begin{document}
\begin{frame}
\frametitle{An Image}
\centering
\input{image}
\end{frame}
\end{document}
\uncover<>{}.
\uncover<->{}.
tag-text={
window = {A Window},
door = {A Door}
}
tag-overlay={
building = 1,
window = 2,
door = 3
}
Within , the value part should be a number but may also
be empty (the equal sign is still needed). This means that there
shouldn’t be an overlay for an object with that tag. This is
different from omitting the tag from the list as it prevents the
object-overlay and fallback-overlay
checks.
\uncover.
object-overlay={
bitmap = 1,
path = 2,
text = 3
}
Within , the value part should be a number but may also
be empty (the equal sign is still needed). This means that there
shouldn’t be an overlay for an object of that type. This is
different from omitting the object type from the list as it prevents the
fallback-overlay check.
8.4.2.1. Fallback Overlay Options[link]
\keys_set:nn where the module is
flowframtkutils / overlay / fallback.
8.4.2.2. Annotation Arrow Options[link]
\keys_set:nn where the module is
flowframtkutils / overlay / arrow.
annote-arrow={show=true}
If this is the only annote-arrow setting, then it
can be written more compactly:
annote-arrow=show
\pgfsetstrokecolor.
\pgfsetarrowsstart. The line starts at the object’s bounding
box so that’s where the start arrow will be placed. A
non-rectangular shape may be some distance away from this point.
annote-arrow={
start={Latex[length=5pt]},
}
the preamble requires:
\usepgflibrary{arrows.meta}
\pgfsetarrowsend. The line ends on the annotation text’s
boundary, the location determined according to the \pgftext anchor.
annote-arrow={
show,
dx=2cm,
dy=1cm,
start={},
end={>}
}
9. Troubleshooting[link]
9.1. General Queries[link]
1-10, what happens if I then add some extra text so that
the document exceeds 10 pages?
\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.
9.2. Unexpected Output[link]
\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 §2.1.1).
% 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)
\mbox{}.
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.
\clearpage\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:
Alternatively, you can use the parindent attribute if
different indentation is required for different frames.
\setlength{\sdfparindent}{\parindent}
\parshape.
\parshape specification
exceeds the line width. For example:
This specifies a line with overall length
\parshape=1 0.4\linewidth 0.7\linewidth
1.1 which is too long.
\linewidth9.3. Error Messages[link]
\setframe commands, or when setting
the contents of static or dynamic frames.
1,even is invalid.
mylabel”,
and you attempt to do
,
then you will get this error, because “\setflowframe*{mylabel}{}mylabel” refers
to a static frames not a flow frame.)
\fbox has an extra }
\fbox instead of
border=fbox. Remember not to include the initial
backslash.
\item
\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.
\verb illegal in command argument
\verb illegal in command argument” when using
a command inside the dynamiccontents environment.
A. Glossary[link]
Terms[link]
\makedfheaderfooter or via FlowframTk’s export function, or the special dynamic frame with the label evenfooter that may be created with FlowframTk. If evenfooter doesn’t exist, the footer frame will be used for the page footer on both odd and even pages. If evenfooter does exist, it will be used as the page footer for even pages if the document two-sided setting is on. This special behaviour must be enabled either with \makedfheaderfooter or via FlowframTk.\fbox.\makedfheaderfooter or via FlowframTk’s export function, or the special dynamic frame with the label evenheader that may be created with FlowframTk. If evenheader doesn’t exist, the header frame will be used for the page header on both odd and even pages. If evenheader does exist, it will be used as the page header for even pages if the document two-sided setting is on. This special behaviour must be enabled either with \makedfheaderfooter or via FlowframTk.<3,5,7-11,>15 indicates pages 1,2,5,7,8,9,10,11 and all pages after page 15. These numbers refer to the decimal value of the page counter by default. To make them refer to the absolute page number use the package option pages=absolute.5-10) or open (for example, <7 or >9).\setstaticcontents.\typeblockwidth and \typeblockheight. This lengths are initialised to \textwidth and \textheight, and may be adjusted at the start of the document environment.Symbols[link]
B. Alphabetical Summaries[link]
Command Summary[link]
A[link]
\columnsep so that it’s equal to twice its original value plus \marginparwidth. §5; 111
\enableminitoc. §6.2; 144
B[link]
C[link]
\chapter to ensure that chapter titles are placed in the identified dynamic frame. §2.4.1; 54
\cleardoublepage (which clears to the next odd page) this clears to the next even page for two-sided documents. For one-sided documents this just does \clearpage. §2.1.1; 39
\ffareax, \ffareay, \ffareawidth and \ffareaheight.
\ffdefaultstaticcontinuetext or \ffdefaultstaticcontinuetext will be used (with the appropriate arguments), as applicable. §2.3.1; 43
D[link]
\makethumbtabs if the argument is missing. The default definition is either chapter or section, depending on whether or not \chapter is defined. §6.1; 138
\ChapterInDynamic to start a new page. §2.4.1; 54
\makethumbtabs will have the hide attribute switched on and thumbtab information will stop being written to the ttb. §6.1; 140
E[link]
\makethumbtabs will have the hide attribute switched off and thumbtab information can start being written to the ttb file. Any thumbtab sectional units that occur before this command won’t have a corresponding thumbtab. §6.1; 139
F[link]
\computeflowframearea to store the calculated height.
\computeflowframearea to store the calculated width.
\computeflowframearea to store the calculated x position.
\computeflowframearea to store the calculated y position.
\insertvrule/\inserthrule. §5.4.4; 132
\ffcontinuedtextlayout to apply the font for the continuation text. §2.3.1; 46
\continueonframe to adjust the current paragraph so that it ends flushed with the right margin and adds the continuation text flush right on the next line. §2.3.1; 46
\ffdefaultstaticcontinuetext and \ffdefaultdynamiccontinuetext. §2.3.1; 45
\continueonframe is omitted in dynamic frames. The arguments are the IDN of the current frame and of the continuation frame (not the IDL, regardless of the encapsulating command or environment). §2.4.3; 66
\ffstaticpostcontinued and \ffdynamicpostcontinued. §2.3.1; 47
\continueonframe is omitted in static frames. The arguments are the IDN of the current frame and of the continuation frame (not the IDL, regardless of the encapsulating command or environment). §2.3.1; 45
\inserthrule. §5.4.4; 134
\chapter. §1.6; 32
\insertvrule and \inserthrule to apply any declarations that may alter the way that the rule appears. §5.4.4; 133
\ifffvadjust conditional to false. §5.1; 113
\ifffvadjust conditional to true. §5.1; 114
\insertvrule. §5.4.4; 133
\clearpage works for normal two-column mode, this command issues the correct number of \newpage needed to finish the current page to allow a page break even if the current flow frame isn’t the last available for the current page. §2.1.1; 39
\shapepar or \Shapepar.
\fboxrule when flowfram loads. §7.2; 148
\fboxsep when flowfram loads. §7.2; 148
\flowframtkstartobject. §8.4.2; 160
\flowframtkendobject. §8.4.2; 160
\FlowFramTkUtilsSetOverlayEncap. §8.4.2; 163
\flowframtkencapobject to use a low-level command (\flowframtkutils_uncover_encap:nnnnnnnn) that uncovers objects according to the settings given in the optional argument. The settings may be changed later with \FlowFramTkUtilsOverlayEncapSetup. §8.4.2; 162
\flowframtkencapobject when enabled with \FlowFramTkUtilsSetOverlayEncap. §8.4.2; 163
\flowframtkutils_uncover_encap:nnnnnnnn to uncover an object from . §8.4.2; 163
\flowframtkutils_uncover_encap:nnnnnnnn to uncover an object on a single overlay. §8.4.2; 163
G[link]
\ffareax, \ffareay, \ffareawidth and \ffareaheight. §4.2; 103
\ffareax, \ffareay, \ffareawidth and \ffareaheight. §4.2; 103
\ffareax, \ffareay, \ffareawidth and \ffareaheight. §4.2; 103
H[link]
\htwotone but creates static frames. §5.4.2; 130
\htwotoneleft but creates static frames. §5.4.2; 131
\htwotoneright but creates static frames. §5.4.2; 131
\paperwidth and are positioned so that their left edge is at the left side of the page, with the first frame offset from the bottom edge of the page by . Note that the colour specifications and should be enclosed in braces, for example {[gray]{0.5}} not [gray]{0.5}. §5.4.2; 130
\htwotone but instead of being the full width of the page, the width for both frames is set to . §5.4.2; 130
\htwotoneleft but horizontally offset so that the right edge of the frames is along the right edge of the page. §5.4.2; 131
I[link]
\onecolumninarea will adjust the specified height to ensure that it is an integer multiple of \baselineskip. §5.1; 114
\iftrue by the LR package option and to \iffalse by the RL option, this conditional determines the order of frames created by the column commands, such as \twocolumn. §5.3; 127
\SaveRelativeFrameLocation indicates that the first frame is above the second frame, without regard to their horizontal positions. §4.3; 109
\SaveRelativeFrameLocation indicates that the first frame is below the second frame, without regard to their horizontal positions. §4.3; 109
\SaveRelativeFrameLocation matches , which should be one of the relative placeholder commands such as \FFabove. §4.3; 108
\SaveRelativeFrameLocation indicates that the first frame is left of the second frame, without regard to their vertical positions. §4.3; 109
\SaveRelativeFrameLocation indicates that the first frame is right of the second frame, without regard to their vertical positions. §4.3; 109
J[link]
L[link]
\label so that its displayed index (displayedframe) can be referenced with \ref. §7.3; 151
\label so that its IDN can be referenced with \ref. §7.3; 150
\iflefttorightcolumns conditional to false. §5.3; 127
\iflefttorightcolumns conditional to true. §5.3; 127
M[link]
\enablethumbtabs. §6.1; 137
N[link]
\columnsep, with the height adjusted if the conditional \ifffvadjust is true. §5.1; 114
\Ncolumnbottominarea where the area is given by the typeblock. §5.2; 125
\vcolumnsep. The height of the side-by-side flow frames is adjusted if \ifffvadjust is true. The horizontal gap between them is given by \columnsep. §5.2; 117
\Ncolumnbottom with the set to dynamic. §5.2; 126
\Ncolumnbottominarea with the set to dynamic. §5.2; 125
\Ncolumntop with the set to dynamic. §5.2; 121
\Ncolumntopinarea with the set to dynamic. §5.2; 121
\columnsep, with the height adjusted if the conditional \ifffvadjust is true. §5.1; 115
\Ncolumnbottom with the set to static. §5.2; 126
\Ncolumnbottominarea with the set to static. §5.2; 125
\Ncolumntop with the set to static. §5.2; 121
\Ncolumntopinarea with the set to static. §5.2; 120
\Ncolumntopinarea where the area is given by the typeblock. §5.2; 121
\vcolumnsep. The height of the side-by-side flow frames is adjusted if \ifffvadjust is true. The horizontal gap between them is given by \columnsep. §5.2; 116
O[link]
\ifffvadjust is true. §5.1; 112
\onecolumnbottominarea where the area is given by the typeblock. §5.2; 122
\vcolumnsep. The height of the second frame is adjusted if \ifffvadjust is true. §5.2; 116
\onecolumnbottom with the set to dynamic. §5.2; 123
\onecolumnbottominarea with the set to dynamic. §5.2; 122
\onecolumntop with the set to dynamic. §5.2; 118
\onecolumntopinarea with the set to dynamic. §5.2; 118
\ifffvadjust is true. §5.1; 114
\onecolumnbottom with the set to static. §5.2; 123
\onecolumnbottominarea with the set to static. §5.2; 122
\onecolumntop with the set to static. §5.2; 118
\onecolumntopinarea with the set to static. §5.2; 117
\onecolumntopinarea where the area is given by the typeblock. §5.2; 118
\vcolumnsep. The height of the second frame is adjusted if \ifffvadjust is true. §5.2; 116
P[link]
R[link]
\SaveRelativeFrameLocation. §4.3; 108
\relativeframelocation where both frame types are dynamic. §4.3; 106
\relativeframelocation where both frame types are flow. §4.3; 107
\relativeframelocation where both frame types are static. §4.3; 106
S[link]
\relativeframelocation but defers the calculations for the next LaTeX run. The result may be referenced with \RefSavedRelativeLocation. §4.3; 107
\onecolumn is encountered in the document environment. §1.2.3; 23
\twocolumn is encountered in the document environment. §1.2.3; 24
\ifshowframebbox conditional to false. §1.4; 30
\ifshowframebbox conditional to true. §1.4; 30
\ifshowmargins conditional to false. §1.4; 30
\ifshowmargins conditional to true. §1.4; 30
\ifshowtypeblock conditional to false. §1.4; 29
\ifshowtypeblock conditional to true. §1.4; 29
\FLFsimpar provided for backward-compatibility.
T[link]
\tableofcontents to show the thumbtab index frames. However, if adjust-toc=off has been used to prevent this, the thumbtab index frames can be switched on with \thumbtabindex. §6.1; 140
\columnsep, with the height adjusted if the conditional \ifffvadjust is true. §5.1; 112
\twocolumnbottominarea where the area is given by the typeblock. §5.2; 124
\vcolumnsep. The height of the two side-by-side flow frames is adjusted if \ifffvadjust is true. The horizontal gap between them is given by \columnsep. §5.2; 117
\twocolumnbottom with the set to dynamic. §5.2; 124
\twocolumnbottominarea with the set to dynamic. §5.2; 124
\twocolumntop with the set to dynamic. §5.2; 120
\twocolumntopinarea with the set to dynamic. §5.2; 119
\columnsep, with the height adjusted if the conditional \ifffvadjust is true. §5.1; 114
\twocolumnbottom with the set to static. §5.2; 124
\twocolumnbottominarea with the set to static. §5.2; 123
\twocolumntop with the set to static. §5.2; 120
\twocolumntopinarea with the set to static. §5.2; 119
\twocolumntopinarea where the area is given by the typeblock. §5.2; 119
\vcolumnsep. The height of the two side-by-side flow frames is adjusted if \ifffvadjust is true. The horizontal gap between them is given by \columnsep. §5.2; 116
\textheight). §1; 2
\topmargin, \headheight, \headsep and \voffset). §1; 2
\textwidth). §1; 2
V[link]
\Ncolumntop. §7.2; 149
\vtwotone but creates static frames. §5.4.1; 129
\vtwotonebottom but creates static frames. §5.4.1; 130
\vtwotonetop but creates static frames. §5.4.1; 130
\paperheight and are positioned so that their base is at the bottom of the page, with the first frame offset from the left side of the page by . Note that the colour specifications and should be enclosed in braces, for example {[gray]{0.5}} not [gray]{0.5}. §5.4.1; 129
\vtwotone but instead of being the full height of the page, the height for both frames is set to . §5.4.1; 129
\vtwotonebottom but vertically offset so that the top of the frames is at the top of the page. §5.4.1; 129
Environment Summary[link]
Package Option Summary[link]
\chapter is defined, this setting will define \ffprechapterhook and \chapterfirstpagestyle. §1.2.4; 25
\backmatter tend to suppress the chapter number but not section numbers. As this can cause interference, this option may be used to suppress section numbers as well. §1.2.1; 11
\backmatter will set secnumdepth to -1). 12
\onecolumn or \twocolumn are encountered in the document environment. §1.2.3; 22
\onecolumn or \twocolumn found in the document environment. 23
\onecolumn or \twocolumn found in the document environment. 23
\pagestyle and the hidethis attribute will be switched on with \thispagestyle. 21
\chaptermark (if chapters are defined) or \sectionmark (otherwise) with the ffheadings and ffmyheadings styles should change the case of the header text. §1.2.2; 18
\chaptermark (if chapters are available) or \sectionmark (otherwise) with ffheadings. The may be declarations or the final command in may be a text-block command. §1.2.2; 19
\sectionmark (if chapters are available) or \subsectionmark (otherwise) with ffheadings. Initialised to match dynamic-page-style-header-font. §1.2.2; 19
\makedfheaderfooter will set (\let) the empty, plain, headings and myheadings page styles to ffempty, ffplain, ffheadings and ffmyheadings. 18
\sectionmark (if chapters are defined) or \subsectionmark (otherwise) with the ffheadings and ffmyheadings styles should change the case of the sub-header text. §1.2.2; 18
\twocolumn, will create flow frames from left to right. §1.2.3; 22
\twocolumn, will create flow frames from right to left. §1.2.3; 22
\hyperlinks (if supported). §1.2.1; 14
\hyperlinks in all the thumbtabs. 14
\hyperlinks in any of the thumbtabs. 15
\hyperlinks in the thumbtab indexes. 14
Index[link]
@[link]
A[link]
B[link]
C[link]
D[link]
E[link]
F[link]
G[link]
H[link]
I[link]
J[link]
K[link]
L[link]
M[link]
N[link]
O[link]
P[link]
R[link]
S[link]
\setframe optionsT[link]
U[link]
V[link]