つうさにメモブログ

つうさにがメモをブログとして書いていくところ

いろんな日本語 TFM (JFM) たち

日本語な LaTeX する際のメモその 1 。

いろんな JFM たち

pTeX などの日本語用 TeX エンジンは、和文組版に JFM(和文フォントメトリック、TFM の和文版)を用います。JFM には文字を収める箱のサイズ情報などが書かれていて、pTeX はそれを使って文字を並べて、DVI ファイルを出力します1。 例えば、p(La)TeX ではデフォルトで min10.tfm という JFM(拡張子は tfm だけど JFM)が使われます。

ところで、この min10 という JFM はどうもアレらしく、マトモを目指した様々な他の JFM が存在します。

いろんな JFM をプロパティリスト形式にして見てみて、それらがどう違うのか確認メモ。

環境: TeX Live 2019

pLaTeX で使われる JFM

JFM では文字のグループ(文字タイプ、char_type)ごとに箱のサイズやグルーなどが設定されています。0番目のグループがデフォルトとして使われます。

確認にはtftoplpTeX 版のptftoplを用います。2

min10.tfm
  • p(La)TeX のデフォルト
  • ボディが正方形でない
  • 「ょ」とか「っ」とかの小書き仮名が連続するとき詰まりすぎている(バグらしい)
    • 「ちょっと」や「チェック」など3
  • 設計思想が謎

確認方法:

ptftopl $(kpsewhich min10.tfm) | less
jis.tfm
  • jsarticle などの jsclasses 文書クラスで使われる
  • もちろん小書き仮名が連続しても詰まりすぎにならない
  • ボディが正方形でない

確認方法:

ptftopl $(kpsewhich jis.tfm) | less
nmlminr-h.tfm
  • pLaTeX で otf パッケージを読み込んだ際に使われる JFM
  • ボディが正方形!
  • jis.tfm とほぼ同じ
  • 「?」と「 !」の後ろにグルーが入る

確認方法:

ptftopl $(kpsewhich nmlminr-h.tfm) | less

upLaTeXで使われるJFM

pLaTeX で使われる JFM とは異なる点として、upLaTeX では Unicode の文字を扱うため、JIS X 0208 外の半角カナなどについてのメトリックも書かれています。

確認にはptftoplの upTeX 版のuptftoplを用います。

upjisr-h.tfm
  • up(La)TeX のデフォルト
  • ujarticle でも uplatex オプション付き jsarticle でもこれが用いられる
  • ボディが正方形!

確認方法:

uptftopl $(kpsewhich upjisr-h.tfm) | less
upnmlminr-h.tfm
  • upLaTeX で otf パッケージを読み込んだ際に使われる JFM
  • ボディが正方形!
  • upjisr-h.tfm とほぼ同じだが、「‼」「⁇」「⁈ 「⁉」「!」「?」の後ろにグルーが入る

確認方法:

uptftopl $(kpsewhich upnmlminr-h.tfm) | less

LuaTeX-ja で使われる JFM

LuaTeX-ja でも JFM が用いられます。

LuaTeX-ja で使われる JFM は Lua で書かれているため、そのまま読みます。

jfm-ujis.lua
  • LuaTeX-ja のデフォルト
  • ltjsarticle で用いられる
  • ボディが正方形!
  • upnmlminr-h.tfm に基づいて作られている
  • upnmlminr-h.tfm とは違って「゠」「–」用の文字タイプがある

確認方法:

less $(kpsewhich jfm-ujis.lua)

おわり

JFM の観点で見ると、pLaTeX はデフォルトがアレなので、upLaTeX や LuaLaTeX(+ltjsarticle) を使うのがいいみたいですね。

参考


  1. TeX組版する過程では、実際のグリフが書かれたフォントファイル(ipaexm.ttf など)は使われず、TFM が使われる(fontspec によるフォントファイル指定などを除く)。

  2. tftopl はバイナリファイルの TFM をプロパティリスト形式にしてヒューマンリーダブルに出力してくれるもの。ちなみに、出力の「O 数値」における数値は 8 進数である。

  3. 他には「キャッシュ」とか