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

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

DocBook文書をPDFファイルに変換するdblatexでprogramlisting要素のコード内の日本語の表示がおかしくなる件とその対処について(バージョン0.3現在)

DocBook文書をPDFファイルに変換するdblatexの色付きコード表示について(バージョン0.3現在)」に続き、その中の日本語表示に関するメモを扱う。

問題点

コードの中(文字列やコメント)に日本語の文字が入っているときに文字の順番がおかしくなり、色もおかしくなる。

対処

説明上の注意

注意:以下、環境変数TEXMFVARのディレクトリ以下に対する操作を記述しているが、この環境変数は標準では定義されておらず、変換処理時に定義されていない場合にtexmf.cnf内の変数TEXMFVARが既定値として用いられる。texmf.cnfのあるディレクトリはディストリごとに異なるが、[/etc/texmf, /usr/share/texmf など]/web2c/の中にある。
以下の作業例で「${TEXMFVAR}」とあるものは、場合によってはそのディレクトリに読み替える必要がある。

対処を行うパッケージ

Listingsパッケージにおける日本語表示のトラブルは広く知られているようで、その対処としてjlistingというパッケージを入手/インストールして、コード側にある1行を追加すればよいということも同様に知られている。
まずは
http://mytexpert.sourceforge.jp/index.php?Listings
の「Listings パッケージについて」にjlistingの本体へのリンクがあるので、これをダウンロードする。
次にこれを伸長しつつ、エンコーディングISO-2022-JPからUTF-8へ変換する。エンコーディングを変換しないと正しくPDFへの変換処理ができないので注意。

$ mkdir ${TEXMFVAR}/tex/latex/jlisting/ -p
$ bzcat [jlisting.sty.bz2の場所] | iconv -f iso2022jp -t utf8 > ${TEXMFVAR}/tex/latex/jlisting/jlisting.sty
$ mktexlsr ${TEXMFVAR}

GUIでは

  1. File Rollerなどのツールでbzip2圧縮されたファイルを伸長
  2. geditなどでエンコーディングISO-2022-JPとして.styファイルを開き、UTF-8エンコーディング${TEXMFVAR}/tex/latex/jlisting/以下に保存
  3. 「mktexlsr ${TEXMFVAR}」を端末などにコピペして実行
コード側に追加する記述とdblatexでの適用のための強引な方法

jlistingを用いる場合

\usepackage{listings,jlisting}

を中間ファイル(.texファイル)へ記述しなければならず、これを追加するために適したオプションは見つからなかったが、XeTeXバックエンド用のフォント指定部分はコードが直接記述できるため、強引に

$ dblatex -b xetex -P xetex.font="\setmainfont{IPAGothic}
 \setsansfont{IPAMincho}
 \setmonofont{IPAGothic}
 \XeTeXlinebreaklocale \"ja\"
 \usepackage{listings,jlisting}
" [DocBook文書]

のようにして試したところ、正しく日本語が表示されるようになった。(「\XeTeXlinebreaklocale」の記述については「DocBook文書をPDFファイルに変換するdblatexのリンク色変更と日本語の段落の自動改行に関するメモ(バージョン0.3現在)」を参照)

関連記事:

関連URL:

使用したバージョン:

  • dblatex 0.3
  • TeX Live 2007-21.r6295.7mdv2010.0
  • Python 2.6.4