和文フォントを混植する方法

はじめに

和文フォントは、平仮名や片仮名だけ別のフォントに置き換えて使用することがある。漢字は同じでも、平仮名が違えば、紙面の印象を大きく変えることができるからだ。このように、漢字と平仮名とで別のフォントを使うことを「混植」と言う。

LaTeXで混植をする方法の解説としては、これまでにも優れた記事がいくつか存在している。例えば「ヒラギノ明朝W2と游築五号仮名W2混植方法」など。しかしそこに書かれた方法は、いくぶんか簡略的なものだというきらいがある。otfパッケージのburasageオプションが使えなかったり、upLaTeXでは使えなかったりするのだ。

そこで本稿では、上述の欠点への補足として、やや備忘録的に記事を書いてみたい。

必要なファイルの用意

まず、必要なファイルを揃えておこう。ここでは游明朝体と游明朝体五号かなの混植をしてみよう。

CTANにあるjapanese-otfパッケージからbaseplとscriptというディレクトリをダウンロード。またmkjvfもダウンロードしておく。

同様にjapanese-otf-uptexからbasepl、script、umkjvfをダウンロード。

さらに次のスクリプトを作成する。

#!/bin/sh

mkdir tfm
mkdir vf

# 普通にtfmファイルを生成
for face in r b
do
    for hv in h v
    do
        ppltotf basepl/base-${hv}.pl yumin5go${face}-${hv}
        ppltotf basepl/base-${hv}.pl expyumin5go${face}-${hv}
        ppltotf basepl/brsg-${hv}.pl brsgyumin5go${face}-${hv}
        ppltotf basepl/brsg-${hv}.pl brsgexpyumin5go${face}-${hv}
        #
        uppltotf -kanji=uptex basepl/ubase-${hv}.pl upyumin5go${face}-${hv}
        uppltotf -kanji=uptex basepl/ubase-${hv}.pl upexpyumin5go${face}-${hv}
        uppltotf -kanji=uptex basepl/ubrsg-${hv}.pl upbrsgyumin5go${face}-${hv}
        uppltotf -kanji=uptex basepl/ubrsg-${hv}.pl upbrsgexpyumin5go${face}-${hv}
    done
done

# ここが混植のキモ。
# 混植しないときは引数二つでよかったが、混植のため引数は三つ。
# しかし仕組みはあまり理解できていない。
for face in r b
do
    for hv in h v
    do
        perl mkjvf -m               yumin5go${face}-${hv} hmin${face}-${hv} r-yumin5go${face}-${hv}
        perl mkjvf -m -sage         brsgyumin5go${face}-${hv} hmin${face}-${hv} r-yumin5go${face}-${hv}
        perl mkjvf -m       -expert expyumin5go${face}-${hv} hmin${face}-${hv} cidjmin${face}
        perl mkjvf -m -sage -expert brsgexpyumin5go${face}-${hv} hmin${face}-${hv} cidjmin${face}
    done
done

for face in r b
do
    for hv in h v
    do
        perl umkjvf -m -ucs -sp 1               upyumin5go${face}-${hv} uphmin${face}-${hv} r-upyumin5go${face}-${hv}
        perl umkjvf -m -ucs -sp 1 -sage         upbrsgyumin5go${face}-${hv} uphmin${face}-${hv} r-upyumin5go${face}-${hv}
        perl umkjvf -m -ucs -sp 1       -expert upexpyumin5go${face}-${hv} uphmin${face}-${hv} cidjmin${face}
        perl umkjvf -m -ucs -sp 1 -sage -expert upbrsgexpyumin5go${face}-${hv} uphmin${face}-${hv} cidjmin${face}
    done
done

echo "making tfm for supplementary plane ..."
perl script/mktfm_sp.pl
echo "making vf for supplementary plane ..."
perl script/mkutfvf_sp.pl

mv *.tfm tfm/
mv *.vf vf/

このスクリプトは、基本的にはmakeotfおよびumakeotfを参考にして適当に書き換えたものである。

各種ファイルの作成

先程作成したスクリプトを実行し、tfmファイルやvfファイルを生成する。そして$TEXMF下の適当な場所に配置する。

最後に、otfパッケージを参考にして、yumin5go.styを作成する。

%
% yumin5go.sty
%

\ProvidesPackage{yumin5go}
\RequirePackage{otf}

