M+1M+IPAG circle(M+1M + IPAゴシック を、濁点と半濁点を判別しやすくしたもの)の組み合わせのものがM+ と IPAフォントの合成フォントのサイトで提供されていなかったので、作りたかったのでござる。なお、以下linux前提で書き記す。

最終的にできるもの

  • M+1M+IPAG-circle.ttf
  • M+1P+IPAG-circle.ttf
  • M+1VM+IPAG-circle.ttf

M+1P+IPAG-circle.ttf, M+1VM+IPAG-circle.ttf はM+ と IPAフォントの合成フォントのサイトで配布されているので、普通の人にとってはやる意味は無い。また、M+ と IPAフォントの合成フォントのサイトで配布されているのは古めのM+フォントおよびIPAフォントなので、現在配布されている新しいフォント若干異なるものができるはず。

準備するもの

まずpdfforgeを取得する。(apt/yum/PackageKit etc...などでどうぞ)

M+フォントIPAフォントをダウンロードしてきて、そのなかの以下のファイルを取り出す。半濁点巨大化処理したひらがなカタカナを持ってくるために使う「M+1P+IPAG-circle.ttf」「M+1VM+IPAG-circle.ttf」はM+ と IPAフォントの合成フォントのサイトから持ってくる。

  • mplus-1p-regular.ttf
  • mplus-1m-regular.ttf
  • ipag.otf
  • M+P+IPAG-circle.ttf
  • M+1VM+IPAG-circle.ttf

方法

  1. 上述のフォントファイル(*.ttf,*.otf)をすべてを適当なフォルダに置く
  2. フォルダ"out"を作る(ここにフォルダが生成される)
  3. 下に示すスクリプトファイルを作って"m++ipa-maru.pe"とかいう名前で、フォントファイルを置いたフォルダに置く
  4. コマンド以下のコマンドを打つ。ここで、カレントディレクトリはフォントファイルを置いたフォルダに設定されているものとする。
    $ fontforge -script m++ipa-maru.pe

m++ipa-maru.peの中身

# Note that following 4 files are required.
Mplus1p = "mplus-1p-regular.ttf";
Mplus1m = "mplus-1m-regular.ttf";
KanjiFont = "ipag.otf";
MaruFont = "M+1VM+IPAG-circle.ttf";
MaruPFont = "M+1P+IPAG-circle.ttf";

Mplus1p_kanji = "M+1P+IPAG";
Mplus1p_kanji_circle      = Mplus1p_kanji + "-circle";
Mplus1p_kanji_circle_name = Mplus1p_kanji + " circle";
Mplus1m_kanji = "M+1M+IPAG";
Mplus1m_kanji_circle      = Mplus1m_kanji + "-circle";
Mplus1m_kanji_circle_name = Mplus1m_kanji + " circle";
Mplus1vm_kanji = "M+1VM+IPAG";
Mplus1vm_kanji_circle      = Mplus1vm_kanji + "-circle";
Mplus1vm_kanji_circle_name = Mplus1vm_kanji + " circle";

copyright_mplus = "Copyright(c) 2009 M+ FONTS PROJECT\n";
copyright_marufix = "Copyright(c) 2006 itouhiro (itouh)\n";
copyright_ipa = "Copyright(c) Information-technology Promotion Agency, Japan (IPA), 2003-2009. You must accept \"http://ipafont.ipa.go.jp/ipa_font_license_v1.html\" to use this product.\n";
copyright_bitstream = "Copyright (c) 2003 by Bitstream, Inc. All Rights Reserved.\n";

family = Mplus1p_kanji_circle;
family_name = Mplus1p_kanji_circle_name;
copyright_notice = copyright_mplus + copyright_marufix + copyright_ipa;
Open(Mplus1p);
## Mplus1p + MaruP + IPA
MergeFonts(KanjiFont);
Select(0u3041, 0u309F, 0u30A0, 0u30FF);
Cut(); # delete all of HIRAGANA and KATAKANA
MergeFonts(MaruPFont);
SetFontNames(family + "-Regular", family_name, family_name + " Regular", "Regular", copyright_notice);
Generate("out/" + family + ".ttf", "", 4);

## Mplus1p + Maru + IPA + Vera
family = Mplus1vm_kanji_circle;
family_name = Mplus1vm_kanji_circle_name;
copyright_notice += copyright_bitstream;
Select(0u0020, 0u00FF);
Cut(); # delete all of latin-1 chars
MergeFonts(MaruFont);
SetFontNames(family + "-Regular", family_name, family_name + " Regular", "Regular", copyright_notice);
Generate("out/" + family + ".ttf", "", 4);

Close();


family = Mplus1m_kanji_circle;
family_name = Mplus1m_kanji_circle_name;
copyright_notice = copyright_mplus + copyright_marufix + copyright_ipa;
Open(Mplus1m);
## Mplus1m + Maru + IPA
MergeFonts(KanjiFont);
Select(0u3041, 0u309F, 0u30A0, 0u30FF);
Cut(); # delete all of HIRAGANA and KATAKANA
MergeFonts(MaruFont);
SetFontNames(family + "-Regular", family_name, family_name + " Regular", "Regular", copyright_notice);
Generate("out/" + family + ".ttf", "", 4);
Close();

完成品

参考文献