Acetaminophen’s diary

化学に関すること,TeXに関すること,ゆきだるまに関すること。

TeX のフォントの文字一覧表:testfont

昨日の記事で、CountriesOfEurope というフォントを紹介した。しかし、実際にフォントであるということがにわかには信じがたい。そこで、TeX で「あるフォントに含まれる文字の一覧表」を作成して、証明してみる。ただし、そもそもフォントの一覧表を作ったことがないユーザも多い気がするので、一般論としての作り方から説明する。手元では TeX Live 2014 と W32TeX で実行できた。下は Dingbats の一覧表*1

f:id:acetaminophen:20150219201117p:plain

 

testfont による一覧表作成

実は、既に TeX Wiki に記述がある。そこには

tex testfont

なるコマンドを使う、と書かれている。さて、これは何なのか?

答えは簡単で、tex (plain TeX) で testfont.tex というファイルをタイプセットしているだけである。最近の TeX ディストリビューションなら texmf-dist/tex/plain/knuth-lib/testfont.tex に存在するはずである。

意外なことに、ファイルの場所の見つけかたも LaTeX ユーザには知られていないことが多い。パッケージの場所を探すのに苦労したという文句も時々聞くが、探し方はいたって簡単で
kpsewhich testfont

と入力すればよい(拡張子tex の場合は省略できるが、パッケージの sty の場合は省略できない)。

理解したところで早速コマンドを実行し、testfont をタイプセットしてみよう。この testfont.tex の中には数回ユーザの入力を求める部分があって、入力を解釈してその後の処理を決定する。

フォント名の指定

まずは

Name of the font to test =

と聞いてくる。ここに入力するのは

目的のフォントの TFM ファイルの、拡張子 .tfm を除いたファイル名

である*2。TFM ファイルはどこにあるかというと $TEXMF/fonts/tfm 以下で、ここにある .tfm ファイル名を入力すれば処理できる。TeX Wiki では例として pzdr が挙げられているが、別に Computer Modern の cmr10 でも何でもよい。

出力形式の指定

次に

Now type a test command (\help for help):

と言われる。ここで、例えば \table と入力すると表形式で出力されるし、\text と入力するとサンプルテキストが出力される。メッセージにあるとおり \help とすればヘルプが表示されて便利である。

あとは終了するのみ

最後に \end または \bye と入力すれば、タイプセットが完了して dvi ファイルが出力される。dvi を開いてみるのもよいが、PDF に変換した方が便利であろう。早速 dvipdfmx で変換する。

dvipdfmx testfont

このときは当然、実フォントファイルが存在しなければならない。ただし先ほどの例のうち、cmr10 は Computer Modern フォントがサブセット埋め込みされるが、pzdr の場合は欧文基本14書体なので

  • W32TeX では実際には埋め込まれず、Adobe Reader で PDF ファイルを開くと AdobePiStd で代替表示される
  • TeX Live では実際に PDF ファイルに Dingbats が埋め込まれる

はずである(ご指摘いただいた ut さん、ありがとうございます)。

この方法で出力された表の例が、こちらに多数公開されている。ちなみに説明では tex でタイプセットしたが、どうせ PDF にするのならもちろん pdftex でも大丈夫(要は LaTeX でなく plain TeX なら OK)*3

 

というわけで実際に

tex testfont

に続いて

CountriesOfEurope
\table
\end

と入力すると、以下のような一覧表を得る(W32TeX の場合は CountriesOfEurope 一式をインストールする必要がある)。

f:id:acetaminophen:20150214002003p:plain

 

fntproof で一覧表を一発作成

以上の testfont でも一覧を作成できたわけだが、いちいち質問に答える形で入力するのは面倒だと思うかもしれない。そういう場合に便利なのが、コマンドライン一発で処理できる fntproof.tex である。TeX Live には標準で含まれているが、W32TeX の場合は別途入手する。コマンドを一回入力するだけで済む:

  • Windows の場合:
    tex fntproof cmr10 \table\end
  • UNIX 系の場合:
    tex fntproof cmr10 \\table\\end

これで先ほどの testfont と全く同じ一覧表の dvi ファイルが出力される*4。もちろんこちらも pdftex でタイプセットしてもよい(LaTeX でなく plain TeX なら OK)。

 

fonttable パッケージで一覧表作成

もうひとつ簡単な方法が、fonttable.sty を用いる方法である。こちらは LaTeX パッケージになっていて、TeX Live と W32TeX に含まれている。熊澤先生のページに使用例がある*5。以下のようなソースを作成する:

TeX のフォントの文字一覧表:fonttable 作成

これを LaTeX で処理する(plain TeX ではない)。

pdflatex fonttable-CountriesOfEurope.tex

こちらの出力は以下のようになる。

f:id:acetaminophen:20150214002021p:plain

 

fonttable パッケージは他にもさまざまな機能を持つ。一覧表作成に関しても、次のようなフォント指定が可能である。

\xfonttable{encoding}{family}{series}{shape}

という .tfm よりは幾分なじみがありそうな指定もある。

  • エンコーディングは例えば T1 とか OMS とか
  • ファミリは cmr とか qhv とか lmtt とか
  • シリーズはウェイト(medium の m とか boldface の b とか)
  • シェイプは normal の n とか small caps の sc とか

なので、TFM 名を調べるよりは楽であろう(美文書にもファミリ名なら載っている)。

 

表の見方であるが、ちょうど最近評判の ASCII コードの解説記事があるのでリンク。

素晴らしい記事だ。こちらの表と見比べてみると、単に縦と横が入れ替わっているだけである。testfont の表には8列あり、上下左右に軸があって多少見づらい気もするが、上と左の軸は8進数表示で、下と右の軸は16進数表示だ。左の軸に対して右の軸は2行を結合しているが、その2行がまとめて16進数の一周分(1行目が10進数でいうところの0から7:上の軸に対応、2行目が8から15:下の軸に対応)になる。

ちなみに、数字の前の '" はそれぞれ8進数と16進数であることを示す記号。

この表さえ丸暗記すれば、例えばあの日めくりカレンダーがたまに何月何日か分からなくて困ることもなくなる。おまけはこちら

*1:TeX Live ならデフォルトで「欧文14書体」が埋め込まれるため、出力した PDF を開いた時点で Dingbats が表示される。しかし、W32TeX で同じ処理を行うと「欧文14書体」が埋め込まれないため、Adobe Reader で開くと以下のように AdobePiStd で代替表示される(ご指摘いただいた ut さん、ありがとうございます):

f:id:acetaminophen:20150214005151p:plain

*2:TFM ファイルとは TeX Font Metric のことで、フォントの字幅の情報を持ったファイルである(例えばアルファベットの I は狭いが M は広いとかそういうこと)。TeX組版処理の過程で参照するのはこの TFM ファイルのみであり、フォントの実体を参照することなく TFM ファイルを元に文字(ノード)を配置する。この TFM ファイル名を TeX に教えるのが、第一段階の入力である。

*3:もし pdftex を使った場合は、W32TeX でも TeX Live でも PDF ファイルに Dingbats が埋め込まれる。

*4:なぜ WindowsUNIX でコマンドが違うかというと、Windows PowerShell や Command Prompt では \ が特殊文字でないので普通に扱えるのに対し、UNIX 系のシェル(bash など)では特殊文字だからである。

*5:3日連続で熊澤先生登場です!