LaTeX のフォントの話

もう半年以上も前になりますが、ある雑誌論文の体裁を真似たくて Linotype の Excelsior というフォントを買いました。その時は LaTeX で使うつもりではなかったので TrueType を買ったのですけど、OpenType や PostScript も売ってました。

その後、せっかくなので LaTeX でも使ってみたいなと思って web を検索してみたところ、いろいろな情報が見つかったのですが、そのいろいろな情報を理解するための基礎知識がまず必要であるように感じました。それで、そのあたりのところを、簡単にまとめてみました。

気をつけて書いたつもりですけれど、間違っている部分もあろうかと思いますので、「無保証」 ということでよろしくお願いします。

LaTeX のフォントの話f-elementary0.5a.pdf, 16 ページ, 300KB)

                (↓下のほうにいろいろと訂正・追記があります)

【編集後記】

9 月末に着手して、ダラダラしていましたら、10 月も下旬になってしまいました…。9 割方書き上げた先週、eggtoothcroc さん という方が 「欧文フォントのインストール例」 という、スゴイ文書を公開されていることを知りました。60 ページもある大作で、しかも、私がペーパーを書き始めるほぼ一月前の 9 月 6 日の公開です。

さらには、この eggtoothcroc さんの文書に触発された ZR さん が、

等々の素晴らしい記事を 9 月 〜 10 月にかけて矢継ぎ早に執筆されてらっしゃることも判りました (これで全部ではありません、念のため)

eggtoothcroc さんの文書は私には難し過ぎますけれど、あんまり私のペーパーとは被ってないように思えましたが、ZR さんの記事とは結構テーマが被っていて、しかも当然 ZR さんの記事のほうがずーっとちゃんとしてらっしゃるので、タイミングの悪さにちょっと落ち込みました…(ZR さんの記事はすべて読まれたほうがいいですが、特に、私のペーパーの 「8 実例に即して」 については、それに代えて ZR さんの 「dvipdfmx で OpenType する件について」 をお読みになったほうがいいです…)

それでも、まぁ、私と同じような文系初級の方であれば、私のグダグダなペーパーでも少しは役に立つと思ってくださる奇特な方もいるかも知れないと気を取り直して、最後まで書いて、ここで公開することにしました。

尤も、

XeTeX/LuaTeX が徐々にではあるが普及し始めている状況を考えると、この類の「旧世代」の知識は少しずつその必要性を(「解説の必要性」も含めて)失ってゆく。

ZR さんもおっしゃっている ように、この手の解説の必要性は今後どんどんなくなっていくのでしょう。

去年 comp.text.tex の “Script to Install TTF fonts for pdfTeX” というスレッド (22 Feb. 2010) でも、元投稿者が “I can't understand why there aren't any BETTER working solutions on the net.” と言ったのに対して、Robin Fairbairns さんがやはり、

another possible reason why there's no published support (other than

ctan:/info/truetype, which is a bit old) is that the "serious hackers"

(whatever that means) all use xetex or luatex nowadays.

とおっしゃってましたし…。

□ 参考にしたサイト:

□ 参考:

 Since: October 24, 2011.


【差し替え】 

こっそり ver. 0.3 に差し替え。(さらに ver. 0.3a に差し替え….Oct. 26, 2011.)(ver. 0.5a に差し替え.Oct. 31, 2011. sigh...)

 Added: October 25, 2011.


【訂正・追記】 

(1) 14 ページに、「wTimesRoman.tfm は,T1 エンコーディングで,カーニングやリガチャも含んだ,『普通の』 tfm」 であることから、vf ファイルを介す必要はなくて、map ファイルにも raw-wTimesRoman と書く必要はありません、という趣旨のことを書きました。

註(37)には 「“-T” オプションで (raw.)tfm と vpl のエンコーディングを揃えた場合には,vf ファイルにはもう,エンコーディング変換の役割さえないですよね」 とも書きました。

このときは、エンコーディングのことしか頭になかったため、フォントを合成しているグリフがひとつあることを見落としてました。“Germandbls” のことです。Germandbls は、vf で “S” を二つ並べるように指示されているため、vf を介さないと、出ません

(2) 註の(38)で、pdfTeX でタイプセットした場合には、「italic では,“fi” と “fl” のリガチャが表示出来ませんでした」 と書きましたが、ちゃんとグリフの一覧表を作ってみましたら、欠けているグリフはもっとありました…

