在 docbook 中使用 xinclude 在程序列表中插入源文件

Insert a source file in programlisting with xinclude in docbook

我有以下文件树

mainfolder
|-assembly.xml
|
|-chapters
| |-introduction.xml
|
|-source
  |-example01
    |-main.cpp

assembly.xml是我的docbook的汇编文件。它包含对 introduction.xml.

的引用

这是程序集:

<?xml version="1.0" encoding="UTF-8"?>
<assembly version="5.1"
  xmlns="http://docbook.org/ns/docbook">
  <resources xml:base="chapters/">
    <resource href="introduction.xml" xml:id="introduction" />
  </resources>
  <structure xml:id="main-book">
    <info>
      <description>Book chapters</description>
    </info>
    <output renderas="book"/>
    <module resourceref="introduction"/>
  </structure>
</assembly>

introduction.xml 是文档 chapter。我想在其中插入一个示例,包括 main.cpp.

<?xml version="1.0" encoding="UTF-8"?>
<chapter version="5.1"
  xmlns="http://docbook.org/ns/docbook"
  xmlns:xlink="http://www.w3.org/1999/xlink"
  xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes"
  xmlns:xi="http://www.w3.org/2001/XInclude"
  xmlns:trans="http://docbook.org/ns/transclusion"
  xmlns:svg="http://www.w3.org/2000/svg"
  xmlns:m="http://www.w3.org/1998/Math/MathML"
  xmlns:html="http://www.w3.org/1999/xhtml"
  xmlns:db="http://docbook.org/ns/docbook">
  <info>
    <title>Introduction</title>
  </info>
  <section>
    <info>
      <title>Chapter title</title>
    </info>
    <para>
    You can see an example:
    </para>
    <example>
    <title>main example</title>
      <programlisting language="c++">
        <xi:include href="./../source/example01/maiin.cpp" parse="text" />
      </programlisting>
    </example>
  </section>
</chapter>

无论如何,当我构建本书时(我使用的是 XMLMind 的个人版),我没有看到任何东西。在 PDF 中打印了示例,但我看到的不是 main.cpp 中的源代码

<xi:include></xi:include>

我做错了什么?如何包含文件中的源代码?

我以不同的方式重现了您的情况,并且在这两种情况下都有效。

您没有提到使用 XMLMind XML 编辑器(简称 XXE)制作一本书的确切步骤,但以下步骤确实很有效。

None 1:我用过XXE专业版,但据我所知,版本之间的区别仅在于生成PDF时在文本中放置随机字符个人版。

注释 2:XXE 表示在您的上下文中不允许使用 <description>Book chapters</description> 元素。尽管如此,程序集还是可以生成成功。

1。让事情在 XXE

中运作
  1. 在 XXE 中打开程序集文件。
  2. Select 转换 > 转换文档 > 转换为 PDF.
  3. Select 保存 pdf 文件的路径,然后按 确定 按钮。

2。让事情在命令行中手动工作

  1. 使用您的确切文件和 DIR 结构(我包含了我自己的 .c 文件样本用于我自己的测试)。

  2. 使用 XXE 程序集处理器:http://www.xmlmind.com/xmleditor/assembly.shtml - 它与 XXE 用于处理来自 XXE GUI 的程序集的代码库相同。

  3. 从程序集获取 docbook 书籍文件:assembly-1_0_2_01/bin/assembly -v assembly.xml docbook_book.xml 在我的测试中,我得到了 .c 示例文件 - 这证明程序集实用程序与 XInclude 配合得很好。

  4. 手动获取.pdffop -c <config_file> -xsl <path_to_docbook_ns_stylesheets>/fo/docbook.xsl -xml docbook_book.xml -pdf docbook_book.pdf

我得到的最终结果是 .c 两种情况下的样本。