えびちゃんの日記

えびちゃん(競プロ)の日記です。

フォントを買いました

リーダブルコードなどの本で使われているフォントを買いました.

TheSansMono Condensed と呼ばれるフォントで,LucasFonts というサイトから購入することができます. 作者は Windows で使われがちな等幅フォントConsolas をデザインした人です.

このフォントを知ったのは何年か前だったんですが,お値段がわりと高いので当時は購入をためらっていました. 太さが 8 種類用意されていて,各々に italic かどうかの 2 種類があり,合計 16 個購入すると 364 ユーロになるんですが,冷静に考えてそんなに使わないので,太さ 3 種類の非 italic のみを買うことにしました. 同じ family で太さなどが異なるフォントを複数買うと割引が発生するシステムらしくて*1,60+34+29 = 123 ユーロになりました. PayPal を通して支払いを済ませて 10 分ほど待つと DL できる状態になりました*2

TeX で使いたい

これを TeX で使えるようにしたくて,一日ほど格闘したので,そのメモをします.

まず,このフォントは CFF-flavoured の OpenType 形式で,TeX では直接扱えない形式なので,変換をします.

cfftot1 TheSansMonoCd-W5Regular.otf TheSansMonoCd-W5Regular.pfb

また,他に必要になるファイルも作っていきます.

otftotfm -e ec.enc --verbose -n thsmcr-t1 TheSansMonoCd-W5Regular.otf

ここで -e オプションはエンコーディングを指定していて,ec.enc は T1 エンコーディングに対応するものらしいです.

さらに -fss02 などのオプションを指定するとデフォルト以外のグリフを利用することもできます.数字の高さが変わったり,g, y, G, Q などの字形が変わったりします. -f の引数にできる文字列は以下のコマンドの出力からわかります.

otfinfo -f TheSansMonoCd-W5Regular.otf

また,どのようなグリフが存在しているかは以下のコマンドの出力からわかります.

otfinfo -g TheSansMonoCd-W5Regular.otf | less

.enc ファイルの中身と otfinfo -g の出力を見比べながら,自分の好きなグリフを指定する .enc を作成し,それを渡すことで自由度が増しそうです.望ましい方法ではない気もします.書き方は,ファイルを開くとエスパーできると思います.

^ は上段,*~ は中段にいてほしかったんですが,-fss02 を指定するとそれらすべてが中段に行ってしまって困ったので,thsmc-t1.enc を作ってそこに書きました.

で,otftotfm を実行するとカレントディレクトリに a_nyanya.enc のようなファイルが作成されます. nyanya の部分はたぶんハッシュで,中身によって変わります.

cid-x.map に,次のような内容を追記します.dvipdfmx に読まれるやつのはず?

thscr-t1--base a_nyanya.enc TheSansMonoCd-W5Regular.pfb

フォントのインストール作業はざっくりこれで終わりです.

記号もいい感じに欲しくなるので,TS1 エンコーディングについても同様の処理を行います. q-ts1.encq-ts1-uni.enc の内容を参考にしながら書き換えたりして,いい感じのファイルを用意します. 場所がわからなければ以下のコマンドを叩きます.

kpsewhich q-ts1.enc

直接次のように開くこともできます.

emacs $(kpsewhich q-ts1.enc)

うまくできたら,thsmc.sty を作って以下のようなことを書きます.

\DeclareFontFamily{T1}{thsmc}{}
\DeclareFontShape{T1}{thsmc}{m}{n}{<-> thsmcr-t1}{}
\DeclareFontShape{T1}{thsmc}{bx}{n}{<-> thsmcb-t1}{}

\DeclareFontFamily{TS1}{thsmc}{}
\DeclareFontShape{TS1}{thsmc}{m}{n}{<-> thsmcr-ts1}{}
\DeclareFontShape{TS1}{thsmc}{bx}{n}{<-> thsmcb-ts1}{}

\renewcommand*{\ttdefault}{thsmc}

\usepackage{thsmc} などをするとフォントを変更することができます.

listings を使うときは以下のような設定をしておくと見栄えがよくなります.

\usepackage{textcomp}
\lstset{
  keepspaces=true,
  flexiblecolumns=true,
  showstringspaces=false,
  upquote=true,
  basicstyle=\ttfamily,
}

詳しくはドキュメントを見るとよいです.

texdoc listings

listings より minted の方がいいという話も聞くのでそうするかもしれません.

2019/05/12 追記

italic のフォントも買いました && minted を使ってみました.

おわり

にゃん.どこに需要があるのかわからない記事でした.

*1:別々のタイミングで買った場合でも割り引いてくれるようです.やさしい.

*2:フォントを買うのは初めてだったので,待っている間はちょっと不安でした.