7

有没有办法在 DocBook 文档中定义宏(如 tex 宏或 latex 定义)?

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

如果是这样,任何人都可以提供一个简单的示例或链接吗?

谢谢

4

3 回答 3

7

不确定,如果这正是您想要的/如果它完全满足您的要求,但我正在考虑实体。您可以在顶部定义它们(在您的 XML 文档中,一般是 XML,没有特定于 DocBook)。如这里看到的“doc.release.number”和“doc.release.date”。但它们也可以通过单独的文件包含在内。如第 3 个 ENTITY 行所示。这里的 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'                  >  
于 2010-04-14T20:12:33.797 回答
2

不完全符合您的要求,但可能对您的某些情况有所帮助:您可以在定义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?>
于 2010-08-02T11:39:05.153 回答
0

您是否考虑过从另一种格式生成 DocBook(例如reStructuredText?)

我发现它非常适合文档。

此外,您可能会很快编写一个宏预处理器(或查看 m4)。如果您使用的是 DocBook 的 XML 版本,一个简单的 XSLT 就可以了。只需制作一些标签并对其进行转换。自动添加样板文件。准备好对 XSLT 感到愤怒。因为不是一切。让你的思维扭曲。

于 2010-04-08T14:50:25.397 回答