フォントの話、Source Han Code JP と Ricty Diminished

最近本当に目が悪くなってきたため、モニターの小さな字を見るのがちょっと辛くなってきました。

その都度、エディタやターミナルのフォントを大きくしようかなと思い、フォント設定を変えてみたりしてたのですが、どーもしっくりこなくてすぐに、FixedSys に戻してしまうということを繰り返していました。

ちなみに、エディタは『秀丸エディタ』、ターミナルは『TeraTerm』です。

ですが、いよいよ文字が読みづらくなってきたため、やっぱり大きい文字にしようかなと思い立ち、グーグル先生に良いフォントが無いか聞いてみました。

そーすると、『xxxx年度版 コーディングフォント n 選』みたいなページがいくつも出てきまして、まぁそれらをみながら色々フォントをダウンロードして試してみました。

で、最初に選んだのが、『Source Han Code JP(源の角ゴシック)』です。

Source Han Code JP(源の角ゴシック)

ダウンロードしたフォントファイルに太さ別に7段階あり、ExtraLight, Light, Normal , Reguler, Middum, Bold, Heavy から選べます。このうち私 Light を選択しました。

これには理由があります。

過去に『どーもしっくりこなくて』戻した理由ですが、いずれも太すぎるためです。TTフォントって正直太すぎなのです。大きくすればするほどその太さが協調されてしまうわけです。大きくしたいだけで太くしたいわけでは無かったのです。 あまり太いと大げさかもしれませんが、ちょっとまぶしいんです。 乱視の為でしょうか...

ですから、このフォントの ExtraLight, Light です。大きくなっても太くならない。

よいでしょ。

でもダメでした。

しばらく使ってコーディングしていたのですが、なんか変です。

そう『秀丸エディタ』で文字のズレが発生し、TABルーラーと合ってないんです。

A<tab>B<tab>C<tab>D

A<sp3>B<sp3>C<sp3>D

とが ズレるのです。

これは痛い。特に保存時に TAB->SP 変換をしているため、保存してもう一度あけると、文字の位置が思ってたのと違ってたり、えぇぇぇ。なんで?となるわけです。

またズレ方も、フォントサイズが12ptだと SP幅が狭く、14ptだと微妙に合わず、16pt以上だと、SPが広くなり、ちょっとメンドクサイずれ方をするのです。

これはちょっとなと思い『秀丸エディタ』作者様の方へ相談してみたところ、 色々アドバイス頂いたり、対策を検討していただけるようなお返事をいただきました。(サイトー企画の斉藤秀夫様。ありがとうございます。)

しかーし。悪いのは『秀丸エディタ』ではない!このフォントがわるいのではないのか?っと思ってしまったら、もーなんか使いたくなくなってしまいました。

これが昨日までの話

ここからが半日苦労した話

Ricty Diminished

第二候補の Ricty Diminished です。

Ricty DiminishedはInconsolataと日本語フォントであるCircle M+ 1mを組み合わせたフォントです。』とあります。

ですがこのフォント、当然先ほど説明した通り、太いんです。

どーしよーかねーと思ってたところ、このフォントは同じ作者の Ricty がベースとなっていることが分かりました。

Ricty

rictyfonts.github.io

こちらのサイトをよく読むと、生成方法 というセクションに、 ricty_generator.sh というスクリプトで Inconsolata と M+ と IPA の合成フォント から 作る とあります。

えっ、自分で作れるの?

実は、最初にぐぐってるときに Inconsolata もちょっと調べてて、Inconsolata にも、太さ違いがあるのは分かってたのです。

fonts.google.com

ってことは、もしかして細い Inconsolata を使えばいいんじゃないか?

なんてことを思い至りました。

マイRicty

Ricty を動かしてみました

これが半日苦労した話の本題です。最初は1時間くらいでできるのだろーと思っていたのですよ。

例によって、うちの鯖である CentOS8 で、Ricty の生成方法にあるやり方を試してみました。

fontforge が入っていなかったので、インストールして実行します。

# sh ricty_generator.sh auto
Ricty Generator 4.1.1

Copyright (c) 2011-2017 Yasunori Yusa
All rights reserved.

This script is to generate Ricty font from Inconsolata and Migu 1M.
The generated fonts are licensed by both SIL Open Font License (OFL)
Version 1.1 and IPA Font License Agreement v1.0.
Due to OFL 1.1 Section 5, it is PROHIBITED to distribute the generated fonts.

