LuaTeXで原ノ味フォントを使う

> これは「[TeX ＆ LaTeX Advent Calendar 2019](https://adventar.org/calendars/4087)」の8日目の記事です。
> 7日目の記事は[やまいも](https://adventar.org/users/8455)さんの「[jlreqでの箇条書きのインデント調整に関して。](https://yamaimo.hatenablog.jp/entry/2019/12/07/200000)」です。9日目の記事は[munepi](https://adventar.org/users/3226)さんです。

本記事ではTeX Liveの環境に[原ノ味フォント](https://github.com/trueroad/HaranoAjiFonts)をインストールして LuaLaTeX で使うまでを簡単に紹介します。

2020年4月11日更新：原ノ味フォントがTeX Liveに収録され、TeX Live2020からデフォルトの日本語フォントになりましたので、これらを反映しました。

## はじめに

原ノ味明朝・原ノ味角ゴシック（[原ノ味フォント](https://github.com/trueroad/HaranoAjiFonts)）は、源ノフォント（源ノ明朝・源ノ角ゴシック）を従来の日本語フォントと同様の構成に組み替えることによって、各種TeXエンジンなどで使いやすくしたフォントです。

源ノフォントは、明朝・ゴシック双方で豊富なウェイト数が揃っていて、和文に使えるフォントです。そして、これらは実用的な品質である上にオープンソースであるという、他にはない特徴をもった大変ありがたいフォントです。しかし、従来の日本語フォントとは仕組みが異なる部分があるため、各種TeXエンジンやいくつかのアプリケーションでは利用が難しいことがあります。

（この辺の細かいことは「[原ノ味フォントとToUnicode CMap](https://github.com/trueroad/tr-TeXConf2019)」で説明していますので、ご興味がある方はご覧ください。）

原ノ味フォントは2020年2月にTeX Liveに収録されました。ですのでTeX Live 2019 frozenやTeX Live 2020以降であればインストールされますが、それ以前の環境[^previous-environment]では自分でダウンロードしてインストールする必要があります。本記事では原ノ味フォントのインストールとLuaLaTeXで使うまでを簡単に紹介します。TeX Liveは既にインストールされていて使えるようになっているところからスタートします。

[^previous-environment]: TeX Liveを更新すれば原ノ味フォントもインストールされるのですが、原ノ味フォントが収録される少し前にLaTeXの大幅な変更が入ったようなので更新せずにそのまま使う方がよい場合も多々あると思います。

## 既にインストールされているか確認

環境によっては原ノ味フォントが既にインストールされている場合もありますので確認してみましょう。TeX Liveを使用するユーザでコンソールやコマンドプロンプトなどを開き、以下のコマンドを実行してみます。

`kpsewhich HaranoAjiMincho-Light.otf`
`kpsewhich HaranoAjiMincho-Regular.otf`
`kpsewhich HaranoAjiMincho-Bold.otf`
`kpsewhich HaranoAjiGothic-Regular.otf`
`kpsewhich HaranoAjiGothic-Bold.otf`
`kpsewhich HaranoAjiGothic-Heavy.otf`
`kpsewhich HaranoAjiGothic-Medium.otf`

実行した結果、以下のように何も表示されなければ原ノ味フォントはインストールされていません。

```
$ kpsewhich HaranoAjiMincho-Light.otf

$ kpsewhich HaranoAjiMincho-Regular.otf

$ kpsewhich HaranoAjiMincho-Bold.otf

$ kpsewhich HaranoAjiGothic-Regular.otf

$ kpsewhich HaranoAjiGothic-Bold.otf

$ kpsewhich HaranoAjiGothic-Heavy.otf

$ kpsewhich HaranoAjiGothic-Medium.otf

$
```

以下のように何らかのパス名が出てくるようであれば原ノ味フォントはインストール済です。出てくるパス名は違っても構いません。古いフォントのままになっていないかバージョンを確認して、必要なら更新してもよいと思います。

```
$ kpsewhich HaranoAjiMincho-Light.otf
/usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiMincho-Light.otf

$ kpsewhich HaranoAjiMincho-Regular.otf
/usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiMincho-Regular.otf

$ kpsewhich HaranoAjiMincho-Bold.otf
/usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiMincho-Bold.otf

$ kpsewhich HaranoAjiGothic-Regular.otf
/usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiGothic-Regular.otf

$ kpsewhich HaranoAjiGothic-Bold.otf
/usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiGothic-Bold.otf

$ kpsewhich HaranoAjiGothic-Heavy.otf
/usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiGothic-Heavy.otf

$ kpsewhich HaranoAjiGothic-Medium.otf
/usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiGothic-Medium.otf

$
```

バージョンを確認するには出てきたパス名を使って以下のようにします。

```
$ otfinfo -v /usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiMincho-Light.otf
HaranoAjiMincho-Light version 20200215;ttx 4.3.0

$ otfinfo -v /usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiMincho-Regular.otf
HaranoAjiMincho-Regular version 20200215;ttx 4.3.0

$ otfinfo -v /usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiMincho-Bold.otf
HaranoAjiMincho-Bold version 20200215;ttx 4.3.0

$ otfinfo -v /usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiGothic-Regular.otf
HaranoAjiGothic-Regular version 20200215;ttx 4.3.0

$ otfinfo -v /usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiGothic-Bold.otf
HaranoAjiGothic-Bold version 20200215;ttx 4.3.0

$ otfinfo -v /usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiGothic-Heavy.otf
HaranoAjiGothic-Heavy version 20200215;ttx 4.3.0

$ otfinfo -v /usr/share/texmf-site/fonts/opentype/public/haranoaji/HaranoAjiGothic-Medium.otf
HaranoAjiGothic-Medium version 20200215;ttx 4.3.0

$
```

この場合は `20200215` が原ノ味フォントのバージョンです。

## インストール

原ノ味フォントがインストールされてなければインストールします。

### ダウンロード

まずはダウンロードしましょう。

* [https://www.ctan.org/pkg/haranoaji](https://www.ctan.org/pkg/haranoaji)
* [https://www.ctan.org/pkg/haranoaji-extra](https://www.ctan.org/pkg/haranoaji-extra)

それぞれのDownloadから`haranoaji.zip`と`haranoaji-extra.zip`をダウンロードすればよいです。

### インストール先のディレクトリ・フォルダ

インストール先のディレクトリ・フォルダを決めて堀ります。インストールする環境で管理者権限が使えるのであれば、以下のコマンド

`kpsewhich --var-value=TEXMFLOCAL`

管理者権限が使えなければ、TeX Liveを使用するユーザで以下のコマンド

`kpsewhich --var-value=TEXMFHOME`

を実行して表示されるパス名を確かめます。例えば、

```
$ kpsewhich --var-value=TEXMFLOCAL
/usr/share/texmf-site

$
```

であれば `/usr/share/texmf-site` です。あるいは

```
$ kpsewhich --var-value=TEXMFHOME
/home/username/.local/share/texmf

$
```

であれば `/home/username/.local/share/texmf` です。

こうして得られたパス名の下にインストール先のディレクトリ・フォルダを掘ります。名前は `fonts/opentype/public/haranoaji/` のようにすればよいでしょう。

つまり、さきほどの最初の例の場合は
`/usr/share/texmf-site/fonts/opentype/public/haranoaji/`
というディレクトリ・フォルダを掘ります。2番目の例の場合は
`/home/username/.local/share/texmf/fonts/opentype/public/haranoaji/`
というディレクトリ・フォルダを掘ります。

### 解凍してフォントファイルを置く

ダウンロードした原ノ味フォントのファイル2つ（`haranoaji.zip` と `haranoaji-extra.zip`）を解凍します。フォントファイル（拡張子が `.otf` のファイル）が14個出てくるので、それらのファイルを先ほど掘ったインストール先のディレクトリ・フォルダにコピーします。

### TeXから見つけられるようにする

インストールする環境で管理者権限が使えるのであれば、管理者権限で `mktexlsr` を実行しておきましょう。

### インストールできたか確認

インストールできたか確認するため「既にインストールされているか確認」のときと同じコマンドを実行してみます。

`kpsewhich HaranoAjiMincho-Light.otf`
`kpsewhich HaranoAjiMincho-Regular.otf`
`kpsewhich HaranoAjiMincho-Bold.otf`
`kpsewhich HaranoAjiGothic-Regular.otf`
`kpsewhich HaranoAjiGothic-Bold.otf`
`kpsewhich HaranoAjiGothic-Heavy.otf`
`kpsewhich HaranoAjiGothic-Medium.otf`

置いたフォントファイルのパス名が出てくるようになれば完了です。出てこなければ何かが間違っていますので、手順を再確認してみましょう。

## LuaLaTeXで原ノ味フォントを使う

### 簡単な例

最新のLuaTeX-ja環境[^newluatexja]であれば、以下のようにすると原ノ味フォントを使うことができます。

[^newluatexja]: LuaTeX-ja 20191117.0で原ノ味フォントがプリセットに入り`luatexja-preset`パッケージに`haranoaji`オプションが使えるようになりました。TeX Live 2019をこれ以降に更新するかTeX Live 2020以降であればこのプリセットが使えます。さらにLuaTeX-ja 20200323.0でデフォルトの日本語フォントが原ノ味フォントになったので、TeX Live 2020以降では`luatexja-preset`パッケージを使わなくても原ノ味フォントになります。

```tex
\documentclass{ltjsarticle}

\usepackage[haranoaji,nfssonly]{luatexja-preset}

\begin{document}

\section{吾輩は猫である}

吾輩は猫である。名前はまだ無い。

\end{document}
```

少し古いLuaTeX-ja環境[^oldluatexja]の場合は上記のソースでは原ノ味フォントになりません。その場合は以下のようにするとよいでしょう。

[^oldluatexja]: TeX Live 2019初版などが該当します。

```tex
\documentclass{ltjsarticle}

\usepackage[nfssonly]{luatexja-preset}
\ltjnewpreset{HaranoAji}{%
  mc-l = HaranoAjiMincho-Light.otf,
  mc-m = HaranoAjiMincho-Regular.otf,
  mc-bx = HaranoAjiMincho-Bold.otf,
  gt-m = HaranoAjiGothic-Regular.otf,
  gt-bx = HaranoAjiGothic-Bold.otf,
  gt-eb = HaranoAjiGothic-Heavy.otf,
  mg-m = HaranoAjiGothic-Medium.otf}
\ltjapplypreset{HaranoAji}

\begin{document}

\section{吾輩は猫である}

吾輩は猫である。名前はまだ無い。

\end{document}
```

### マルチウェイト

原ノ味フォントはマルチウェイトなので、以下のようにして太字を使う[^newluatexja-deluxe]こともできます。これはIPAフォントやIPAexフォントのようなウェイトが一つしかないフォントでは基本的にできませんし、無理やり太字にするとみっともなくなってしまいます。原ノ味フォントなら問題ありません。

[^newluatexja-deluxe]: TeX Live 2020以降でも、マルチウェイトにするには`luatexja-preset`パッケージに`deluxe`オプションが必要です。デフォルトが原ノ味フォントになったので`haranoaji`オプションがなくても原ノ味フォントになります。

```tex
\documentclass{ltjsarticle}

\usepackage[haranoaji,deluxe,match,nfssonly]{luatexja-preset}

\begin{document}

\section{吾輩は\textbf{猫}である}

吾輩は\textbf{猫}である。名前はまだ\textbf{無い}。

\end{document}
```

少し古いLuaTeX-ja環境の場合は以下のよう[^mg-m]にします。

[^mg-m]: mg-m（丸ゴシック）は、原ノ味フォントには存在しないため代替フォントを割り当てる必要があります。元々は`luatexja-preset`パッケージに原ノ味フォントのプリセットが入った当初の設定と同じ`HaranoAjiGothic-Heavy.otf`にしていました。しかし、LuaTeX-ja 20200517.0で`luatexja-preset`パッケージの設定が`HaranoAjiGothic-Medium.otf`に変わった（ptex-fontmapsの設定に合わせた）ため、ここの設定もそれに合わせて変更しました。

```tex
\documentclass{ltjsarticle}

\usepackage[deluxe,match,nfssonly]{luatexja-preset}
\ltjnewpreset{HaranoAji}{%
  mc-l = HaranoAjiMincho-Light.otf,
  mc-m = HaranoAjiMincho-Regular.otf,
  mc-bx = HaranoAjiMincho-Bold.otf,
  gt-m = HaranoAjiGothic-Regular.otf,
  gt-bx = HaranoAjiGothic-Bold.otf,
  gt-eb = HaranoAjiGothic-Heavy.otf,
  mg-m = HaranoAjiGothic-Medium.otf}
\ltjapplypreset{HaranoAji}

\begin{document}

\section{吾輩は\textbf{猫}である}

吾輩は\textbf{猫}である。名前はまだ\textbf{無い}。

\end{document}
```

### 原ノ味フォントだからできること

ここまでの内容はLuaTeXであれば原ノ味フォントである必要はなく、源ノフォントでも同様のことができます。では、何か原ノ味フォントを使うメリットはあるでしょうか。

LuaTeXが出力したPDFは、各フォントにToUnicode CMapというものが埋め込まれています。源ノフォントの場合はPDFからテキストを抽出する（コピペする）ためにはToUnicode CMapが必須です。一方、原ノ味フォントの場合はToUnicode CMapが無くてもテキスト抽出できます。そこで、[pdf-rm-tuc](https://github.com/trueroad/pdf-rm-tuc/blob/master/README.ja.md)というツールを使うとToUnicode CMapを削除することができ、PDFのファイルサイズを小さくすることができます。また、条件によってPDFに埋め込まれたToUnicode CMapに起因する問題が発生することもある[^ToUnicode]のですが、その問題を解消できるかもしれません。

詳しいことは「[原ノ味フォントとToUnicode CMap](https://github.com/trueroad/tr-TeXConf2019)」をご覧ください。

[^ToUnicode]: ToUnicode CMapを逆変換によって生成した場合に問題が発生することがあります。XeTeXはxdvの時点でUnicodeが失われてしまうので、xdvipdfmxは逆変換でToUnicode CMapを生成するしかなく、問題が発生しやすいと思います。LuaTeXの場合は元のUnicodeを知っている状態でPDFを生成するので、必ずしも逆変換の必要がなく、問題にならないことが多いかもしれません。

## おわりに

TeX Liveの環境に原ノ味フォントをインストールして、LuaTeXで使うところまでを紹介しました。

いまどきのLuaTeXの場合は普通に源ノフォントを使うことができるため、原ノ味フォントのメリットはToUnicode CMapを消せばPDFのサイズを小さくすることができる、ぐらいかなぁと思っています。XeTeXならToUnicode CMap周りでもっとメリットがありそう[^xetex]ですが、現状ではXeTeXは日本語組版に向いていないのではないかと思います。

[^xetex]: XeTeXはToUnicode CMapの生成がどうしても逆変換になってしまうため、源ノフォントだと条件によってテキスト抽出に問題が発生します。原ノ味フォントならば最初からToUnicode CMapを生成せず埋め込みもしませんので、逆変換に起因するテキスト抽出の問題も発生しません。

原ノ味フォントのメリットが大きいのはpTeXやupTeXでしょう。特にpTeXで源ノフォントを使うには工夫が必要なため、原ノ味フォントのメリットが最大限享受できる環境であると言えると思います。TeX LiveのpTeXやupTeXで和文フォントを扱う仕組みである[ptex-fontmaps](https://www.ctan.org/pkg/ptex-fontmaps) 20200217.0で原ノ味フォントのプリセットが追加されたので、TeX Live 2019をそれ以降に更新できる[^fontmaps]なら設定が必要[^kanji-config-updmap]ですがpTeXやupTeXでも簡単に使うことができます。さらにTeX Live 2020ではデフォルトが原ノ味フォントに変わったので、特に設定する必要もなく原ノ味フォントが使えます。

[^fontmaps]: 更新したくないなら、本記事の方法で原ノ味フォントをインストールしてから、ptex-fontmaps 20200217.0以降に入っている原ノ味フォントのマップファイルをどこかに置いて、dvipdfmxの `-f` オプションで必要なマップファイルを指定してやることで使えます。

[^kanji-config-updmap]: 管理者権限が使えるならば `$ sudo kanji-config-updmap-sys --jis2004 haranoaji` などを実行すれば設定できます。

本記事では原ノ味フォントを各種TeXエンジンで使いやすいフォントとして紹介しましたが、TeX以外の環境でもメリットはあります。例えば、楽譜作成プログラム[LilyPond](http://lilypond.org/)で日本語に源ノフォントを使うと、日本語のテキスト抽出ができないPDFになってしまいますが、原ノ味フォントならばできます[^lilypond-text]。

[^lilypond-text]: LilyPondはGhostscriptでPDFを生成していますが、この場合GhostscriptはToUnicode CMapを生成しないようです。源ノフォントはテキスト抽出にToUnicode CMap必須なので無ければできないのに対して、原ノ味フォントなら必須ではないので問題なくできる、ということです。

最後になりますが、こうしたフォントの違いに興味を持たれた方は「[原ノ味フォントとToUnicode CMap](https://github.com/trueroad/tr-TeXConf2019)」が参考になるのではないかと思いますので、ご覧いただければと思います。