pdflatexによる出力結果

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のスクリーンショット↓

result_pdflatex.png

イマイチである。少なくともタイトルのセリフ系フォントと日本語の明朝系フォントが混じるのはやめさせたい・・・。

xetexをバックエンドにしてみる

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}&#10;</xsl:text>
-  <xsl:text>\setsansfont{DejaVu Sans}&#10;</xsl:text>
-  <xsl:text>\setmonofont{DejaVu Sans Mono}&#10;</xsl:text>
+  <xsl:text>\setmainfont{MS PMincho}&#10;</xsl:text>
+  <xsl:text>\setsansfont{Meiryo}&#10;</xsl:text>
+  <xsl:text>\setmonofont{MS Gothic}&#10;</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>}&#10;</xsl:text>
+    <xsl:text>\ifxetex\else&#10;</xsl:text>
+      <xsl:text>\begin{CJK}{UTF8}{</xsl:text>
+      <xsl:value-of select="$cjk.font"/>
+      <xsl:text>}&#10;</xsl:text>
+    <xsl:text>\fi&#10;</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&#10;</xsl:text>
-    <xsl:text>\end{CJK}&#10;</xsl:text>
+    <xsl:text>\ifxetex\else&#10;</xsl:text>
+      <xsl:text>\end{CJK}&#10;</xsl:text>
+    <xsl:text>\fi&#10;</xsl:text>
   </xsl:if>
 </xsl:template>

@@ -203,6 +207,7 @@
   <xsl:text>\ifxetex&#10;</xsl:text>
   <xsl:text>\usepackage{fontspec}&#10;</xsl:text>
   <xsl:text>\usepackage{xltxtra}&#10;</xsl:text>
+  <xsl:text>\XeTeXlinebreaklocale "ja_JP"&#10;</xsl:text>
   <xsl:value-of select="$xetex.font"/>
   <xsl:text>\else&#10;</xsl:text>

cjk.fontをsongに変えたのは、前にやったpdflatexでcyberbitフォントを使えるようにしたときの残骸なので今回はまあ無視してよい。ここでsetmaifont, setsansfont, setmonofontでそれぞれMSP明朝、メイリオ、MSゴシックを指定した。setmainfont, setsansfontにMS明朝、MSゴシックを指定すると文字化けしたが、プロポーショナルフォントのMSP明朝を指定すると文字化けを回避できた。また、章のタイトルにはMSPゴシックではなんか安っぽい感じになってしまったので、メイリオを使うことにした。また、XeTeXlinebreaklocaleja_JPを指定しないとワードラップが利かないみたいなのでこのオプションは必須。

result_xetex.png

まあまあである。というわけで、これからはdblatexのバックエンドはxetexを使うことにした。

asciidocのオプション指定

a2xから使うには、色々オプションを追加して、次のようになる。

python a2x.py  -d book -a lang=ja --dblatex-opts="-b xetex" -f pdf jptest.txt

Admonitionアイコンの埋め込みで失敗する件(XeTeX)

なんか知らんが、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変換もこけなくなったし、アイコンの種類も増えてにぎやかになった。

コメントをどーぞ



CategoryTeX CategoryAsciiDoc


Attach file: fileresult_xetex.png 264 download [Information] fileresult_pdflatex.png 271 download [Information]

|New|Edit|Freeze|Diff|History|Attach|Copy|Rename|
Last-modified: 2010-01-31 (Sun) 20:45:59
HTML convert time: 0.010 sec.