引用DocBook

时间:2018-03-03 08:52:54

标签: xslt docbook

另一个周末和时间进一步玩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">

这条线做什么?

1 个答案:

答案 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