Generate modified Inconsolata
Open ./Inconsolata-Regular.ttf
Remove ambiguous glyphs
Clear instructions
Save Modified-Inconsolata-Regular.sfd
Open ./Inconsolata-Bold.ttf
Remove ambiguous glyphs
Clear instructions
Save Modified-Inconsolata-Bold.sfd
Generate modified Migu 1M
Open ./migu-1m-regular.ttf
Scale down all glyphs (it may take a few minutes)
Clear instructions
Save Modified-migu-1m-regular.sfd
Open ./migu-1m-bold.ttf
Scale down all glyphs (it may take a few minutes)
Clear instructions
Save Modified-migu-1m-bold.sfd
Generate Ricty
ricty_generator.sh: 1100 行: 376309 中止                  (コアダンプ) $fontforge_command -script ${tmpdir}/${ricty_generator} 2> $redirection_stderr
Remove temporary files
Abnormally terminated

えーーーー!!!コアダンプって、シェルスクリプトで....

いろいろ調べてみますと、ricty_generator.sh で、fontforge に食べさせるスクリプトを作っているのですが、どーも fontforge 特定のコマンドで落ちる みたいなのです。で、なんか SetFontNames ってコマンドがいかんらしいことに気が付き

# diff -u  ricty_generator.sh.orig ricty_generator.sh
--- ricty_generator.sh.orig     2020-07-04 17:36:54.642050953 +0900
+++ ricty_generator.sh  2020-07-04 18:11:08.462849488 +0900
@@ -606,19 +606,19 @@
     Reencode("unicode")

     # Set configuration
-    if (fontfamilysuffix != "")
-        SetFontNames(fontfamily + fontfamilysuffix + "-" + fontstyle_list[i], \\
-                     fontfamily + " " + fontfamilysuffix, \\
-                     fontfamily + " " + fontfamilysuffix + " " + fontstyle_list[i], \\
-                     fontstyle_list[i], \\
-                     copyright, version)
-    else
-        SetFontNames(fontfamily + "-" + fontstyle_list[i], \\
-                     fontfamily, \\
-                     fontfamily + " " + fontstyle_list[i], \\
-                     fontstyle_list[i], \\
-                     copyright, version)
-    endif
+#    if (fontfamilysuffix != "")
+#        SetFontNames(fontfamily + fontfamilysuffix + "-" + fontstyle_list[i], \\
+#                     fontfamily + " " + fontfamilysuffix, \\
+#                     fontfamily + " " + fontfamilysuffix + " " + fontstyle_list[i], \\
+#                     fontstyle_list[i], \\
+#                     copyright, version)
+#    else
+#        SetFontNames(fontfamily + "-" + fontstyle_list[i], \\
+#                     fontfamily, \\
+#                     fontfamily + " " + fontstyle_list[i], \\
+#                     fontstyle_list[i], \\
+#                     copyright, version)
+#    endif
     SetTTFName(0x409, 2, fontstyle_list[i])
     SetTTFName(0x409, 3, "FontForge 2.0 : " + \$fullname + " : " + Strftime("%d-%m-%Y", 0))
     ScaleToEm(860, 140)
@@ -864,10 +864,10 @@
 # Open file and set configuration
 Open(filename)
 Reencode("unicode")
-SetFontNames(inputfamily + familysuffix + "-" + inputstyle, \
-             \$familyname + " " + familysuffix, \
-             \$familyname + " " + familysuffix + " " + inputstyle, \
-             inputstyle)
+# SetFontNames(inputfamily + familysuffix + "-" + inputstyle, \
+#             \$familyname + " " + familysuffix, \
+#             \$familyname + " " + familysuffix + " " + inputstyle, \
+#             inputstyle)
 SetTTFName(0x409, 3, "FontForge 2.0 : " + \$fullname + " : " + Strftime("%d-%m-%Y", 0))

 # " -> magnified "

こんなパッチをあててみたところ、途中まで動いて ttf ファイルができるようになりました。

でも、このパッチをあてると作者の copyright を故意に消すようなことになってしまいます。せっかくステキなスクリプトを作ってくれてるのに悪いですよねぇ....

ricty_generator.sh をググってみる

コアダンプで落ちる件を検索してみたのですが、なかなか見つかりませんでした。 というより、他の皆さんはちゃんとできてる んです。

こちらの方のブログが一番参考になりました。しかもつい数か月前の話ではないですか!

anime-sunpyo.jp

ふむふむ、Windows, Docker, ubuntu か...

この手の自分でビルドする系では、たいてい ubuntu ですよね。RedHat / CentOS 系って、手作業ビルドにむいてないですもんね...

でも Docker っての使えば、私の CentOS8 上で ubuntu 動くよね。

