* あるフォントの一覧を作成して,表示を確認する [#me3d4919]

TeX を使って,あるフォントに含まれる文字の一覧を作成して,コードポイントと記号の対応表を出力することができます.
フォントの見た目を確認したい場合や,記号の番号を知りたい場合に役立ちます.

----
#contents
----


** testfont のタイプセット [#da579b57]

たとえば pifont の一覧を作成したくなったら,任意のディレクトリで((ちなみに,TeX 関係のコマンドは,ソースを TEXINPUTS 変数に記述してあるディレクトリから見つけ出してきて,コンパイルします.出力結果はデフォルトではカレントディレクトリに置かれます.TEXINPUTS 変数はプログラム名によって異なり,platex 用ならば TEXINPUTS.platex というような形で texmf.cnf に記述されています.))
 tex testfont
とコマンドを打ち,その後,ヘルプを参考にしながら
 pzdr
 \table
 \end
と打てば,表が出力されます.
pzdr というのは pifont の TFM 名です.

PDF 形式に変換した表を &ref(testfont.pdf); に置いておきます(『美文書作成入門』第 2 版 pp. 232--233,第 3 版以降の付録にあるものと同じです).

これを簡単にするには,たとえば名前が tab.tex で,内容が
 \input testfont \table \end
なる一行のファイルを TEXINPUTS で探せるディレクトリに置いておきます.そうして
 echo pzdr | tex tab
とすれば一発で tab.dvi ができます.
>
-''Unix あるいは Unix 互換 shell を使っている場合''は,この方法で問題ないはずです.
-''Windows のコマンド プロンプトの場合''は,Windows 7 で試したところうまくいきました.
昔の Windows のコマンド プロンプトの場合,Unix の場合と
echo とパイプの仕様が異なっていて上のようにできなかったようですが,現在はできるようです.
// もしできなかった場合は
//  tex tab
// のあと,TeX からのプロンプトに答えてフォント名
//  pzdr
// を入力したら tab.dvi ができます.
<

// % Windows 7 のコマンド プロンプトで
// echo pzdr | tex tab
// とすると,問題なく tab.dvi ができたけど,何かまちがったかな?
// %% 確かにできますね.ここは昔の記述をそのまま残したものですが,仕様が変わったのでしょうか?

なお,ファイル testfont.tex については『The METAFONTbook』(D.E. Knuth 著)の
Appendix H の第 4 節(“フォントサンプル”の節)
// あるいは『LaTeX2e マクロ&クラス プログラミング実践解説』(吉永徹美 著)の補遺 B
に説明があります.

-[[フォントテーブル - 松浦高志のWikiページ:http://user.ecc.u-tokyo.ac.jp/users/user-15826/wiki/?TeX/Font/FontTable]]
-[[フォントテーブル - 松浦高志のWikiページ:https://museion.sakura.ne.jp/wiki/?TeX/Font/FontTable]]


** 他の方法 [#f991f19c]

testfont のインタラクティブな入力を手間だと感じる場合は

-[[fntproof:https://ctan.org/pkg/fntproof]] を用いる方法
-[[fonttable:https://ctan.org/pkg/fonttable]] という LaTeX パッケージを用いる方法

があります.
testfont や fntproof では TFM 名を調べる必要がありますが,fonttable.sty なら
 \xfonttable{U}{pzd}{m}{n}
のような「エンコーディング,ファミリー,シリーズ,シェイプ」という指定ができます((testfont.tex を改変した nfssfont.tex というものもあり,こちらを使うと,インタラティブかつ「エンコーディング,ファミリー,シリーズ,シェイプ,サイズ」という指定ができます.nfssfont.tex は tex ではなく,latex で処理します.なお fonttable.sty は,nfssfont.tex を LaTeX パッケージの仕様にしたものです.)).
ファミリー名のほうがもう少しアクセスしやすいと思われます(美文書にもファミリー名を掲載).

-[[fonttable.sty: LaTeX パッケージ:http://www.biwako.shiga-u.ac.jp/sensei/kumazawa/tex/fonttable.html]]
-[[TeX のフォントの文字一覧表:testfont:http://acetaminophen.hatenablog.com/entry/2015/02/14/004641]]


** 実際に埋め込まれるフォントに関する注意 [#fa18401d]

PDF ではフォントが埋め込まれていないと代替フォントが充てられます.
// -DVI や PS では『美文書』と同じフォントで見えるが,PDF だと異なることがある.
例えば上の例で挙げた Zapf Dingbats フォントの場合は,埋め込まれていなければ
Adobe Acrobat Reader DC では代替フォントとして AdobePiStd が充てられます.

欧文 14 書体(Times, Helvetica, Courier 各 4 書体に記号用フォントの
Symbol と Zapf Dingbats を加えたもの)の扱いは,デフォルトでは以下のようになっています.
/// -http://acetaminophen.hatenablog.com/entry/2015/02/14/004641
/// -https://twitter.com/aminophen/status/568380041106567168
-TeX Live -- dvipdfmx も pdftex も埋め込む
-W32TeX -- dvipdfmx も pdftex も埋め込む

Adobe のフォントは商品ですので,埋め込むためには購入する必要があります.
そこで,多くの方は欧文基本 14 書体を埋め込むために URW のフォントを利用しています.
W32TeX の dvipdfmx で URW のフォントを埋め込むのに使う map は dlbase14.map です.

/// というわけで,長らくこのページに残っていた以下の記述をより正確にしたつもりです.
// --PDF に Zapf Dingbats フォントを埋め込むには,dvipdfmx.cfg ファイルの下の方に
//  f embase14.map
// と書き込んで(もし % f embase14.map とすでに書いてあれば % を外して),普通に
// dvipdfmx コマンドを掛ければよい(こうしておくと
// Adobe の Times, Helvetica, も埋め込まれます).


** 一覧表の利用例 [#j0bf8600]

- 記号の番号が分かれば,たとえば [ を出力したければ,
 \symbol{'133}
と入力すれば良いことがわかります(初めの ' は 8 進の識別子).

- たとえば [[YaTeX]] の色付けでは,16 進の識別子としての " を解釈しないので,本文中に
" が 1 つだけあるとそれよりうしろの文字列がすべてピンク色になってしまって不便です((そもそも " を *TeX-mode 中で打つには,C-q " としなければなりませんが.)).よって,8 進の表記が出てくる
testfont は便利!


** Bad Know-How [#zebdcd9a]

上の例では pzdr というフォント名が何気なく出ているが,実際はどう調べるのか?

pzdr のような TFM 名を知るのは少々難しいので,これを知るためのトリックの説明です.
ただし,上述のとおり fonttable.sty を使えば,TFM を知る必要がなくなります.
それでも,この項(コメントアウト部分も含む)は,フォントの扱いに対する理解を深める助けとなるはずです.
[[TeX とフォント>TeXとフォント]]にも簡単な説明があります.

/// まともに読むのは難しいのですか?
/// 私が下に書いた方法は,いかにも Bad Know-How なので,上のコメントは,
/// 表に出すことに十分値すると思うのですが.
/// どんな書物か参考文献としてページ番号とともに列挙していただけると
/// なお嬉しいと思います.
/// TeX のフォント関係については知識が乏しく,pzdr などと言ったときに
/// tfm を指しているのか mf なのか,type1 なのかといったあたりが
/// 分からないので,よろしくご教授ください.

// 「難しい」かどうかは主観の問題でしょう.
// とりあえず,ごく簡単な記述をいれてみます.
//
// なお,TeX 自身が使用する(ここでは,各種 dviware をはじめとする
// TeX 関連ツールと TeX 自身とは厳格に区別します)のは tfm ファイル
// (和文フォントに関しては jfm ファイル)ですから,
// fd ファイル内に記述されているファイル名あるいは \font による
// フォント識別子の定義時に与えるフォント名(もちろんファイル
// testfont.tex 使用時に尋ねられるフォント名も)は
// tfm/jfm ファイル名になります.
// あとは,各種 dviware が dvi ファイル中の tfm/jfm ファイル名に応じた
// 処理を行います.dviout for Windows でしたら,特に TrueType 版の
// computer modern フォントを使用するための設定を行っていなければ,
// computer modern フォントに対しては mf ファイルから PK 形式の
// フォントを生成・使用することを試みるでしょう.
// 一方,dvips(k) や dvipdfmx では map ファイルの中に tfm/jfm ファイルと
// 実際に用いられるフォント(PostScript Type1 フォントなど)の対応関係を
// 記述し(もちろん,書式は dvips(k) 用の map ファイルと dvipdfmx 
// 用の map ファイルとでは異なりますが),それに基づいて処理が行われます.
// ただし,仮想フォントが用いられていた場合には,
//   dvi ファイル中のフォント(tfm/jfm ファイル)名・文字コード
//   ↓
//   仮想フォントによる変換(ここは複数段階になることもあります)
//   ↓
//   実際に使用されるフォント(tfm/jfm ファイル)名・文字コード
// という処理が挟まるので,fd ファイルにおけるフォント名が
// map ファイルに現れないということも起こります
// (例えば,ptmr8t と ptmr8r の関係).
// 他の dviware でも同様で,何らかの形で tfm/jfm ファイル名と
// 実際に使用するフォントとの対応関係を与える必要があります.
// そして,実際に使用するフォントが PostScript Type1 フォントなのか,
// TrueType フォントなのか(あるいは,フォントの実体は一切埋め込まずに
// 出力環境で代替してもらうことにするのか)という点は dviware ごとに
// (さらには個々のフォントに対する設定に応じて)異なります
// (それゆえ,TeX そのものについての解説では実際に使用される
// フォントの形式には関知しない,ということにもなるのですが…).

/// ものすごく理解が深まりました.ありがとうございます.
/// 新しい解説部分は表には出さないのですか? 半角空白を前に 1 つずつ置けば,
/// ダブルスラッシュのついた形式 (C++ や JAVA 風) のコメントアウト
/// 表示ですぐに表に出るのですが.
/// たとえば
 // このページの中では,コメントアウトの形でもいろいろな情報が提供されています.
 // 興味のある方は [[差分]] をクリックして,読むとためになるでしょう.
/// というように.

// dviware に関することについては,“専門外”の私が書いた(上記の)ものよりも
// 各種 texware/dviware のマニュアルを参照なさるほうがよろしいでしょう.
// また,各種の会員制コミュニティが持っているデータの中に
// TeX 関連ツールでのフォント関係の設定等に関する日本語で読める
// 優れた解説があるかもしれません.

-『美文書...』などの書物でファミリ名を調べて,そのまま打ち込んだだけでは NG となることが多いでしょう.

(例)
 $ tex testfont
 This is TeX, Version 3.141592 (Web2C 7.5.2)
 encTeX v. Feb. 2003, the reencoding enabled. initialized from format, the reencoding enabled.
 (c:/usr/local/share/texmf/tex/plain/base/testfont.tex
 
 Name of the font to test = pzd
 kpathsea: Running mktextfm pzd
 Cannot find pzd.mf.
 kpathsea: Appending font creation commands to missfont.log.
 ! Font \testfont=pzd not loadable: Metric (TFM) file not found.
 (以下略)

-おおよそのフォントでは [ファミリ名+シェイプ+サイズ (8 とか 10 とか)] で何とかなるが,Bad Know-How としては,cmr10 は普通よく使われているので,ないはずがない.よって,
 find | less
 /cmr10
などとして,cmr10 のまわりのフォント名を見れば(ある程度の規則性さえ見つければ),そこそこ的中します.

-fd ファイルの記述内容を理解できる場合には,fd ファイルを読むとフォントの属性と実際に用いられるフォント名(tfm ファイル名)の対応を知ることができます.
上記の ZapfDingbats(エンコーディング,ファミリー,シリーズ,シェイプはそれぞれ,U,pzd,m,n)の場合には,ファイル upzd.fd の中の
 \DeclareFontShape{U}{pzd}{m}{n}{<->pzdr}{}
という記述によってサイズによらずフォント pzdr を適当に拡大・縮小して用いる,ということがわかります.
なお,ZapfDingbats は数式用ではない記号ばかり収めたフォントですから,そのようなフォントのエンコーディングは U(不規則あるいは未知のもの)になります.
fd ファイルの記述内容あるいは fd ファイルのファイル名のつけ方については,NFSS に関する解説を含む書籍を参照してください.例えば,次のようなものがあります.

--『LaTeX コンパニオン』(M. Goossens,F. Mittelbach,A. Samarin 共著)
// 今手元にないのでどのあたりに記述してあるかは確認できませんが,載っていたはずです.
--『pLaTeX2e Another Manual vol.2』(乙部厳己,江口庄英 共著)7.3 節
// --『LaTeX2e マクロ&クラス プログラミング実践解説』(吉永徹美 著)1.2 節