Change space between header and body text
<xsl:variable name="region-body-margin-top">.5in<xsl:variable> <xsl:variable name="region-body-margin-bottom">.5in<xsl:variable>
Contents
You will need a FO processor to convert to PDF. An open source, complete implementation, fop, is available at:
http://ci.apache.org/projects/xmlgraphics/fop/snapshots/
In addition, if you want to inclue any math in your document, download jeuclid:
http://jeuclid.sourceforge.net/
If you use ASCII math in your document, you will also have to download the asciimathml.py and install it.
https://github.com/favalex/python-asciimathml/blob/master/asciimathml.py
Here is an example of converting file file.rst to out.pdf.
rst2xml.py --strip-comments --trim-footnote-reference-space file.rst | fop -xml - -xsl xsl_fo/docutils_to_fo.xsl -pdf out.pdf
In this case, rst converts file.rst to XML, and the fop processor both converts the XML file to FO, and then processes that file. You can achieve the same result in several steps:
The script docutils_to_fo.sh combines several of these steps to make converstion easier, and adds a few nice features, but it functions more of a convenience than as a necessary tool; one does not need it to convert. It is a work in progress, and serves as an example of how one could writes his own simple script to convert to PDF. The essential conversion utilities are the FO processor, and the XSL stylesheets themselves.
You may need to further process the XML document created by rst2xml.py before converting it to FO in two cases: to include raw XML, and to include MathML. In both cases, use the rstxml2xml.py script included in the scripts folder:
rst2xml.py --strip-comments --trim-footnote-reference-space file.rst\ |rstxml2xml.py | fop -xml - -xsl xsl_fo/docutils_to_fo.xsl -pdf out.pdf
Install the script in the normal way:
python setup.py install
The script can also be used if you wish to convert the document in steps.
If you have included raw XML, such as:
.. raw:: XML
<math ....
<!--etc-->
The XML will be converted to plain text, unless you use the rstxml2xml.py script.
If you have included ASCII MathML in your document, you should also use the rstxml2xml.py script. If you do not post process the document, the math will appear as ASCII text. If you post process it, the equations will appear formatted.
In order to change the defaults of the stylesheets, you will need to create a new stylesheet which imports the standard stylesheet, and then process this stylesheet.
As an example, consider that you might want to change your top and bottom margins from the default fo 1 inch to 1.5 inches. First, create the following stylesheet:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.1" > <xsl:import href="xsl_fo/docutils_to_fo.xsl"/> <xsl:attribute-set name="page-margins"> <xsl:attribute name="margin-top">1.5in</xsl:attribute> <xsl:attribute name="margin-bottom">1.5in</xsl:attribute> </xsl:attribute-set> </xsl:stylesheet>
Save this stylesheet with any name you want. In this case, I've saved as custom.xsl. Next, I process the document in the normal way, except that I used custom.xsl as my stylesheet instead of docutils_to_fo.xsl
rst2xml.py --strip-comments --trim-footnote-reference-space <file.rst> | fop -xml - -xsl custom.xsl -pdf out.pdf
When you import the docutils_to_fo.xsl stylesheet, you also import all of its rules, except the ones you re-write. In the example above, the attribute set in docutils_to_fo.xsl looks like this:
<xsl:attribute-set name="page-margins"> <xsl:attribute name="margin-left">1.0in</xsl:attribute> <xsl:attribute name="margin-right">1.0in</xsl:attribute> <xsl:attribute name="margin-top">1.0in</xsl:attribute> <xsl:attribute name="margin-bottom">1.0in</xsl:attribute> </xsl:attribute-set>
I changed the attribute for margin-top and margin-bottom, but left the margin-right and margin-left unchanged. You can also add to attribute sets. In this case, the page-margins attribute gets applied to the sequence of pages--practically the whole document. So in order to change the font size to 14 points, I could create the attribute set as:
<xsl:attribute-set name="page-margins"> <xsl:attribute name="margin-top">1.5in</xsl:attribute> <xsl:attribute name="margin-bottom">1.5in</xsl:attribute> <xsl:attribute name="font-size">14pt</xsl:attribute> </xsl:attribute-set>
Most of the customization occurs through attribute sets. If you are familiar with CSS, then the syntax will look very similar, and is in many cases exactly the same. If you have doubts, check out the FO specs online.
The other ways to customize are to re-write an entire template rule, change a parameter, or, in one case, change a variable. All these methods are explained below.
Rewrite the named template make-footnote-separator:
<!--gets rid of separator--> <xsl:template name="make-footnote-separator"/>
The attribute set "default-footnote-label-inline" sets the formatting of the label in the text:
<!--changes size form 8 to 10 pts--> <xsl:attribute-set name="default-footnote-label-inline"> <xsl:attribute name="font-size">10pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="footnote-list-block"> <xsl:attribute name="provisional-distance-between-starts">18pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="footnote-list-block"> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
Note: Use space-before.conditionality ="retain" to set space between first footnote and text. Or, set space-after in the footnote separator text, and use space-after.conditionality ="retain".
<xsl:attribute-set name="footnote-paragraph-block"> <xsl:attribute name="space-before">15pt</xsl:attribute> </xsl:attribute-set>
The default template for the dedication is:
<xsl:template match="topic[@classes='dedication']"> <xsl:apply-templates/> </xsl:template>
Change this to:
<xsl:template match="topic[@classes='dedication']"> <fo:block break-before = "page" break-after="page"> <xsl:apply-templates/> </fo:block> </xsl:template>
Change the dedication-title-block attribute set:
<xsl:attribute-set name="dedication-title-block"> <xsl:attribute name="text-align">center</xsl:attribute> <xsl:attribute name="font-weight">bold</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
To change the characteristics of the paragraphs of the dedication, use the dedication-paragraph-block and dedication-first-paragraph-block.
<xsl:attribute-set name="dedication-paragraph-block"> <xsl:attribute name="font-style">italic</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="dedication-first-paragraph-block" use-attribute-sets = "dedication-paragraph-block"> <xsl:attribute name="space-before">0pt</xsl:attribute> </xsl:attribute-set>
The default template for the abstract is:
<xsl:template match="topic[@classes='abstract']"> <xsl:apply-templates/> </xsl:template>
Change this to:
<xsl:template match="topic[@classes='abstract']"> <fo:block break-before = "page" break-after="page"> <xsl:apply-templates/> </fo:block> </xsl:template>
Change the abstract-title-block attribute set:
<xsl:attribute-set name="abstract-title-block"> <xsl:attribute name="text-align">center</xsl:attribute> <xsl:attribute name="font-weight">bold</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
To change the characteristics of the paragraphs of the abstract, use the abstract-paragraph-block and abstract-first-paragraph-block.
<xsl:attribute-set name="abstract-paragraph-block"> <xsl:attribute name="font-style">italic</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="abstract-first-paragraph-block" use-attribute-sets = "abstract-paragraph-block"> <xsl:attribute name="space-before">0pt</xsl:attribute> </xsl:attribute-set>
For a break before, use the break-before = page in the attribute set toc-title-block:
<xsl:attribute-set name="toc-title-block"> <xs:attribute name="break-before">page</xs:attribute> </xsl:attribute-set>
Use a page break in the element that comes after it.
Another way to put the TOC on its own page (besides using a whole new page run, the preferred method for more involved documents), is to rewrite the matching template. The default is:
<xsl:template match="topic[@classes='contents']"> <xsl:apply-templates/> </xsl:template>
Rewrite this to:
<xsl:template match="topic[@classes='contents']"> <fo:block break-before = "page" break-after="page"> <xsl:apply-templates/> </fo:block> </xsl:template>
Use the attribue set toc-title-block:
<xsl:attribute-set name="toc-title-block"> <xs:attribute name="text-align">left</xs:attribute> </xsl:attribute-set>
Use the toc-entry-defaults-block to set properties for all of the toc entries at once:
<xsl:attribute-set name="toc-entry-defaults-block"> <xsl:attribute name="space-after">3pt</xsl:attribute> <xsl:attribute name="text-align-last">justify</xsl:attribute> </xsl:attribute-set>
Use the attribute-set toc-level1/2...-block:
<xsl:attribute-set name="toc-level1-block" > </xsl:attribute-set> <xsl:attribute-set name="toc-level2-block" > <xsl:attribute name="start-indent">10mm</xsl:attribute> </xsl:attribute-set> <!--etc-->
The format of the numbers for toc entry takes the same format as the section numbers. See section numbers.
Use the attribute-sets 'title-level1-block', 'title-level1-block', etc, to format the titles for each section. Docutils to fo allows sections to go 7 levels deep. Headings are blocks and can take any property of a block.
<xsl:attribute-set name="default-section-title-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="keep-with-next">always</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="title-level1-block" use-attribute-sets="default-section-title-block"> <xsl:attribute name="font-weight">bold</xsl:attribute> <xsl:attribute name="font-size">16</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="title-level2-block" use-attribute-sets="default-section-title-block"> <xsl:attribute name="font-weight">bold</xsl:attribute> <xsl:attribute name="font-size">14</xsl:attribute> <xsl:attribute name="font-style">italic</xsl:attribute> </xsl:attribute-set>
Use the 'parm#' identifier plus the 'number-format' to format the section numbers. The value for formatting can take a combination of punctuation and numbers, letters, or Roman numberals
<xsl:param name="number-section1">1</xsl:param> <xsl:param name="number-section2">.1</xsl:param> <xsl:param name="number-section3">.1</xsl:param> <xsl:param name="number-section4">.1</xsl:param> <xsl:param name="number-section5">.1</xsl:param> <xsl:param name="number-section6">.1</xsl:param> <xsl:param name="number-section7">.1</xsl:param> <xsl:param name="number-section8">.1</xsl:param> <xsl:param name="number-section9">.1</xsl:param> # (I.), (II.), (III.), etc heading1.number-format = (I.) # i.), ii.), etc heading2.number-format = i.) # .1., .2., .3., etc heading3.number-format = .1. # a, b, c, etc heading4.number-format = a # A, B, C., etc heading5.number-format = A
<xsl:attribute-set name="paragraph-block"> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="first-paragraph-block" use-attribute-sets="paragraph-block"> </xsl:attribute-set>
The default template is:
<xsl:template match="block_quote[not(@classes)]"> <xsl:apply-templates/> </xsl:template>
To change, (to put space ater, for example):
<xsl:template match="block_quote[not(@classes)]"> <xsl:apply-templates/> <fo:block space-after="24pt"/> </xsl:template> <!--or--> <xsl:template match="block_quote[not(@classes)]"> <fo:block space-after="24pt"> <xsl:apply-templates/> </fo:block> </xsl:template>
Use the block-quote-paragraph-block attribute set:
<xsl:attribute-set name="block-quote-paragraph-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="start-indent">20mm</xsl:attribute> <xsl:attribute name="end-indent">20mm</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="block-quote-first-paragraph-block" use-attribute-sets="block-quote-paragraph-block"> <xsl:attribute name="space-before">0pt</xsl:attribute> </xsl:attribute-set>
Use the block-quote-attributeion-block attribute.
<xsl:attribute-set name="block-quote-attribution-block"> <xsl:attribute name="text-align">right</xsl:attribute> </xsl:attribute-set>
To change the characteristics of a literal block, use the literal-block attribute set:
<xsl:attribute-set name="literal-block"> <xsl:attribute name="font-family">monospace</xsl:attribute> <xsl:attribute name="font-size">8</xsl:attribute> <xsl:attribute name="white-space">pre</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
To change the characteristics of a transition block, use the transition-block attribute set:
<xsl:attribute-set name="transition-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="text-align">center</xsl:attribute> </xsl:attribute-set>
To change the characteristics of the document title, use the document-title-block attribute set:
<xsl:attribute-set name="document-title-block"> <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="font-size">24pt</xsl:attribute> <xsl:attribute name="text-align">center</xsl:attribute> <xsl:attribute name="font-weight">bold</xsl:attribute> </xsl:attribute-set>
To change the characteristics of the document subtitle, use the document-subtitle-block attribute set:
<xsl:attribute-set name="document-subtitle-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="font-size">18pt</xsl:attribute> <xsl:attribute name="text-align">center</xsl:attribute> <xsl:attribute name="font-weight">bold</xsl:attribute> </xsl:attribute-set>
Use the attribute set 'bullet-list-block' and 'bullet-level2-list-block' property to format the space after and before, the left and right indent, and any other property you want to set on the list, such as font for font-size:
<xsl:attribute-set name="bullet-list-block" > <xsl:attribute name="start-indent">5mm</xsl:attribute> <xsl:attribute name="provisional-distance-between-starts">5mm</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="bullet-level2-list-block" > <xsl:attribute name="start-indent">15mm</xsl:attribute> <xsl:attribute name="provisional-distance-between-starts">5mm</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
To format space between bullets and text, change the attribute 'provisional-distance-between-starts'.
Use the 'bullet-list-item' and 'bullet-level2-list-item' attribute set.
<xsl:attribute-set name="bullet-list-item"> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="bullet-level2-list-item"> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
Use the parameter 'bullet-list' and 'bullet-list-level2' to change the default bullet:
<xsl:param name="bullet-text">•</xsl:param> <xsl:param name="bullet-text-level2">°</xsl:param>
Use the 'bullet-list-item-body-block' attribute set to format the text of the bullet list. This identifier can take any block property:
<xsl:attribute-set name="bullet-list-item-body-block"> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
Use the attribute set 'enumerated-list-block' and 'enumerated-level2-list-block' property to format the space after and before, the left and right indent, and any other property you want to set on the list, such as font for font-size:
<xsl:attribute-set name="enumerated-list-block" > <xsl:attribute name="start-indent">5mm</xsl:attribute> <xsl:attribute name="provisional-distance-between-starts">5mm</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="enumerated-level2-list-block" > <xsl:attribute name="start-indent">15mm</xsl:attribute> <xsl:attribute name="provisional-distance-between-starts">10mm</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
To format space between enumerateds and text, change the attribute 'provisional-distance-between-starts'.
Use the 'enumerated-list-item' and 'enumerated-level2-list-item' attribute set.
<xsl:attribute-set name="enumerated-list-item"> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="enumerated-level2-list-item"> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
Use the 'enumerated-list-item-body-block' attribute set to format the text of the enumerated list. This identifier can take any block property:
<xsl:attribute-set name="enumerated-list-item-body-block"> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
Use the 'outer-line-block' attribute-set to format the entire line block. This identifier can take any block property:
<xsl:attribute-set name="outer-line-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
The lines have the attribute-set 'level1-line-block', 'level2-line-block' and so fourth. Each level indicates how many levels the line is nested. Lines may be nesed up to 5 levels deep. It makes sense to set overall properties with the 'outer-line-block' attribute-set, and to use the 'evel#-line-block' to set the indents of for each level:
<xsl:attribute-set name="level1-line-block"> <xsl:attribute name="start-indent">10mm</xsl:attribute> </xsl:attribute-set> <xsl:attribute-set name="level2-line-block"> <xsl:attribute name="start-indent">20mm</xsl:attribute> </xsl:attribute-set>
In order to create a title for a stanza, in the document (not the configuration file) include the line in a title_reference:
| `stanza title 1` | A one, two, a one two three four | | `stanza title 2` | Half a bee, philosophically, | must, *ipso facto*, half not be. | But half the bee has got to be, | *vis a vis* its entity. D'you see? | | `stanza title 3` | But can a bee be said to be | or not to be an entire bee, | when half the bee is not a bee, | due to some ancient injury? | | Singing...
Use the 'stanza-title-block' attribute-set to format the stanza title:
<xsl:attribute-set name="stanza-title-block"> <xsl:attribute name="text-align">center</xsl:attribute> <xsl:attribute name="space-before">12</xsl:attribute> <xsl:attribute name="font-weight">bold</xsl:attribute> </xsl:attribute-set>
You cannot do any formatting with a title reference (the text between the ``). If you need to do inline markup on part of a stanza title, only put the `` around the part that does not need the markup:
| *stanza title* `3` | But can a bee be said to be
If you need to format the entire stanza title, use the following work around:
.. role:: title | *stanza title 3* :title:`x` | But can a bee be said to be | or not to be an entire bee, | when half the bee is not a bee, | due to some ancient injury?
In order to number the lines in a verse, import the number_verse.xsl stylehseet, and set the parameter 'number-verse' to the appropriate increment.
<!--numbers every 5th line--> <xsl:import href="xsl_fo/docutils_to_fo.xsl"/> <xsl:import href="xsl_fo/custom/number_verse.xsl"/> <xsl:param name="number-verse">5</xsl:param>
By default, docutils to fo puts the number to the very right of the margin. Set the attribute 'right-indent' to a positive number to make the numbers appear closer to the lines:
<xsl:attribute-set name="outer-line-block"> <xsl:attribute name="right-indent">20mm</xsl:attribute> </xsl:attribute-set>
If the line block is relatively short, use the 'keep-on-same-page' property.
<xsl:attribute-set name="outer-line-block"> <xsl:attribute name="keep-together.within-page">always</xsl:attribute> </xsl:attribute-set>
If the line block is long, using this property could lead to huge space on a page.
Use a blank line to control the space between stanzas. There is no othe way to control space. The rst2xml.py utility marks a new set of line blocks when it detects a new indentation. In contrast, real verse is marked by the space between stanzas.
Use the attribute set 'definition-list-block' to change the characteristics of the entire definition.
<xsl:attribute-set name="definition-list-block" > <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
An item consists of both the term and definition. Use the 'definition-list-item-block' attribute set.
<xsl:attribute-set name="definition-list-item-block" > <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
Use the 'definition-term-block' to change the properties of the term, such as the space below:
<xsl:attribute-set name="definition-term-block"> <xsl:attribute name="font-weight">bold</xsl:attribute> </xsl:attribute-set>
The definition can consist of more than one paragraph. To format each of these paragraphs, and the space before or after, use the 'definition-block' attribute set:
<xsl:attribute-set name="definition-block"> </xsl:attribute-set>
Use the 'classifier-inline' attribute set to format the classifier:
<xsl:attribute-set name="classifier-inline"> <xsl:attribute name="font-style">italic</xsl:attribute> </xsl:attribute-set>
The 'definition-list-paragraph' attribute-set formats the parapgraphs in the definition:
<xsl:attribute-set name="definition-paragraph-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="start-indent">30pt</xsl:attribute> </xsl:attribute-set>
Use the 'field-list-block' attribute set to format the space after and before, the left and right indent, and any other property you want to set on the list, such as font for font-size:
<xsl:attribute-set name="field-list-block" > <xsl:attribute name="start-indent">0mm</xsl:attribute> <xsl:attribute name="provisional-distance-between-starts">30mm</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
To format space between field and text change the 'provisional-distance-between-starts' attribute:
<xsl:attribute name="provisional-distance-between-starts">40mm</xsl:attribute>
Use the 'field-list-items' attribute set.
<xsl:attribute-set name="field-list-item"> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
Use the 'field-list-item-label-block' attribute-set, which can take any inline properties:
<xsl:attribute-set name="field-list-item-label-block"> <xsl:attribute name="font-weight">bold</xsl:attribute> </xsl:attribute-set>
Use the 'field-body-block' attribute-set to format the text of the bullet list. This identifier can take any block property:
<xsl:attribute-set name="field-body-block"> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
Note that using the 'space-before' property has the same effect as controlling the space between each paragraph, without putting unwated space before the first paragraph.
The option list can either be formatted as a list, with the options as labels to the left of the description; or as a definition list, with the options serving as the terms, and the descriptions in a paragraph right below. For an option list with lenghty options, a definition list may work better.
By default, the stylesheets process the options list as a list. If you wish to format them as a definition list, use the following:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format" version="1.1" > <xsl:import href="xsl_fo/docutils_to_fo.xsl"/> <xsl:import href="xsl_fo/custom/option_list_as_definition.xsl"/> </xsl:stylesheet>
By default, the docutils to FO convertor uses a comma to separate options. To change the default, use the 'options-separator' parameter:
<xsl:param name="options-separator">| </xsl:param>
Use the 'option-list-block' attribute-set to format the space after and before, the left and right indent, and any other property you want to set on the list, such as font for font-size:
<xsl:attribute-set name="option-list-block"> <xsl:attribute name="start-indent">0mm</xsl:attribute> <xsl:attribute name="provisional-distance-between-starts">50mm</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
To format space between option and text, chance the 'provisional-distance-between-starts' attribute:
<xsl:attribute name="provisional-distance-between-starts">40mm</xsl:attribute>
Use the 'option-list-item' attribute set.
<xsl:attribute-set name="option-list-item"> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
Use the 'option-inline' attribute-set to format only the option without the arguments of the options. This identifier can take any inline properties:
<xsl:attribute-set name="option-inline"> <xsl:attribute name="font-family">monospace</xsl:attribute> </xsl:attribute-set>
Use the 'option-argument-inline' attribute-set to format just the option of the arugment. This identifier can take any inline properties:
<xsl:attribute-set name="option-argument-inline"> <xsl:attribute name="font-family">monospace</xsl:attribute> <xsl:attribute name="font-style">italic</xsl:attribute> </xsl:attribute-set>
Use the 'option-list-item-body' attribue set to format the text of the option list.
Use the 'option-list-item-body-block' attribute-set to format the text of the list. This identifier can take any block property:
<xsl:attribute-set name="option-list-item-body-block"> </xsl:attribute-set>
Note that using the 'space-before' property has the same effect as controlling the space between each paragraph, without putting unwated space before the first paragraph.
Use the 'option-list-definition-block' to format the entire option list:
<xsl:attribute-set name="option-list-definition-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
Use the attribute-set 'option-list-item-block'.
<xsl:attribute-set name="option-list-item-block"> <xsl:attribute name="space-before">8pt</xsl:attribute> </xsl:attribute-set>
Use the 'option-group-block' attribute set:
<xsl:attribute-set name="option-group-block"> <xsl:attribute name="keep-with-next">always</xsl:attribute> </xsl:attribute-set>
The description contains one or more paragraphs. To format all of these at once, use the 'option-list-description-block' attribute set:
<xsl:attribute-set name="option-list-description-block"> <xsl:attribute name="start-indent">16pt</xsl:attribute> <xsl:attribute name="space-before">8pt</xsl:attribute> </xsl:attribute-set>
Use the 'option-list-paragraph-block':
<xsl:attribute-set name="option-list-paragraph-block"> <xsl:attribute name="space-before">0pt</xsl:attribute> </xsl:attribute-set>
Use the 'option-inline' attribute-set. (See above for the default section.)
Use the 'option-argument-inline' attribute-set. (See above in the default section.)
Use the emphasis-inline attribute set to change the default behavior of the emphsis element.
<xsl:template match="emphasis"> <fo:inline xsl:use-attribute-sets="emphasis-inline"> <xsl:apply-templates/> </fo:inline> </xsl:template>
<xsl:attribute-set name="strong-inline" > <xsl:attribute name="font-weight">bold</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="basic-link-inline" > <xsl:attribute name="text-decoration">underline</xsl:attribute> <xsl:attribute name="color">blue</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="literal-inline"> <xsl:attribute name="font-family">monospace</xsl:attribute> <xsl:attribute name="font-size">8</xsl:attribute> <xsl:attribute name="white-space">pre</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="title-reference-inline" > <xsl:attribute name="font-style">italic</xsl:attribute> </xsl:attribute-set>
Change the parameter internalo-link-type to change the type of hyper link:
<!--whether to make internal links clickable ('link'), refer to a page number ('page'), or both ('page-link')--> <xsl:param name="internal-link-type">link</xsl:param>
Each admonishment has its own title formed by the following parameters:
<xsl:param name="attention-title">Attention!</xsl:param> <xsl:param name="caution-title">Caution!</xsl:param> <xsl:param name="danger-title">!Danger!</xsl:param> <xsl:param name="error-title">Error</xsl:param> <xsl:param name="hint-title">Hint</xsl:param> <xsl:param name="important-title">Important</xsl:param> <xsl:param name="note-title">Note</xsl:param> <xsl:param name="tip-title">Tip</xsl:param> <xsl:param name="warning-title">Warning!</xsl:param>
To change the default titles, simply change the parameters.
Each title block inherits its property from the default-admonition-title-block attribute-set.
<xsl:attribute-set name="default-admonition-title-block"> <xsl:attribute name="space-after">10pt</xsl:attribute> <xsl:attribute name="font-size">larger</xsl:attribute> <xsl:attribute name="color">red</xsl:attribute> </xsl:attribute-set>
The attribute sets for each admonition tite, are logically the name, followed by the string 'title-block'.
<xsl:attribute-set name="attention-title-block" use-attribute-sets="default-admonition-title-block"> </xsl:attribute-set>
The exact names are:
- attention-title-block
- caution-title-block
- danger-title-block
- error-title-block
- hint-title-block
- important-title-block
- note-title-block
- tip-title-block
- admonition-custom-title-block
- warning-title-block
Each admonition is wrapped in a block. Each block inherits its characteristics from the default:
<xsl:attribute-set name="default-admonition-outer-block"> <xsl:attribute name="border-style">solid</xsl:attribute> <xsl:attribute name="border-width">1px</xsl:attribute> <xsl:attribute name="padding">6pt</xsl:attribute> <xsl:attribute name="keep-together.within-page">always</xsl:attribute> </xsl:attribute-set>
Changing the attributes in this attribute set changes them for all admonitions.
Each admonition has its own attribute-set, the name of the admonition followed by the string '-block.':
<xsl:attribute-set name="attention-block" use-attribute-sets="default-admonition-outer-block"> </xsl:attribute-set> <xsl:attribute-set name="caution-block" use-attribute-sets="default-admonition-outer-block"> </xsl:attribute-set> <!--etc-->
The names of these blocks are:
- attention-block
- caution-block
- danger-block
- error-block
- hint-block
- important-block
- note-block
- tip-block
- admonition-custom-block
- warning-block
Use the attribute-set admonition-paragraphs-block to format paragraphs:
<xsl:attribute-set name="admonition-paragraph-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="topic-block"> <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="topic-title-block"> <xsl:attribute name="font-weight">bold</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
Unfortunately, sidebars can't be produced in XSLFO, at least not easily with the curren renderers. For that reason, the stylesheets render a sidebar similar to a block quote, not on the side of the page.
<xsl:attribute-set name="sidebar-block"> <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="background-color">#FFFFF0</xsl:attribute> <xsl:attribute name="padding">6pt</xsl:attribute> <xsl:attribute name="start-indent">10mm</xsl:attribute> <xsl:attribute name="end-indent">40mm</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="sidebar-title-block"> <xsl:attribute name="font-weight">bold</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="sidebar-subtitle-block"> <xsl:attribute name="font-weight">bold</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="sidebar-paragraph-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="rubric-block"> <xsl:attribute name="text-align">center</xsl:attribute> <xsl:attribute name="font-size">larger</xsl:attribute> <xsl:attribute name="color">red</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="epigraph-outer-block"> <xsl:attribute name="start-indent">20mm</xsl:attribute> <xsl:attribute name="end-indent">20mm</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="text-align">right</xsl:attribute> <xsl:attribute name="font-style">italic</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="epigraph-paragraph-block"> <xsl:attribute name="start-indent">inherit</xsl:attribute> <xsl:attribute name="end-indent">inherit</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="epigraph-attribution-block"> <xsl:attribute name="text-align">right</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="highlights-outer-block"> <xsl:attribute name="start-indent">20mm</xsl:attribute> <xsl:attribute name="end-indent">20mm</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="highlights-paragraph-block"> <xsl:attribute name="start-indent">inherit</xsl:attribute> <xsl:attribute name="end-indent">inherit</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="pull-quote-paragraph-block"> <xsl:attribute name="start-indent">inherit</xsl:attribute> <xsl:attribute name="end-indent">inherit</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="pull-quote-first-paragraph-block" use-attribute-sets="block-quote-paragraph-block"> <xsl:attribute name="space-before">0pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="pull-quote-attribution-block"> <xsl:attribute name="text-align">right</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="container-outer-block"> <xsl:attribute name="space-after">12pt</xsl:attribute> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="container-paragraph-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
The math block does not consist of paragraphs. It either consists of literal text, or MathML markup. To format the contents in either case:
<xsl:attribute-set name="mathml-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
An image conssits of just the image. A figure consists of the image, with an option for alternative text, a caption, and a legend. The legend can consist of body elements, such as paragraphs or a table.
Attribute sets for Images and Figures. The image property of alt and target are ignored by the stylesheets, since they have no use in PDF. In addtion, if the align is set to top or bottom, both properties that have no meaning for PDF, the stylesheets will report an error, and if strict is set to true, quit.
Likwise, the figure figwidth property will be ignored, since there is not way to implement this property directy in FO.
In order to control the scaling, alignment, and width of images and figures, it is better to use the attribute sets than to try to set these properties in RST. The regions of 'image', 'figure', 'caption', and 'legend' are all wrapped in blocks. Use the attribute sets for these blocks to control the properties.
<xsl:attribute-set name="figure-block"> </xsl:attribute-set>
<xsl:attribute-set name="figure-legend-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="legend-paragraph-block"> <xsl:attribute name="space-before">12pt</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="legend-first-paragraph-block" use-attribute-sets="legend-paragraph-block"> <xsl:attribute name="space-before">0pt</xsl:attribute> </xsl:attribute-set>
The image block contains no text or othe elements. None-the-less, it is wrapped in a block that allows formatting, including space before or after, alignment, and borders.
Use the attribute-set table-block-container to format all the characteristics of a table.
<xsl:attribute-set name="table-block-container"> <xsl:attribute name="space-before">12pt</xsl:attribute> <xsl:attribute name="space-after">12pt</xsl:attribute> </xsl:attribute-set>
The formatter uses the columns values generated by the rst2xml.py script to determine the width of the columns. In order to change this default, re-write the table template:
<!--sets the second two columns to twice the first column--> <xsl:template match="table[not(@classes)]/tgroup"> <fo:table-column column-number="1" column-width="proportional-column-width(5)"/> <fo:table-column column-number="2" column-width="proportional-column-width(10)"/> <fo:table-column column-number="3" column-width="proportional-column-width(10)"/> <xsl:apply-templates/> </xsl:template>
To format all of the cells in the header, use the table-header attribute-set.
<xsl:attribute-set name="table-header"> <!--increases font size--> <xsl:attribute name="font-size">14/xsl:attribute> </xsl:attribute-set>
Use the 'table-header-cell' attribute-set to format the cells in the heading. Note that this attribute set inherits the propertis of the default-cell attribute set (shown below).
<xsl:attribute-set name="table-header-cell" use-attribute-sets="default-cell"> <xsl:attribute name="border-bottom">solid black 2px</xsl:attribute> </xsl:attribute-set>
<xsl:attribute-set name="table-header-block"> </xsl:attribute-set>
Use the table-body attribute-set to format all of the table body:
<xsl:attribute-set name="table-body"> </xsl:attribute-set>
The attribute-set table-row formats the table row. Note that the defaults has the attribute "keep-together.within-page" set to "always" so that rows do not split across pages.
<xsl:attribute-set name="table-row"> <xsl:attribute name="keep-together.within-page">always</xsl:attribute> </xsl:attribute-set>
The cells are formatted with the table-cell attribute-set. This attribute set inherits its properties from the default-table-cell.
<xsl:attribute-set name="table-cell" use-attribute-sets="default-cell"> </xsl:attribute-set> <xsl:attribute-set name="default-cell"> <xsl:attribute name="border">solid black 1px</xsl:attribute> <xsl:attribute name="padding">1em</xsl:attribute> <xsl:attribute name="border-collapse">collapse</xsl:attribute> </xsl:attribute-set>