XeLaTeXだとかな混植が簡単にできて最高だという話

結論だけ知りたいひとのために

\documentclass[a5paper,xelatex,ja=standard, enablejfam=true]{bxjsbook}

\XeTeXgenerateactualtext=1
\usepackage{zxjatype}

%仮名のブロックを定義しておく。
%定義した後は一度キャンセルしておく。
%(そうしないとかなを別フォントに指定しないフォントの定義が面倒になる)
%仮名混植をするフォントを定義する場合はRestoreしてCancelするとよい。
\xeCJKDeclareSubCJKBlock{kana}{ "3040 -> "309F , "30A0 -> "30FF}
\xeCJKCancelSubCJKBlock{kana}

\xeCJKRestoreSubCJKBlock{kana}
\setjamainfont[kana=SeiwadoMincho-L]{游明朝 Regular}
\xeCJKCancelSubCJKBlock{kana}
\setjasansfont{Yu Gothic Regular}
\setjamonofont{Yu Gothic Regular}
\xeCJKRestoreSubCJKBlock{kana}
\setCJKfamilyfont{midashi1}[kana=07ラノベPOP]{Noto Sans CJK JP Black}
\xeCJKCancelSubCJKBlock{kana}

こんなふうに、\xeCJKDeclareSubCJKBlockで別フォントを指定したい文字のUnicode符号位置の範囲を指定して、そういう文字グループを作ってやればいいだけ。
簡単!!!

今までのあらすじ

というわけで、XeLaTeXを使えばとても簡単にかな混植を実現できるのですが、ここまでには長い苦闘があったのです……(から始まるポエムがここから続きます)

かな混植とは

そもそも「かな混植」が何かを知らない方のために説明しますと、かな混植とは「文章中の漢字とかなで別の書体を用いる」ことです。
普通、日本語書体は漢字、かな、欧文、約物等々日本語の文章で使う文字がひととおり含まれたセットになっているのですが、あえて一部の文字種だけ別の書体を代わりに使う、つまり書体を混ぜて使うことによって文章の雰囲気を変えることができるのです。
そのうちここで「かな混植」と呼ぶのは、かなだけを別の書体にするものです。
……ファミレスにいってドリンクバーがあると、つい混ぜて謎飲料をつくりたくなってしまいますよね。そういうものです(ちがいます)。

わかりやすい例でいうと『ゆゆ式』の次のコマがあります。

f:id:suzusime:20170415124015p:plain
三上小又ゆゆ式 2』46ページより)

この「夜たまらなくなったらいつでも呼んでね?」は漢字が「ゴナ」、かなが「ゴカール」という書体で組まれています。
左の「教室で変なことを言うなアホッ」は漢字もかなもゴナなのですが、これと比べると随分雰囲気が変わっていますよね(太さが違うので比べづらいかもしれませんが)。

このように大きな効果があげられるので、かな混植はひろく行われています。
かな混植で使うための、かなのみで作られた書体が存在しているくらいです*1
……さきほどのたとえを引きずるならば、お酒を割るための炭酸水が売られているみたいなものですね。炭酸水をそのまま飲んでもおいしいですが。

先ほど例に挙げたゴカールも、ゴナと組み合わせて使うことを想定されてつくられたかな書体です。

個人的に好きなものとして、石井明朝体+タイポスの混植があります。タイポスは今でこそ「漢字タイポス」として漢字も含んだ書体になっていますが、当初はかなのみの書体でした。
例えば文字組版(DTPと写研電算写植)の仕事場から | タイプアンドたいぽに組見本がありますが、明朝体と組み合わせると一目では漢字が明朝体であると気づかないほどに違った雰囲気になっていて、目から鱗が落ちた記憶があります。
なぜ「anan」なのか?雑誌名の由来を徹底解説! | コトビー[KOTB]に雑誌『non-no』創刊号の写真がありますが、昭和の香りを感じられて良いですね)

かな混植を実現するために

このようなかな混植ですが、私たちがPCで作る文書で実現するためにはどうすればいいでしょうか?

ひとつは、「初めからかな混植されたフォント」を使うことです。というのも、フォントメーカーによっては、かな書体をそれと合うような漢字書体と組み合わせたフォントを売っています。例を挙げればフォントワークスの「墨東セザンヌ」、タイプラボの「ハッピールイカ」など。書体のかな違いのバリエーションといった書体です。
これを利用する場合は、単にそのフォントを指定して文書を書けばよいので簡単です。ワードでもメモ帳でも、たいていのソフトで実現することができます。
欠点は、当然ですが、初めから用意された組み合わせでしかできないということです。フォントファイルの改変が許されているフォントの場合はFontForgeなどでフォントファイルを弄って新たにつくることもできますが、いちいちつくるのはあまりに面倒ですし、普通の人には敷居が高いでしょう。

