在 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 放到 object1
和 xml: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
另一个周末和时间来进一步研究 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 放到 object1
和 xml: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