docbookとplatex-utf8

文系には珍しく、(La)TeXなんぞで文章を書いている僕であるが、あまりの汎用性のなさ(そりゃそうだ)に気が滅入ることがままあった。かと言って、所謂ワープロソフトで文章を書くのは厳しい(ましてや、そのワープロがMS Wordだった日にゃぁ、もう)。しかしまた、.tex.→dvi→.pdf という変換でできるPDFの美しさは捨てがたい。

ということは、TeXよりも汎用性の高いフォーマットで文章を書き、印刷したりPDFを作成するときはTeXを経由すれば良いではないか。その汎用性の高いフォーマットとは何だろうか? とりあえず、xml だろうということで、smartdocとかdocbookとか見てみる。積極的に開発され、メンテされているという点で、docbookを使ってみる。

第一の問題は、Texに変換できるかどうか。ここら辺を参考にする。db2latexはメンテされてないっぽいし、上手くいかない。で、dblatexを試してみるものの、ここに書かれているとおり、日本語文字が数字参照 (&#xxxx;) のままである。このページでは、これらをeuc-jpに変換したそうだが、僕はptetexで提供される platex-utf8を使いたい。

そのため、ここを参考にスクリプトを書いてみる。

my_machine% cat ~/bin/ent_char.pl#!/usr/bin/env perluse Encode;print "% -*- coding: utf-8 -*-n";while ( <> ) {	$str = $_;	$str =~ s/\&\#([0-9]+);/chr($1)/ge;	$str =~ s/\&\#[xX]([0-9A-Fa-f]+);/chr(hex $1)/ge;	utf8::encode($str);	print $str;}

みたいな。これだけだと、アクサン付きのアルファベットなどはutf8のままなので、これをutf82texで処理する。

これで、docbook(.xml)→[dblatex]→[ent_char.pl]→[utf82tex]→(マクロとかちょちょいと手直し)→TeX(.tex)→[platex-utf8]→DVI(.dvi)という処理が可能になった。ちょっと泥臭いので、出来れば dblatex 自体を改造したい。

これからより詳細はテストが必要。あとRTFへの変換も調査・テストせんと。