ふたつめは、手作業でかなだけを別のフォントに変えること正規表現で選択して一括で書体を変更する機能のあるソフトウェアならできないわけではありませんし、とても単純な、手っ取り早い方法ですが、あまりスマートとは言えない方法です(文書を修正するたびに書体変更が必要になる)。

そして、みっつめがソフトウェアの混植機能を利用することInDesignIllustratorなどのソフトウェアには高機能な合成フォント機能があり、それを使えば実現できます。かなを変えるだけでなく、約物だけを変えるなどの自由もききます。
一太郎も最近のバージョンではかな混植に対応しているので、(値段などの面から)一般的な文書作成では最も手軽な選択肢かなと思います。
これが最も応用のきいて、かつ綺麗な方法ですが、これはそういった機能をもっているソフトウェアが使えるという前提条件があります。
では、高機能な組版機能をもっているソフトウェアでありながら無償で誰でも使えるTeXではどうでしょうか?

TeXでのかな混植

TeXでかな混植をするための資料としてよくまとまっているのが、たちゃなさんのMacPorts の pTeX における和文多書体環境の整えかたです。この資料で解説されている通りにすれば、pLaTeX環境でかな混植を行えるようになります。

……のですが、問題があって、ここにある方法ではJIS外の文字は使えません。pTeXでJIS外の文字を扱うには齋藤修三郎さんのOTFパッケージを利用すればいいのですが、これに関して先ほどのページには

otf.sty で扱えるフォントをユーザが追加したい場合、 つまり、追加したフォントのグリフを \UTF{...} や \CID{...} で直接呼び出せるようにするには、 otf.sty の様式に沿った多数のフォントメトリックファイル、および仮想フォントファイルを用意しなければならず、 少々面倒な作業となります。

これについては、本稿では説明を省きます。詳細についてお知りになりたい場合は otf.sty の配布物をご覧ください。

とあります。

そもそも私がTeXを使い始めた理由は、青空文庫にあるテキストをいい感じに組版したいというものだったので、JIS外の文字が扱えないのでは困ります。CIDを直接指定して文字を呼び出すことまでできるOTFパッケージは、なくてはならないものでした。

というわけで、upLaTeX+OTFパッケージの環境でかな混植を実現しようと私は何度か挑戦しました。
……が、道のりはあまりに険しく、思い出したときに初めては数時間を溶かし、そのまま疲れて諦めて投げ出すということを繰り返すことになりました。

以下は愚痴です。見る人によっては「なんでそんな程度のことでつまずいているんだ」と思われるかもしれませんが、ご容赦ください。

そもそもTeXのフォントの扱い方は普通のソフトウェアのものとは大きく異なっています。組版(文字の位置を決める作業)する人が皆高価なフォントファイルを持っていなくてもいいようにと、組版時は文字幅などの情報だけをもったファイル(メトリックファイル)を参照し、あとで印刷所でそのフォントを用いて印刷する、というアプローチをとっています。つまり、TeXで新たなフォントを使えるようにするためにはフォントメトリックファイルなどを作成する必要があるのです。

(この点について、和文フォントではほとんどが同じ幅の文字であることを利用して、同じフォントメトリックを流用することが可能なので、欧文フォントよりは少し事情が簡単になってはいます。もちろん、そうした場合は所謂プロポーショナルなフォントは使えません。)

そして、使うのが素のTeXではなく様々に拡張されたものだということも理解の難しさに拍車をかけていました。

pTeXアスキーTeXを拡張し、日本語に対応させたもので、和文と欧文を区別する機構などが組み込まれています*2。ここで、pTeXは普通のtfmでなくjfmなる別のメトリックファイル形式を使っているために欧文用に作られたソフトでは扱えないといった問題が出てきます。それでmakejvf等のソフトを使うのですが、いったいこれはどういうものなのかがわからない、と……(たとえばかな以外の文字を別書体におきかえたいときにどうすればいいのか、など)

一番の問題はOTFパッケージの原理がわからないことでした。perlTeX言語で書かれたコードは、私には難解すぎました(読めないことはないにしても諦めてしまいました)。一体どうやったらCIDまで指定してフォントを呼び出せるのかは想像もつきませんでしたし、しかもそれのupLaTeX版です。upLaTeX自体もどういう仕組みでUnicodeを扱っているのかわからないのに、いったいどうすれば……というところでした。
upLaTeX+OTFパッケージの環境はまるで九龍城のようにみえ、今普通に実用できているのが奇跡のように思えました。


