昨日に引き続き、同人誌制作にを使って学んだことについて。
今日はフォント周りについて。
なお、現時点での理解を書いていて正確性には欠けるので注意。
あととを区別せずに扱ってる。
参考にしたのは以下とか:
- 作者: 奥村晴彦,黒木裕介
- 出版社/メーカー: 技術評論社
- 発売日: 2017/01/24
- メディア: 大型本
- この商品を含むブログ (2件) を見る
LaTeX2ε辞典 増補改訂版 (DESKTOP REFERENCE)
- 作者: 吉永徹美
- 出版社/メーカー: 翔泳社
- 発売日: 2018/08/24
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
でのフォントの仕組み
まずはフォントのメトリック情報だけを使って組版を行う。
メトリック情報というのは文字を箱として扱ったときの高さとか幅とかのことで、つまりは文字の細かい形(グリフという)なんかまったく見てなくて、大きさのバラバラな箱を「いい感じ」になるように並べているだけだったりする。
このメトリック情報が書かれたファイルがtfmファイル(TeX Font Metricファイル)。
欧文の場合、フォントによってメトリックは変わってくるので、指定されたフォントから対応するtfmファイルをが見つけられる必要がある。
そこで使われるのがfdファイル(Font Definitionファイル)。
ではフォントを5つの要素で識別している:
- エンコーディング(数値と文字との対応づけ、OT1とかT1とかがある)
- ファミリー(書体(≒フォント名))
- シリーズ(太さ、ボールドとか)
- シェイプ(形、イタリックとか斜体とか)
- サイズ(大きさ、10ptとか)
この5つの要素とfdファイルを参照して使われるtfmファイルが決まる。
はDVIファイル(Device Independentファイル)を出力するけど、そこには使われたtfmファイル名しか書かれていない。
なので、DVIを表示(あるいは変換)するソフトはtfmファイル名と実際に使うべきフォントとの対応関係を知る必要がある。
そこで使われるのがmapファイル。
これでtfmファイル名から実際のフォントが分かり、実フォントを使って表示(や変換)が行われることになる。
図にまとめるとこんな感じ:
フォントの指定は\usefont{<encoding>}{<family>}{<series>}{<shape>}
という制御綴などを使うっぽい。
論理フォント
この論理フォントという言い方は自分の言い方で、一般にそう言われているわけではないので注意。
上記のフォント指定とは別に、論理的なフォントの指定があるように思う。
\textrm{...}
とか\textit{...}
とか。
前者はローマン体のフォントを使うことを指定していて、後者はイタリック体のフォントを使うことを指定している。
この論理的な指定で実際にどのフォントが使われるかは、\rmdefault
などを再定義すると変わるみたい。
欧文に関して
の欧文で定番のフォントといえばComputer Modernだったけど、使われているエンコーディングが古いなどで、あまり好ましくないみたい。
同じデザインのフォントを使いたいなら、Latin Modernを使うといいとのこと。
Latin Modernを使うには次のようにする:
\usepackage{lmodern} \usepackage[T1]{fontenc}
和文に関して
でのフォントの仕組みを上で書いたけど、これが和文になるとちょっと話が変わってくる。
和文だとどのフォントでもメトリックが変わらない。
どれも正方形の箱の中に文字を入れている。
そこで、明朝体なら「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種類しかない。
マジでゴミ仕様
「TeXはフォントメトリック(tfm)で組版してる」←分かる
— やまいも@技術書典7【え23C】(3階Cホール) (@yappy0625) 2019年9月5日
「dvipdfmxはtfm名と実フォントをmapファイルで対応させてPDF出力する」←分かる
「日本語フォントはフォントメトリック全部同じだから全部rml/gtmというtfm名でいいや。実際に使うフォントはmapファイルで指定すればいいでしょ」←やめろ
dviの時点で全部同じtfm名ついてたら、複数のフォント使えないじゃないか・・・
— やまいも@技術書典7【え23C】(3階Cホール) (@yappy0625) 2019年9月5日
実装が同じだからスーパークラスにまとめちまえ、というのと同じようなもの。クラスとしては全部別物で、実装がたまたま同じだからモジュールをインクルードする、みたいな設計が普通じゃないの?
・・・とはいえ仕方ないので、それで頑張るしかない。。。
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}
また、一番下については前述の通りの設定を行なった。
宣伝です。
気になった人はチェックをお願いします!
今日はここまで!