いものやま。

雑多な知識の寄せ集め

TeXで同人誌を作ってみた。(フォント周り)

f:id:yamaimo0625:20190918075457j:plain

昨日に引き続き、同人誌制作に \TeXを使って学んだことについて。

今日はフォント周りについて。

なお、現時点での理解を書いていて正確性には欠けるので注意。
あと \TeX \LaTeXを区別せずに扱ってる。

参考にしたのは以下とか:

[改訂第7版]LaTeX2ε美文書作成入門

[改訂第7版]LaTeX2ε美文書作成入門

LaTeX2ε辞典 増補改訂版 (DESKTOP REFERENCE)

LaTeX2ε辞典 増補改訂版 (DESKTOP REFERENCE)

 \TeXでのフォントの仕組み

まず \TeXはフォントのメトリック情報だけを使って組版を行う

メトリック情報というのは文字を箱として扱ったときの高さとか幅とかのことで、つまり \TeXは文字の細かい形(グリフという)なんかまったく見てなくて、大きさのバラバラな箱を「いい感じ」になるように並べているだけだったりする。

f:id:yamaimo0625:20190919131528p:plain

このメトリック情報が書かれたファイルがtfmファイル(TeX Font Metricファイル)。

欧文の場合、フォントによってメトリックは変わってくるので、指定されたフォントから対応するtfmファイルを \TeXが見つけられる必要がある。
そこで使われるのがfdファイル(Font Definitionファイル)。

 \TeXではフォントを5つの要素で識別している:

  • エンコーディング(数値と文字との対応づけ、OT1とかT1とかがある)
  • ファミリー(書体(≒フォント名))
  • シリーズ(太さ、ボールドとか)
  • シェイプ(形、イタリックとか斜体とか)
  • サイズ(大きさ、10ptとか)

この5つの要素とfdファイルを参照して使われるtfmファイルが決まる。

 \TeXはDVIファイル(Device Independentファイル)を出力するけど、そこには使われたtfmファイル名しか書かれていない。
なので、DVIを表示(あるいは変換)するソフトはtfmファイル名と実際に使うべきフォントとの対応関係を知る必要がある。
そこで使われるのがmapファイル。

これでtfmファイル名から実際のフォントが分かり、実フォントを使って表示(や変換)が行われることになる。

図にまとめるとこんな感じ:

f:id:yamaimo0625:20190919135611p:plain

フォントの指定は\usefont{<encoding>}{<family>}{<series>}{<shape>}という制御綴などを使うっぽい。

論理フォント

この論理フォントという言い方は自分の言い方で、一般にそう言われているわけではないので注意。

上記のフォント指定とは別に、論理的なフォントの指定があるように思う。
\textrm{...}とか\textit{...}とか。
前者はローマン体のフォントを使うことを指定していて、後者はイタリック体のフォントを使うことを指定している。

この論理的な指定で実際にどのフォントが使われるかは、\rmdefaultなどを再定義すると変わるみたい。

欧文に関して

 \TeXの欧文で定番のフォントといえばComputer Modernだったけど、使われているエンコーディングが古いなどで、あまり好ましくないみたい。
同じデザインのフォントを使いたいなら、Latin Modernを使うといいとのこと。

Latin Modernを使うには次のようにする:

\usepackage{lmodern}
\usepackage[T1]{fontenc}

和文に関して

 \TeXでのフォントの仕組みを上で書いたけど、これが和文になるとちょっと話が変わってくる。

和文だとどのフォントでもメトリックが変わらない
どれも正方形の箱の中に文字を入れている。

そこで、明朝体なら「Ryumin-Light(リュウミンL)」、ゴシック体なら「GothicBBB-Medium(中ゴシックBBB)」というフォントが常に使われる。
(もう少し正確に書くと、fdファイルによって明朝体はjis.tfm、ゴシック体はjisg.tfmというtfmファイルを使うことが決まり、これらは仮想フォントというものになっていて、そこにrml.tfm(リュウミンL)やgbm.tfm(中ゴシックBBB)を使うことが指定されているらしい)

じゃあ、リュウミンLや中ゴシックBBBってどんなフォントなのかというと基本的にはシステムには入ってない
なのでPDFにしたときに実フォントは埋め込まれず、表示した時に使える明朝体/ゴシック体の適当なフォントが使われる。