\if@deluxe
    \DeclareKanjiFamily{\otf@JYn}{yumin5go}{}
    \DeclareKanjiFamily{\otf@JTn}{yumin5go}{}
    \if@kana
        \DeclareFontShape{\otf@JYn}{yumin5go}{m}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \brsg@pfx@ yumin5gor\nlck@sfx@-h}{}
        \DeclareFontShape{\otf@JTn}{yumin5go}{m}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \brsg@pfx@ yumin5gor\nlck@sfx@-v}{}
    \else
        \DeclareFontShape{\otf@JYn}{yumin5go}{m}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \brsg@pfx@ yumin5gor\nlck@sfx@-h}{}
        \DeclareFontShape{\otf@JTn}{yumin5go}{m}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \brsg@pfx@ yumin5gor\nlck@sfx@-v}{}
    \fi
\fi
\if@deluxe
    \DeclareKanjiFamily{\otf@JYn}{yumin5go}{}
    \DeclareKanjiFamily{\otf@JTn}{yumin5go}{}
    \if@kana
        \DeclareFontShape{\otf@JYn}{yumin5go}{bx}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \brsg@pfx@ yumin5gob\nlck@sfx@-h}{}
        \DeclareFontShape{\otf@JTn}{yumin5go}{bx}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \brsg@pfx@ yumin5gob\nlck@sfx@-v}{}
    \else
        \DeclareFontShape{\otf@JYn}{yumin5go}{bx}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \brsg@pfx@ yumin5gob\nlck@sfx@-h}{}
        \DeclareFontShape{\otf@JTn}{yumin5go}{bx}{n}{<-> s * [\utf@sc@le] \otf@pfx@ \brsg@pfx@ yumin5gob\nlck@sfx@-v}{}
    \fi
\fi

\DeclareRobustCommand\okfamily{\kanjifamily{yumin5go}\selectfont}

\def\ymnVgo@mapline#1#2#3{%
    \AtBeginDvi{\special{pdf:mapline #1 #2 #3}}%
}

\ymnVgo@mapline{r-yumin5gor-h}{H}{JJSYuMin5goKn-R.otf}
\ymnVgo@mapline{r-yumin5gor-v}{V}{JJSYuMin5goKn-R.otf}
\ymnVgo@mapline{hminr-h}{H}{JJSYuMinchoPr6N-R.otf}
\ymnVgo@mapline{hminr-v}{V}{JJSYuMinchoPr6N-R.otf}

\ymnVgo@mapline{r-yumin5gob-h}{H}{JJSYuMin5goKn-D.otf}
\ymnVgo@mapline{r-yumin5gob-v}{V}{JJSYuMin5goKn-D.otf}
\ymnVgo@mapline{hminb-h}{H}{JJSYuMinchoPr6N-D.otf}
\ymnVgo@mapline{hminb-v}{V}{JJSYuMinchoPr6N-D.otf}

\if@otf@uplatex
    \ymnVgo@mapline{r-upyumin5gor-h}{UniJIS-UTF16-H}{JJSYuMin5goKn-R.otf}
    \ymnVgo@mapline{r-upyumin5gor-v}{UniJIS-UTF16-V}{JJSYuMin5goKn-R.otf}
    \ymnVgo@mapline{uphminr-h}{UniJIS-UTF16-H}{JJSYuMinchoPr6N-R.otf}
    \ymnVgo@mapline{uphminr-v}{UniJIS-UTF16-V}{JJSYuMinchoPr6N-R.otf}
    %
    \ymnVgo@mapline{r-upyumin5gob-h}{UniJIS-UTF16-H}{JJSYuMin5goKn-D.otf}
    \ymnVgo@mapline{r-upyumin5gob-v}{UniJIS-UTF16-V}{JJSYuMin5goKn-D.otf}
    \ymnVgo@mapline{uphminb-h}{UniJIS-UTF16-H}{JJSYuMinchoPr6N-D.otf}
    \ymnVgo@mapline{uphminb-v}{UniJIS-UTF16-V}{JJSYuMinchoPr6N-D.otf}
\fi

\endinput

このstyファイルを読み込み、\okfamilyとすれば游明朝体五号かなが使えるはずである。upLaTeXでも問題なく動作するはずだし、otfパッケージのburasageオプションもちゃんと機能する。

schedule 2019年3月31日
update 2021年12月10日
local_offer #LaTeX #font