……いま思い返せば、問題を切り分けずに慾を張りすぎて自滅したというところなのですが、まあ、そんなこんなで今までTeXでかな混植をすることは諦めていたのです。

XeLaTeXとの出逢い

そして、今に至ります。私は新しいPCを導入してうきうきしていたのもあり、今まで存在を知りつつも試していなかったXeLaTeXを試します。
……すると、呆気ないくらいに簡単にかな混植が実現できてしまったのです!

XeTeXは、新しいTeXの一つで、フォントを直接扱うことに特徴があります。旧来のTeXのもっていた、「組版環境からフォントが参照できる必要がない」という特長は失いますが、それと引き換えに「OTFフォントのもつ高度な機能を利用できる」という特長を得たのです。

そのため、XeTeXでフォントを指定するためには、ただフォント名を指定するだけととても簡単です。これによって、普通のソフトウェアと同様にOSにインストールされているフォントを使うことができます。

ところで、XeTeXはpTeXと違い日本語に特化した処理系ではないので、和文と欧文を区別したりはしません(日本語が扱えるのは、単にUnicodeの全てを扱えるからです)。したがって、和文フォントを指定すると、欧文も和文フォントの従属欧文で組まれることになります。

そこで使えるのがZRさんのzxjatype.styで、これを読み込むとXeLaTeXの組版が日本語向けに調整調整されるのですが、そのなかに和文と欧文を別書体にするという機能があります。
これを改造すればかな混植ができるのでは?」――私はそう思いました。

というわけでzxjatypeを覗いてみたのですが、どうもフォントの置き換え処理は内部でxeCJKのものを呼び出しているようです*3。そしてxeCJKを覗く……には大きかったので先にマニュアルをみてみました。

……マニュアルが中国語でした。はい。
普段、日本語ばかりで書いている英語嫌いの私ですが、この時になって国際語のありがたみを知りました。英語は嫌いだけれどなんだかんだ読めるんですよね……*4

ただ、幸い日本人には漢字が読めるので、意外と雰囲気がわかります。ざっと読んでいたら、\xeCJKDeclareSubCJKBlockをみつけました。
「え?」という感じでしたが、例をみるとそれはとても目的に適ったものに見えました。改造などしなくても、はじめから機能が用意されていたのです…!

何故こんな機能が用意されているのかといえば、TTF、OTFフォントの文字数制限が理由でしょう。
これらのフォント(つまり一般に使われているフォントです)には、2^16=65536文字しか文字(グリフ)を含むことができないという制限があります。そのため、それ以上の文字を扱おうとすると、フォントファイルを別に分ける必要がでてきます。
マニュアルで例に挙げられていたのはMingLiUとMingLiU-ExtBでしたが(ExtBはUnicodeのCJK統合漢字拡張Bの意)、日本のフォントである花園明朝A、花園明朝Bもこのようになっています。
xeCJKのこの機能は、そういった複数のフォントを文字の範囲によって使い分けるために作られたものだと思われます。

と、なればあとの話は簡単です。ひらがな、カタカナの範囲を指定したブロックをつくっておき、新しいフォントを定義するときに適宜呼び出せばいいのです。
ちなみに、この機能を使えば約物の書体だけを変えるといったこともできます。最高です。

f:id:suzusime:20170415214238p:plain

今後の展望

これでかな混植をすることができたわけですが、ひとつ問題があって、XeLaTeXは縦書きにうまく対応していないという問題があります。
ということで、青空文庫をいい感じに組むという目的は達成できないという問題があります。

……どうしたものでしょうね?

追記 (4/16)

LuaLaTeXでもかな混植ができて、更に縦組みもできるということを教えてもらいました。ありがとうございます。

(LuaLaTeX、重いという噂と日本語がまともに扱えるという印象がなくて触れていなかったのですが、知らないうちに便利になっていたのですね……)

TeXを便利にしてくださる開発者の方々にはいつも感謝しています。

(追記以上)




(追伸)ブログらしく、適宜太字をあしらってみたのですが、如何でしょうか。なんとなく俗っぽい雰囲気がでるとともに、緩急がついて多少読みやすくなった気がしています。

*1:もちろん、ロゴ用などの用途が想定されているかな書体では混植を装幀していないものもあると思いますが。

*2:これによって初期設定で和欧混植がされるわけです

*3:expl3で書かれたTeXコードは従来のTeXコードに比べて随分読みやすくて感動しました

*4:やっぱりエスペラント語に……といえばいいのかもしれませんが、あれもやはり西欧系の言語の香りが強く残っていてで好きになれないなぁという感じで、難しいです。