【问题标题】:DocBook macros?DocBook 宏?
【发布时间】:2010-04-08 14:42:05
【问题描述】:

有没有什么方法可以在 DocBook 文档中定义宏(比如 tex 宏 o latex 定义)?

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

如果是这样,谁能提供一个简单的例子或链接?

谢谢

【问题讨论】:

    标签: macros docbook


    【解决方案1】:

    不确定,这是否正是您想要的/是否完全满足您的要求,但我正在考虑实体。您可以在顶部定义它们(在您的 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>
    

    在文档中,您通过 &amp;; 结尾引用实体,如 &amp;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 的等价物是什么?
    【解决方案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?>
    

    【讨论】:

      【解决方案3】:

      您是否考虑过从其他格式生成 DocBook(例如 reStructuredText?)

      我发现它非常适合文档。

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

      【讨论】:

      • @Daren:你的意思是 docbook dtd 不包含类似 tex: \def\h{hello everyone} 然后使用它 \h ?这将是一个很大的错误。编写宏预处理器?最好的方法是使用带有定义的 C 预处理器。我会看一下重组后的文本谢谢
      猜你喜欢
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多