[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]
Subject: Re: [docbook-apps] callouts in TEX
I created a solution by myself. In case that someone else faces the same problem I will list my solution afterwards. First of all I included a definition of a counter in the preamble. In my case this is done by a special stylesheet which is called preamble.xsl. I inserted the following definition: % ------------------------------------------------------------ % Counter für Callouts % ------------------------------------------------------------ % callout counter \newcounter{cocnt} % step the counter, print it and make a label for referencing \def\co#1{% \refstepcounter{cocnt}\hfill\label{#1}\thecocnt} Then I wrote a stylessheet which I called verbatim.mod.xsl. This file overrides the templates of db2latex. I wrote the following templates: <xsl:template match="screen"> <!-- two linebreaks to force a break --> <xsl:text>

</xsl:text> <xsl:choose> <!-- If there is a tag co inside of screen call my callout handling --> <xsl:when test="child::co"> <xsl:text></xsl:text> <!-- hand over the content of screen in verbatim mode --> <xsl:call-template name="transform-lines"> <xsl:with-param name="pcdata"> <!-- verbatim mode is important basic to determine the end of every line --> <xsl:apply-templates mode="make.verbatim.mode"/> </xsl:with-param> </xsl:call-template> </xsl:when> <!-- screen is used as verbatim element without callouts --> <xsl:otherwise> <!-- use the db2latex stylesheets --> <xsl:apply-imports/> </xsl:otherwise> </xsl:choose> <!-- In any case reset counter to zero --> <xsl:text>\setcounter{cocnt}{0}</xsl:text> </xsl:template> <xsl:template match="co" mode="make.verbatim.mode"> <!-- Replace the content of co with a special character which divides the verbatim element from the counter and append \co{<id of element>}--> <xsl:text>þ\co{</xsl:text> <xsl:value-of select="@id"/> <xsl:text>}</xsl:text> </xsl:template> <!-- read in line by line --> <xsl:template name="transform-lines"> <!-- hand over CDATA from screen --> <xsl:param name="pcdata"/> <xsl:choose> <!-- read line --> <xsl:when test="contains ($pcdata, '
')"> <!-- parameter verb gets as value the current line --> <xsl:param name="verb" select="substring-before($pcdata,'
')"/> <!-- Is there any content in that line? --> <xsl:if test="string-length($verb)>1"> <!-- Make the line verbatim. A special character divides verbatim an non verbatim environment --> <xsl:text>\verbþ</xsl:text> <xsl:choose> <!-- Is there a tag co in the current line --> <xsl:when test="contains($verb,'þ\co{')"> <!-- If so, the current line should not be appended by the special character --> <xsl:value-of select="$verb"/> <xsl:text>\\</xsl:text> </xsl:when> <xsl:otherwise> <!-- The current line must be closed by the special character to end verbatim environment --> <xsl:value-of select="$verb"/> <xsl:text>þ\\</xsl:text> </xsl:otherwise> </xsl:choose> </xsl:if> <!-- Go on for the next line --> <xsl:call-template name="transform-lines"> <xsl:with-param name="pcdata" select="substring-after($pcdata,'
')"/> </xsl:call-template> </xsl:when> <xsl:otherwise> <!-- No linebreak found --> <!-- Something goes wrong :-( --> <xsl:value-of select="$pcdata"/> </xsl:otherwise> </xsl:choose> </xsl:template> <!-- Match Descriptions --> <xsl:template match="callout"> <xsl:text>\item[\ref{</xsl:text> <xsl:value-of select="@arearefs"/> <xsl:text>}]</xsl:text> <xsl:apply-templates/> </xsl:template> The templates handle callouts that occure in the following form: <screen> $bar <co id="barid"/> $foo $barfoo <co id="barfooid"/> </screen> <calloutlist> <callout aerearefs="barid"> <para>Description of bar</para> </callout> <callout aerearefs="barfooid"> <para>Description of barfoo</para> </callout> </calloutlist> The result would be something like: $bar 1 $foo $barfoo 2 1 Description of bar 2 Description of barfoo best regards Kai Hagemeister
[Date Prev] | [Thread Prev] | [Thread Next] | [Date Next] -- [Date Index] | [Thread Index] | [List Home]