AsciiDocインストールでとりあえず日本語のDocBookをPDFにすることができるようになったが、Cyberbitフォントがイマイチだ。半角英数と混じるとひどい見栄えだ。ちょっとしたマニュアルを作るのに使うだけなので、約物の詰めだとか禁則処理だとか細かい組版のクオリティには目を瞑るにしても、グリフの字形がしっくり来ないのは、組版に詳しくない素人目にもアレ?と思われるので、そういうのは避けたい。そこで他のフォントを使うことを検討したが、なかなかややこしそうだ。悠長にTeXの勉強をしてる暇は今は無いので、DblatexのバックエンドとしてXeTeXを試してみる。XeTeXはシステムにインストールされてるフォントをそのまま使うことができる。
まず元になるDocBookはこれ。エンコーディングはUTF-8。
jptest.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN" "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd"> <?asciidoc-toc?> <?asciidoc-numbered?> <book lang="ja"> <bookinfo> <title>国外での特許取得方法について</title> </bookinfo> <chapter id="_pct"> <title>PCTルート</title> <simpara>特許協力条約(PCT : Patent Cooperation Treaty)に基づく国際出願とは、 ひとつの出願願書を条約に従って提出することによって、PCT加盟国である すべての国に同時に出願したことと同じ効果を与える出願制度です。</simpara> </chapter> <chapter id="_"> <title>パリルート</title> <simpara>パリルートとはPCTを経由せずに直接各国へ出願する場合をいいます。なお、 PCTが整備されたことにより、パリルートで出願するメリットはほとんど ありません。</simpara> </chapter> </book>
その結果のPDFのスクリーンショット↓
イマイチである。少なくともタイトルのセリフ系フォントと日本語の明朝系フォントが混じるのはやめさせたい・・・。
dblatexでxetexを使うのは簡単である。-bオプションでバックエンドをxetexにするだけである。
python C:/Python26/Scripts/dblatex -b xetex -t pdf \ -p C:\bin\asciidoc\dblatex\asciidoc-dblatex.xsl \ -s C:\bin\asciidoc\dblatex\asciidoc-dblatex.sty \ C:\bin\asciidoc\jptest.xml
他にMiKTeXのmpmでmetalogoパッケージをインストールしておく必要がある。そして、dblatexを改造しておく。修正するファイルは C:/Python26/share/dblatex/xsl
--- lang.xsl.orig Sun Aug 23 08:13:19 2009 +++ lang.xsl Sat Jan 30 23:31:40 2010 @@ -7,11 +7,11 @@ <xsl:param name="latex.encoding">latin1</xsl:param> <xsl:param name="korean.package">CJK</xsl:param> -<xsl:param name="cjk.font">cyberbit</xsl:param> +<xsl:param name="cjk.font">song</xsl:param> <xsl:param name="xetex.font"> - <xsl:text>\setmainfont{DejaVu Serif} </xsl:text> - <xsl:text>\setsansfont{DejaVu Sans} </xsl:text> - <xsl:text>\setmonofont{DejaVu Sans Mono} </xsl:text> + <xsl:text>\setmainfont{MS PMincho} </xsl:text> + <xsl:text>\setsansfont{Meiryo} </xsl:text> + <xsl:text>\setmonofont{MS Gothic} </xsl:text> </xsl:param> @@ -133,9 +133,11 @@ <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}{</xsl:text> - <xsl:value-of select="$cjk.font"/> - <xsl:text>} </xsl:text> + <xsl:text>\ifxetex\else </xsl:text> + <xsl:text>\begin{CJK}{UTF8}{</xsl:text> + <xsl:value-of select="$cjk.font"/> + <xsl:text>} </xsl:text> + <xsl:text>\fi </xsl:text> </xsl:if> </xsl:template> @@ -145,7 +147,9 @@ starts-with($lang,'ja') or (starts-with($lang,'ko') and $korean.package='CJK')"> <xsl:text>\clearpage </xsl:text> - <xsl:text>\end{CJK} </xsl:text> + <xsl:text>\ifxetex\else </xsl:text> + <xsl:text>\end{CJK} </xsl:text> + <xsl:text>\fi </xsl:text> </xsl:if> </xsl:template> @@ -203,6 +207,7 @@ <xsl:text>\ifxetex </xsl:text> <xsl:text>\usepackage{fontspec} </xsl:text> <xsl:text>\usepackage{xltxtra} </xsl:text> + <xsl:text>\XeTeXlinebreaklocale "ja_JP" </xsl:text> <xsl:value-of select="$xetex.font"/> <xsl:text>\else </xsl:text>
cjk.fontをsongに変えたのは、前にやったpdflatexでcyberbitフォントを使えるようにしたときの残骸なので今回はまあ無視してよい。ここでsetmaifont, setsansfont, setmonofontでそれぞれMSP明朝、メイリオ、MSゴシックを指定した。setmainfont, setsansfontにMS明朝、MSゴシックを指定すると文字化けしたが、プロポーショナルフォントのMSP明朝を指定すると文字化けを回避できた。また、章のタイトルにはMSPゴシックではなんか安っぽい感じになってしまったので、メイリオを使うことにした。また、XeTeXlinebreaklocaleでja_JPを指定しないとワードラップが利かないみたいなのでこのオプションは必須。
まあまあである。というわけで、これからはdblatexのバックエンドはxetexを使うことにした。
a2xから使うには、色々オプションを追加して、次のようになる。
python a2x.py -d book -a lang=ja --dblatex-opts="-b xetex" -f pdf jptest.txt
なんか知らんが、asciidocのマニュアル(doc/asciidoc.txt)をpdfにしようとするとこける。
cd bin/asciidoc/ python a2x.py -d book --dblatex-opts="-b xetex" -f pdf doc/asciidoc.txt
これで、何のメッセージもなく終わるが、実はxelatexでこけててpdfが生成されていない。しかたないので、-nで展開したコマンドを追いかけてみると、
python C:/bin/asciidoc/asciidoc.py --backend docbook --doctype book \ --out-file C:\bin\asciidoc\doc\asciidoc.xml \ C:\bin\asciidoc\doc\asciidoc.txt python C:/Python26/Scripts/dblatex -b xetex -t pdf \ -p C:\bin\asciidoc\dblatex\asciidoc-dblatex.xsl \ -s C:\bin\asciidoc\dblatex\asciidoc-dblatex.sty \ C:\bin\asciidoc\doc\asciidoc.xml
docbookの生成は問題なしだが、dblatexの実行中にエラーを吐いて止まる。
XSLT stylesheets DocBook - LaTeX 2e (0.2.12) =================================================== Try another escape sequence in verbatim Image 'dblatex' not found Build asciidoc.pdf This is XeTeX, Version 3.1415926-2.2-0.9995.1 (MiKTeX 2.8) entering extended mode ** WARNING ** Didn't find "endobj". ** ERROR ** pdf_link_obj(): passed invalid object. Output file removed. xelatex: Invalid argument xelatex failed Unexpected error occured
よくわからじ。どうやらxelatexがincludegraphicsに対応してないのが問題のようだ? includegraphicsはIMPORTANTとかNOTEなんかのアイコンを埋め込むのに使っているのだが、そこでこけているようだ。色々試してみたところ、どうやらincludegrahicsで使うアイコンのpdfを作り直したら通るようになった。ついでにdblatexではPDFへのNOTE, TIP, IMPORTANT, WARNING, CAUTIONのアイコンをWARNINGのアイコンだけにしてるみたいだったのでこれも修正した。まず、dblatexのアイコン指定の修正。
C:/Python26/share/dblatex/xsl/admon.xsl
--- admon.xsl.orig Sun Jan 31 20:26:48 2010 +++ admon.xsl Sun Jan 31 20:27:52 2010 @@ -5,11 +5,11 @@ XSLT Stylesheet DocBook -> LaTeX ############################################################################ --> -<xsl:param name="figure.note"/> -<xsl:param name="figure.tip"/> -<xsl:param name="figure.important">warning</xsl:param> +<xsl:param name="figure.note">note</xsl:param> +<xsl:param name="figure.tip">tip</xsl:param> +<xsl:param name="figure.important">important</xsl:param> <xsl:param name="figure.warning">warning</xsl:param> -<xsl:param name="figure.caution">warning</xsl:param> +<xsl:param name="figure.caution">caution</xsl:param> <xsl:template match="note|important|warning|caution|tip"> <xsl:text>\begin{DBKadmonition}{</xsl:text>
それからPDFファイルを作り直す。
cd C:/Python26/share/dblatex/latex/contrib/db2latex/graphics mkdir backup mv *.pdf backup epstopdf.exe important.eps epstopdf.exe tip.eps epstopdf.exe caution.eps epstopdf.exe note.eps epstopdf.exe warning.eps
以上でdoc/asciidoc.txtのpdf変換もこけなくなったし、アイコンの種類も増えてにぎやかになった。