ちょっと DocBook を調べたのでメモしておきます。
参考図書
DocBook: The Definitive GuideDocBook XSL: The Complete Guideセットアップ
必要なパッケージ
最低限必要なパッケージはたぶん次のものす。
docbook
docbook-xml
sgml-base
opensp
emacs
psgml
環境変数の設定
文字コードに UTF-8 を使用するので、次のように環境変数をセットしました。
Example 1. 環境変数の設定
export SP_BCTF=utf-8
検証
C-c C-v で onsgmls を使って入力した文章を検証することができます。
Example 2. 検証コマンド
onsgmls -wxml -e -g -s -u /usr/share/sgml/declaration/xml.dcl memo.xml
xmllint というのもあります。
Example 3. xmmlint
xmllint --valid --noout memo.xml
変換
DocBook は xsltproc コマンド等によってスタイルシートに基づいて HTML 等に変化されます。
HTML への変換
DocBook を HTML に変換してみます。
1ファイルの HTML への変換
1ファイルの HTML への変換には html/docbook.xls スタイルシートを使います。
Example 4. 1ファイルの HTML への変換
xsltproc -o dst.html /usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl src.xml
src.xml を -o オプションで指定した dst.html に変換します。
複数ファイルの HTML への変換
複数の HTML に分割して変換するには html/chunk.xsl スタイルシートを使います。出力ファイルは指定しません。デフォルトで index.html がトップページとして出力されます。
Example 5. 複数ファイルの HTML への変換
xsltproc /usr/share/xml/docbook/stylesheet/nwalsh/html/chunk.xsl src.xml
root.filename パラメータでトップページのファイル名を index.html 以外にすることができます。
トップページ以外のファイル名も DocBook 中で明示的に指定したり、id 属性をファイル名にしたり、自動で生成してくれたりします。
その他いろいろ
実にいろいろなことができるみたい。CSS スタイルシートやアイコン。HTML の インデント。エンコーディング指定。などなど。おもしろい。
PDF への変換
PDF への変換でどうしても日本語フォントが表示できないと悩んでいたら、問題は PDF ビューアの方にありました。xpdf, evince ともだめで、Adobe Reader では表示されました。どうやら埋め込みの TrueType フォントを表示できるかどうかとうい問題だったようです。(日本語フォントの設定は Makefile と userconfig.xml を参照)
そうすると、次の問題は埋め込み TrueType フォントではなく Ryumin-Light の Type1 フォントを使う方法ですね。
それにしても、仕上がりはどうしようもなくきたない。いろいろ設定が必要なのかもしれない。日本語の組版に対応していないのかな。Couldn't find hyphenation pattern en というエラーメッセージも出てるし。うぅむ。
Makefile
SRC=memo
XLS=/usr/share/xml/docbook/stylesheet/nwalsh
FOP=fop
SAZANAMI_GOTHIC=/usr/share/fonts/truetype/sazanami/sazanami-gothic.ttf
SAZANAMI_MINCHO=/usr/share/fonts/truetype/sazanami/sazanami-mincho.ttf
html:
        xsltproc -o $(SRC).html $(XLS)/html/docbook.xsl $(SRC).xml
        opera $(SRC).html
chunk:
        xsltproc $(XLS)/html/chunk.xsl $(SRC).xml
        opera index.html
fo:
        xsltproc -o $(SRC).fo \
          --stringparam body.font.family Mincho \
          --stringparam title.font.family Gothic \
          $(XLS)/fo/docbook.xsl $(SRC).xml
        $(FOP) -c userconfig.xml -fo $(SRC).fo -pdf $(SRC).pdf
        acroread $(SRC).pdf
font:
        fop-ttfreader $(SAZANAMI_GOTHIC) fonts/sazanami-gothic.xml
        fop-ttfreader $(SAZANAMI_MINCHO) fonts/sazanami-mincho.xml
word:
        xsltproc -o $(SRC)-word.xml --stringparam wordml.template template.xml $(XLS)/roundtrip/docbook.xsl $(SRC).xml
        openoffice $(SRC)-word.xml
clean:
        rm -f *.html *~
userconfig.xml
<fop version="1.0">
  <renderers>
    <renderer mime="application/pdf">
      <fonts>
        <font  metrics-url="file:///home/ancient/letter/docbook/memo/fonts/sazanami-gothic.xml"
               kerning="yes"
               embed-url="file:///usr/share/fonts/truetype/sazanami/sazanami-gothic.ttf">
          <font-triplet name="Gothic" style="normal" weight="normal"/>
          <font-triplet name="Gothic" style="normal" weight="bold"/>
          <font-triplet name="Gothic" style="italic" weight="normal"/>
          <font-triplet name="Gothic" style="italic" weight="bold"/>
        </font>
        <font  metrics-url="file:///home/ancient/letter/docbook/memo/fonts/sazanami-mincho.xml"
               kerning="yes"
               embed-url="file:///usr/share/fonts/truetype/sazanami/sazanami-mincho.ttf">
          <font-triplet name="Mincho" style="normal" weight="normal"/>
          <font-triplet name="Mincho" style="normal" weight="bold"/>
          <font-triplet name="Mincho" style="italic" weight="normal"/>
          <font-triplet name="Mincho" style="italic" weight="bold"/>
        </font>
      </fonts>
    </renderer>
  </renderers>
