Firge フォントを使って LuaLaTeX でコードを書く

no extension

テキスト・エディタやターミナル・エミュレータ用の日本語が使えるフォントとして有名な白源(HackGen)だが,個人的にどうしても思い入れがあって今まで使わなかった1。 で,たまたま作者の方の Qiita 記事を目にしたのだが

HackGen の姉妹フォント “Firge (ファージ)” を試験的にリリースしました!
https://github.com/yuru7/Firge/releases

英数字部分に Mozilla 製 Fira Mono、日本語文字部分に HackGen と同じ源柔ゴシック(濁点等の修正も含む)、を適用しています。
HackGen の批判的な意見として多かった以下の点を満たすことを意識しました。

  • 0 はドットゼロではなくスラッシュゼロに。
  • | は破断線ではなく直線に。

とアナウンスされていた。 ありがとう! これが欲しかったんだよ。

というわけで早速 Windows Terminal (+ NYAGOS) と Ubuntu 機のターミナル・エミュレータに導入した。 あっ,あとブラウザの monospace の既定フォントね2

ちなみに Ununtu 機にフォントを入れる場合は

ディレクトリ 用途
/usr/share/fonts システムフォント
/usr/local/share/fonts 追加フォントをマシンで共有する場合
~/.fonts 個人で導入する場合

のいずれかにフォントファイルをコピーして(ディレクトリを掘ってもOK)

$ fc-cache -fv

でキャッシュを更新すれば OK。 確認は

$ fc-list | grep Firge
/usr/local/share/fonts/FirgeNerd/Firge35Nerd-Regular.ttf: Firge35Nerd:style=Regular
/usr/local/share/fonts/FirgeNerd/FirgeNerd-Bold.ttf: FirgeNerd:style=Bold
/usr/local/share/fonts/FirgeNerd/FirgeNerd-Regular.ttf: FirgeNerd:style=Regular
/usr/local/share/fonts/FirgeNerd/Firge35NerdConsole-Regular.ttf: Firge35Nerd Console:style=Regular
/usr/local/share/fonts/FirgeNerd/Firge35NerdConsole-Bold.ttf: Firge35Nerd Console:style=Bold
/usr/local/share/fonts/FirgeNerd/FirgeNerdConsole-Bold.ttf: FirgeNerd Console:style=Bold
/usr/local/share/fonts/FirgeNerd/FirgeNerdConsole-Regular.ttf: FirgeNerd Console:style=Regular
/usr/local/share/fonts/FirgeNerd/Firge35Nerd-Bold.ttf: Firge35Nerd:style=Bold

とすればよい。

で,この Firge フォントを使って $\mathrm{Lua\LaTeX}$ でコードを表示したいと思うよね。ね。

というわけで試してみよう。 なお TeX Live のインストールは先日書いた「改めて TeX Live を Ubuntu に(APT を使わずに)導入する」を参照のこと。

$\mathrm{Lua\LaTeX}$ でフォントを認識させるために luaotfload-tool --update でアップデートしておく。

$ luaotfload-tool --update

念の為の確認。

$ luaotfload-tool --fuzzy --find="FirgeNerd"
luaotfload | resolve : Font "FirgeNerd" found!
luaotfload | resolve : Resolved file name "/usr/local/share/fonts/FirgeNerd/FirgeNerd-Regular.ttf"

よしよし。

システムに Firge フォントをインストールしないのであれば $TEXMFLOCAL/fonts/ ディレクトリに適当に放り込んでおけばよい。 今回は $\mathrm{Lua\LaTeX}$ のみが対象なので CMAP ファイルとか面倒くさそうなのは華麗にスルーする(笑)

なお $TEXMFLOCAL ディレクトリは kpsewhich コマンドで調べられる。

$ kpsewhich -var-value=TEXMFLOCAL
/usr/local/texlive/texmf-local

ファイルを入れたら ls-R を更新するのを忘れないように。

$ mktexlsr
mktexlsr: Updating /usr/local/texlive/2021/texmf-config/ls-R... 
mktexlsr: Updating /usr/local/texlive/2021/texmf-dist/ls-R... 
mktexlsr: Updating /usr/local/texlive/2021/texmf-var/ls-R... 
mktexlsr: Updating /usr/local/texlive/texmf-local/ls-R... 
mktexlsr: Done.

