I just spent most of the day trying my best to use XSL-FO to recreate as
best I could a document that uses what I call inside/outside
offset-column layout (there may be a more precise term used among
graphic designers).
This is the type of document where there is one main body column and an
"offset" column that typically takes up about 1/4 to 1/3 of the total
page width. The offset column is positioned on the outside edge of the
page, so for left-to-right writing mode, the offset column is on the
right on odd pages and on the left on even pages. The offset column is
used for marginalia, such as tips, admonitions, quotes, little graphics,
and so on.
Using XSL-FO 1.0 (or 1.1 as currently drafted) there is no way at all to
achieve this layout as far as I can tell *if you want to put stuff in
the margins*. If you just want the offset column but don't need to put
anything in the margin, then there's no problem--you just need different
left and right margins for your region body's on your even and odd page
masters.
If the offest column is always on the same side (e.g., always left for
left-to-right writing mode) there's no problem. You can use side floats
with negative left margins to pull the floats into the offset margin.
However, if you want the inside/outside layout and marginalia then I
don't see any solution.
XSL Formatter's float="inside|outside" extension gets you part of the
way because it lets you at least float to the appropriate edge of the
page. However, you would still need to know what the page parity was in
order to set the appropriate negative margin, which of course you
normally don't know.
The only solution I can think of would be to extend the current set of
margin, border, padding, and space properties to include inside and
outside versions (as well as adding "inside" and "outside" for float= as
XSL Formatter has done). For example, given the inside/outside page
layout described above, I could create a "margin area" side float like
this (in this example, assume the offset margin width is 3 inches):
<fo:block>
<fo:float float="outside">
<fo:block margin-outside="-3in">
This is my marginalia block
</fo:block>
</fo:float>This is the contents of my body paragraph.
</fo:block>
So simple, so easy.
But of course no FO implementors have implemented these extensions, as
far as I know.
So my questions:
1. Have I missed some way to do this in FO or with any vendor-specific
extensions? (I've focused on XSL Formatter for this task simply because
they do inside/outside floats and XEP does not).
2. Can anyone see a serious implementation problem with adding
inside/outside versions of the relevant properties? I'm not an FO engine
implementor so I have no solid basis for estimating implementation cost.
Cheers,
E.
--
W. Eliot Kimber
Professional Services
Innodata Isogen
9390 Research Blvd, #410
Austin, TX 78759
(512) 372-8122
ekimber@xxxxxxxxxxxxxxxxxxx
www.innodata-isogen.com