</fop>
memo.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
<article>
  <title>DocBook のメモ</title>
  <sect1>
    <title>セットアップ</title>
    <sect2>
      <title>必要なパッケージ</title>
      <para>最低限必要なパッケージはたぶん次のものす。</para>
      <itemizedlist>
        <listitem>
          <para>docbook</para>
        </listitem>
        <listitem>
          <para>docbook-xml</para>
        </listitem>
        <listitem>
          <para>sgml-base</para>
        </listitem>
        <listitem>
          <para>opensp</para>
        </listitem>
        <listitem>
          <para>emacs</para>
        </listitem>
        <listitem>
          <para>psgml</para>
        </listitem>
      </itemizedlist>
    </sect2>
    <sect2>
      <title>環境変数の設定</title>
      <para>文字コードに UTF-8 を使用するので、次のように環境変数をセットしました。</para>
      <example>
        <title>環境変数の設定</title>
        <programlisting>export SP_BCTF=utf-8</programlisting>
      </example>
    </sect2>
  </sect1>
  <sect1>
    <title>検証</title>
    <para>C-c C-v で onsgmls を使って入力した文章を検証することができます。</para>
    <example>
      <title>検証コマンド</title>
      <programlisting>onsgmls -wxml -e -g -s -u /usr/share/sgml/declaration/xml.dcl memo.xml</programlisting>
    </example>
    <para>xmllint というのもあります。</para>
    <example>
      <title>xmmlint</title>
      <programlisting>xmllint --valid --noout memo.xml</programlisting>
    </example>
  </sect1>
  <sect1>
    <title>変換</title>
    <para>DocBook は xsltproc コマンド等によってスタイルシートに基づいて HTML 等に変化されます。</para>
    <sect2>
      <title>HTML への変換</title>
      <para>DocBook を HTML に変換してみます。</para>
      <sect3>
        <title>1ファイルの HTML への変換</title>
        <para>1ファイルの HTML への変換には html/docbook.xls スタイルシートを使います。</para>
        <example>
          <title>1ファイルの HTML への変換</title>
          <programlisting>xsltproc -o dst.html /usr/share/xml/docbook/stylesheet/nwalsh/html/docbook.xsl src.xml</programlisting>
        </example>
        <para>src.xml を -o オプションで指定した dst.html に変換します。</para>
      </sect3>
      <sect3>
        <title>複数ファイルの HTML への変換</title>
        <para>複数の HTML に分割して変換するには html/chunk.xsl スタイルシートを使います。出力ファイルは指定しません。デフォルトで index.html がトップページとして出力されます。</para>
        <example>
          <title>複数ファイルの HTML への変換</title>
          <programlisting>xsltproc /usr/share/xml/docbook/stylesheet/nwalsh/html/chunk.xsl src.xml</programlisting>
        </example>
        <para>root.filename パラメータでトップページのファイル名を index.html 以外にすることができます。</para>
        <para>トップページ以外のファイル名も DocBook 中で明示的に指定したり、id 属性をファイル名にしたり、自動で生成してくれたりします。</para>
      </sect3>
      <sect3>
        <title>その他いろいろ</title>
        <para>実にいろいろなことができるみたい。CSS スタイルシートやアイコン。HTML の インデント。エンコーディング指定。などなど。おもしろい。</para>
      </sect3>
    </sect2>
    <sect2>
      <title>PDF への変換</title>
      <para>PDF への変換でどうしても日本語フォントが表示できないと悩んでいたら、問題は PDF ビューアの方にありました。xpdf, evince ともだめで、Adobe Reader では表示されました。どうやら埋め込みの TrueType フォントを表示できるかどうかとうい問題だったようです。</para>
      <para>そうすると、次の問題は埋め込み TrueType フォントではなく Ryumin-Light の Type1 フォントを使う方法ですね。</para>
      <para>それにしても、仕上がりはどうしようもなくきたない。いろいろ設定が必要なのかもしれない。日本語の組版に対応していないのかな。Couldn't find hyphenation pattern en というエラーメッセージも出てるし。うぅむ。</para>
    </sect2>
  </sect1>
</article>