<?xml version="1.0" encoding="windows-1251"?>
<!--
<!DOCTYPE article SYSTEM "docbookx.dtd">
-->
<article lang="ru">
<articleinfo>
<title>Кратчайший путь к DocBook</title>
<author>
<firstname>Анатолий</firstname><surname>Белайчук</surname>
<email>bell@b-k.ru</email>
</author>
<copyright>
<year>2005</year>
<holder>Анатолий Белайчук</holder>
</copyright>
</articleinfo>
<abstract>
<para>
DocBook&#160;&#8212; технология подготовки документации,
обладающая значимыми преимуществами перед традиционными средствами&#160;&#8212;
текстовыми процессорами и настольными издательскими системами.
Оборотная сторона богатых возможностей DocBook&#8212;
сложность в первоначальном освоении, выборе и настройке инструментария.
Цель данной статьи&#160;&#8212; указать путь, по которому 
можно с минимальными затратами сил, времени и денег
внедрить DocBook в объеме, достаточном для того,
чтобы оценить эту технологию по достоинству и извлечь из нее практическую пользу.
</para>
</abstract>

<section id="intro">
<title>Введение</title>
<para>
Все то, что автор хотел высказать, прежде чем приступить к делу.
</para>

<section id="whatis">
<title>Что такое DocBook</title>
<para>
DocBook&#160;&#8212; это система подготовки документации,
основанная на технологиях XML и SGML.
По сравнению с традиционными средствами&#160;&#8212;
текстовыми процессорами (такими, как Microsoft Word)
и настольными издательскими системами (например, Ventura Publisher)
она обладает рядом преимуществ: в открытости,
в возможности генерации выходных документов в разных форматах
(в частности, HTML и PDF), в поддержке коллективной работы.
</para>
<para>
DocBook нецелесообразно использовать 
для написания разовых, небольших по формату документов.
Его преимущества максимально раскрываются там, где речь идет 
о качественной документации, разрабатываемой и дополняемой 
в течение длительного времени коллективом авторов.
DocBook является стандартом де-факто 
для документации на свободно распространяемое программное обеспечение,
его используют известные компании и организации:
IBM, Microsoft, Hewlett-Packard, Sun, Novell, WWW Consortium, OASIS.
</para>
<para>
DocBook полностью адаптирован к русскому языку. 
Подробнее о DocBook: <ulink url="http://docbook.ru/">docbook.ru</ulink>.
</para>
</section>

