2018年2月19日 (月)

NotoSerif JPフォントをkindle、kobo用に修正

古くは青キンをはじめとして、kindleやkoboの差し替え/追加用フォントとして、IPA派生フォントがよく使われる。だが、IPAフォントはkindle/koboにデフォルトで入っているフォントより文字数が少ない。その上、koboはデフォルトの日本語フォント(Kobo筑紫明朝)にはボールドフォントをつけないというケチっぷり。そのせいで、ボールドはレギュラーフォントをソフトウェア的に太らせて表示するので、お世辞にもきれいとは言いがたい。kindleのja.fontの差し替えも、IPAフォントにボールドフォントがないため、レギュラーフォントとボールドフォントが別になり、字形が違ってしまう。

NotoSerif CJKは、JIS X 0208、JIS X 0213、JIS X 0212、Adobe-Japan1-6のすべての漢字に対応していて、IPA系のフォントよりも文字数に不安はなく、 ボールドフォントもリリースされている(ExtraLight、Light、Regular、Medium、SemiBold、Bold、Blackの7ウェイトある)。
というわけで、NotoSerif CJKは試してみたいフォント。当然、koboで使えば本来のボールドフォントの表示になる。

ところが、使ってみると、kindleやkoboではルビの行間があいてしまう。これはkindleのスクリーンショット。

Notoserif_orig

前回の記事ではNotoSerif JP Mediumのスクリーンショットだったが、今回はRegularを使っている。Regularでは字間が詰まる問題は生じないようだ。

そこで、修正してみた。
フォントのhheaテーブルの"ascent"(高さ)と"descent"(深さ)の値を、OS/2テーブルの"Typo Ascender"(組版での高さ)と"Typo Descender"(組版での深さ)と同じにすることで、不具合は解消されるようだ。

修正後のスクリーンショット

Notoserif_fixed


KoboSerif JPのレギュラーは細いので、koboで使う場合は、FWにパッチをあてて、ランチャーを使うなどして、フォントの太さ調整を有効にする必要があるだろう。本来、フォントの太さ調整なんてkoboには昔からついている機能。なのに、koboは和書ではその機能が使えないようにしている。つい最近アマゾンは和書でも太字調節可能にしたというのに、楽天koboは昔からある機能を日本語ユーザーにはブロックしたまま、何もしないかもしれない。和書は行間・余白の調節すらできない、劣悪な日本語環境をkobo touchの時代からずっと放置しているから。

要望があればフォントはアップしてもいいが、需要はなさそう。

-----

以下は修正手順。
◎必要なもの
・フォント
NotoSerif CJKから、C(中国語)とK(韓国語)を抜いた日本語だけのサブセット。
NotoSerifJP-Regular.otf
NotoSerifJP-Bold.otf
・ttx(前回の記事参照)
・kindle用に太字有効化が必要なら、筑紫明朝から抽出したAMZNテーブルのttxファイル(前回の記事のtsukumin_m.ttx/tsukumin_b.ttxがそれ)

◎行間の修正手順
NotoSerifJP-Regular.otfを例にして説明する。
1. NotoSerifJP-Regular.otfのOS/2テーブルの"Typo Ascender"(組版での高さ)と"Typo Descender"(組版での深さ)を調べるために、OS/2テーブルをos2.ttxに書き出してみる。
ttx -t "OS/2" -o os2.ttx NotoSerifJP-Regular.otf
os2.ttxの中身を確認する。その中の
sTypoAscender value="880"
sTypoDescender value="-120"
が"Typo Ascender"(組版での高さ)と"Typo Descender"(組版での深さ)。

2. 次にhheaテーブルをhhea.ttxとして抽出する。
ttx -t "hhea" -o hhea.ttx NotoSerifJP-Regular.otf

3. hhea.ttxをエディタで開いて、"ascent value"と"descent value"を、"Typo Ascender"(組版での高さ)と"Typo Descender"(組版での深さ)の数値に書き換える。つまり、
ascent value="880"
descent value="-120"
にする。

4. このhhea.ttxを使って、行間が修正されたフォントを出力する。
ttx -m NotoSerifJP-Regular.otf -o NotoSerifJP-Regular_hhea-fixed.otf hhea.ttx
NotoSerifJP-Regular_hhea-fixed.otfが修正されたフォント。
あとは、ボールドのNotoSerifJP-Bold.otfも同じ要領で修正する。

5. さらにkindleの差し替えフォントの太字有効化も必要なら、前回の記事を見て作業。

でも、*.ttxごとに2回フォントを作り変えるのは手間。hhea.ttx、AMZNテールブル用のttxの2つを1つにまとめてしまえば、1度で済む。(まとめ方は「hhea_amzn_ttx.txt」を参考に)。まとめたものを仮にfix_regular_hhea_amzn.ttxとすると、それを使ってオリジナルのNotoSerifJP-Regular.otfを修正するには、
ttx -m NotoSerifJP-Regular.otf -o NotoSerifJP-Regular_fixed.otf fix_regular_hhea_amzn.ttx
とする。レギュラーのNotoSerifJP-Regular_fixed.otfが完成。
ボールドフォント(NotoSerifJP-Bold.otf)にも同じ手順を繰り返す。

解説終了。

| | コメント (0) | トラックバック (0)

«Kindle:差し替えフォントの太字有効化(5.9.4以降)