CentOS8 に Docker 入れてみたが挫折

で、早速 Docker を入れてみました。 これもまた、他者さんのまとめ記事をみながら、CentOS8 に Docker を導入。 ubuntu の Image を導入して、まったくDocker無知なのに、えいっと起動。

ここまではすんなりいったんです。 yum update でこけました。

ここから沼ってきました。以下の話はかなり端折ってます。

またまた色々やってみたのですが、どーやらDNS解決ができなくてホスト名が引けないよーです。 しかも Docker の ubuntuイメージには、本当に最小コマンドしか入ってなくって、ping すら入っていない。なにを試すにもコマンドがはいっていない....

しかたないので、centos8イメージをダウンロードしてきました。こちらは ping が入っていました。

で、ping IPアドレス だとちゃんと ping が通るのに、ping ホスト名 だとダメです。 /etc/resolve.conf を修正したり、ホストの firewall 触ったりしてみたのですが、すぐには解決しなさそうです。

うーん。そもそも Docker と格闘するって話ではなかったのですが、どんどん遠回りになってきました。

しかも ubuntucentos も、中身なーんにもはいってなくて、apt-get も yum も動かないんじゃ、なーんもできない。イライラマックスです。

ここまでで晩御飯の時間になり、頭が沸騰してしまいましたので、いったん休憩しました。

Windows10 WSL の ubuntu で試す。

Docker とは、どっかでまた勝負します。(うまいこと言った!)

Docker 自体は本題ではないので、とりあえずなにがしか ubuntu を最短時間で動かしたい。でもVMとかでのインストールメンドクサイ。

っとちょっとググっていると、Windows10 WSL の ubuntu が簡単そーだと知りました。

早速やってみたところ、確かに短時間で ubuntu が起動しました。ダウンロード時間はちょっとありましたけど、設定とか何にもしなくてログイン状態まで行ったのですから驚きです。

またこの ubuntu ですが、/mnt 配下に、ホストの windowsc:d: がマウント済みです。ubuntu 側から簡単にホストの windows ディレクトリが操作できます。こりゃいいや。

で、先の ricty_generator.sh を動かしてみると、あっさり完動! やったぜ

マイRictyの実際

先ほど紹介しました方のページにあるとおり、

  • ricty_generator.sh で Ricty フォントを作る
  • fontforge の結果では、フォント幅がおかしいので調整する

というステップが必要となります。

また私としては、Inconsolata-ExtraLight.ttf または、Inconsolata-Light.ttf と、migmix-1m-regular, migmix-1m-bold の組み合わせが使ってみたかったので、以下のような感じで実行してみました。

sh ./ricty_generator.sh -d "07DZz\"\`" -n -zuntan-el_ Inconsolata-{ExtraLight,Regular}.ttf migmix-1m-{regular,bold}.ttf
sh ./ricty_generator.sh -d "07DZz\"\`" -n -zuntan-l_  Inconsolata-{Light,Regular}.ttf      migmix-1m-{regular,bold}.ttf
sh ./ricty_generator.sh -d "07DZz\"\`" -n -zuntan-r_  Inconsolata-{Regular,Bold}.ttf       migmix-1m-{regular,bold}.ttf

for P in Ricty*.ttf; do
  ttx -t OS/2 "$P"
  sed -i.bak -e 's,xAvgCharWidth value="934",xAvgCharWidth value="505",' "${P%%.ttf}.ttx"
  mv "$P" "${P%%.ttf}.org.ttf"
  ttx -m "${P%%.ttf}.org.ttf" "${P%%.ttf}.ttx"
done

ちょっとテコ入れしたところは、07DZz\"\` -n -zuntan-XX_ value="934" value="505" です。

とくに、value="934" は、使ったフォントが違ったため、参考にした先の値とは違います。また、value="505" も Inconsolata のバージョンが違うためか、参考にした先の値とは違っています。それらを合わせるためには以下のコマンドを事前に実行しました。

for P in Inconsolata-*.ttf migmix-1m-*.ttf; do
 ttx -t OS/2 "$P"
done
grep xAvgCharWidth *ttx

これで目的のフォントが完成しました。

やったー。ここまででもう21時です。

fontforge のバージョン確認

一応 CentOS8 と ubuntufontforge を確認してみます。

  • CentOS8
# cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)

# fontforge --version
Copyright (c) 2000-2014 by George Williams. See AUTHORS for Contributors.
 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
 with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
 Based on sources from 18:43 UTC 24-Apr-2020-ML-D.
 Based on source from git with hash:
