[xsl] Trying to Achieve inside/outside offset column layouts: any thoughts?

Subject: [xsl] Trying to Achieve inside/outside offset column layouts: any thoughts?
From: "W. Eliot Kimber" <ekimber@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 13 Jan 2005 18:53:52 -0600
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

Current Thread