在 DocBook 中引用自定义元素

Referencing custom elements in 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">

这条线是做什么的?

通常 DocBook 外部参照引用逻辑非常简单。如果有人试图用人类的话来说明这个逻辑,它会是这样的:把 link 放到 object1xml:id1 中(使用 linkend)并从中获取生成的文本object2 xml:id2(使用 endterm)作为 link 文本。

所以,我建议你把我的章节标题作为参考文本。我将按如下方式更改您的样本:

<MyChapter xml:id="mychapter">
<title xml:id="mychapter_title">Test</title>
</MyChapter>

Link 片段:

<xref linkend="mychapter" endterm="mychapter_title"/>

您将通过章节标题中的参考文本(link 文本)获得您章节的参考(link 本身)。

此架构当然适用于默认元素,如果您使用自定义采用的默认 xsl 模板,则应该适用于您的自定义元素 mychapter

这个逻辑在这里描述得很好:http://www.sagehill.net/docbookxsl/CrossRefs.html