DocBook:如何链接到另一个手册页?

时间:2012-08-11 04:37:15

标签: html hyperlink docbook man

我正在DocBook中编写几个手册页。我还想将它们转换为HTML以便在网上显示。如何从一个手册页插入另一个手册页的链接,使其在man中显示为target(1),但在网络上显示为指向另一个手册页的超链接,该手册页也已转换为在同一目录中单独的HTML文件?

1 个答案:

答案 0 :(得分:2)

我想我已经弄明白了。您应该在文档中使用<citerefentry/>,该文档在手册页中显示为预期。除非您提供生成目标URL的方法,否则它不会在HTML文档中进行超链接。您可以在自定义层中执行该方法。

以下是手册页中“另请参阅”部分的示例文档摘要:

<refsect1 id="seealso">
    <title>See Also</title>
    <simplelist type="inline">
        <member><citerefentry><refentrytitle>grep</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>
        <member><citerefentry><refentrytitle>awk</refentrytitle><manvolnum>1P</manvolnum></citerefentry></member>
    </simplelist>
</refsect1>

结合此自定义模板(另存为custom.xsl

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

    <!-- Ignore spaces between elements (without this, the URL is "grep    .html" -->
    <xsl:strip-space elements="*"/>

    <!-- Turn citerefentry elements into HTML links -->
    <xsl:param name="citerefentry.link" select="1"/>

    <!-- Code to generate the URL for a given citerefentry element -->
    <xsl:template name="generate.citerefentry.link">
        <xsl:value-of select="refentrytitle"/>
        <xsl:text>.html</xsl:text>
    </xsl:template>
</xsl:stylesheet>

使用xmlto程序处理DocBook XML,指定HTML的自定义层:

$ xmlto man input.xml
$ xmlto html-nochunks -m custom.xsl input.xml

在联机帮助页中,这会产生:

SEE ALSO
       grep(1), awk(1P)

在HTML中它产生了这个:(为清晰起见,所有<span>个元素都被删除了)

<h2>See Also</h2>
<a href="grep.html">grep(1)</a>, <a href="awk.html">awk(1)</a>

可以通过修改generate.citerefentry.linkcustom.xsl模板的内容来调整生成的实际网址。上面的示例只使用DocBook XML中<refentrytitle>的值,并将“.html”附加到其中。