<section id="whatfor">
<title>Зачем нужна еще одна статья про DocBook</title>
<para>
Технология DocBook существует с 1991&#160;г., 
проделав за это время значительную эволюцию:
XML и XSL пришли на смену SGML и DSSSL, происходит постоянное развитие
(а время от времени&#160;&#8212; и смена) инструментария.
</para>
<para>
За прошедшие годы на тему DocBook написано
огромное количество справочников, учебников, статей и инструкций.
Проблема однако заключается в том, 
что эта документация частью устарела, частью противоречит друг другу.
Это следствие того, что развитие DocBook 
происходит по модели OpenSource, без централизованного контроля.
В результате инструкции зачастую ссылаются на инструментарий,
который уже не развивается и пользоваться которым нецелесообразно.
</para>
<para>
Еще одно затруднение, с которым сталкиваешься 
при первоначальном освоении DocBook&#160;&#8212;
чрезвычайная обширность предмета.
DocBook&#160;&#8212; это открытая и мощная технология,
и ее можно приспособить для самых разных вещей.
В результате при первоначальном знакомстве нелегко отличить
магистральный путь использования DocBook 
от боковых дорог и живописных, но малохоженных троп.
</para>
<para>
И наконец, при всем богатстве документации по DocBook,
текстов на русском языке мало, 
а особенно плохо обстоит дело с начальными инструкциями для широкого круга читателей.
Есть и специфические проблемы, связанные именно с русским языком,
в частности, с кириллицей в выходных документах, ориентированных на печать.
</para>
<para>
Перечисленные проблемы и послужили стимулом к написанию данной статьи.
</para>
</section>

<section id="howtoread">
<title>Как читать эту статью</title>
<para>
Статья оформлена в стиле <quote>тема с вариациями</quote>:
</para>
<itemizedlist>
<listitem><para>
Основной текст представляет собой собственно обещанный кратчайший путь, 
пройдя которым вы собственными руками создадите документ DocBook 
и преобразуете его в HTML и PDF.
Для этого инструкции, содержащиеся в основном тексте,
надо выполнить последовательно, шаг за шагом.
</para></listitem>
<listitem><para>
Вариации&#160;&#8212; это направления дальнейшего развития
или способы, альтернативные предлагаемому.
С их помощью вы сможете расширить возможности DocBook,
но их исследование разумнее отложить на потом.
</para></listitem>
</itemizedlist>
<para>
Вариации оформлены в тексте следующим образом:
</para>

<note>
<title>XML-редакторы</title>
<para>
Теоретически специализированные XML-редакторы предоставляют больший сервис
</para>
</note>

<para>
Такой текст при первоначальном чтении можно или пропустить,
или просто принять к сведению, 
и исследовать описанные в нем возможности
уже после того, как достигнут основной результат.
Цель такой организации материала&#160;&#8212;
возможно быстрее получить первый результат,
ведь это лучший способ подъема энтузиазма и у исполнителей, и у начальства.
</para>
<para>
Статья содержит минимум пояснений,
расчет делается не на формальные объяснения, а на освоение <quote>по образцу</quote>.
Описание используемых в примерах тэгов и атрибутов DocBook
содержится в основополагающем справочнике по тэгам DocBook: <xref linkend="theDocBook"/>
и в менее формальном справочнике на русском языке: <xref linkend="Dict"/>.
</para>

</section>

</section>

<section id="conditions">
<title>Предварительные условия</title>
<para>
Для работы с DocBook от вас потребуется 
определенная квалификация и компьютерные ресурсы:
</para>
<orderedlist>
<listitem><para>
Вы должны быть хотя бы минимально знакомы с XML или HTML.
Например, в статье не объясняются термины <quote>тэг</quote>, <quote>атрибут</quote>.
В случае затруднений обращайтесь к <link linkend="links">справочной литературе</link>.
</para></listitem>
<listitem><para>
В качестве инструментальной платформы рассматривается Linux.
В принципе инструментарий DocBook доступен для различных платформ,
включая Windows и Mac, 
но для пошаговых инструкциях приходится выбирать один вариант
(рассмотрение нескольких платформ вывело бы статью 
за рамки рассмотрения <quote>кратчайшего пути</quote>).
Выбор Linux определяется тем, что 
весь необходимый для работы с DocBook инструментарий штатно с ним поставляется.
Знание Linux требуются минимально-достаточное для того, 
чтобы суметь воспроизвести содержащиеся в тексте статьи команды.
</para></listitem>
<listitem><para>
Предполагается, что у вас есть доступ к компьютеру, 
на котором установлен Linux (назовем его сервером).
Мощность сервера и версия Linux существенной роли не играют.
У вас должен быть рабочий каталог и доступ к командной строке.
</para></listitem>
<listitem><para>
Если вы предпочитаете работать с текстовым или XML-редактором 
на персональном компьютере с отличной от Linux операционной системой,
то у вас должна быть возможность копировать файлы на сервер
или, оптимально, сделать рабочий каталог сервера доступным по сети через сетевой диск
(т.е. запустить на сервере <literal>samba</literal>).
</para></listitem>
<listitem><para>
Для того, чтобы просматривать результаты работы,
у вас должна быть возможность копировать с сервера сгенерированные файлы
или, оптимально, сделать рабочий каталог сервера доступным через веб-сервер
(т.е. запустить на сервере <literal>apache</literal>).
</para></listitem>
<listitem><para>
Для инсталляции или обновления инструментария 
вам кратковременно могут понадобиться полномочия суперюзера
или помощь системного администратора, такими полномочиями обладающего.
</para></listitem>
<listitem><para>
Вам понадобится доступ к Интернет, чтобы скачивать инструментарий.
(Впрочем, он наверное у вас есть, раз вы читаете эту статью.)
</para></listitem>
<listitem><para>
Инструментарий для генерации PDF 
требует наличия виртуальной машины Java.
Рекомендуется Sun JRE или JRE версии не ниже 1.3.
</para></listitem>
<listitem><para>
Для того, чтобы результаты работы представляли для вас практический интерес,
подберите текст, на котором будете упражняться
(будем называть его тестовым документом).
Это может быть статья, заметка, фрагмент руководства.
Хранящиеся в файле Microsoft Word, текстовом или любом другом,
из которого вы сможете переносить текст методом <quote>cut-and-paste</quote>.
Оптимальный размер&#160;&#8212; от 3 до 10 страниц.
</para></listitem>
</orderedlist>
</section>

<section id="main">
<title id="main.title">DocBook за 13 шагов</title>
<para>
Основная часть статьи, содержащая пошаговые инструкции для тех, 
кто хочет максимально быстро получить опыт работы с DocBook.
</para>

<section id="skeleton">
<title>Создаем минимальный документ</title>
<para>
Создайте в рабочем каталоге файл, руководствуясь следующим образцом:
</para>
<programlisting><![CDATA[
<?xml version="1.0" encoding="windows-1251"?>
<article lang="ru">
<articleinfo>
<title>Название статьи</title>
<author>
<firstname>имя автора</firstname>
<surname>фамилия автора</surname>
</author>
<copyright>
<year>текущий год</year>
<holder>кому принадлежат авторские права</holder>
</copyright>
</articleinfo>
<para>
Вводный абзац.
</para>
<section>
<title>Название первого раздела</title>
<para>
Первый абзац первого раздела.
</para>
</section>
</article>
]]></programlisting>
<para>
Воспользуйтесь для этого обычным текстовым редактором.
Подойдет <command>notepad.exe</command>,
но не Word или другой текстовый процессор.
</para>

<note>
<title>XML-редакторы</title>
<para>
Существуют специализированные XML-редакторы,
и большинство из них умеет работать с DocBook.
Теоретически они предоставляют больший сервис 
по сравнению с обычными текстовыми редакторами:
например, автоматически проверяют правильность вводимых тэгов,
предлагают выбор тэгов в зависимости от контекста.
</para>
<para>
Но, с другой стороны, XML-редакторы трудно назвать простыми в использовании.
К тому же трудно найти XML-редактор, у которого была бы русская версия.
Редакторы же, у которых язык диалогов английский,
малопригодны для рядовых пользователей.
</para>
<para>
Инструментарий DocBook: <ulink url="http://docbook.ru/about/tools/"
>docbook.ru/about/tools</ulink>.
</para>
</note>

<para>
Скопируйте приведенный выше фрагмент в буфер редактора,
замените в нем текст названия, абзацев и т.д. 
на содержательный из тестового документа.
Сохраните буфер в файле с именем <filename>article.xml</filename>.
</para>
</section>

<section id="check">
<title>Проверяем корректность документа</title>
<para>
Откройте файл при помощи веб-браузера (например Internet Explorer).
Если все сделано правильно, 
<ulink url="skeleton/article.xml">вы увидите</ulink>
примерно следующую картинку:
</para>
<informalfigure>
<graphic fileref="skeleton/xml.gif"/>
</informalfigure>
<para>
Если IE обнаружит ошибки, он их диагностирует, 
указав при этом номер строки и символа в строке.
Исправьте обнаруженные ошибки.
</para>

<note>
<title>DTD-декларация</title>
<para>
В предложенном образце опущена DTD-декларация,
которая могла бы следовать во второй строке и выглядеть примерно так:
</para>
<para><code><![CDATA[
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook V4.4//EN">
]]></code></para>
<para>
Причины такого небрежения следующие: 
во-первых, для генерации выходных документов DTD-декларация не требуется,
а во-вторых, пользоваться DTD надо, понимая что за ним стоит.
В частности, что такое Public Identifiers, System Identifiers, 
DTD Entities и еще, желательно, XML Catalogs.
</para>
<para>
Использование DTD имеет то преимущество,
что это позволит проверить документ более качественно.
Простейшая проверка, которую делает IE&#160;&#8212; 
это так называемая проверка на <emphasis>XML-валидность</emphasis>:
соответствие открывающих-закрывающих тэгов и кавычки в значениях атрибутов.
При наличии указания DTD можно будет программным образом
проверить правильность взаимного расположения (вложенности) тэгов,
отсутствие обязательных атрибутов и т.п.
</para>
<para>
Кроме того, при наличии DTD вы сможете пользоваться стандартными мнемониками 
типа <code>&amp;nbsp;</code> и <code>&amp;copy;</code>
или вводить свои собственные.
</para>
<para>
DTD позволит также собирать документ из отдельных фрагментов,
но для этого есть лучший способ&#160;&#8212; XInclude.
</para>
</note>

<para>
При вводе исходного документа обращайте внимание на следующее:
</para>
<itemizedlist>
<listitem><para>
Документ должен начинаться с XML-декларации, как в приведенном примере.
Кодировка может быть другой, например <code>koi8-r</code>,
но, естественно должна соответствовать фактически используемой вами кодировке.
Если вы вводите текст в Windows, оставьте кодировку <code>windows-1251</code>.
</para></listitem>
<listitem><para>
Все открытые тэги должны аккуратно, с соблюдением вложенности, закрываться:
<code>&lt;para></code> соответствует <code>&lt;/para></code>,
<code>&lt;title></code>&#160;&#8212; <code>&lt;/title></code> и т.п.
</para></listitem>
<listitem><para>
Атрибуты внутри тэгов, даже числовые, должны ставиться в кавычках 
(одинарных или двойных), как <code>lang="ru"</code> в приведенном примере. 
</para></listitem>
<listitem><para>
Если в вашем тексте встречается символ <code>&lt;</code>,
то замените его на <code>&amp;lt;</code>, 
а символ <code>&amp;</code> на <code>&amp;amp;</code>. 
</para></listitem>
<listitem><para>
Альтернативно, например если нужно вставить в текст
кусок программного или XML-кода, пользуйтесь следующей SGML-конструкцией:
<code>
&lt;![CDATA[<replaceable>здесь можно пользоваться любыми символами</replaceable>]]&gt;
</code>
</para></listitem>
<listitem><para>
Остальные мнемоники HTML, в частности <code>&amp;nbsp;</code>
(явный пробел) XML по умолчанию не понимает. 
Используйте числовой код, 
например <code>&amp;#160;</code> вместо <code>&amp;nbsp;</code>.
</para></listitem>
</itemizedlist>
<para>
Если ваш браузер не умеет работать с XML, ничего страшного, 
ошибки чуть позже диагностирует <link linkend="xsltproc">XSL-процессор</link>.
</para>

</section>

<section id="stylesheets">
<title>Инсталлируем XSL-скрипты</title>
<para>
<ulink url="http://sourceforge.net/project/showfiles.php?group_id=21935&amp;package_id=16608"
>Скачайте</ulink> последнюю версию XSL-скриптов DocBook и распакуйте архив на сервере.
</para>

<note>
<title>DocBook Open Repositary</title>
<para>
Разработка ключевых компонент DocBook, в частности XSL-скриптов и DTD,
ведется в рамках Open Source проекта, домашняя страница которого 
<ulink url="http://docbook.sourceforge.net/">docbook.sourceforge.net</ulink>.
</para>
<para>
Альтернативно, XSL-скрипты можно инсталлировать из RPM-пакета
<code>docbook-style-xsl</code>, 
который скорее всего входит в состав вашего дистрибутива Linux.
Но мы рекомендуем скачать и установить последнюю версию.
</para>
<para>
Желающих изучить XSL адресуем к книге <xref linkend="theXSL"/>.
</para>
</note>

<para>
Местоположение каталога значения не имеет, 
но для определенности в дальнейших инструкциях мы будем предполагать,
что скрипты находятся в каталоге <filename>/usr/local/docbook-xsl-1.68.1</filename>
(1.68.1&#160;&#8212; номер версии).
</para>
</section>

<section id="xsltproc">
<title>Запускаем XSLT-процессор</title>
<para>
Наберите команду <command>xsltproc --version</command>.
</para>

<note>
<title>XSL-процессоры</title>
<para>
<command>xsltproc</command> не единственный XSLT-процессор,
который можно использовать для DocBook,
но он быстр, достаточно надежен и доступен на платформе Windows.
Инструментарий DocBook: <ulink url="http://docbook.ru/about/tools/"
>docbook.ru/about/tools</ulink>.
</para>
</note>

<para>
Если программа не запустилась, 
проверьте наличие RPM-пакет <code>libxslt</code> 
и если он не установлен, проинсталлируйте стандартными средствами Linux.
</para>
</section>

<section id="htmlgen">
<title>Транслируем в HTML</title>
<para>
Наберите команду:
</para>
<screen><![CDATA[
$ xsltproc --nonet /usr/local/docbook-xsl-1.68.1/html/chunk.xsl article.xml
Writing index.html for article
$
]]></screen>
<para>
Как свидетельствует сообщение программы,
в текущем каталоге образовался файл <filename>index.html</filename>.
Открыв его в браузере, 
<ulink url="skeleton/">вы увидите</ulink>
примерно следующее:
<informalfigure>
<graphic fileref="skeleton/html.gif"/>
</informalfigure>
</para>

<note>
<title>HTML-help</title>
<para>
Стандартные XSL-скрипты поддерживают специальный вариант трансляции в HTML&#160;&#8212;
для последующего преобразования в Microsoft HTML Help.
Вместо <filename>html/chunk.xsl</filename> 
задайте <filename>htmlhelp/htmlhelp.xsl</filename>,
в результате образуется набор HTML-файлов и служебные файлы,
которые понимает штатный Help-компилятор <command>hhc.exe</command>.
</para>
</note>

<para>
Посмотрим на HTML-код образовавшегося файла:
</para>
<programlisting><![CDATA[
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="Content-Type" 
content="text/html; charset=ISO-8859-1">
<title>&#1053;&#1072;&#1079;&#1074;&#1072;&#1085;&#1080;&#1077; 
&#1089;&#1090;&#1072;&#1090;&#1100;&#1080;</title>
]]></programlisting>
<para>
Видно, что русские буквы превратились в числовые коды.
Чтобы получить текст в нормальной кодировке (например, windows-1251), 
зададим соответствующий параметр:
</para>
<screen><![CDATA[
$ xsltproc --nonet --stringparam chunker.output.encoding windows-1251 \
> /usr/local/docbook-xsl-1.68.1/html/chunk.xsl article.xml
Writing index.html for article
$
]]></screen>

<note>
<title>Ключи <command>xsltproc</command></title>
<para>
Ключ <option>--nonet</option> запрещает обращение в Интернет за XSL-скриптами.
Обработка DocBook довольно трудоемка, 
поэтому предпочтительно чтобы скрипты находились на сервере локально.
С этим ключом вы будете уверены, что берутся только локальные скрипты,
а обращения в Интернет будут диагностироваться и блокироваться.
</para>
<para>
Ключами <option>--param</option> и <option>--stringparam</option>
задают значения числовых и строковых параметров соответственно,
управляя таким способом внешним видом выходного документа.
</para>
</note>

</section>

<section id="xsldriver">
<title>Создаем XSL-драйвер</title>
<para>
Для того чтобы дальше работать над внешним видом выходного документа,
вам понадобится задать значение целой серии параметров.
Делать это через командную строку неудобно, поэтому 
создайте файл с именем <filename>docbook.xsl</filename> и следующим содержимым:
</para>
<programlisting><![CDATA[
<?xml version="1.0" encoding="windows-1251"?> 
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:import href="/usr/local/docbook-xsl-1.68.1/html/chunk.xsl"/>
<xsl:param name="chunker.output.encoding" select="'windows-1251'"/>
</xsl:stylesheet>
]]></programlisting>
<para>
Это т.н. <emphasis>XSL-драйвер</emphasis>,
в дальнейшем с его помощью вы сможете не только задавать параметры,
но и проводить более глубокую настройку DocBook.
</para>

<note>
<title>Кастомизация DocBook</title>
<para>
DocBook&#160;&#8212; это максимально открытая система,
рассчитанная на то, чтобы вы могли приспособить ее для своих нужд.
Для этого имеется набор средств.
В порядке от простого к сложному вы можете влиять на следующие элементы:
</para>
<orderedlist>
<listitem><para>
простые числовые и строчные параметры XSL-скриптов
</para></listitem>
<listitem><para>
форматирование (при помощи CSS)
</para></listitem>
<listitem><para>
более сложные параметры, требующие использование выражений XPath
</para></listitem>
<listitem><para>
наборы атрибутов XSL (<code>xsl:attribute-set</code>)
</para></listitem>
<listitem><para>
XSL-шаблоны (<code>xsl:template</code>)
</para></listitem>
<listitem><para>
расширение схемы и обработка собственных тэгов
</para></listitem>
</orderedlist>
<para>
Переопределенные параметры, наборы атрибутов, шаблоны&#160;&#8212;
все они записываются в XSL-драйвер.
Вопросы кастомизации DocBook подробнейшим образом
рассматриваются в книге <xref linkend="theXSL"/>.
</para>
</note>

<para>
Запустите XSL-процессор:
</para>
<screen><![CDATA[
$ xsltproc --nonet docbook.xsl article.xml
Writing index.html for article
$
]]></screen>
<para>
Командная строка упростилась, 
а результирующий файл должен остаться без изменений.
</para>
</section>

<section id="payload">
<title>Наполняем документ</title>
<para>
Перенесите контент из тестового документа в <filename>article.xml</filename>.
</para>
<para>
Для этого вам понадобится изучить тэги DocBook.
Простейший способ&#160;&#8212; воспользоваться каким-нибудь образцом,
например <ulink url="index.xml">исходным текстом этой статьи</ulink>.
</para>
<para>
Для более систематического изучения тэгов DocBook воспользуйтесь
справочниками <xref linkend="Dict"/> и <xref linkend="theDocBook"/>.
</para>

</section>

<section id="htmlparam">
<title>Настраиваем генерацию HTML</title>
<para>
Поэкспериментируйте с параметрами, приведенными в справочнике <xref linkend="Dict"/> .
Разберитесь с разбиением выходного документа на файлы, 
автонумерацией разделов, автоматическими оглавлениями.
Значения параметров задавайте в <link linkend="xsldriver">XSL-драйвере</link>.
</para>

<note>
<title>Справочник по параметрам XSL</title>
<para>
Документация на DocBook XSL и, в частности, на параметры,
содержится в <link linkend="stylesheets">дистрибутиве, который вы скачали</link>.
Она доступна также 
<ulink url="http://docbook.sourceforge.net/release/xsl/current/doc/html/index.html"
>на сайте docbook.sourceforge.net</ulink>.
</para>
</note>

<para>
Привяжите к HTML-файлу стиль CSS при помощи параметра <option>html.stylesheet</option>.
В качестве образца можете использовать
<ulink url="http://docbook.ru/lib/default.css">CSS-файл этой статьи</ulink>.
</para>
<para>
Значения параметров можно задавать двумя способами:
</para>
<programlisting><![CDATA[
<xsl:param name="chunker.output.encoding" select="'windows-1251'"/>
<xsl:param name="chunker.output.encoding">windows-1251</xsl:param>
]]></programlisting>
<para>
Обратите внимание, что в варианте с <code>select</code>
необходимо различать текстовые и числовые параметры:
для текстовых надо задавать одни кавычки внутри других, а для числовых нет.
Во втором варианте значения и тех, и других задаются одинаково,
поэтому он менее подвержен случайным ошибкам.
</para>

<note>
<title>Условная генерация</title>
<para>
DocBook позволяет из одного исходного документа создавать
выходные документы не только в разных выходных форматах 
(о чем пойдет речь далее), но и с разным содержимым.
</para>
<para>
Например, вы можете из одного исходного текста
выпускать техническую документацию
для разных модификаций вашей продукции,
а в случае документации на программное обеспечение&#160;&#8212;
инструкции для эксплуатации на разных системно-аппаратных платформах.
</para>
<para>
Чтобы воспользоваться этой возможностью, вы должны пометить фрагменты текста, 
которые должны включаться условно, с помощью атрибутов, например:
<code>os</code>&#160;&#8212; операционная система,
<code>userlevel</code>&#160;&#8212; уровень квалификации пользователя
(см. <xref linkend="Dict"/>).
После этого вы запускаете XSL-процессор, 
задавая скрипт <filename>profile-chunk.xsl</filename> 
вместо <filename>chunk.xsl</filename>
и выбирая желаемый вариант генерации при помощи параметров.
</para>
</note>

</section>

<section id="printgen">
<title>Транслируем в HTML для печати</title>
<para>
Скрипт <filename>chunk.xsl</filename> генерирует множество HTML-файлов.
Такой формат удобен для онлайнового просмотра, но не для печати.
</para>
<para>
Чтобы это исправить, 
скопируйте <filename>docbook.xsl</filename> в <filename>print.xsl</filename>
и замените в файле <filename>print.xsl</filename>
<filename>chunk.xsl</filename> на <filename>onechunk.xsl</filename>.
Чтобы файлы, сгенерированные при помощи 
<filename>docbook.xsl</filename> и <filename>print.xsl</filename>, 
не перетирали друг друга, добавьте параметр:
</para>
<programlisting><![CDATA[
<xsl:param name="root.filename" select="'print'"/>
]]></programlisting>
<para>
Запустите XSL-процессор:
</para>
<screen><![CDATA[
$ xsltproc --nonet print.xsl article.xml
Writing print.html for article
$
]]></screen>
<para>
Настройте этот вариант генерации при помощи параметров:
</para>
<orderedlist>
<listitem><para>
Подберите параметры оглавления, более подходящие для монолитного HTML.
</para></listitem>
<listitem><para>
Скопируйте <filename>default.css</filename> в <filename>print.css</filename> и 
привяжите <filename>print.css</filename> 
к документу параметром <option>html.stylesheet</option>.
</para></listitem>
<listitem><para>
В файле <filename>print.css</filename> подберите стили оформления, 
более подходящие для печати, в частности, уберите цвета
и задайте CSS-свойства, управляющие разбиением на страницы:
<code>page-break-before</code>, 
<code>page-break-after</code>, 
<code>page-break-inside</code>.
</para></listitem>
</orderedlist>

<note>
<title>Два способа генерации PDF</title>
<para>
Для вывода на печать больше подходит не формат HTML, а PDF.
Получившийся монолитный HTML-файл вы можете преобразовать в PDF,
например, при помощи Adobe Acrobat Distiller.
Таким способом можно добиться неплохого результата 
с точки зрения внешнего вида документа,
но в результирующем PDF-файле не будет гипертекстовых закладок,
а в оглавлении не будет номеров страниц.
</para>
<para>
Если для вас эти недостатки не критичны, можете на этом остановиться.
Более корректный, но и намного более тяжелый способ генерации PDF
из DocBook, при котором сохраняется структура документа
и учитываются особенности вывода на печать 
(например отступы под переплет при двусторонней печати)
рассматриваются в следующих разделах.
</para>
</note>

</section>

<section id="foproc">
<title>Инсталлируем FO-процессор</title>
<para>
XSL-скрипты, которыми мы до сих пор пользовались,
не умеют напрямую транслировать DocBook в PDF.
Процесс распадается на два шага:
</para>
<orderedlist>
<listitem><para>
Стандартные скрипты преобразуют DocBook в XSL-FO.
</para></listitem>
<listitem><para>
Для преобразования XSL-FO используются стандартные FO-процессоры.
</para></listitem>
</orderedlist>
<para>
Мы будем использовать процессор XEP компании RenderX 
(<ulink url="http://www.renderx.com/">www.renderx.com</ulink>).
</para>

<note>
<title>JadeTex, FOP, PassiveTex</title>
<para>
Альтернативные пути преобразования используют DSSSL скрипты
и/или TeX в качестве промежуточного формата.
Но на сегодняшний день XSL-FO&#160;&#8212; 
наиболее прогрессивная и активно развиваемая технология.
</para>
<para>
Существуют бесплатные варианты XSL-FO процессоров,
самые известные из них 
<ulink url="http://xml.apache.org/fop/">Apache FOP </ulink> и 
<ulink url="http://www.tei-c.org.uk/Software/passivetex/">PassiveTex</ulink>.
Но они уступают RenderX XEP по функциональности,
к тому же обе эти разработки заморожены (по состоянию на начало 2005&#160;г.) 
и поэтому перспективы их сомнительны.
</para>
<para>
Сильная сторона RenderX XEP&#160;&#8212; полноценная поддержка русского языка, 
включая расстановку переносов в русском тексте.
</para>
</note>

<para>
<ulink url="http://www.renderx.com/download/personal.html">Скачайте</ulink> 
бесплатную персональную версию процессора.
Заполните регистрационную форму с вашим именем и email
и получите лицензионный ключ.
</para>

<note>
<title>Персональная и коммерческая версия</title>
<para>
Персональная версия отличается от коммерческой тем, 
что вставляет логотип RenderX внизу каждой сгенерированной страницы.
Для целей данной статьи этого достаточно,
а для промышленной эксплуатации 
понадобится приобрести коммерческую лицензию.
Технически для перехода на коммерческую лицензию надо просто 
скопировать файл с лицензионным ключом, полученный от RenderX.
</para>
</note>

<para>
Распакуйте полученный архив и проинсталлируйте его:
</para>
<screen><![CDATA[
# java -jar setup-4.2-20050228-trial.jar -c

This program installs XEP 4.2 build 20050228 Edition on your computer.

DO YOU AGREE TO THE TERMS OF THE LICENSE AGREEMENT (YES/NO/QUIT) [YES]:
Specify XEP installation directory or (QUITE) [/usr/local/RenderX/XEP]:
Do you want to activate XEP now? (YES/NO/QUIT) [YES]:
Specify XEP license file location or (QUIT) [license-trial.xml]:
I'm going to install XEP to the directory /usr/local/RenderX/XEP, 
read license from the file license-trial.xml. 
Do you want to continue? (YES/NO/QUIT) [YES]:

Copying files ....................
Installation successful.
#
]]></screen>
<para>
Вы можете выбрать для инсталляции другой каталог
(причем можно пользовательский, а не системный).
В дальнейшем тексте предполагается, что RenderX XEP установлен в каталог по умолчанию.
</para>

<note>
<title>Параметры java</title>
<para>
При работе XEP с большими (порядка сотни страниц) документами
ему может не хватит оперативной памяти.
В этом случае увеличьте объем памяти, отводимый для java-машины,
добавив параметр в вызов java в командном файле 
<filename>/usr/local/RenderX/xep</filename>:
</para>
<para>
<command>"$JAVA_HOME/bin/java" -Xmx500000000</command>
</para>
<para>
Задайте половину физического объема памяти сервера в байтах
(в данном примере задано 500 мегабайт).
</para>
</note>

</section>

<section id="fonts">
<title>Инсталлируем шрифты</title>
<para>
Скопируйте файлы <filename>arial*.ttf</filename>,
<filename>cour*.ttf</filename>, <filename>times*.ttf</filename>,
<filename>tahoma*.ttf</filename>, <filename>verdana*.ttf</filename>,
<filename>pala*.ttf</filename>
из ОС Windows 98/200x/XP, установленной на персональном компьютере
(каталог <filename>C:\WINDOWS\FONTS</filename>)
в каталог <filename>/usr/local/RenderX/XEP/fonts</filename> сервера.
</para>
<para>
Отредактируйте конфигурационный файл 
<filename>/usr/local/RenderX/XEP/xep.xml</filename>:
</para>
<orderedlist>
<listitem><para>
Найдите строку комментария <code>Sample configuration for Windows TrueType fonts</code>.
</para></listitem>
<listitem><para>
Раскомментарьте следующие за ней текст между тэгами
<code>&lt;font-group></code> и <code>&lt;/font-group></code>.
</para></listitem>
<listitem><para>
Удалите атрибут <code>xml:base</code> из тэга <code>&lt;font-group></code>.
</para></listitem>
</orderedlist>
</section>

<section id="fogen">
<title>Транслируем в XSL-FO</title>
<para>
Скопируйте <filename>docbook.xsl</filename> в <filename>pdf.xsl</filename>
и отредактируйте файл <filename>pdf.xsl</filename>:
</para>
<orderedlist>
<listitem><para>
замените <filename>html/chunk.xsl</filename> на <filename>fo/docbook.xsl</filename>
</para></listitem>
<listitem><para>
добавьте параметры
</para></listitem>
</orderedlist>
<programlisting><![CDATA[
<xsl:param name="xep.extensions" select="1"/>
<xsl:param name="paper.type" select="'A4'"/>
<xsl:param name="body.font.family" select="'Arial'"/>
<xsl:param name="title.font.family" select="'Arial'"/>
<xsl:param name="monospace.font.family" select="'Courier New'"/>
]]></programlisting>
<para>
Запустите XSL-процессор:
</para>
<screen><![CDATA[
$ xsltproc --nonet pdf.xsl article.xml >article.fo
Making portrait pages on A4 paper (210mmx297mm)
$
]]></screen>
</section>

<section id="pdfgen">
<title>Транслируем в PDF</title>
<para>
Наберите команду:
</para>
<screen><![CDATA[
$ /usr/local/RenderX/XEP/xep article.fo
(document [system-id file:article.fo]
  (compile
    (meta-info)
    (masters)
...
  (generate [output-format pdf][1]))
$
]]></screen>
<para>
В результате должен образоваться файл <filename>article.pdf</filename>.
Открыв его в браузере,
<ulink url="skeleton/article.pdf">вы увидите</ulink>
примерно следующее:
</para>
<informalfigure>
<graphic fileref="skeleton/pdf.gif"/>
</informalfigure>
<para>
Настройте внешний вид документов проводите согласно 
<ulink url="http://docbook.sourceforge.net/release/xsl/current/doc/fo/index.html"
>справочнику по параметрам XSL-FO</ulink>.
Очень подробно вопросы настройки рассматриваются в книге
<xref linkend="theXSL"/>.
</para>
</section>

</section>

<bibliography id="links">

<bibliomixed id="theDocBook">
<abbrev>theDocBook</abbrev>
<author><firstname>Norman </firstname><surname>Walsh</surname></author>,
<author><firstname>Leonard </firstname><surname>Muellner</surname></author>.
<title>DocBook: The Definitive Guide.</title>
<bibliomisc>
<ulink url="http://www.docbook.org/tdg/en/html/docbook.html"/>
</bibliomisc>
</bibliomixed>

<bibliomixed id="theXSL">
<abbrev>theXSL</abbrev>
<author><firstname>Bob </firstname><surname>Stayton</surname></author>.
<title>DocBook XSL: The Complete Guide.</title>
<bibliomisc>
<ulink url="http://www.sagehill.net/docbookxsl/"/>
</bibliomisc>
</bibliomixed>

<bibliomixed id="theXML">
<abbrev>theXML</abbrev>
<author><firstname>Elliotte </firstname><othername>Rusty </othername><surname>Harold</surname></author>.
<title>The XML 1.1 Bible.</title>
<bibliomisc>
<ulink url="http://www.ibiblio.org/xml/books/bible3/chapters/"/>
</bibliomisc>
</bibliomixed>

<bibliomixed id="Dict">
<abbrev>Dict</abbrev>
<author><firstname>Анатолий </firstname><surname>Белайчук</surname></author>.
<title>Словари DocBook.</title>
<bibliomisc>
<ulink url="http://docbook.ru/doc/dict/"/>
</bibliomisc>
</bibliomixed>


</bibliography>

</article>

