Saturday, May 25, 2013

Ubuntu で pLaTeX を使わずに日本語を書く

日本語で LaTeX を使う方法をググると pLaTeX の情報ばっかり山のように出てきますが、pLaTeX は
  • 英語文書と発行するコマンドの流れが違う (pdflatex 一本 vs. platex + dvipdfmx)
  • hyperref などのパッケージがエラーを出して使えない
  • 日本語以外使えず、もし他の言語が使いたくなったら詰む
などの割と致命的な欠陥があるので、使いたくありません。特に普段は英語ばっかり打ってて一部の文書でちょろっと日本語を入れたいというような使い方をしているので、最初のはかなり面倒です。二番目に関しても hyperref ぐらいなら専用の別パッケージがあるようですが、専用パッケージが必要な事がある時点で御免被りたいところです (どうせその内また他のパッケージで同じ問題が起こって、その時は専用パッケージが用意されてなくて詰むに決まってるから)。

そんなわけで通常の (pdf)latex で CJK を入力する方法を探してみた所、CJK.sty というそのまんまのパッケージがある事を知りました。が。こいつ、Ubuntu Raring Ringtail だと latex-cjk-common だか何だかに付いてくるんですがフォントのセットアップがさっぱりされないのでネットで見つかるテスト文書はほとんど全て組版が失敗しました。具体的には これ とか これ とかですが、指示通り
\documentclass{article}
\usepackage{CJK}
\begin{document}
\begin{CJK*}{UTF8}{song}
这是一个测试
\end{CJK*} (this is a test)
\end{document}
とか書いて pdflatex に食わせても
! Undefined control sequence.
try@size@range ...extract@rangefontinfo font@info 
                                                  <->@nil <@nnil 
