[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [docbook-apps] How to include sidebars in the table of contents...
Hi Bob, With a little tweaking it worked. First, I switched over to use the <section> element instead of <sect1>, <sect2>, etc, as you said, to reduced the amount of customization. Second, on the line: > <xsl:apply-templates select="example|sect2" mode="toc"> it still wouldn't call the example toc template, only the sect2 template. So I decideded to handle it by adding an additional block outside of the test of section and depth: <xsl:template match="section" mode="toc"> ... <xsl:if test="$toc.section.depth > $depth and section"> <fo:block id="toc.{$cid}.{$id}" start-indent="{$reldepth*$toc.indent.width}pt"> <xsl:apply-templates select="section" mode="toc"> <xsl:with-param name="toc-context" select="$toc-context"/> </xsl:apply-templates> </fo:block> </xsl:if> <!-- begin customization to display example block --> <xsl:if test="example"> <fo:blockstart-indent="{count(ancestor::*)*$toc.indent.width}pt"> <xsl:apply-templates select="example" mode="toc"> <xsl:with-param name="toc-context" select="$toc-context"/> </xsl:apply-templates> </fo:block> </xsl:if> <!-- end customization to display example block --> ... </xsl:template> This works perfectly. Now to clean up the presentation... Thanks, Ken Van Mersbergen Tedras Global Solutions --- Bob Stayton <bobs@sagehill.net> wrote: > Hi Ken, > In the FO stylesheet, the TOC is processed by a sequence of templates to > handle the various levels. The division.toc template starts the TOC and > selects only the top level elements to include, those that can reside as > direct children of book or part. An example element would never be > included in a selection in that context. > > You will see that the division.toc template does this step: > > <xsl:apply-templates select="$nodes" mode="toc"> > <xsl:with-param name="toc-context" select="$toc-context"/> > </xsl:apply-templates> > > It processes its chapter, appendix, and other nodes using mode="toc". > Further down in fo/autotoc.xsl you will see templates such as: > > <xsl:template match="preface|chapter|appendix|article" mode="toc"> > > By using a mode like this, each element type can be handled differently. > Each such template calls the template named 'toc.line' to generate its > entry in the TOC, and then does apply-templates in mode="toc" on any child > elements to be included under it. Each level is responsible for selecting > those elements to be included under it. So you don't actually need to > customize the division.toc template. Instead, you need to customize > templates further down the hierarchy. > > In your case, an example inside a sect1 requires customizing the template > that starts with: > > <xsl:template match="sect1" mode="toc"> > > Change the apply-templates in this template to select both example and > sect2: > > <xsl:apply-templates select="example|sect2" mode="toc"> > <xsl:with-param name="toc-context" select="$toc-context"/> > </xsl:apply-templates> > > You will have to repeat that process for each section level (unless you > switch to using <section> elements, for which there is only one template in > mode="toc"). > > The other thing you will have to change is how an example element is > formatted in a table of contents. The default formatting assumes the > example entry is in a separate "List of Examples", so the entry is just the > example number and title, without the "Example" label before the number. > So you will also need to customize the template that matches example in > mode="toc". The original template in fo/autotoc.xsl is: > > <xsl:template match="figure|table|example|equation|procedure" mode="toc"> > <xsl:call-template name="toc.line"/> > </xsl:template> > > Replace the call to the 'toc.line' template with a copy of the content of > the 'toc.line' template, and add the word "Example " to the label: > > <xsl:template match="figure|table|example|equation|procedure" mode="toc"> > <xsl:variable name="id"> > <xsl:call-template name="object.id"/> > </xsl:variable> > > <xsl:variable name="label"> > <xsl:text>Example </xsl:text> > <xsl:apply-templates select="." mode="label.markup"/> > </xsl:variable> > > <fo:block text-align-last="justify" > text-align="start" > end-indent="{$toc.indent.width}pt" > last-line-end-indent="-{$toc.indent.width}pt"> > <fo:inline keep-with-next.within-line="always"> > <fo:basic-link internal-destination="{$id}"> > <xsl:if test="$label != ''"> > <xsl:copy-of select="$label"/> > <xsl:value-of select="$autotoc.label.separator"/> > </xsl:if> > <xsl:apply-templates select="." mode="titleabbrev.markup"/> > </fo:basic-link> > </fo:inline> > <fo:inline keep-together.within-line="always"> > <xsl:text> </xsl:text> > <fo:leader leader-pattern="dots" > leader-pattern-width="3pt" > leader-alignment="reference-area" > keep-with-next.within-line="always"/> > <xsl:text> </xsl:text> > <fo:basic-link internal-destination="{$id}"> > <fo:page-number-citation ref-id="{$id}"/> > </fo:basic-link> > </fo:inline> > </fo:block> > </xsl:template> > > If you are doing this for all languages (not just English), then you would > use a call to the gentext template with a param named 'key' with value > 'example'. > > Bob Stayton > Sagehill Enterprises > DocBook Consulting > bobs@sagehill.net > > > ----- Original Message ----- > From: "Ken Van Mersbergen" <kenvm97@yahoo.com> > To: <docbook-apps@lists.oasis-open.org> > Sent: Thursday, April 27, 2006 10:49 AM > Subject: Re: [docbook-apps] How to include sidebars in the table of > contents... > > > >I modified my division.toc to include example when setting $node. Still no > > results. So I corrected my use of placing an example in sidebar. Instead > > of > > including sidebars in the ToC, I want to include example. > > > > I'm using docbook V4.5CR1, with xsl stylesheets V1.68.1, and outputing to > > PDF > > using fop 0.20.5. > > > > I have limited my toc.section.depth to 1. > > > > With that said, here is a sample of my xml: > > <book> > > <chapter label="1"> > > <title>Introduction</title> > > <sect1 label="1.1"> > > <title>Why...</title> > > <sect2> > > <title>...</title> > > <example/> > > </sect2> > > </sect1> > > <sect1 label="1.2"> > > <title>Who</title> > > <example/> > > </sect> > > ... > > </chapter> > > </book> > > > > This should display as: > > 1. Introduction > > 1.1 Why... > > Example 1: title > > 1.2 Who... > > Example 2: title > > 1.3 ... > > 1.4 ... > > > > Ken Van Mersbergen > > Tedras Global Solutions > > > > --- Bob Stayton <bobs@sagehill.net> wrote: > > > >> The list recently discussed how to add qandsets to a TOC, the > >> discussion starting here: > >> > >> http://lists.oasis-open.org/archives/docbook-apps/200601/msg00095.html > >> > >> and continued here: > >> http://lists.oasis-open.org/archives/docbook-apps/200602/msg00077.html > >> > >> Your problem is similar, it seems. Instead of customizing > >> component.toc (used for article), you would want to customize > >> division.toc for a book. HTML and FO processing is a bit > >> different you will find. > >> > >> Bob Stayton > >> Sagehill Enterprises > >> DocBook Consulting > >> bobs@sagehill.net > >> > >> > >> ----- Original Message ----- > >> From: "Ken Van Mersbergen" <kenvm97@yahoo.com> > >> To: <docbook-apps@lists.oasis-open.org> > >> Sent: Friday, April 07, 2006 4:05 PM > >> Subject: [docbook-apps] How to include sidebars in the table of > >> contents... > >> > >> > >> >I am automatically generating a ToC and want to include blocks > >> >marked with the > >> > <sidebar> tag in the table of contents (note that I have my > >> > examples tagged as > >> > a sidebar with a role of example) so that it appears like this: > >> > > >> > 1. Introduction > >> > 1.1 Why... > >> > 1.2 Who... > >> > Example 1: title > >> > Example 2: title > >> > 1.3 ... > >> > 1.4 ... > >> > > >> > Where/how do I override the template to include do this in the > >> > Toc? Is this a > >> > case where it would be better to manually generate a ToC? > >> > > >> > Thanks, > >> > Ken > >> > > >> > > >> > __________________________________________________ > >> > Do You Yahoo!? > >> > Tired of spam? Yahoo! Mail has the best spam protection around > >> > http://mail.yahoo.com > >> > > >> > --------------------------------------------------------------------- > >> > To unsubscribe, e-mail: > >> > docbook-apps-unsubscribe@lists.oasis-open.org > >> > For additional commands, e-mail: > >> > docbook-apps-help@lists.oasis-open.org > >> > > >> > > >> > > >> > >> > >> > > > > > > __________________________________________________ > > Do You Yahoo!? > > Tired of spam? Yahoo! Mail has the best spam protection around > > http://mail.yahoo.com > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org > > For additional commands, e-mail: docbook-apps-help@lists.oasis-open.org > > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: docbook-apps-unsubscribe@lists.oasis-open.org > For additional commands, e-mail: docbook-apps-help@lists.oasis-open.org > > __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]