wTimesRoman と wTimesBold の場合は、T1-WGL4 のグリフのうち、

Odblacut, Tcedilla, Udblacut, Zdot, dmacron, odblacut, tcedilla, udblacut, zdot (, Germandbls)

が埋め込まれず、wTimesItalic の場合は、

macron, fi, fl, Odblacut, Tcedilla, Udblacut, Zdot, dmacron, odblacut, tcedilla, udblacut, zdot (, Germandbls)

がないと言われます (Germandbls がないというのは、上記 (1) のせいです)

でも、dvipdfmx で pdf にすると、これらのグリフはちゃんと出ています。両者で挙動が異なる理由は分かりません…。

〔グリフ一覧表〕 (Germandbls も入れてあります)

 Added: October 26, 2011.


【追記】 

(1) 註の(33)に、「てっきり Times New Roman は TrueType フォントだと思っていたのですが,よく見たら OpenType でした…」 と書きましたが、どうもこの認識も不正確だったようです。

規格の定義上は 「TrueType フォントは全て OpenType フォントである」 が成立すると考えている。現在では多くの場合、「TrueType フォント」 は 「TrueType グリフ (glyf テーブル) をもつ OpenType フォント」 のことを指す。ただし 「TrueType フォント」 と 「OpenType フォント」 が区別して扱われている場合に、どういう基準で区別するかは人によって異なることがあり、これが混乱を招くことがある。

ZR さんが説明 してらっしゃいます。

(2) 15 ページに、「Ryumin-Light 等の代わりに手許のシステムの実フォントのファイル名を指定すると,そのフォントが埋め込まれます」 と書きましたが、和文フォントに限らず、欧文フォントも含めて、「(技術的に)埋め込み可能か」 ということと、「(ライセンス上)埋め込んで良いか」 ということとは、もちろん別問題です。

 Added: October 27, 2011.


【訂正】

7 ページ右段真ん中あたり:

〔誤〕 126 番の asciitilde の次が 161 番の exclamdown となっていて,その間の 35 個のスロットにはグリフの割り当てがありません。

〔正〕 …その間の 34 個のスロットには…

算数苦手なのがこういうところに現れます… (T_T)。

Added: November 1, 2011.


【補足・訂正】

8 ページに 「OT1,T1,TS1 エンコーディングの tfm ファイルは vf を利用して 8r エンコーディングの tfm に帰着させる,ということがよく行われます。」 と書きましたが、この点について、少し考えが足りていなかったので、補足というか追記をします。

OT1 はほぼ T1 に包含されるとしても、TS1 にも 100 個以上のグリフが収録されているわけですから、T1 と TS1 が TeXBase1 に単純に帰着されるとすると、TeXBase1 の 256 個では到底賄い切れないということぐらいは、足りない頭でも意識していました。

そこで私は勝手に、T1(や OT1 や TS1) を vf を介して TeXBase1 に帰着させる場合には、TeXBase1 にない T1(や OT1 や TS1) のグリフは、単に未定義になるのだと思ってました。

ところが。「-p 8r.enc -t T1-WGL4.enc」 としてみますと、どうも、TeXBase1 にない T1 のコードには、何か変なコードが入っています。TeX Forum でのお話し だと、TeXBase1 のコードが 「降ってくる」 ということなのですが、どういう順番で降って来ているのか不明です (“arbitrarily” って…)

(また、PSNFSS では、TeXBase1 にない T1 のグリフは、vf でグリフが合成されていました!)

ということで、よく分からなくなってしまったのですが、少なくとも現時点で言えることは、14 ページで、

wTimesRoman.vf を使うのであれば,wTimesRoman.tfmraw-wTimesRomanl.tfm に帰着されるので,map ファイルには,

raw-wTimesRoman 7t.enc times.ttf

と書くことになります

と言ったのはマズかったということです。例えば、「-p 8r.enc -t T1-WGL4.enc」 として vf を介して raw-wTimesRoman を参照すると、TeXBase1 に含まれていない T1 のグリフがおかしなことになります。

なので、註(37) も撤回して、vf を介して raw-wTimesRoman を参照する場合には、-T オプションで両方を同じエンコーディングにしたほうがいいようです (または、“-u” オプションで明示的に 「降り込み」 を禁止するとか )。上で訂正・追記した “Germandbls” を気にしないのなら、わざわざ raw-wTimesRoman を参照する必要は、やはりないはずなのですけれど…。