no xdefs_filename!
TESTING: getPixmapDir:/usr/share/fontforge/pixmaps
TESTING: getShareDir:/usr/share/fontforge
TESTING: GResourceProgramDir:/usr/bin
trying default theme:/usr/share/fontforge/pixmaps/resources
fontforge 18:43 UTC 24-Apr-2020
libfontforge 20200424
$ cat /etc/os-release
NAME="Ubuntu"
VERSION="20.04 LTS (Focal Fossa)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 20.04 LTS"
VERSION_ID="20.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=focal
UBUNTU_CODENAME=focal

$ fontforge --version
Copyright (c) 2000-2020. See AUTHORS for Contributors.
 License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
 with many parts BSD <http://fontforge.org/license.html>. Please read LICENSE.
 Version: 20190801
 Based on sources from 03:10 UTC  6-Mar-2020-ML-D-GDK3.
fontforge 20190801
build date: 03:10 UTC  6-Mar-2020

ふむふむ。ubuntu の方がちょっと古いもののように見受けられます。fontforge さーん。バグ入れちゃったみたいですよぉ~

訂正 : 確認方法がまずかったようです。

  • CentOS8
$ dnf info fontforge
メタデータの期限切れの最終確認: 0:03:56 時間前の 2020年07月05日 16時51分54秒 に実施しました。
インストール済みパッケージ
名前         : fontforge
バージョン   : 20170731
リリース     : 14.el8
Arch         : x86_64
サイズ       : 18 M
ソース       : fontforge-20170731-14.el8.src.rpm
リポジトリー : @System
repo から    : PowerTools
概要         : Outline and bitmap font editor
URL          : http://fontforge.github.io/
ライセンス   : GPLv3+
説明         : FontForge (former PfaEdit) is a font editor for outline and bitmap
             : fonts. It supports a range of font formats, including PostScript
             : (ASCII and binary Type 1, some Type 3 and Type 0), TrueType, OpenType
             : (Type2) and CID-keyed fonts.
$ apt-cache show fontforge
Package: fontforge
Architecture: amd64
Version: 1:20190801~dfsg-4
Multi-Arch: foreign
Priority: optional
Section: universe/x11
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian Fonts Task Force <debian-fonts@lists.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 129
Depends: fontforge-common (= 1:20190801~dfsg-4), libfontforge3 (= 1:20190801~dfsg-4), libgdraw6 (= 1:20190801~dfsg-4), libc6 (>= 2.2.5)
Suggests: fontforge-doc, fontforge-extras, potrace, python3-fontforge
Conflicts: fontforge-nox
Filename: pool/universe/f/fontforge/fontforge_20190801~dfsg-4_amd64.deb
Size: 25896
MD5sum: 06f29ed81385986dfaa2eca51d489a82
SHA1: ddb7360b5efa2e355670b6051c9669fc4f1f341c
SHA256: e22a1f561183cf26372ba0ae01bed5c4615b77ad9ca361300837758d8cc448d8
Homepage: https://fontforge.github.io/en-US/
Description-en: font editor
 FontForge is a font editor.
 Use it to create, edit and convert fonts
 in OpenType, TrueType, UFO, CID-keyed, Multiple Master,
 and many other formats.
 .
 This package also provides these programs and utilities:
  fontimage - produce a font thumbnail image;
  fontlint  - checks the font for certain common errors;
  sfddiff   - compare two font files.
Description-md5: 4ebffb1f6ab9a1d49bd81ce04ad8a0a7
Task: ubuntustudio-publishing

CentOS8 の方は 20170731 とあり、ubuntuの方は 20190801 とあります。CentOS8 の方は、かなり古いみたいです。

マイRictyの見栄え

最後に、どんな見栄えになったかです。

  • Inconsolata-Regular (400) + migmix-1m-regular

f:id:zuntansan:20200705005131p:plain

  • Inconsolata-Light (300) + migmix-1m-regular

f:id:zuntansan:20200705005139p:plain

  • Inconsolata-ExtraLight (200) + migmix-1m-regular

f:id:zuntansan:20200705005141p:plain

私としましては、Inconsolata-Light がちょうどいい感じですね。比べると Inconsolata-Regular でもいい気がするのですが、ちょっと強いかなぁ。Inconsolata-ExtraLight はちょっと薄すぎですね。ははは。

で、『秀丸エディタ』では Inconsolata-Light、『TeraTerm』では Inconsolata-Regular にすることにしました。

ああ、半日以上かかってやっと満足した結果が出せました。よーし。ビール飲むぞ!

追記

Inconsolata と Circle M+ 2m の組み合わせに変更しました。