2009-11-12 31 views
4

我想根据特定的<section>是否具有定义的某个属性来制作DocBook目录表加粗的某些行。通过在DocBook XSL中添加<xsl:if test="...">语句(fo/autotoc.xsl第187-230行 - 这用于使用XMLMind输出为PDF),很容易。DocBook XSL - 确定编辑原始样式表?

我在想,但是,如果这是不好的做法,自己编辑DocBook XSLs。我在我自己的一个单独的XSL中进行了其他自定义设置,主要是设置参数,但我无法想象如何引入此条件逻辑 - 基于目前正在处理TOC的哪一行 - 无需添加某种代码在原件。有什么想法吗?如何在进行更改后升级到较新的DocBook XSL?

回答

9

Import来自您自己的XSLT的docbook样式表。然后,(重新)定义您想要“覆盖”的Docbook模板。

由于您的模板在导入树中是最高的,因此优先。

通过这样做,您不必修改任何核心docbook XSLT文件。这将使未来更容易升级Docbook样式表。

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:import href="xsl/fo/docbook.xsl"/> 

<xsl:template match="template-that-you-need-to-redefine"> 
    ... 
</xsl:template> 

</xsl:stylesheet> 
+0

太棒了,谢谢。 – carillonator 2009-11-13 06:42:33

+3

我可以推荐_DocBook XSL:由Bob Stayton完成的指南,这是一个非常棒的资源。第9章包含自定义DocBook XSL样式表的说明:http://www.sagehill.net/docbookxsl/CustomMethods.html – 2009-11-13 08:30:40