Hatena::ブログ(Diary)

マクロツイーター このページをアンテナに追加 RSSフィード Twitter

2011-01-26

CJKパッケージを極めて簡単にセットアップする方法

8 ビット欧文 LaTeX 上で CJK(日中韓言語)を扱う手段として普及しているのが CJK パッケージであるが、このパッケージはインストールと設定が非常に複雑で面倒であるという短所をもつ。この点は TeX Live 等の「CJK が最初からそのまま使える」ディストリビューションを使えば問題にならないかも知れない。ただそれでも、日本語に関しては標準の設定では「和田研フォント」しか用意されておらず、これは(TeX の観点では)実用に堪えないので、自分で適当な日本語フォントに対して CJK で使えるように前準備を行う必要があり、この作業は極めて難度が高い(pTeX で新規の和文フォントの前準備をするより難しいと思う)。

ところが実は、「普通の日本語 TeX 環境の使用下」で CJK パッケージを使うのであれば、非常に簡単な設定方法がある。ここで前提とする環境は「普段は pTeX で dvipdfmx を使っている」ということだがさらに「OTF パッケージが正しく(使える状態で)設定されている」ことを仮定する(あと文字コードUTF-8 に限定する)。この場合、dvipdfmx (に限らず OTF パッケージが使える全ての DVI ウェア)が扱える CJK 言語用の Unicode エンコーディングTeX フォントTFM;この場合 JFM であるが)が既に存在している。そこで、CJK パッケージの TeX フォントTFMUnicode サブフォントである)から OTF パッケージの TeX フォント(JFM)へ変換する仮想フォント(VF)を用意すればいい。そのような仮想フォントのファミリを作成したので、またひっそりと公開しておいた。

このパッケージをインストールすると、CJK パッケージで以下の CJK ファミリが使用可能になる。

日本語韓国語簡体中文繁体中文
明朝系opjaropkoropscroptcr
ゴシックopjasopkosopscsoptcs

以下にサンプルを示す。もちろんこの文書は OTF パッケージではなく CJK パッケージを使っているので 8 ビット欧文 LaTeXlatex コマンド)で組版する。DVI ウェアは OTF パッケージが「実際に使える(設定済である)」ものなら使えるはずである。残念ながら pdfLaTeX は使えない。

% 文字コードUTF-8
\documentclass[a4paper]{article}
\usepackage[T2A,T1]{fontenc}
\usepackage{CJKutf8}
\begin{document}
\begin{CJK*}{UTF8}{opjar}% 日本語・明朝
私のホバークラフトは鰻でいっぱいです。\par
\end{CJK*}
\begin{CJK}{UTF8}{opkor}% 韓国語・明朝
내 호버크라프트는 장어로 가득 차 있어요.\par
\end{CJK}
\begin{CJK*}{UTF8}{opscr}% 簡体中文・明朝(宋体)
我的气垫船充满了鳝鱼。\par
\end{CJK*}
% ついでにキリル文字セルビア語)を混ぜてみる
{\fontencoding{T2A}\selectfont
Мој ховеркрафт је пун јегуља.\par}
\end{document}

ただ、日本人が CJK パッケージを使うのは、そもそも「pLaTeX + OTF パッケージで対応できない」場合ではないか、という気がする。そう考えると、この方法はあまり有用でないことになる。

K.OkadaK.Okada 2011/02/04 03:34 わたしは化学屋で,たまたま日中対応辞書の仕事をうけたのですが,CJKはやはり煩瑣です。正直,使い物になりません。

したがって,ひっそりと,しかし熱烈に ZXjatype の発展拡張を期待しています。

zrbabblerzrbabbler 2011/02/08 09:33 日本語の(潜在的なものを含めた)組版品質は、CJK パッケージに比べると XeLaTeX(+ xeCJK 等)の方が単純に良い(たぶん中国語についてもそう)ので、他の種々の点を考え併せて、「pdfTeX お機能が必要という場合を除いて、LaTeX + CJK を選ぶぐらいなら XeLaTeX を選ぶ方がよい」と考えてます。

ところで、ZXjatype(を筆頭とする「XeLaTeX で日本語する件」)について今足りない機能は何でしょうか? もちろんあるのが望ましい機能は山ほどありますが、何を優先すべきかで迷っています。それから、「縦書き」については大きな問題があって手がつけられずにいます。

K.OkadaK.Okada 2011/02/08 22:25
中国TeXで縦書きはあまりみかけません。古典の引用など,こちらが気をつかって縦書きしても,逆に目がつかれると苦情がでる有様です。

それより本来が多書体の世界なので,字体に関心が向くようです。(最近のCTeXはMikTeXのfontsettingというユーティリティがつき,デフォルトで中国語6書体が使えます。先の留学生はこれが頭にあったのでしょう)

ただ,フォントが台湾,香港,大陸と規格がバラバラに混在するので,そのチェックのためにzxjatypeを使わせていただいています。

zxjafontを組み合わせるとプリアンブルにフォント名を書くだけですむので大変ありがたい。

文書の体裁も,印刷屋さんがみれば別でしょうが,目だって見苦しいところはないとおもいます。

ただこれ以上のことをしようとすると,どうしても既存のスタイルファイルの問題があって(当然ですが)やむなくpdfTeX や,upTeX を使っているのが現状です。

(トップページの「XeLaTeXで日本語する件」のリンク先がupLaTeXになっています)

zrbabblerzrbabbler 2011/02/11 16:08 >(トップページの「XeLaTeXで日本語する件」のリンク先がupLaTeXになっています)
ご指摘ありがとうございました。修正しておきました。
結局のところ、既存のパッケージの問題が一番大きいのでしょうか。具体的にどのパッケージ(スタイル)が使えないのか教えて頂ければ幸いです。

K.OkadaK.Okada 2011/02/15 02:17 いよいよ本題にはいりました。^^;

たとえば,日本語の中にほんのすこし中国語が混在するような場合とか,手持ちのフォントがadobe1-4しかカバーしていない時,自動で補完すること(unicode によるフォント割付)はできないかとおもっています。

先日,uncharclasses というのを見つけたのですが,これがzxjatypeとバッティングするですね,当然のことながら。

どのみち,uncharclasses はおそろしく時間がかかるので使う気になりませんが,これはやはりむずかしい処理でしょうか。

zrbabblerzrbabbler 2011/02/19 21:57 私は「言語依存の処理を少しでも望むならば、言語は明示的にマークアップされるべきである」であり、また LaTeX 上では Babel や Polyglossia の形式を用いるのが最も自然だと考えています(pxbabel パッケージが典型的な例)。ucharclasses パッケージについてはまたいつか触れようと思います。

で、先のコメントのようなフォント切替は、言語による切替でも Unicode 上の何らかの文字属性による切替でもなくて、アドホックに決めた文字集合に対して、あるいは「現在のフォントに存在しない」という条件による切替ということになるでしょう。後者については、02-14 の記事で書いたように、原理的には XeTeX で実装可能です。任意の文字集合について切替を行うこともできます。ただこれを汎用的なパッケージにしようとすると、02-19 の記事で書いたような複雑な問題が絡んできます。

zrbabblerzrbabbler 2011/02/20 22:58 xeCJK/zxjatype で「現在のフォントにない文字を代替する」機能を実現するパッケージを作ってみました。02-20 の記事をご覧ください。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

リンク元