另一个周末和时间进一步玩DocBook: - )
我在我的DocBook文档中添加了自定义元素,并将它们转换为FO,然后通过XSLT转换转换为PDF。这一切都很好。例如,我有一个自定义章节元素,如:
<MyChapter xml:id="mychapter">
<title>Test</title>
</MyChapter
背景是我想在该文档中强制执行某些结构,并且基本上非常有效。只有一件事不起作用而且我一直坚持下去。我的自定义元素不能是外部参照的目标。例如。以下不起作用:
<xref linkend="mychapter"/>
虽然我认为我理解它不起作用的原因,但我完全迷失了。这里有没有人做过类似的事情,可以给我一个如何处理这个问题的提示?
编辑:
在第一个答案之后,我调查了如果引用(标准)sect3会发生什么。这似乎由此file中的以下模板控制:
<xsl:template match="d:section|d:simplesect
|d:sect1|d:sect2|d:sect3|d:sect4|d:sect5
|d:refsect1|d:refsect2|d:refsect3|d:refsection" mode="xref-to">
<xsl:param name="referrer"/>
<xsl:param name="xrefstyle"/>
<xsl:param name="verbose" select="1"/>
<xsl:apply-templates select="." mode="object.xref.markup">
<xsl:with-param name="purpose" select="'xref'"/>
<xsl:with-param name="xrefstyle" select="$xrefstyle"/>
<xsl:with-param name="referrer" select="$referrer"/>
<xsl:with-param name="verbose" select="$verbose"/>
</xsl:apply-templates>
<!-- FIXME: What about "in Chapter X"? -->
</xsl:template>
我试图遵循这里的逻辑,但我被困在
<xsl:apply-templates select="." mode="object.xref.markup">
这条线做什么?
答案 0 :(得分:1)
通常DocBook xref引用逻辑非常简单。如果有人试图通过使用人类词语来说明这种逻辑,那就是:将object1
链接到xml:id1
(使用linkend
)并从{{1}获取生成的文本} object2
(使用xml:id2
)作为链接文字。
所以,我建议你把mychapter标题作为参考文本。我将按如下方式更改您的样本:
endterm
链接片段:
<MyChapter xml:id="mychapter">
<title xml:id="mychapter_title">Test</title>
</MyChapter>
您将通过章节标题中的参考文本(链接文本)获取您章节的引用(链接本身)。
此模式当然适用于默认元素,如果您使用自定义<xref linkend="mychapter" endterm="mychapter_title"/>
采用的默认xsl模板,则该模式应与您的自定义元素一起使用。
这里描述的逻辑非常好:http://www.sagehill.net/docbookxsl/CrossRefs.html