DocBook宏?

7

是否有一种方法可以在DocBook文档中定义宏(类似于tex宏或latex定义的宏)?

DocBook非常冗长,宏会很有帮助。但我在快速入门教程中没有找到它们。

如果有的话,能否提供一个简单的示例或链接?

谢谢

3个回答

8

我不确定这是否完全符合您的要求,但是我认为可以使用实体(ENTITYs)来解决。您可以在XML文档的顶部定义它们(因此是一般的XML,而不是特定于DocBook)。如下所示,对于“doc.release.number”和“doc.release.date”。但是它们也可以通过单独的文件进行包含,如第3个实体行中所示。这里的SYSTEM表示从另一个文件“entities.ent”中引入。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.4//EN"
    "http://www.oasis-open.org/docbook/xml/4.4/docbookx.dtd" [

  <!ENTITY  doc.release.number                 "1.0.0.beta-1"       >
  <!ENTITY  doc.release.date                   "April 2010"         >

  <!ENTITY  %   entities  SYSTEM  "entities.ent" >

  %entities;

]>

<!--  This document is based on http://readyset.tigris.org/nonav/templates/userguide.html  -->
<article  lang="en">
  <articleinfo>
    <title>&project.impl.title; - User Manual</title>
    <subtitle></subtitle>
    <date>&project.impl.release.date;</date>
    <copyright>
      <year>doc.release.year</year>
      <holder>Team - &project.impl.title;</holder>
    </copyright>
    <releaseinfo>&doc.release.number;</releaseinfo>
  </articleinfo>

  <section>
    <title>Introduction</title>
    <para>
    The &project.impl.title; has been created to clean up (X)HTML and XML documents as part of 


    </para>
  <section>
</article>

在文档中,您可以通过以&开头和以;结尾的方式引用实体,例如:&project.impl.title;

在文件 'entities.ent' 中,您可以以类似的方式指定 ENTITY 元素:

<?xml version="1.0" encoding="UTF-8"?>

<!ENTITY  project.impl.title            'Maven Tidy Plug-in'    >
<!ENTITY  project.impl.group-id         'net.sourceforge.docbook-utils.maven-plugin'    >
<!ENTITY  project.impl.artifact-id      'maven-tidy-plugin'     >
<!ENTITY  project.impl.release.number   '1.0.0.beta-1'          >
<!ENTITY  project.impl.release.date     'April 2010'            >
<!ENTITY  project.impl.release.year     '2010'                  >
<!ENTITY  project.impl.url              '../'                   >
<!ENTITY  project.spec.title            ''  >
<!ENTITY  project.spec.release.number   ''  >
<!ENTITY  project.spec.release.date     ''  >
<!ENTITY  doc.release.year              '2010'                  >  

不错!对于 Docbook v5.0,相应的等价物是什么? - jdkoftinoff

3

虽然不完全符合您的要求,但以下内容可能对您有所帮助:您可以在封装样式表中定义模板,其中定义fo命令。以下是一些示例:

代码:

<xsl:template match="symbolchar">
  <fo:inline font-family="Symbol">
    <xsl:choose>
      <xsl:when test=".='ge'">&#x2265;</xsl:when>
      <xsl:when test=".='le'">&#x2264;</xsl:when>
      <xsl:when test=".='sqrt'">&#x221A;</xsl:when>
      <xsl:otherwise>?!?</xsl:otherwise>
    </xsl:choose>
  </fo:inline>
</xsl:template>

使用方法:

<symbolchar>le</symbolchar>

代码:

<xsl:template match="processing-instruction('linebreak')">
  <fo:block/>
</xsl:template>

使用方法:

<?linebreak?>

0

你有没有考虑从其他格式(比如reStructuredText)生成DocBook文档?

我觉得这种方式非常适合文档编写。

此外,你可能很快就能编写一个宏预处理器(或者查看m4)。如果你正在使用XML版本的DocBook,那么一个简单的XSLT就可以完成。只需创建一些标签并将其转换即可。自动添加样板文件内容。准备好对XSLT感到非常生气,因为它没有发挥出全部作用,让你的思维扭曲了。


@Daren:你的意思是docbook dtd没有包含像tex:\def\h{hello everybody}这样的东西,然后使用它\h? 那将是一个很大的错误。编写宏预处理器?最好使用带有定义的C预处理器。我会看一下重新构建的文本。谢谢。 - cibercitizen1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接