OASIS Mailing List ArchivesView the OASIS mailing list archive below
or browse/search using MarkMail.


Help: OASIS Mailing Lists Help | MarkMail Help

docbook-apps message

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]

Subject: Re: [docbook-apps] Re: [docbook] TOC with parents

Hi Ari,
You want to look at autotoc.xsl. The toc.xsl module has templates for a TOC that is created by hand using <tocentry> elements, something that almost no one does. Use autotoc.xsl for an automatically-generated TOC.

oOur first step is to turn on a table of contents for each chunk output. That is controlled by the stylesheet param named 'generate.toc', and few params that control which levels of section get a toc, all described here;


That will trigger each element mentioned in 'generate.toc' to call its
special template from autotoc.xsl to generate a TOC, which would be:

'division.toc' for set and book
'component.toc' for chapter, appendix, preface
'section.toc' for sections

By default, these will generate a "context-appropriate" TOC for each element, which means it includes only the children of the current element. So you need to redefine 'component.toc' and 'section.toc' to instead call 'division.toc'.

<xsl:template name="section.toc">
  <xsl:param name="toc-context" select="."/>
  <xsl:param name="toc.title.p" select="true()"/>

  <xsl:for-each select="ancestor::d:book">
    <xsl:call-template name="division.toc">
      <xsl:with-param name="toc-context" select="."/>
      <xsl:with-param name="toc.title.p" select="$toc.title.p"/>


The xsl:for-each is necessary to change the context from the current
element to the book element. The "d:book" is needed to match the namespace in DocBook 5, so use just "book" if you are using DocBook 4.

Do the same for redefining 'component.toc'.

Templates with mode="toc" are used in the construction of a TOC to
generate a TOC entry for the given element.  You probably won't need to
customize those for your purpose.

Let me know if this doesn't work for you.

Bob Stayton
Sagehill Enterprises

On 11/18/2015 2:57 PM, Aristedes Maniatis wrote:
Thanks for your help, but the webhelp output was just way too
different. So I've struggled to try and modify the TOC output from
docbook. But nothing I try seems to be able to customise it. Even
when I try:

<xsl:import href="@rootDir@/build/xslt/docbook/html/chunk.xsl"/>

<xsl:template name="section.toc" mode="toc">
<xsl:text>******************</xsl:text> </xsl:template>

<xsl:template match="section/toc" mode="toc">
<xsl:text>******************</xsl:text> </xsl:template>

with or without the mode (I don't really understand how the mode is
used in XSLT).

I'm a bit confused by the presence of both toc.xsl and autotoc.xsl.
But nothing I try seems to allow me to modify them.

I have no problem modifying other things like <xsl:template

I feel like I'm missing something really obvious.


On 22/10/2015 12:46pm, Peter Desjardins wrote:
[moving to docbook-apps]

What you are describing sounds like the webhelp output. Did you
consider using that?

Webhelp produces HTML pages with the full TOC on each page. I have
customized the HTML and CSS significantly to match different web
sites and branding.


On Wed, Oct 21, 2015 at 9:39 PM, Aristedes Maniatis
<ari@ish.com.au> wrote:
I have chunked html output from docbook 5, and want to output the
entire TOC on every page, including all parents of the chapter
currently being rendered.

I found one approach here:

But it is 11 years old, and not quite right, so I modified it a

<!-- show all sections in TOC, including parents of the current
section --> <xsl:template match="chapter" mode="toc"> <xsl:param
name="toc-context" select="."/>

<xsl:for-each select="ancestor::book"> <xsl:apply-templates
select="book" mode="toc"> <xsl:with-param name="toc-context"
select="."/> </xsl:apply-templates> </xsl:for-each>

but it doesn't work. I'm a bit out of my depth with this level of
XSLT hackery. Any help would be welcome...


-- --------------------------> Aristedes Maniatis ish
http://www.ish.com.au Level 1, 30 Wilson Street Newtown 2042
Australia phone +61 2 9550 5001   fax +61 2 9550 4001 GPG
fingerprint CBFB 84B4 738D 4E87 5E5C  5EFA EF6A 7D2E 3E49 102A

[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]