とか言われてちゃんと組版できません。TeX は "Undefined control sequence" とか嘘こいてますが、これはフォントがちゃんと設定されてない事によるエラーで、フォントを指定している "song" の部分をインストールされてるフォントに変更すればとりあえず表示されます。例えば私の環境では
$ dpkg -l | grep latex-cjk
ii  latex-cjk-chinese      4.8.3+git2012062 amd64            Chinese module of LaTeX CJK
rc  latex-cjk-chinese-arph 1.22             all              traditional Chinese KaiTi fonts for CJK
rc  latex-cjk-chinese-arph 1.22             all              traditional Chinese KaiTi fonts for CJK
ii  latex-cjk-chinese-arph 1.22             all              traditional Chinese KaiTi fonts for CJK
rc  latex-cjk-chinese-arph 1.22             all              traditional Chinese KaiTi fonts for CJK
ii  latex-cjk-common       4.8.3+git2012062 amd64            LaTeX macro package for CJK (Chinese/Japanese/Kor
ii  latex-cjk-japanese     4.8.3+git2012062 amd64            Japanese module of LaTeX CJK
ii  latex-cjk-japanese-wad 0.20050817-16    all              type1 and tfm DNP Japanese fonts for latex-cjk
rc  latex-cjk-korean       4.8.3+git2012062 all              Korean module of LaTeX CJK
rc  latex-cjk-thai         4.8.3+git2012062 all              Thai module of LaTeX CJK
$ ls /usr/share/texmf/tex/latex/CJK/UTF8
UTF8.bdg  UTF8.enc    c70gbsn.fdx  c70goth.fdx  c70maru.fdx  c70min.fdx  zh-Hans.cpx
UTF8.chr  c70gbsn.fd  c70goth.fd   c70maru.fd   c70min.fd    ja.cpx      zh-Hant.cpx
という具合で、c70gbsn.fd というのに目を付けて song を gbsn に変更すれば上の中国語がちゃんと出ました。ちなみにフォントの fd 情報を置けるディレクトリは /usr/share/texmf/tex/latex/CJK/UTF8 だけではなくて /usr/share/texmf/tex/latex 以下ならどこでもいいようです。

で、一応日本語フォントの c70maru.fdx や c70min.fdx も入っていて song を maru や min に変更すれば日本語も出ることは出るのですが、どうも字型が気持ち悪いフォントばかりです。このフォントでいいよという人はこれで設定終了でいいかも知れませんが、私はもっとまともなフォントが欲しかったので北大の Jan Paul さんとか言う人のページを参考に IPA フォントを設定しました。基本的にはリンク先の長ったらしい指示に従うだけですが、一部「どこにあるんだよそのファイル!(怒)」みたいな部分もあったのでここで詳述。全部 root でやります
  1. IPA フォント自体は fonts-ipafont-gothic と fonts-ipafont-mincho 入れとけばおk
  2. TFM ファイル を落として展開、中身は全部 /usr/share/texmf/fonts/tfm に適当なディレクトリ掘って放り込みます。
  3. Font descriptor とかいうの を落として展開、中身は全部 /usr/share/texmf/tex/latex に適当なディレクトリ掘って放り込みます。
  4. /etc/texmf/fonts/map/ttf2pk/ttfonts.map というファイルを作って
    ipam@UJIS@ ipam.ttf
    ipamp@UJIS@ ipamp.ttf
    ipam-uni@Unicode@ ipamp.ttf
    ipamp-uni@Unicode@ ipamp.ttf
    ipag@UJIS@ ipag.ttf
    ipagp@UJIS@ ipagp.ttf
    ipag-uni@Unicode@ ipagp.ttf
    ipagp-uni@Unicode@ ipagp.ttf
    
    と書きます。この /etc/texmf 以下のディレクトリはデフォルトでは存在しないので、自分で作ること。man page にもどこにも載ってないこのステキなディレクトリは ttf2pk を strace して見つけました。最悪ですね。
  5. /usr/share/texmf/web2c/texmf.cnf を開いて MKTEXPK = 1 という行を追加しておきます。625 行目らへんに %MKTEXPK = 0 という行が既に有ると思うのでそれを改変するのがいいでしょう。
一応発行するコマンドを並べて置いときますが、一瞬たりともテストしてないのであしからず。
# 予め root になって /tmp とかどーでもいいファイルおける場所に移動しておく
apt-get install latex-cjk-common latex-cjk-japanese fonts-ipafont-gothic fonts-ipafont-mincho unzip
mkdir tmp
cd tmp
wget http://www-alg.ist.hokudai.ac.jp/~jan/IPA-Jap-Fonts-tfm.zip
unzip IPA-Jap-Fonts-tfm.zip
mkdir /usr/share/texmf/fonts/tfm/ipa
mv *.tfm /usr/share/texmf/fonts/tfm/ipa/
wget http://www-alg.ist.hokudai.ac.jp/~jan/IPA-Jap-Fonts-fd.zip
unzip IPA-Jap-Fonts-fd.zip
mkdir /usr/share/texmf/tex/latex/ipa
mv *.fd /usr/share/texmf/tex/latex/ipa/
mkdir -p /etc/texmf/fonts/map/ttf2pk/
cat > /etc/texmf/fonts/map/ttf2pk/ttfonts.map <<EOF
ipam@UJIS@ ipam.ttf
ipamp@UJIS@ ipamp.ttf
ipam-uni@Unicode@ ipamp.ttf
ipamp-uni@Unicode@ ipamp.ttf
ipag@UJIS@ ipag.ttf
ipagp@UJIS@ ipagp.ttf
ipag-uni@Unicode@ ipagp.ttf
ipagp-uni@Unicode@ ipagp.ttf
EOF
cd ..
これで
\documentclass{article}
\usepackage{CJK}
\begin{document}
\begin{CJK}{UTF8}{ipam}
やっと pLaTeX に頼らずに日本語が出せた…
\end{CJK} The CJK environment doesn't insert newlines.
\end{document}
っていう TeX ファイルを pdflatex に食わせるとこんな PDF が出来るはずです。ipam の部分を ipag にすればゴシック体になります。正直まだあんまり綺麗とは言い難いですが、もういいでしょう。お疲れ様。


もう TeX のこういうフォント周りの汚さには本当にうんざりしますが、何とか出せることは出せました。…はあ。

No comments:

Post a Comment