試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

DocBook XML文書をPDF形式に変換するdblatexに挑む(最小限サンプルを動作させる)

(2012/1/20)本記事内の日本語関係のトラブルの対処については「DocBook文書をPDFファイルに変換するdblatexに関するその後(2010/4/26現在)」の「日本語を含むDocBook文書の変換に関するその後」を参照。以下、以前の内容となる。

  1. 使用するサンプル
  2. 使い方
  3. 「Missing character」が大量に出る
  4. 「Undefined control sequence \maketitle.」が出て止まる
  5. 成功例
  6. フォントキャッシュ破損?
  7. しおりの中で日本語が化ける(未解決)

使用するサンプル

DocBook文書について」の「bookの例」として貼り付けた文書をbooktest.xmlとして保存して使用するものとする。

使い方

PDF形式への変換であれば、

$ dblatex [XMLファイル]

でOK。中間ファイルのLaTeX文書を出力するには

$ dblatex -t tex [XMLファイル]

とする。問題が起きたときに、どのような.texファイルになっているのかを見るのに使える。

「Missing character」が大量に出る

book要素やarticle要素にlang属性がセットされていないと出るようだ。変換処理自体は正常終了するのだが、

代わりに、「Missing character」の後ろに表示されるコード番号の形でPDF中に表示されてしまうため、人間には意味が分からない。

<article lang="ja">

のように、「lang="ja"」が付いていればOK。

「Undefined control sequence \maketitle.」が出て止まる

中間ファイルの

\begin{CJK}{UTF8}{cyberbit}

の部分が悪さをしているらしい。これを「song」の他、任意の(使用可能な)フォント名にすることで回避できるようだ。

$ sudo sed -i -e 's/cyberbit/song/' [インストール先]/share/dblatex/xsl/lang.xsl

以下、XSLスタイルシート中の該当部分。
[引用]ファイル名: [インストール先]/share/dblatex/xsl/lang.xsl より

<xsl:template name="lang.document.begin">
  <xsl:param name="lang"/>
  <xsl:if test="starts-with($lang,'zh') or
                starts-with($lang,'ja') or
                (starts-with($lang,'ko') and $korean.package='CJK')">
    <xsl:text>\begin{CJK}{UTF8}{cyberbit}&#10;</xsl:text>
  </xsl:if>
</xsl:template>

成功例

上の「Undefined control sequence \maketitle.」を回避することで、例のようなシンプルなものであれば

$ dblatex booktest.xml
Build the listings...
XSLT stylesheets DocBook -  LaTeX 2e (0.2.7)
===================================================
Build booktest.pdf
This is pdfeTeX, Version 3.141592-1.30.5-2.2 (Web2C 7.5.5)
entering extended mode
This is pdfeTeX, Version 3.141592-1.30.5-2.2 (Web2C 7.5.5)
entering extended mode
'booktest.pdf' successfully built

のようになり、日本語を含むPDFファイルが正常に出力される。

画像は、VLゴシックを埋め込んで使用して目次部分を表示している。

フォントキャッシュ破損?

(see the transcript file for additional information) </var/cache/fonts/pk/model
ess/cyberbit/cyberb76.5972pk
Error: pdflatex (file cyberb76): unexpected eof in pk file
 ==> Fatal error occurred, the output PDF file is not finished!

のようなエラーが出る場合は、このままだと何度やってもダメ。フォントのキャッシュを消す。

$ rm /var/cache/fonts/* -fr

とやれば確実だが、上の場合、/var/cache/fonts/pk/modeless/cyberbit/cyberb76.5972pkだけ消せばよいのかもしれない。

しおりの中で日本語が化ける(未解決)

「しおり」の表示の日本語が、

画像のように化けてしまう。この対処法は不明。