0

我有一个 DocBook V5.0 文档,它曾经是一个.docbook包含整本书的文件。那时,生成的 TOC 看起来不错。现在,我已经将输入分块到 4 个不同的.docbook文件中,并且还想要分块输出。

在这个改变之后,我突然有两个问题:

  1. TOC只包含四个条目(每个 .docbook 一个),而不是它过去的全部深度
  2. 很奇怪的是,TOC 章节编号是1、2 和 4,然后是没有编号的词汇表。

关于后者,如果我删除第二章,我会得到 1、2 和词汇表,所以我猜不是第二章的内容导致了编号错误。

无论如何,我的问题是,如何在保留分块输入和输出的同时恢复正常的 TOC?(分块甚至可以限制为单文件深度,即一个文件输入,一个文件输出 - 但我希望 TOC 深度更高。)

我做了什么

我使我的主文件看起来像这样:

<!DOCTYPE book [
    <!ENTITY a SYSTEM "a.docbook">
    <!ENTITY b SYSTEM "b.docbook">
    <!ENTITY c SYSTEM "c.docbook">
    <!ENTITY glossary SYSTEM "glossary.docbook">
    <!ENTITY larr "&#x2190;">
    <!ENTITY rarr "&#x2192;">
    <!ENTITY mdash "&#x2014;">
]>
<book xmlns:xl="http://www.w3.org/1999/xlink">
<title>My Title</title>
&a;
&b;
&c;
&glossary;
</book>

我的 XSL 与以前类似,但添加了一些分块控制选项(但对原始 TOC 选项没有更改):

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

<xsl:import href="/usr/share/sgml/docbook/xsl-stylesheets/html/chunk.xsl"/>

<xsl:output method="html"
            encoding="UTF-8"
            indent="no"/>
<!--new--><xsl:param name="chunk.quietly" select="1"></xsl:param>
<!--new--><xsl:param name="chunker.output.encoding">UTF-8</xsl:param>
<!--new--><xsl:param name="html.extra.head.links" select="0"></xsl:param>
<xsl:param name="html.stylesheet" select="'main.css'"/>
<xsl:param name="generate.toc">
  book      toc,title
</xsl:param>
<xsl:param name="glossentry.show.acronym">yes</xsl:param>
<xsl:param name="glossary.sort" select="1"></xsl:param>
<!--new--><xsl:param name="use.id.as.filename" select="1"></xsl:param>

</xsl:stylesheet>

我的.docbook文件都是这样的:

一个 ...

除了glossary.doc

词汇表

现在,我意识到在一个章节中有一个章节可能有点奇怪。这甚至可能是原因。但是,它会在没有警告的情况下进行验证,而且,如果我改为在给定文件中制作最外层的标签<section>,则 TOC 中会丢失整个文件。

4

2 回答 2

2

提示:将旧版本替换<!ENTITY ...>xinclude。这样做的好处是可以通过 xml 模式很好地验证所有内容。XML 编辑器也可以更好地使用 xinclude,然后通过ENTITY.

下面是一个例子:

文件:book.xml

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

<book version="5.0" xmlns="http://docbook.org/ns/docbook"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      xmlns:db="http://docbook.org/ns/docbook">
  <info>
    <title>This is a book</title>
  </info>

  <chapter>
    <title>This is a chapter</title>

    <section>
      <title>This is a section</title>

      <para>This is a paragraph.</para>
    </section>

    <xi:include href="included_section.xml" />
  </chapter>
</book>

文件:include_section.xml

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

<section version="5.0" xmlns="http://docbook.org/ns/docbook"
         xmlns:xlink="http://www.w3.org/1999/xlink"
         xmlns:xi="http://www.w3.org/2001/XInclude"
         xmlns:ns5="http://www.w3.org/2000/svg"
         xmlns:ns4="http://www.w3.org/1998/Math/MathML"
         xmlns:ns3="http://www.w3.org/1999/xhtml"
         xmlns:db="http://docbook.org/ns/docbook">
  <title>This is an included section</title>
  <para>This is an included paragraph.</para>

  <mediaobject>
    <imageobject>
      <imagedata fileref="media/martin-luther-king.jpg"></imagedata>
    </imageobject>
  </mediaobject>
</section>

在此示例中,还有一个media包含该文件的目录martin-luther-king.jpg

您上面的示例如下所示:

<book version="5.0" xmlns="http://docbook.org/ns/docbook"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      xmlns:db="http://docbook.org/ns/docbook">
    <title>My Title</title>
    <xi:include href="chapter-a.xml" />
    <xi:include href="chapter-b.xml" />
    <xi:include href="chapter-c.xml" />
    <xi:include href="glossary.xml" />
</book>

每个单独的章节文件可能如下所示:

<chapter version="5.0" xmlns="http://docbook.org/ns/docbook"
      xmlns:xlink="http://www.w3.org/1999/xlink"
      xmlns:xi="http://www.w3.org/2001/XInclude"
      xmlns:db="http://docbook.org/ns/docbook">
    <title>This is a chapter</title>

    <section>
      <title>This is a section</title>

      <para>This is a paragraph.</para>
    </section>
</chapter>

词汇表文件可能如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<glossary version="5.0" xmlns="http://docbook.org/ns/docbook" 
        xmlns:xi="http://www.w3.org/2001/XInclude" 
        xmlns:xlink="http://www.w3.org/1999/xlink">
    <title>Example Glossary</title>

    <para>
        This is not a real glossary, it's just an example.
    </para>
</glossary>
于 2015-06-02T19:11:53.067 回答
0

不要在包含的.docbook文件中嵌套章节。用于chapter最外层的标签和section里面的所有东西。

(尽管经过验证,我发现最短的文件,我试图通过将其最外层标签更改为chapter,然后将其内部chapter标签更改为 来重组section,实际上缺少一对chapter标签,所以它有一章有两个titles,依此类推。之前注意到这一点,这导致它没有出现在 TOC 上,所以我假设我已经证明section-within-chapter由于某种原因不起作用,而实际上是我的剪切粘贴中缺少这些标签工作。不要依赖验证器!)

于 2015-06-03T12:29:50.357 回答