それじゃ困るのでmapファイルで埋め込むフォントを指定することになるんだけど、つまり、DVIファイルで出力された時点でフォントは2種類(明朝体/ゴシック体)しかないので、埋め込めるフォントも2種類しかない。

マジでゴミ仕様

・・・とはいえ仕方ないので、それで頑張るしかない。。。

rmlやgbmというtfmファイル名に対して実フォントを対応させるためにmapファイルを更新するのだけど、それにはupdmapというツールを利用する。
これはDVIウェアごとにmapファイルが必要だけどそれを一つずつ変更していたら大変なので一気に変更するためのもの。
和文の場合はkanji-config-updmapを使うことになる。

updmapにはシステム全体の設定を変えるupdmap-sysと個人の設定を変えるupdmap-userがある。
和文についても同様で、kanji-config-updmap-sysとkanji-config-updmap-userがある。

具体的な指定方法はヒラギノフォントを使う設定のところで。

OTFパッケージ

和文のフォントメトリックは正方形であるべきなんだけど、歴史的な経緯で実際にはちょっと違っていたらしい。
これを直すにはOTFパッケージを使うとのこと。
(このパッケージ自体は名前の通りOpenTypeフォントを使うためのもの)

また、オプションでjis2004を指定すると、JIS2004字形になる。
いくつかのフォントの字形が新しく定められたものになる。

あと、オプションでdeluxeを指定すると、使えるシリーズ(太さ)が増えたり丸ゴシック(mg)が使えたりするとのこと。
このオプションを指定しなかった場合、太字は全部ゴシック体にされてしまうのだけど、これをしていすることで太字の明朝体が使えるようになる。

なので、和文では基本的には以下のようにしておいた方がよさそう:

\usepackage[deluxe,jis2004]{otf}

ヒラギノフォントを使う設定

macOSの場合ヒラギノフォントがバンドルされているので、せっかくだからこれを使いたいところ。
なお、PDFに埋め込んで再配布してもライセンス的には問題ないっぽい。
(単体で再配布するのはダメ。あと埋め込まれたものを取り出して単体で使うのもおそらくダメ)

以下を参考にして使えるようにしてみた:

まずはTLContribから必要なパッケージをインストール:
(TLContribというのはTeX Liveとは別管理されているリポジトリらしい)

$ sudo tlmgr repository add http://contrib.texlive.info/current tlcontrib
$ sudo tlmgr pinning add tlcontrib '*'
$ sudo tlmgr install japanese-otf-nonfree japanese-otf-uptex-nonfree ptex-fontmaps-macos cjk-gs-integrate-macos

そしてリンクを作成する:

$ sudo cjk-gs-integrate --link-texmf --cleanup
$ sudo cjk-gs-integrate-macos --link-texmf
$ sudo mktexlsr

なお、リンクというのはフォントのシンボリックリンクのことだと思う。
おそらくTeX関連のファイルが入っているtexmf以下にフォントのシンボリックリンクを作ってるのだと思われる。
あとmktexlsrはファイル一覧のキャッシュの更新。

最後にヒラギノフォントを使うようにmapファイルを更新する。

$ sudo kanji-config-updmap-sys --jis2004 hiragino-highsierra-pron

ちなみに、更新前の状態は以下:

$ sudo kanji-config-updmap-sys status
CURRENT family for ja: ipaex
Standby family : hiragino-highsierra
Standby family : hiragino-highsierra-pron
Standby family : ipa
Standby family : toppanbunkyu-highsierra

IPAexフォントが埋め込まれる設定になっていたっぽい。

更新後の状態は以下:

$ sudo kanji-config-updmap-sys status
CURRENT family for ja: hiragino-highsierra-pron
Standby family : hiragino-highsierra
Standby family : ipa
Standby family : ipaex
Standby family : toppanbunkyu-highsierra

ヒラギノフォントが指定されていることが分かる。

設定したこと

自分がした設定をまとめると以下:

  • Latin Modernを使うようにした
  • OTFパッケージを使うようにした
  • ヒラギノフォントをPDFに埋め込むようにした

上2つについては、以下のようにソースに書いた:

% フォント関連
% Computer ModernのかわりにLatin Modernを使う
\usepackage[T1]{fontenc}
\usepackage{lmodern}
% OTFパッケージを使う
\usepackage[deluxe,jis2004]{otf}

また、一番下については前述の通りの設定を行なった。


宣伝です。
気になった人はチェックをお願いします!

今日はここまで!