念の為 kpsewhich コマンドで確認しておく。

$ kpsewhich FirgeNerd-Regular.ttf
/usr/local/texlive/texmf-local/fonts/truetype/FirgeNerd/FirgeNerd-Regular.ttf

確認したら luaotfload-tool --update も忘れないでね。

先日 TeX Live をインストールしたときに使ったサンプルコードは以下の通り。

\documentclass{jlreq}
\usepackage[jis2004,deluxe]{luatexja-preset} % Japanese fonts
\setmonofont[AutoFakeSlant,BoldItalicFeatures={FakeSlant},Scale=MatchLowercase]{Inconsolatazi4} % use Inconsolata

\usepackage{graphicx,xcolor}
% \usepackage{listings}
\usepackage{listings-golang} % import this package after listings
\lstset{
    frame=single,
    basicstyle=\small\ttfamily,
    tabsize=4,
    commentstyle=\color{darkgray},
    keywordstyle=\color{brown}\bfseries,
    stringstyle=\color{blue},
    showstringspaces=false
}

\begin{document}

\section{Go 言語による Hello World}

\begin{lstlisting}[language=Golang]
package main

import "fmt"

func main() {
    for i := 0; i < 10; i++ {
        fmt.Println("Hello, world") //Hello, 世界
    }
}
\end{lstlisting}

\section{シェルスクリプト}

\begin{lstlisting}[language=sh]
#!/bin/sh
for i in `seq 100`; do
  j="$i"
  if [ `expr $i % 3` == 0 ]; then echo -n 'Fizz'; j=''; fi
  if [ `expr $i % 5` == 0 ]; then echo -n 'Buzz'; j=''; fi
  echo "$j"
done
\end{lstlisting}

\end{document}

これの組版結果はこちら。

sample.pdf

ここで setmonofont 指定を以下のように変更する。

\setmonojfont[AutoFakeSlant,BoldItalicFeatures={FakeSlant},Scale=MatchLowercase]{FirgeNerd} % use FirgeNerd
\setmonofont[AutoFakeSlant,BoldItalicFeatures={FakeSlant},Scale=MatchLowercase]{FirgeNerd} % use FirgeNerd

この場合の組版結果は以下の通り。

sample2.pdf

小文字のエルとかで比べると分かりやすいだろうか。ただ日本語は Firge フォントじゃないっぽい。

プロパティ

これの HaranoAjiGothic-Regular は多分コードの「世界」の部分だよねぇ。理由は不明。

ついでなので HackGen フォントでも試してみようか。

\setmonojfont[AutoFakeSlant,BoldItalicFeatures={FakeSlant},Scale=MatchLowercase]{HackGenNerd} % use HackGenNerd
\setmonofont[AutoFakeSlant,BoldItalicFeatures={FakeSlant},Scale=MatchLowercase]{HackGenNerd} % use HackGenNerd

組版結果は以下の通り。

sample3.pdf

これなら違いが分かりやすいかな。

ふむむー。 個人の好みの問題なんだろうけど,これなら Inconsolata でも別にいいかなぁ。 やはりターミナル・エミュレータ用と割り切って使うほうがいいか。

ブックマーク

参考図書

photo
[改訂第8版]LaTeX2ε美文書作成入門
奥村晴彦 (著), 黒木裕介 (著)
技術評論社 2020-11-14
大型本
4297117126 (ASIN), 9784297117122 (EAN), 4297117126 (ISBN)
評価     

2020年末に第8版が出てたのに気付かなかったよ。可能なら紙の本も買って常に側に置いておくのが吉。版元には PDF 版もある。

reviewed by Spiegel on 2021-09-05 (powered by PA-APIv5)


  1. いや,大した思い入れでもないんだけど,新人(大昔)の頃は紙のコーディング・シートで書かされたこともあって,手書きのゼロは $\emptyset$ (empty set) なイメージなんだよねぇ。 ↩︎

  2. 私はテキスト・エディタは明朝体じゃないと目がしんどいので,英数字は Inconsolata だけど日本語部分は Noto Serif CJK JP にしている。どなたか明朝体の monospace を作ってください。 ↩︎