Чанкинг в DocBook 5 ограничивает глубину оглавления и заставляет пропускать цифры?
У меня есть документ DocBook V5.0, который раньше был .docbook
файл, содержащий всю книгу. В этот момент сгенерированный TOC выглядел нормально. Теперь я разделил вход на 4 разных .docbook
файлы, а также хотите chunked вывод.
После этого изменения у меня внезапно возникли две проблемы:
- Содержание содержит только четыре записи (по одной для каждого.docbook), а не всю глубину, которую он использовал для
- Как ни странно, номера глав TOC - это 1, 2 и 4, а затем глоссарий, в котором нет номера.
Что касается последнего, то, если я удалю вторую главу, я получу 1, 2 и глоссарий, так что я думаю, что ничего из содержания второй главы не вызывает неправильную нумерацию.
Во всяком случае, мой вопрос, как я могу восстановить нормально выглядящее оглавление при сохранении фрагментированного ввода и вывода? (Разделение может быть даже ограничено глубиной одного файла, т. Е. Одним файлом, одним файлом - но я хочу, чтобы глубина 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 "←">
<!ENTITY rarr "→">
<!ENTITY mdash "—">
]>
<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>
вместо этого весь файл отсутствует в оглавлении.
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>
Не вкладывайте главы во включенные .docbook
файлы. использование chapter
для внешнего тега и section
для всего внутри.
(Несмотря на проверку, я обнаружил, что самый короткий файл, который я пытался реструктурировать, изменив его внешний тег на chapter
а затем его внутренний chapter
тег к section
фактически отсутствовала пара chapter
теги, так что у него была глава с двумя titles
и так далее. Прежде чем это заметить, это заставляло его не появляться в оглавлении, поэтому я предположил, что доказал, что section
-в-chapter
не работал по какой-то причине, когда на самом деле это были пропущенные теги из моей работы вырезать-вставить. Не надейтесь на валидатор!)