5c-Yen Gothic Mono Version 1.0.1 1. このフォントについて "5c-Yen Gothic Mono"は Unicodeコードポイント [0x5c] に"YEN SIGN"のGryphを割り当てた ゴシック体の 等幅フォント です。 WPFベースのテキストエディターで使用するために"Noto Sans CJK JP"の等幅 フォントを改変しました。 "Noto Sans CJK JP"はGoogleとAdobeが開発したフリーのフォントです。 https://www.google.com/get/noto/help/cjk/ Adobe版は"Source Han Sans"の名称で配布されています。 (等幅フォントは含まれていないようです) https://github.com/adobe-fonts/source-han-sans Notoフォントを改変可能なライセンスで公開しているGoogle,Adobeに感謝します。 "Noto"はGoogleのTrademarkで、他の派生フォントを参照すると名称は 変更するのが通例のようです。(必須なのかはわかりません) フォントに埋め込まれている著作権表示はオリジナルのままにしています。 -------------------------------------------------------------------------- ※[0x5c]は使用するフォントによって表示が変わるので、このファイルでは 半角バックスラッシュ :"REVERSE SOLIDUS" 半角日本円マーク :"YEN SIGN" と表記します 国際的にはUnicodeコードポイント [0x5c] に"REVERSE SOLIDUS"のGryphを 表示するのが標準のようです。    "MS Gothic"や"Meiryo"などの日本語フォントでは [0x5c] に"YEN SIGN"が 割り当てられています。 (おそらく商用の日本語フォントは[0x5c]に"YEN SIGN"を表示するのでしょう。) フリーのものではIPAフォントが[0x5c]に"YEN SIGN"を表示します。 Noto(Source Han Sans)の派生フォントでは [0x5c] に"REVERSE SOLIDUS"を 表示するようです。(全ての派生フォントを調べたわけではありません。) -------------------------------------------------------------------------- 矩形選択が可能なテキストエディターには個人的に等幅フォントが欠かせません。 しかしWPFではFixedSys,Terminalといったラスターフォントが使えません。 そうするとWindowsの標準フォントでは"MS Gothic","MS Mincho"しか残りません。 "MS Gothic"は比較的小さなサイズでは綺麗に描画されないように感じます。 16pt前後で急にフォントの太さが変わったり、 背景色がグレー(テキストエディターで編集不可)の場合に輪郭がぼやけて見えます。 IPAフォントも12-14ptぐらいのサイズで輪郭がガタガタして見えることがあります。 (上記は液晶モニターやClear Typeの設定、主観に依存するかもしれません。) コーディング用途なら[0x5c]に"REVERSE SOLIDUS"がよいのですが、 日本語でメモを書く場合、金額の前に"REVERSE SOLIDUS"が表示されると 違和感があり、既存の"Noto","Source Han"派生フォントは選択肢から外れました。 結局満足できる見栄えのフォントを見つからず、改変作業となりました。 同じように感じて、フォント探しをしている人は試してみてください。 個人的に気になっている点は以下の通りです。 a. Regularが"Meiryo"や"MS Gthic"に比べてちょっと太い b. "<",">" がもうちょっと縦方向に開いているほうがいい c. ファイルサイズが大きい(対策として文字数を削減) 2. ライセンス、免責事項 Notoフォントと同じ、SIL OPEN FONT LICENSE Version 1.1 です。 同梱した[LICENSE_OFL.txt]または下記を参照してください。 This license is copied below, and is also available with a FAQ at: http://scripts.sil.org/OFL 上記ライセンスにも同様の記載があると思いますが、念のため。 このフォントの使用によって発生する損害等について一切の責任を負いません。 フォントに関する専門的な知識を持った人間が改変作業をした訳ではありません。 利用は自己責任でお願いいたします。 (文字列を操作する簡単なスクリプトを書ける人であれば [4. 謝辞、参考にしたサイト等] の記載を参照して自作したほうが安心できるかもしれません。) 3."Noto Sans Mono CJK JP"からの変更概要 下記のttx,pyftsubsetはfonttoolsに含まれています。 https://github.com/fonttools/fonttools 以下「ttxで編集」は"ttx -t "でダンプ->内容を編集->"ttx -m"で反映の略。 a.フォント名称の変更 "Noto"はGoogleのTrademarkで、他の派生フォントを参照すると名称は 変更するのが通例のようです。(必須なのかはわかりません) フォントに埋め込まれている著作権表示はオリジナルのままです。 ttxでフォントのnameテーブルを編集してフォント名称を変更。 無意味かもしれませんが、langID="0x411"(日本語)のエントリを langID="0x409"(米語)をコピーして追加しています。 Version 1.0.1での追加変更 フォントのNaming Tableには"Subfamily name"という項目が 複数出現します。 nameID="2"には下記のようなマナーがあるようなので、 https://docs.microsoft.com/en-us/typography/opentype/spec/name#name-ids Font Subfamily names would reflect one of the four basic styles, regular, italic (or oblique), bold, and bold italic (or bold oblique). To be compatible with the broadest range of platforms and applications, it is strongly recommended that fonts should limit use of Font Family in this manner. nameID="2"は(元のまま)RegularもしくはBoldとしました。 nameID="2"以外に関しては"Regular"ではなく、"Normal"を使用しました。 元がRegularのファイルにはnameID="17"が存在しませんが追加しました。 "Noto Sans Mono CJK JP"だけを扱っていれば上記は余計な変更でしょう。 1.0.1で"Noto Sans CJK JP"(プロポーショナルフォント)の5c-Yenフォントを作成した際に、WPFのFontWeight,ファイル名との一貫性を考慮して上記の仕様にしました(ファイル名もRegularではなく、Normalを使っています)。 おそらくOSにインストールして使うだけであれば何の影響もないと思います。 1.0.1をインストールする場合は先に1.0をアンインストールしてください。 b.[0x5c]に割り当てるGryphの変更 前述の通り"REVERSE SOLIDUS"から"YEN SIGN"へ。 ttxでフォントのcmapテーブルを編集。 c.行間の変更 行間が広く感じたので、"g"の下に漢字が来た場合に若干の間が空く程度に。 ttxでフォントのOS/2,hheaテーブルを編集。 d.収録するコードポイントの削減 "5c-Yen Gothic Mono 932" Codepage 932と"Noto Sans CJK JP"に共通するコードポイントを収録 "5c-Yen Gothic Mono JP" "5c-Yen Gothic Mono 932"のコードポイントに加えて、 "MS Gothic", "Meiryo"等のコードポイントとNoto Sans CJK JP"に 共通するコードポイントを収録 pyftsubsetを使用。 e.収録するコードページの修正 ttxでフォントのOS/2テーブルを編集して下記コードページに対応するフラグを Off。 ( 936) Chinese: Simplified chars--PRC and Singapore ( 949) Korean Wansung (1258) Vietnamese (1361) Korean Johab "Noto","Source Han Sans"派生フォントでここを修正していない場合がある ようです。 あまり参照されないものなのでしょうか。 4. 謝辞、参考にしたサイト等 Notoフォントを改変可能なライセンスで公開しているGoogle,Adobeに感謝します。 "Noto Sans CJK JP"はGoogleとAdobeが開発したフリーのフォントです。(再掲) https://www.google.com/get/noto/ fonttoolsやその使い方を公開している方々にも感謝します。 ttx,pyftsubsetはfonttoolsに含まれています。(再掲) https://github.com/fonttools/fonttools フォントの各種テーブルの解説 にせねこメモ フォントの気持ちになる https://nixeneko.hatenablog.com/entry/2016/10/08/001900 ttxおよびGryhpの置換について itouhiroはてなブログ TTXを使用してTrueTypeフォントのcmapテーブルを修正 http://itouhiro.hatenablog.com/entry/20141004/font 行間調整 blog.kaorimatz.org ターミナル上のテキストの行送り幅を調節する http://blog.kaorimatz.org/2013/12/14/adjust-line-spacing-for-text-on-terminal.html 収録コードポイントの削減 ureta.net OpenTypeフォントの軽量化と自動カーニング https://ureta.net/2017/02/tool_fonttools/ 作業に使用したオプションは上記サイトと異なり、下記のとおりです。 (xxxx.datは例です、入力フォントと出力ファイル名の指定は省略) --unicodes-file=xxxx.dat --layout-features='*' --drop-tables= --name-IDs='*' --name-legacy --name-languages='*' --glyph-names --symbol-cmap --legacy-cmap CP932の資料 [UNICODE-BESTFIT] http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/bestfit932.txt WCTABLEに記載されているコードポイントを参照 上記ファイルの説明 http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WindowsBestFit/readme.txt コードページのフラグ OS/2 — OS/2 and Windows Metrics Table https://docs.microsoft.com/ja-jp/typography/opentype/spec/os2#cpr ulCodePageRange1 Bits 0–31 ulCodePageRange2 Bits 32–63 作業はおもにWindows上で行いましたが、pyftsubsetを使用する作業は Xubuntu 18.04で行いました。この作業以外でもお世話になっています。 https://xubuntu.org/ ※ver1.0.0はXubuntuを使いましたが、ver1.0.1はWindows 8.1にpythonとfonttoolsをインストールして作業しました。 必須ではないのですが、CodePageの確認などで "フォントインストーラーSAKURA"を使わせて頂きました。 http://tam.vni.jp/soft/sakura/sakura.html 他に下記も使わせて頂いております。 Font Viewer Plus http://marius.main.jp/software/software_details/FontViewerPlus/ フォントセレクター http://oms.la.coocan.jp/selfont.html 5. その他情報 OS/2テーブル Unicode Character Range ulUnicodeRange1 (Bits 0–31) ulUnicodeRange2 (Bits 32–63) ulUnicodeRange3 (Bits 64–95) ulUnicodeRange4 (Bits 96–127) https://docs.microsoft.com/ja-jp/typography/opentype/spec/os2#ur こちらは pyftsubset が自動的に変更するようです。作業不要でした。 OS/2 テーブル panose/bProportion Table 23 : bProportion https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6OS2.html これは失敗した話です。 フォント管理ツールで等幅フォントとして認識させようとしてbProportionの 値を'9':Monospaced に変更したところ、半角文字が全角と同じスペースを 占めるようになり、元の値'0':Any に戻しました。 (字面は半角のままで横の余白が増加、等幅フォントとして認識はされました。) IPA Gothich は '9':Monospaced なのですが、半角は半角の幅で表示されます。 otfとttfの違いなのか、別のパラメータを変更する必要があるのわかりません でした。 Windowsでは参照しない?ようですが、PostテーブルにisFixedPitchという 項目があります https://docs.microsoft.com/ja-jp/typography/opentype/spec/post その他の失敗作業 サブセットフォントメーカー https://opentype.jp/subsetfontmk.htm 作成自体はできますが、注意事項にある通り 「フォントが、ヒント(OpenTypeフォントの場合)、カーニング情報、ビット マップデータ、OpenType機能を持っている場合、それらは削除されます。」 描画があまり美しくありません。 また少ない文字数でしか試していません。 (どのくらいの文字数まで対応しているのか不明) fontforgeを使用する方法は失敗しました。試したのは下記2つの方法。 やり方、環境が悪かっただけかもしれません。 (著者の方にクレームをつける意図はありません。) a.必要なグリフだけを残してフォントの容量を削減 https://qiita.com/YosukeM/items/086f902c1f3748fca083 b.fontforge でフォントのサブセットを生成する - Möbius Flyer https://blog.alprosys.com/2016/03/28/genwebfonts/ (記憶不確です。書いていたメモが残っていない。今は接続エラー? こちらはfontforgeのpython-bindingを使っていますが上記と基本的に同等) またFontforgeのGUIも使ってみましたが、Noto Font読み込み時にエラーが発生 データファイルが不足しているようですが、解決方法がわかりませんでした。 6. 雑感 よくあることですが、最も苦労したのはWeb検索で自分の必要な情報を探り当てる ことでした。 (検索でヒットが多いのはWebで使用するために比較的少ない文字数を保持する サブセット化に関する情報でした。実際にやっている人が多いのでしょう。) ここに記載した情報が、必要としている人には必要とすぐに判断でき、 必要としない人にはすぐに不要と判断できるものになっているとよいのですが。 以上