Firge フォントを使って LuaLaTeX でコードを書く
テキスト・エディタやターミナル・エミュレータ用の日本語が使えるフォントとして有名な白源(HackGen)だが,個人的にどうしても思い入れがあって今まで使わなかった1。 で,たまたま作者の方の Qiita 記事を目にしたのだが
とアナウンスされていた。 ありがとう! これが欲しかったんだよ。
というわけで早速 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}
これの組版結果はこちら。
ここで setmonofont
指定を以下のように変更する。
\setmonojfont[AutoFakeSlant,BoldItalicFeatures={FakeSlant},Scale=MatchLowercase]{FirgeNerd} % use FirgeNerd
\setmonofont[AutoFakeSlant,BoldItalicFeatures={FakeSlant},Scale=MatchLowercase]{FirgeNerd} % use FirgeNerd
この場合の組版結果は以下の通り。
小文字のエルとかで比べると分かりやすいだろうか。ただ日本語は Firge フォントじゃないっぽい。
これの HaranoAjiGothic-Regular は多分コードの「世界」の部分だよねぇ。理由は不明。
ついでなので HackGen フォントでも試してみようか。
\setmonojfont[AutoFakeSlant,BoldItalicFeatures={FakeSlant},Scale=MatchLowercase]{HackGenNerd} % use HackGenNerd
\setmonofont[AutoFakeSlant,BoldItalicFeatures={FakeSlant},Scale=MatchLowercase]{HackGenNerd} % use HackGenNerd
組版結果は以下の通り。
これなら違いが分かりやすいかな。
ふむむー。 個人の好みの問題なんだろうけど,これなら Inconsolata でも別にいいかなぁ。 やはりターミナル・エミュレータ用と割り切って使うほうがいいか。
ブックマーク
参考図書
- [改訂第8版]LaTeX2ε美文書作成入門
- 奥村晴彦 (著), 黒木裕介 (著)
- 技術評論社 2020-11-14
- 大型本
- 4297117126 (ASIN), 9784297117122 (EAN), 4297117126 (ISBN)
- 評価
2020年末に第8版が出てたのに気付かなかったよ。可能なら紙の本も買って常に側に置いておくのが吉。版元には PDF 版もある。