fontinst パッケージは Type 1 フォント(.pfb)などを TeX で使えるようにするためのパッケージです。teTeX には標準で含まれています。
以下の文書が大変参考になります。
下は fontinst パッケージの解説ですが、上の方が詳しく解説されているので、まずは 上の fontinstallationguide.pdf を見ることを勧めます。
Type 1 フォントを TeX で使えるようにするには、.afm ファイルから .tfm ファイルや .vf ファイルを作って… という作業が必要で、骨が折れます。その作業を TeX の形式で .tex ファイルに記述しておくと
$ tex hoge.tex
を実行するだけで .tfm, .vf, .enc, .fd ファイルから、.map ファイルまでを生成することができます。
さらに、Type 1 フォントで用意されていないスラント体(slanted)やスモールキャプス体を機械的に生成させることもできます。
以下ではフォントファミリ名を xxx で代表させています。適宜読みかえてください。
インストールの方法に関わらず、fontinst を実行する前に次の作業を済ませておく必要があります。
最初にファイル名を Berry 則にもとづいて変更しておきます。
を参考にファイル名を変更します。
Type 1 ファイルを入手した場合、.pfb ファイルに .afm ファイルが付属してくるはずですが、付属しない場合があります。この場合は .pfm ファイルが付属しているはずです。これを用いて .afm ファイルを生成します。
pf2afm, type1afm を使って .afm ファイルを作成します。pf2afm, type1afm については Type 1 フォント をご覧ください。
上の方法で作った .afm ファイルには合字(リガチャ)の情報が欠落している可能性があります。例えば、fi や fl の合字(リガチャ)が用意されていることが多いですが、.afm ファイルからは欠落してしまうことがあります。これを手動で追加しておきます。
それぞれの .afm ファイルから、`N f' と書かれている行を探します。たとえば
C 102 ; WX 322 ; N f ; B 27 -2 429 711 ;
という行です。この行の最後に
L i fi ; L l fl ;
を追加して次のようにします。
C 102 ; WX 322 ; N f ; B 27 -2 429 711 ; L i fi ; L l fl ;
これは、`f' の文字に関して、リガチャ(Ligature)を `i' と `l' の組合せに対して行う、という意味です。
.afm ファイルを修正したら忘れずに保存しておきます。
fontinstallationguide.pdf の第2章の記述にもとづいています。
この方法では、若干記述する内容が多くなりますが、その分柔軟な設定が可能です。
.tfm, .fd, .vf, .map ファイルを生成するための fontinst のファイルを作成します。ファイル名は何でもよいですが、ここでは `xxx-driver.tex' としておきます。
なお、ここでは次の .pfb, .afm ファイルが用意されているものとします。
スモールキャップ体(small cap)と斜体(slant)は上に含まれていませんので、直立体(xxxr8a, xxxb8a)から機械的に生成することにします。
%%% Section 1 \input fontinst.sty \substitutesilent{bx}{b} \setint{smallcapsscale}{800} \setint{slant}{167} \recordtransforms{xxx-rec.tex} %%% Section 2 %% make .tfms \transformfont{xxxr8r}{\reencodefont{8r}{\fromafm{xxxr8a}}} \transformfont{xxxri8r}{\reencodefont{8r}{\fromafm{xxxri8a}}} \transformfont{xxxb8r}{\reencodefont{8r}{\fromafm{xxxb8a}}} \transformfont{xxxbi8r}{\reencodefont{8r}{\fromafm{xxxbi8a}}} % slant \transformfont{xxxro8r}{\slantfont{\int{slant}}\reencodefont{8r}{\fromafm{xxxr8a}}} \transformfont{xxxbo8r}{\slantfont{\int{slant}}\reencodefont{8r}{\fromafm{xxxb8a}}} %%% Section 3 %% installfonts (T1) \installfonts \installfamily{T1}{xxx}{} \installfont{xxxr8t}{xxxr8r,newlatin}{t1}{T1}{xxx}{m}{n}{} \installfont{xxxrc8t}{xxxr8r,newlatin}{t1c}{T1}{xxx}{m}{sc}{} \installfont{xxxro8t}{xxxro8r,newlatin}{t1}{T1}{xxx}{m}{sl}{} \installfont{xxxri8t}{xxxri8r,newlatin}{t1}{T1}{xxx}{m}{it}{} \installfont{xxxb8t}{xxxb8r,newlatin}{t1}{T1}{xxx}{b}{n}{} \installfont{xxxbc8t}{xxxb8r,newlatin}{t1c}{T1}{xxx}{b}{sc}{} \installfont{xxxbo8t}{xxxbo8r,newlatin}{t1}{T1}{xxx}{b}{sl}{} \installfont{xxxbi8t}{xxxbi8r,newlatin}{t1}{T1}{xxx}{b}{it}{} \endinstallfonts %%% Section 4 %% installfonts (TS1) \installfonts \installfamily{TS1}{xxx}{} \installfont{xxxr8c}{xxxr8r,textcomp}{ts1}{TS1}{xxx}{m}{n}{} \installfontas{xxxr8c}{TS1}{xxx}{m}{sc}{} \installfont{xxxro8c}{xxxro8r,textcomp}{ts1}{TS1}{xxx}{m}{sl}{} \installfont{xxxri8c}{xxxri8r,textcomp}{ts1}{TS1}{xxx}{m}{it}{} \installfont{xxxb8c}{xxxb8r,textcomp}{ts1}{TS1}{xxx}{b}{n}{} \installfontas{xxxb8c}{TS1}{xxx}{b}{sc}{} \installfont{xxxbo8c}{xxxbo8r,textcomp}{ts1}{TS1}{xxx}{b}{sl}{} \installfont{xxxbi8c}{xxxbi8r,textcomp}{ts1}{TS1}{xxx}{b}{it}{} \endinstallfonts %%% Section 5 \endrecordtransforms \bye
それぞれのセクションについて簡単に解説します。
おまじないです。`smallcapsscale' は大文字とスモールキャップとの比率(千分法)です。フォントによっては変えた方がよいかもしれません。
.afm ファイルから 8r エンコーディングにもとづいて .pl, .mtx ファイルを生成する指示です。あとで .pl ファイルを変換して最終的に .tfm ファイルを得ます。
% slant の部分で、斜体(slant)用の .pl, .mtx ファイルを生成する指示を出しています。斜体は直立体を約9.5°(0.167)機械的に傾けて作っています。\setint{slant}{167}の部分を変更すると傾きを調節できますが、通常はこのままでよいでしょう。
T1 エンコーディング用の .vpl ファイルを生成する指示です。newlatin.mtx, t1.etx にもとづいて xxxr8r から生成するということです。スモールキャップ体だけは t1.etx ではなく t1c.etx を用いていることに注意してください。これを用いると、直立体から機械的にスモールキャップ体を生成することができます。
TS1 エンコーディング用の .vpl ファイルを生成する指示です。TS1 エンコーディングは、T1 エンコーディングで拾いきれなかった記号等を集めたものに対するエンコーディングです。
\installfontas の行に注意してください。TS1 エンコーディングで使うのは記号のみですから、「スモールキャップ」という指示は意味がありません。そこで、「スモールキャップ」を「直立体とみなす」という指示を書き込んでおく必要があります。
結局上の作業で、次のシリーズ・シェイプが使えるようになります。
.map ファイル作成に必要な情報は、xxx-driver.tex を処理した後、xxx-rec.tex ファイルに記録されます。これを処理して .map ファイルを生成するためのファイルを作成します。ファイル名は xxx-map.tex としておきます。
\input finstmsc.sty \resetstr{PSfontsuffix}{.pfb} \adddriver{dvips}{xxx.map} \input xxx-rec.tex \donedrivers \bye
次のコマンドを実行します。
$ tex xxx-driver.tex $ tex xxx-map.tex
以下が fontinst を実行した後に必要になる(かもしれない)作業です。
fontinst を実行すると各種 .pl, .vpl ファイルができていますので、これらを変換して .tfm, .vf ファイルを生成します。
$ for i in *.pl; do pltotf $i; done $ for i in *.vpl; do vptovf $i; done
それぞれのファイルをコピーします。以下は Bitstream 社製の baskerville フォントの場合です。
ファイルの種類 | コピー先 |
---|---|
.afm | $TEXMFLOCAL/fonts/afm/bitstrea/baskerville |
.tfm | $TEXMFLOCAL/fonts/tfm/bitstrea/baskerville |
.vf | $TEXMFLOCAL/fonts/vf/bitstrea/baskerville |
.pfb | $TEXMFLOCAL/fonts/type1/bitstrea/baskerville |
.map | $TEXMFLOCAL/fonts/map/dvips/bitstrea/baskerville |
.fd | $TEXMFLOCAL/tex/latex/bitstrea/baskerville |
mktexlsr と updmap-sys を実行します。xxx には適切なファイル名を入れてください。
# mktexlsr # updmap-sys --enable Map=xxx.map
きちんとフォントが作成・インストールされているかどうか、テストしてみます。次のようなプリアンブルのファイルを作って適当に記述し、latex で処理してみます。なお、問題が起こったときに切り分けがしやすいので、platex ではなくて latex で処理した方がよいでしょう。同様に \documentclass は jsarticle などではなく、article にしておきます。xxx の部分にはフォントファミリ名(bbv など)を入れます。
\documentclass[a4paper,10pt]{article} \usepackage[T1]{fontenc} \renewcommand{\rmdefault}{xxx}
xdvi で表示させたり、dvipdfmx で PDF ファイルに変換してみましょう。PDF ファイルを作成したら、Adobe Reader などでフォント情報を表示させ*1 目的のフォントが Type 1 で埋め込まれているかどうか確認します。
テストがうまくいったら、簡単に使えるように .sty ファイルを作成しましょう。次のものは Baskerville フォントの例です。
の部分と日付・バージョンを書き換えて使ってください。
\NeedsTeXFormat{LaTeX2e} \ProvidesPackage{bbaskerv}[2006/10/02 v1.0 Bitstream xx] \RequirePackage[T1]{fontenc} \RequirePackage{textcomp} \renewcommand*{\rmdefault}{xxx} \endinput
オプションをつけるときは \renewcommand*{\rmdefault}{xxx} の代わりに次のような記述にします。
\DeclareOption{book}{\renewcommand*{\rmdefault}{xxxk}} \DeclareOption{regular}{\renewcommand*{\rmdefault}{xxx}} \ExecuteOptions{regular} \ProcessOptions\relax
.sty ファイルができたら $TEXMFLOCAL/tex/latex/bitstrea/baskerville などにコピーし、mktexlsr を実行しておきます。
platex で文書を処理すると、次のような警告が出ます。
LaTeX Font Warning: Font shape `JY1/mc/m/sc' undefined ... LaTeX Font Warning: Some font shapes were not available, defaults substituted.
これは、日本語にスモールキャップ体などが定義されていないために出る警告です。無視して構いません。
に説明があります。
この警告を出さないようにするためには
などの解説が役に立ちます。