There is no stylesheet parameter that converts footnotes to endnotes, but it
can be done with a customization. Take a look at the template with
match="footnote"
in fo/footnote.xsl,
for example. You can customize that to
generate endnotes.
First copy the template to your customization layer and remove the
fo:footnote
elements, because they generate bottom-of-page footnotes. Leave
just the part that generates the footnote number, inside an fo:inline
:
<xsl:template match="footnote"> <fo:inline> <xsl:call-template name="format.footnote.mark"> <xsl:with-param name="mark"> <xsl:apply-templates select="." mode="footnote.number"/> </xsl:with-param> </xsl:call-template> </fo:inline> </xsl:template>
Then add a template with a new mode="endnote"
like the following to format each footnote:
<xsl:template match="footnote" mode="endnote">
<fo:block xsl:use-attribute-sets="footnote.properties">
<xsl:apply-templates/>
</fo:block>
</xsl:template>
The footnote mark is included when doing apply-templates
to a footnote
element. Then you can generate the list of end notes by putting a template like the following in your customization layer. It is meant to be called at the end of each chapter or appendix.
<xsl:template name="make.endnotes.list"> <xsl:apply-templates mode="endnote" select="ancestor-or-self::chapter//footnote | ancestor-or-self::appendix//footnote"/> </xsl:template>
This will select and process all the footnotes in the current chapter or appendix, in document order. If you are putting all your end notes at the end of a book, you should use select="//footnote"
instead. You will also want to turn off the way each chapter restarts the footnote number sequence, by customizing the template that starts with the following line:
<xsl:template match="footnote" mode="footnote.number">
The only remaining item is figuring out how to call the make.endnotes.list
template at the
point where you want the list of end notes to appear. If you want them at the end of the book, you will have to customize the template with match="book"
. You'll need to create a new page-sequence, add a title, and call the make.endnotes
template inside the page-sequence. You can use the utility template named page.sequence
in fo/component.xsl
to handle most of the page-sequence setup.
If you want end notes to appear at the end of each chapter, you can customize the end of the template with match="chapter"
from fo/component.xsl
as follows:
<xsl:template match="chapter"> [first part of the template] ... <xsl:apply-templates/> <xsl:if test="descendant::footnote"> <fo:block space-before="44pt" font-weight="bold" font-size="14pt" font-family="{$title.fontset}"> <xsl:text>Endnotes</xsl:text> </fo:block> <fo:block > <xsl:call-template name="make.endnotes.list"/> </fo:block> </xsl:if> </fo:flow> </fo:page-sequence> </xsl:template>
It tests to see if the current chapter has any footnote
elements. If so, it outputs a title and calls make.endnotes.list
.
If you are generating end notes instead of footnotes, you might want to turn off the ulink.footnotes
parameter (it is zero by default).
DocBook XSL: The Complete Guide - 4th Edition | PDF version available | Copyright © 2002-2007 Sagehill Enterprises |