Sometimes an image is too wide to fit into a regular portrait page width. Rotating a figure 90 degrees and presenting it in landscape mode is one way to handle such figures. DocBook's schema does not have an attribute for
mediaobject to indicate rotation the way
orient="land" is available for tables.
One solution is to create a processing instruction for use inside a
figure element. The DocBook stylesheet does not define one, so you have to make up your own processing instruction and write a matching template to process it. For example:
<figure> <?landscapeFigure?><title>My figure title</title> ... </figure>
Here is a customization that will rotate a figure that has such a processing instruction.
<xsl:template match="figure[processing-instruction('landscapeFigure')]"> <fo:block-container reference-orientation="90"> <xsl:apply-imports/> </fo:block-container> </xsl:template>
This customization matches only
figure elements that contain the processing instruction. It just wraps a
fo:block-container element around the normal processing of
figure that is achieved with the
xsl:apply-imports statement. The block container has
reference-orientation="90", which means the content of the container will be rotated 90 degrees counterclockwise. Depending on the behavior of your XSL-FO processor with block containers, you may need to add other properties to achieve proper formatting of the rotated figure.
This customization will also rotate the figure title along with the figure. That is because it uses
xsl:apply-imports, which calls the original figure template that handles both the title and the image.
|DocBook XSL: The Complete Guide - 4th Edition||PDF version available|
Copyright © 2002-2007 Sagehill Enterprises