最新消息:20210816 当前crifan.com域名已被污染,为防止失联,请关注(页面右下角的)公众号

【已解决】给ant的webhelp生成的TOC目录添加索引号

Docbook crifan 2514浏览 0评论

【问题】

已经可以通过ant webhelp给docbook生成对应的在线帮助系统。

但是生成出来的左边目录中,没有了章节编号,没了索引号:

toc no index number

所以想要添加进去。

【解决过程】

1.关于目录的索引编号,其实之前就已经折腾过,但是是针对html/pdf的,相关xsl配置为:

<!--============================================================================
TOC index setting
=============================================================================-->
<!-- 自动添加(索引)编号 -->
<xsl:param name="section.autolabel" select="1"/>
<!-- 添加的编号中包括子的小节 -->
<xsl:param name="section.label.includes.component.label" select="1"/>
<!-- 引用Reference部分也编号 -->
<xsl:param name="bibliography.numbered" select="1"/>
<!-- TOC目录最大深度,默认是5 -->
<xsl:param name="toc.section.depth">8</xsl:param>

然后将其加入进来,然后编出来的效果是:

toc still no index

即左边的TOC还是没有章节编号,但是正文中的内容,包括正文里面的目录,倒是出现了所希望的目录编号。

所以,还是要继续折腾,让左边的TOC也添上章节的索引编号。

2.后来找到了上述左边的TOC所对应的html源码:

 <ul id="tree" class="filetree">
    <li><span class="file"><a href="preface.html" tabindex="1">Docbook介绍</a></span><ul>
          <li><span class="file"><a href="what_is_docbook.html" tabindex="1">什么是Docbook</a></span><ul>
                <li><span class="file"><a href="pr01s01s01.html" tabindex="1">Docbook出现的背景</a></span></li>
                <li><span class="file"><a href="pr01s01s02.html" tabindex="1">Docbook是什么</a></span><ul>
                      <li><span class="file"><a href="pr01s01s02s01.html" tabindex="1">截图说明Docbook的:一种(xml)格式输入,多种(html,htmls,chm,pdf,txt,rtf等等)格式输出</a></span><ul>
                            <li><span class="file"><a href="pr01s01s02s01.html#d0e287" tabindex="1">Docbook的一种输入:xml源码(文件)</a></span></li>
                            <li><span class="file"><a href="pr01s01s02s01.html#d0e304" tabindex="1">Docbook的多种输出:HTML,HTMLs,PDF,CHM,RTF,TXT等格式</a></span></li>
                         </ul>
                      </li>
                   </ul>
                </li>
             </ul>
          </li>
          <li><span class="file"><a href="why_use_docbook.html" tabindex="1">我为何选择Docbook</a></span></li>
       </ul>
    </li>

然后就去找相关的是哪里的xsl生成的上述的代码的。

然后找到了是在

E:\Dev_Root\docbook\dev\ant\webhelp\xsl\webhelp-common.xsl

中的

<div id="treeDiv">
    <img src="{$webhelp.common.dir}images/loading.gif" alt="loading table of contents..."
         id="tocLoading" style="display:block;"/>
    <div id="ulTreeDiv" style="display:none">
        <ul id="tree" class="filetree">
            <xsl:apply-templates select="/*/*" mode="webhelptoc">
                <xsl:with-param name="currentid" select="$currentid"/>
            </xsl:apply-templates>
        </ul>
    </div>

</div>

这部分xsl生成的html,那接着就是想办法,对其添加索引编号的配置了。

3.然后在webhelp-common.xsl看到了:

<xsl:when test="$rootid != ''">
    <xsl:variable name="title">
        <xsl:if test="$webhelp.autolabel=1">
            <xsl:variable name="label.markup">
                <xsl:apply-templates select="key('id',$rootid)" mode="label.markup"/>
            </xsl:variable>
            <xsl:if test="normalize-space($label.markup)">
                <xsl:value-of select="concat($label.markup,$autotoc.label.separator)"/>
            </xsl:if>
        </xsl:if>
        <xsl:apply-templates select="key('id',$rootid)" mode="titleabbrev.markup"/>
    </xsl:variable>

中有$webhelp.autolabel,所以,又是之前折腾的很熟悉的webhelp相关的参数了。

所以就去网上找到相关的配置参数的解释:

DocBook XSL Stylesheets: Reference Documentation

对于html的参数,就找到了:

HTML Parameter Reference

中的:

webhelp.autolabel — Should tree-like ToC use autonumbering feature?
webhelp.base.dir — The base directory for webhelp output.
webhelp.common.dir — Path to the directory for the common webhelp resources (JavaScript, css, common images, etc).
webhelp.default.topic — The name of the file to which the start file in the webhelp base directory redirects
webhelp.include.search.tab — Should the webhelp output include a Search tab?
webhelp.indexer.language — The language to use for creating the webhelp search index.
webhelp.start.filename — The name of the start file in the webhelp base directory.
webhelp.tree.cookie.id — Controls how the cookie that stores the webhelp toc state is named.

所以,就可以去试试各个参数的效果了。

4.先去添加了:

<xsl:param name="webhelp.autolabel">1</xsl:param>

然后编译后,就可以看到TOC带索引编号了:

toc show index number

5.但是很明显,章节前面还是没有第一章,第二章等编号。

但是很奇怪的上述参数的解释却是:

To include chapter and section numbers the table of contents pane, set this parameter to 1.

即包含了chapter的编号。

所以就是出现了,虽然参数解释中说加了此参数可以将chapter和section都加index,但是实际只是section加了index,而chapter没有。

不知道是不是bug。

6.然后就去继续去折腾。后来在webhelp-common.xsl中看到了一些参数:

    <xsl:param name="section.autolabel" select="0"/>
    <xsl:param name="chapter.autolabel" select="0"/>
    <xsl:param name="appendix.autolabel" select="0"/>
    <xsl:param name="qandadiv.autolabel" select="0"/>
    <xsl:param name="reference.autolabel" select="0"/>
    <xsl:param name="part.autolabel" select="0"/>    
    <xsl:param name="section.label.includes.component.label" select="1"/>

所以就去先添加一个:

<xsl:param name="chapter.autolabel" select="1"/>

试试,结果就可以给chapter添加索引编号了:

chapter has index

其中,注意到,preface,appendix等是没有编号的。

7.所以,就又去添加相关的配置参数:

<xsl:param name="appendix.autolabel" select="1"/>
<xsl:param name="qandadiv.autolabel" select="1"/>
<xsl:param name="reference.autolabel" select="1"/>

去给appendix,qandadiv,reference,都加上索引编号,然后编译结果是appendix加了索引编号,倒是更加不好看了,所以又把appendix.autolabel改为0.

8.最后,TOC的效果如下:

last index effect

然后后来又添加个navig.showtitles,最后效果为:

navig.showtitles effect

 

【总结】

想要给webhelp的TOC添加索引编号,通过其内在就支持的参数配置,即可实现。

目前,此处个人手动添加的几个配置为:

<xsl:param name="webhelp.autolabel">1</xsl:param>
<xsl:param name="chapter.autolabel" select="1"/>
<xsl:param name="appendix.autolabel" select="0"/>
<xsl:param name="qandadiv.autolabel" select="1"/>
<xsl:param name="reference.autolabel" select="1"/>

<xsl:param name="navig.showtitles">1</xsl:param>

即可实现想要的效果了。

转载请注明:在路上 » 【已解决】给ant的webhelp生成的TOC目录添加索引号

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
82 queries in 0.200 seconds, using 22.38MB memory