2015-12-25 2 views
1

У меня есть куча файлов DocBook XML, которые все объединяются в один файл DocBook для преобразования в HTML. Каждый отдельный документ является справочной страницей (для функции или аналогичной конструкции). Я использую chunked HTML-поколение, так что каждая эталонная страница становится собственной HTML-страницей.Как вы получаете DocBook XSL для генерации полного TOC для каждой страницы?

Проблема заключается в следующем: я хочу оглавление на каждой странице. Но я не хочу the table of contents for that page. Я хочу полный TOC для всего справочного руководства.

То есть, с любой страницы, я хочу иметь возможность перейти на любую другую страницу с помощью TOC. Я могу использовать стилизацию CSS, чтобы наклеить TOC на левой стороне (и даже скрыть ее для просмотра мобильным устройством или что-то еще).

Существует очевидный способ справиться с этим. Я мог бы извлечь основной TOC через сценарий после обработки и скопировать скрипт в каждый из выходных HTML-документов. Я ищу способ, который работает в DocBook XSL.

Я хочу, чтобы результаты выглядели скорее как DocBook XSL's newer webhelp, но с менее откровенным участием JavaScript.

ответ

2

Существует относительно простой способ получить это, хотя я уверен, что вы не можете без creating a DocBook XSL customization layer или просто непосредственно модифицировать установленные таблицы стилей (системы).

В любом случае, я думаю, что фактический шаблон docbook-xsl, который вам нужно изменить или переопределить, называется make.toc, расположенный в дистрибутиве стилей в файле html/autotoc.xsl.

Это большое шаблонные почти сто строки, но вам нужно только внести изменения в одну строки к нему:

--- /usr/share/xml/docbook/stylesheet/docbook-xsl/html/autotoc.xsl 2012-12-16 11:35:12.000000000 +0900 
+++ /opt/workspace/autotoc.xsl 2015-12-26 09:19:36.000000000 +0900 
@@ -28,7 +28,7 @@ 
</xsl:variable> 

<xsl:template name="make.toc"> 
- <xsl:param name="toc-context" select="."/> 
+ <xsl:param name="toc-context" select="/"/> 
    <xsl:param name="toc.title.p" select="true()"/> 
    <xsl:param name="nodes" select="/NOT-AN-ELEMENT"/> 

То есть, вам нужно вызвать этот шаблон с toc-context паров набора в «/» (вместо «.»).

Значение по умолчанию «.» указывает шаблону, что при создании TOC для фрагмента он должен смотреть только на (дочерний) контент любого элемента, который он обрабатывает (то есть корень этого конкретного фрагмента) ; например, если он обрабатывает section, он выглядит только у детей этого section.

Но если вы вместо этого измените это значение на «/», вы сообщаете шаблону (повторно) все содержимое исходного документа каждый раз. Поэтому, если ваш документ является book, он будет давать вам всю ТОС для всей книги каждый раз, или если ваш документ article, вся статья и т. Д.

Поэтому я думаю, что это должно дать вам то, что вы «Желаю.

Если вы решили просто изменить установленные таблицы стилей, и вы установили их из любого используемого диспетчера пакетов, который вы используете, вам нужно найти, где установлен файл html/autotoc.xsl.

В моей системе Debian Linux html/autotoc.xsl файл здесь:

/usr/share/xml/docbook/stylesheet/docbook-xsl/html/autotoc.xsl 

И на моем OS X системе, установленной из доморощенного пакета, это здесь:

/usr/local/opt/docbook-xsl/docbook-xsl/html/autotoc.xsl 

Если вы решили вместо create a customization layer, вам нужно скопировать весь шаблон make.toc в ваш уровень настройки (но с этим toc-context сменяется на «/»).

Смежные вопросы