Added: November 7, 2011.


【謝辞】

ZR さんのブログが開設 1 周年 とのことですので、TeX Forum でいろいろ教えてくださったり、ブログでこのページをご紹介くださったお礼にというのも変ですが、ZR さんの真似をしてみます (iamjatex.sty は こちら

\documentclass[a4paper]{article}
\usepackage{iamjatex}
\begin{document}
\begin{iamjatex}

  ,ad12X7ba,  77722X12ba         db   777777X77777 7X        db
 d7"'    `"7b 77      "7b       d1Xb       77      77       d77b
d7'           77      ,XP      d7'`Xb      77      77      d7'`1b
X7            77aaaaaa7P'     d7'  `7b     7X      77     d7'  `7b
77      7X777 77""""77'      d7YaaaaY7b    X7      77    d2YaaaaY2b
YX,        77 12    `Xb     d7""""""""7b   77      77   d7""""""""7b
 Y7a.    .a77 77     `7b   d7'        `7b  77      77  d7'        `7b
  `"Y77777P"  77      `7b d7'          `7b 77      77 d7'          `7b

\end{iamjatex}
\end{document}

Added: November 9, 2011.


【訂正・追記】

7 ページに、「T1 や LY1 はともに PostScript フォントや TrueType フォントを LaTeX で使用することを念頭に作られたエンコーディングですが,配置が若干異なります」 と書きましたが、ちょっと説明が雑過ぎたように思います。

いえ、雑というよりも、そもそも間違ってました m(_ _)m [added: October 15, 2012]

また、8 ページに、「$TEXMF/fonts/enc/dvips/base/ には,例えば,以下のファイルが用意されています。」 として、

T1: “cork.enc”

と書きましたけれど、TUG のページ を見ましたら、もうとっくに cork.enc はありませんでした… ChangeLog.txt より)

2008-04-18  Karl Berry  <karl@tug.org>

    * cork.enc: remove since it's unused.

    * ec.enc: import from TL.

    * fontname.texi: change accordingly.

    Vit Zyka mail to tex-live, 16 Apr 2008 12:33:08.

したがって、

・ passim: 〔誤〕 cork.enc〔正〕 ec.enc

ついでに、エンコーディングについて、glyph table も 3 つほど載せておきます。

T1 エンコーディングは、1990 年に TUG が作った ものらしく、ヨーロッパの各国語のグリフが収められています (特に 0x80 〜 0xBF のスロット)。

※ glyph table の書式は ZR さんのもの を真似しています.

最近では大文字の “エス・ツェット” 0xDF; U+1E9E: LATIN CAPITAL LETTER SHARP Sなんかもあるんですね…。

LY1 エンコーディングは、Y & Y という会社 が作ったものらしいのですが、texnansi.enc の冒頭には、

% The idea is to have all 228 characters normally included in Type 1 text

% fonts (plus a few more) available for typesetting. This is effectively

% the character set in Adobe Standard Encoding, ISO Latin 1, plus a few more.

と説明されています。

色を塗った 0x80 〜 0xBF のスロットのグリフが T1 とはかなり違いますよね… (“若干” どころではありませんでした)

そして、TeXBase1 エンコーディングについては、8r.enc の冒頭に、

% The idea is to have all the characters normally included in Type 1 fonts

% available for typesetting. This is effectively the characters in Adobe

% Standard encoding, ISO Latin 1, Windows ANSI including the euro symbol,

% MacRoman, and some extra characters from Lucida.

との説明があります。

こうして見ると、LY1 と TeXBase1 ってよく似てますよね (特に 0x200xFF の部分)。まぁ、元々のコンセプトが同じなのだから、似ていて当然ともいえますが。

 Added: November 15, 2011.


【追加】

 dviout の欧文 TrueType フォントの扱いについて、別ページ に簡単にまとめてみました。

Added: November 16, 2011.


【訂正・追記】

・ 6 ページ右段上のほう:

〔誤〕 ですから,実は,デフォルトでは \bfseires は…

〔正〕 ですから,実は,デフォルトでは \bfseries は…

・ 7 ページ註(23):

〔誤〕 fonts_with_pdfTeX や…

〔正〕 fonts_with_pdfTeX や…

・ 9 ページ右段真ん中あたり:

〔誤〕 (…また,ptmr8r の “C a” を ptmr8r の “C a” に…

〔正〕 (…また,ptmr8t の “C a” を ptmr8r の “C a” に…

・ 11 ページ右段上から3行目:

〔誤〕 URW 社のフリーフォントが当てられていています

〔正〕 URW 社のフリーフォントが当てられています

・ ファイル名に n が入っている jfm ファイルについて :

15 頁の註 (40) に 「$TEXMF/fonts/tfm/ptex/ には,……… “n” が付いたtfm も入っているのですが,これらが “n” なしのものとどう違うのかは調べていません。」 と書きましたけれど、後日偶然 TeX Q & A で奥村先生がこの件についてお答えくださっていて、TeX Forum では私もちょっと口を挟まさせていただきました。

Added: December 6, 2011.


【追加】

Vector の “文書作成 > TeX > TeXドキュメント” というところに、山本和義さん による

LaTeX2e 入門 vol.1a (96.06.10 公開 34K)

というドキュメントがありました! タイムスタンプは 1995 年 11 月 20 日となっています。

冒頭 (「0. はじめに,そして,注意」) には、

この文書は,PC-VAN SSCIENCE において「LaTeX 入門」と題して行った連載を

元に日本語関連の部分を pLaTeX2e のものに書き換えることによって作成されて

います.元の予定では,LaTeX2e のコマンド全般に渡る解説を行う予定でしたが,

なぜか途中でやる気がなくなったので,NFSS2 に基づくフォントの取扱い方法に

関する説明が主体となっています.

と書かれていて、plain TeX/LaTeX2.09/LaTeX2e のフォントの扱いについて、本文フォント、数式フォントともに、とても詳しい解説がなされています (ペーパー 5 頁の註 (17) で私は 「NFSS1 と NFSS2 の違いについては調べていません。」 と書きましたが、山本さんのドキュメントには、NFSS1 についてのご説明もあります)

転載・再配布が可能とのことですので、ここ にも置かせていただきます (lzh ファイルを展開すると、“README.1ST” と “L2EBEG_A.DOC” が出来ます.拡張子が “DOC” となっていますが中味はテキストファイルで、2710 行あります)

Added: December 16, 2011.


【追記】

註の(18)に、

LaTeX のデフォルトの欧文フォントは OT1 エンコーディングの cmr ファミリですが, ot1cmr.fd の中で OT1/cmr/m/n のサイズが <5> <6> <7> <8> <9> <10> <10.95> <12> <14.4> <17.28> <20.74> <24.88> と指定されているので,\fontsize コマンドで他のサイズを指定してもそのサイズにはならず,この12 種類のサイズしか使えません。

と書きました。これ自体は間違いではないのですが、私は日本語フォントのデフォルトも同じようになっているものと思ってました。でも、実はそうではありませんでした…。

まず、ot1cmr.fdOT1/cmr/m/n の設定は、

\DeclareFontShape{OT1}{cmr}{m}{n}%
     {<5><6><7><8><9><10><12>gen*cmr%
      <10.95>cmr10%
      <14.4>cmr12%
      <17.28><20.74><24.88>cmr17}{}

なので、cmr については、確かにデフォルトでは上掲の 12 種類のサイズしか使えませんけれど、日本語フォントのほうは、jy1mc.fdJY1/mc/m/n の設定を見てみましたら、

\DeclareFontShape{JY1}{mc}{m}{n}{<5> <6> <7> <8> <9> <10> sgen*min
    <10.95><12><14.4><17.28><20.74><24.88> min10
    <-> min10
    }{}

となってました! 最後に 「<-> min10」 とあるので、日本語フォントの場合には、5pt より小さい文字も、24.88pt より大きい文字も (というか、どんなサイズでも)\fontsize で指定しさえすれば出力できるのですね。

Added: January 10, 2012.


【訂正】

15 ページで、cid-x.maprml, gbm, rmlv, gbmv のエントリについて、デフォルトではフォントを埋め込まない設定になっていると書きましたが、(W32TeX の) 現在の cid-x.map では、MS 明朝と MS ゴシックを埋め込む設定に変更されているようです。

和文フォントのいわゆる 「多書体化」 について、別ページ に簡単にまとめてみました。

Added: September 20, 2012.


【再訂正】

現在の cid-x.map [2013/06/15] を見ますと、デフォルトの和文フォントは IPAex 明朝と IPAex ゴシックへと変更されています。

Added: June 18, 2013.


【訂正】

7 ページに、

TeX でデフォルトの OT1 エンコーディングでは,diacritical mark 付きのグリフについては,通常のグリフと diacritical mark を合成することで実現していましたが,その場合にはハイフネーションが出来なくなったり pdf にした際に不都合が生じるため,初めから diacritical mark 付きのグリフを含む T1 エンコーディングや LY1 エンコーディングが 作られました。T1 や LY1 は ともに PostScript フォントや TrueType フォントを LaTeX で使用することを念頭に作られたエンコーディングですが,配置が若干異なります T1 や LY1 に 収録されているグリフが必ず PostScript フォントや TrueType フォントに含まれるというわけでもありません)

と書いたのは、大間違い ですよね…。T1 と LY1 を同列に置くのはおかしいですし、PostScript フォントと TrueType フォントとでは含まれているグリフも違っているので、これらの扱いを一括りにしていたのも不適切でした (T1 のグリフを含んでいるような TrueType フォントなら、TeXBase1 を間に挟んだり LY1 を使ったりする必要はなく、直接 T1 にすればよくて、そのときに使う T1-WGL4.enc については 8 ページや 14 ページで言及しています)

したがって、ここは、

…初めから diacritical mark 付きのグリフを含む T1 エンコーディングが 作られました。

と言うべきで、その続きは、

TeXBase1 や LY1 は ともに PostScript フォント や TrueType フォント を LaTeX で使用することを念頭に作られたエンコーディングですが,配置が若干異なります TeXBase1 や LY1 に 収録されているグリフが必ず PostScript フォント や TrueType フォント に含まれるというわけでもありません)

のように直して、且つ、説明の順番として、LY1 については TeXBase1 よりも後ろで言及したほうが良かったように思います。

去年の 11 月 15 日の 【訂正・追記】 でのんきに、「LY1 と T1 はかなり違いますよね」 とかと書いたときに、おかしいと気付くべきでした。

Added: October 15, 2012.


【補足】

去年の 11 月 15 日の 【訂正・追記】 には、

こうして見ると、LY1 と TeXBase1 ってよく似てますよね (特に 0x20 〜 0xFF の部分)。まぁ、元々のコンセプトが同じなのだから、似ていて当然ともいえますが。

とも書きましたが、実際、TeXBase1 と LY1 は、使われ方が違うだけで、中味はほぼ一緒です。

Type1 フォントを LaTeX で利用する際には、慣例的には、Type1 に通常含まれているグリフ群全体を一旦 TeXBase1 で表に出した上で、テキストについては OT1 や T1 から vf を介して TeXBase1 にアクセスし、記号類については同様に TS1 からアクセスするという 2 本建ての方針がとられますが、LY1 を使えば、Type1 フォントに含まれているグリフ群全体に LY1 だけで直接アクセスすることが出来ます。また、普通の Type1 フォントには T1 や TS1 特有のグリフ達は含まれていないことが多いので、元々 TeX 用に作られたのではない Type1 フォントを利用する際には、LY1 で十分だったりします。

ただ、LY1 だと元々 Type1 に含まれているグリフしか出せないように見えるのに、PSNFSS バンドルでは、TeXBase1 に帰着されているにも拘わらずちゃんと T1 特有のグリフも出力されているのが、不思議に思えます。これは、afm2tfm や ttf2tfm だと vf ではエンコーディングの変換しか出来ない (多分) のに対して、fontinst を使っていると思われる PSNFSS では、vf でグリフを合成していることによります。

例えば、T1 の 129 番 (16 進の 81 番, 8 進の 201 番) の “Aogonek” というグリフは、一般的な Type1 フォントには含まれていないので、TeXBase1 にも LY1 にもありません。

ここで、t1enc.def を見ますと、

\DeclareTextCommand{\k}{T1}[1]
   {\hmode@bgroup\ooalign{\null#1\crcr\hidewidth\char12}\egroup}

というコマンドも用意されているものの (T1 の 12 番は “ogonek” です)

\DeclareTextComposite{\k}{T1}{A}{129}

と宣言されていますので、確かに T1 では、\k{A} は、単独の 129 番のグリフを表わしています。

しかし、例えば、ptmr8t.vf の当該コードを確認してみると、

(MAPFONT D 0
   (FONTNAME ptmr8r)
   (FONTCHECKSUM O 4767720433)
   (FONTAT R 1.0)
   (FONTDSIZE R 10.0)
   )
…中略…
(CHARACTER O 201
   (CHARWD R 0.721997)
   (CHARHT R 0.677991)
   (CHARDP R 0.160492)
   (COMMENT
      (KRN C y R -0.091992)
       …中略…
      (KRN O 230 R -0.104993)
      )
   (MAP
      (PUSH)
      (MOVERIGHT R 0.482996)
      (SETCHAR O 10)
      (POP)
      (SETCHAR C A)
      )
   )

となっているので、実は、ptmr8t.tfm からは単独のグリフのように見える T1 の 129 番 (O 201) は、vfptmr8r.tfm の 8 番 (O 10: ogonek) と A (C A) とを合成しているということが分かります。

なお、ly1enc.def を見ると、こちらでも、

\DeclareTextCommand{\k}{LY1}[1]
           {\oalign{\null#1\crcr\hidewidth\char7}}

が用意されているので、LY1 でも \k{A} とすれば、 “Aogonek” を合成することが出来ます (LY1 の 7 番は “ogonek” です)

Added: October 17, 2012.


【補足】

Ulrik Vieth & Taco Hoekwater, Surviving the TeX font encoding mess: Understanding the world of TeX fonts and mastering the basics of fontinst, EuroTeX '99 Heidelberg, 24. September 1999. ($texmf/doc/fontinst/base/talks/et99-font-tutorial.pdf) というスライドの p. 24 に、TeXBase1 (8r) と LY1 (8y) についての説明が載ってましたので、転記しておきます:

Added: November 4, 2012.


【追記】

11 ページに、

以上のようなファイルの依存関係があるので,dvips で任意の map ファイルを読み込むには,

のいずれかの方法をとることになります。

などと回りくどいことを書いてしまいましたが、こんな間接的なやり方ではなく、直接 map ファイルを指定する “-u” というオプションがあるようです (cf. ZR さんのブログ: 文書内でフォントマップを指定する命令

dvips のヘルプを見ると、ちゃんと、

-u s PS mapfile
s = string

とあって、マニュアルにも、

-u psmapfile
Set psmapfile to be the file that dvips uses for looking up PostScript font aliases. If psmapfile begins with a ‘+’ character, then the rest of the name is used as the name of the map file, and the map file is appended to the list of map files (instead of replacing the list). In either case, if the name has no extension, then ‘.map’ is added at the end.

との説明がありました。

Added: February 11, 2013.


【訂正】

註(2) で触れた Walter Schmidt さんの web page の url が、去年の 11 月末に変更になっていたようです:

〔旧〕 http://home.vrweb.de/~was/fonts.html

   ↓

〔新〕 http://www.cq131a.de/fonts.html

Added: February 16, 2013.


【追記】

7 ページの 「5 エンコーディングについて」 の冒頭で、

通常の欧文 PostScript フォントは 8 ビットエンコーディングです (ややこしいですが,PostScript フォントに収録され得るグリフ数が 256 個までということではありません.コードを割り当てられるのが 0 から 255 までということです)。TrueType フォントや OpenType フォントでは,256 個よりもずっと多くのグリフが収録されていますので,その分 (La)TeX で使うには工夫が必要となります。

というようなことを書きました。

例えば、lmr10.afm の中を見てみますと、“StartCharMetrics 821” とあるので、LMRoman10-Regular (lmr10.pfb) には、821 グリフが含まれていることになります (多分)

12 ページの 「8 実例に即して」 の部分でも、

times.ttf の場合,3,000 個近いグリフが含まれているようですので,“-q” を指定しないと,何千行もの情報がディスプレイ上を流れていきます。

みたいなことを書きました。

実際、適当なツールで調べてみますと、“numGlyphs: 3416” というような情報が得られるので、times.ttf には 3416 グリフが含まれているようです (多分)

OpenType フォントの場合も、例えば、最近 Linotype がフリーで配布してくれた GalliardPro-Roman.otf について、適当なツールを使ってグリフ数を数えてみますと、636 グリフが含まれているようです (多分)

※ なお、Latin Modern や Times New Roman には当てはまりませんが、フォントによっては、同一文字について複数のバリエーション (異体字) を含んでいるようなものがあります (Type1 や TrueType でも異体字を含んでいるフォントはあります)。GalliardPro-Roman は OpenType フォントなので、異体字が含まれている可能性が高そうです。グリフ名だけを見ても “a.fin” とか “e.fin” なんかがそれっぽい感じです。

で、これらのフォントについて、含まれているグリフの全体とか、異体字のバリエーションとかを確認したいと思ったのですが、(La)TeX を使うとなるとちょっと面倒ですよね… (いえ、もちろん、「XeTeX か LuaTeX 使え」、と言われるのでしょうけど)

testfont.tex ですとか nfssfont.tex というのが一応用意はされてますけど、これらを使うには、いずれにせよ tfm は作っておかないといけませんし、enc ファイルを用意して dviware/driver の map の設定もしておかないといけません。それに多分、扱えるグリフ数は 256 個までになりそうです。

グリフ名は調べられるので、そのグリフ名を使って enc ファイルを作って、その enc ファイルを使って tfm を作って、dviware/driver の設定もすれば、LaTeX を使ってそのフォントに含まれている全グリフを見るということも可能ではあります (実際グリフ名を 256 個ずつに切り分けて enc ファイル作って tfm 作って dviware/driver の設定をしたらうまくいきました)。でもやっぱり面倒くさい。

エンコーディングとかグリフ数の制約とかにとらわれずに、当該欧文フォントに含まれているグリフの一覧をもっと簡単に見る方法はないのかなぁ、と思っていましたら、otftotfm のマニュアルに次のような方法が書いてありました:

Glyph names. Example: "Aacute". For PostScript-flavored fonts, use otfinfo's -g option to see a font's glyph names, and "cfftot1 font.otf | t1testpage" to generate a PostScript file showing each glyph.

おーっ、“t1testpage” なんていうステキなツールがあるのですね! t1testpage のマニュアルの Description には、

T1testpage creates a PostScript proof document for the specified Type 1 font file and writes it to the standard output. The proof shows every glyph in the font, including its glyph name and encoding. The font argument should be the name of a PFA or PFB font file.

とあります。

それで、試してみた結果を以下に簡単にまとめておきます:

(1) pfa または pfb の場合

Type1 の pfapfb の場合はそのまま t1testpage に渡せば、全グリフの一覧の PostScript ファイルが出来ます:

t1testpage fontname.pfb > fontname.ps

この例では PostScript ファイルの名前を元のフォントと同名にしていますが、もちろん名前は任意で構いません。

(2) otf の場合

otftotfm のマニュアルにある通り、cfftot1 を一緒に使って、

cfftot1 fontname.otf | t1testpage > fontname.ps

とすれば、同様に PostScript ファイルが出来ます。

(3) ttf の場合

Type1 に変換するのに ttf2pt1 を使ってみました。エンコーディングに関係なく全グリフを見たいので “-a” というオプションを付けて、あと、pfa にするには “-e”、pfb にするには “-b” というオプションを付けます:

ttf2pt1 -a -e fontname.ttf 

これで fontname.ttf から fontname.afmfontname.pfa が出来ます -b の場合は、fontname.pfb が出来ます)。あとは (1) と同様に、

t1testpage fontname.pfa > fontname.ps

でグリフの一覧が得られます。

なお、いずれの場合も、fontname.psghostscript を使って pdf にしておくと便利ですね。

※ ちなみに、上で触れた GalliardPro-Roman.otf に含まれている異体字の一部やりガチャを抜き出してみますと、こんな感じです:

Added: March 10, 2013.


【訂正】

11 ページに、

dvipdfmx.cfg には既に,

の 3 行が書き込まれています。後述の updmap はこのうちの “pdfmfnt.map” にエントリを追加していきます。

と書きましたが、ペーパー執筆時の私の手元の W32TeX は 2010 年 4 月 1 日にインストールしたものでした。

タイムスタンプが [2013/06/05] の最近の dvipdfmx.cfg を見ますと、現在デフォルトで読み込まれている map ファイルは、

f psbase14.map
f dvipdfm.map
f cid-x.map

となっていますので、updmap がエントリを追加する map も今は、pdfmfnt.map ではなくて、dvipdfm.map のようですね。

Added: June 18, 2013.


【訂正】

W32TeX [2016/03/12] 以降の dvipdfmx.cfg では、デフォルトで読み込まれる map ファイルは、

f dlbase14.map
f dvipdfm.map
f kanjix.map

に変更されたようです (今回変更されたのは、cid-x.mapkanjix.map であって、psbase14.mapdlbase14.map への変更は [2016/01/18] です)。[forum: 1865]

Added: March 25, 2016.


home