**pdflatexによる出力結果 [#j7b550c7]
[[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のスクリーンショット↓~
#ref(result_pdflatex.png,nolink)~
イマイチである。少なくともタイトルのセリフ系フォントと日本語の明朝系フォントが混じるのはやめさせたい・・・。


**xetexをバックエンドにしてみる [#uc997421]
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>
 
 
 @@ -203,6 +203,7 @@
 @@ -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ゴシックではなんか安っぽい感じになってしまったので、メイリオを使うことにした。また、''XeTeXlinebreaklocale''で''ja_JP''を指定しないとワードラップが利かないみたいなのでこのオプションは必須。~
#ref(result_xetex.png,nolink)~
まあまあである。というわけで、これからはdblatexのバックエンドはxetexを使うことにした。

**asciidocのオプション指定 [#u04a3ae5]
a2xから使うには、色々オプションを追加して、次のようになる。
 python a2x.py  -d book -a lang=ja --dblatex-opts="-b xetex" -f pdf jptest.txt

**Admonitionアイコンの埋め込みで失敗する件(XeTeX) [#e9a899b4]
なんか知らんが、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変換もこけなくなったし、アイコンの種類も増えてにぎやかになった。

#htmlinsert(adBigRect)

**コメントをどーぞ [#a6a2f12e]
#comment
----
[[CategoryTeX]] [[CategoryAsciiDoc]]

|New|Edit|Diff|History|Attach|Copy|Rename|
HTML convert time: 0.002 sec.