TeX/Font

fontinst パッケージ

fontinst パッケージは Type 1 フォント(.pfb)などを TeX で使えるようにするためのパッケージです。teTeX には標準で含まれています。

参考

以下の文書が大変参考になります。

下は fontinst パッケージの解説ですが、上の方が詳しく解説されているので、まずは 上の fontinstallationguide.pdf を見ることを勧めます。

以下は fontinst に関する議論です。

概要

Type 1 フォントを TeX で使えるようにするには、.afm ファイルから .tfm ファイルや .vf ファイルを作って… という作業が必要で、骨が折れます。その作業を TeX の形式で .tex ファイルに記述しておくと

$ tex hoge.tex

を実行するだけで .tfm, .vf, .enc, .fd ファイルから、.map ファイルまでを生成することができます。

さらに、Type 1 フォントで用意されていないスラント体(slanted)やスモールキャプス体を機械的に生成させることもできます。

以下ではフォントファミリ名を xxx で代表させています。適宜読みかえてください。

準備

インストールの方法に関わらず、fontinst を実行する前に次の作業を済ませておく必要があります。

フォント名の変更

最初にファイル名を Berry 則にもとづいて変更しておきます。

を参考にファイル名を変更します。

.afm ファイル

Type 1 ファイルを入手した場合、.pfb ファイルに .afm ファイルが付属してくるはずですが、付属しない場合があります。この場合は .pfm ファイルが付属しているはずです。これを用いて .afm ファイルを生成します。

.afm ファイルの生成

pf2afm, type1afm を使って .afm ファイルを作成します。pf2afm, type1afm については Type 1 フォント をご覧ください。

.afm ファイルの修正

上の方法で作った .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}{720}
\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

それぞれのセクションについて簡単に解説します。

Section 1, 5

おまじないです。`smallcapsscale' は大文字とスモールキャップとの比率(千分法)です。フォントによっては変えた方がよいかもしれません。

Section 2

.afm ファイルから 8r エンコーディングにもとづいて .pl, .mtx ファイルを生成する指示です。あとで .pl ファイルを変換して最終的に .tfm ファイルを得ます。

% slant の部分で、斜体(slant)用の .pl, .mtx ファイルを生成する指示を出しています。斜体は直立体を約9.5°(0.167)機械的に傾けて作っています。\setint{slant}{167}の部分を変更すると傾きを調節できますが、通常はこのままでよいでしょう。

Section 3

T1 エンコーディング用の .vpl ファイルを生成する指示です。newlatin.mtx, t1.etx にもとづいて xxxr8r から生成するということです。スモールキャップ体だけは t1.etx ではなく t1c.etx を用いていることに注意してください。これを用いると、直立体から機械的にスモールキャップ体を生成することができます。

Section 4

TS1 エンコーディング用の .vpl ファイルを生成する指示です。TS1 エンコーディングは、T1 エンコーディングで拾いきれなかった記号等を集めたものに対するエンコーディングです。

\installfontas の行に注意してください。TS1 エンコーディングで使うのは記号のみですから、「スモールキャップ」という指示は意味がありません。そこで、「スモールキャップ」を「直立体とみなす」という指示を書き込んでおく必要があります。

まとめ

結局上の作業で、次のシリーズ・シェイプが使えるようになります。

.map ファイル生成用ファイルの作成

.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

fontinst の実行

次のコマンドを実行します。

$ tex xxx-driver.tex
$ tex xxx-map.tex

fontinst 実行後の作業

以下が fontinst を実行した後に必要になる(かもしれない)作業です。

.tfm, .vf ファイルの生成

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

mktexlsr と updmap-sys を実行します。xxx には適切なファイル名を入れてください。

# mktexlsr
# updmap-sys --enable Map=xxx.map

テスト

を参考にしてください。

.sty の作成

テストがうまくいったら、簡単に使えるように .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.

これは、日本語にスモールキャップ体などが定義されていないために出る警告です。無視して構いません。

に説明があります。

この警告を出さないようにするためには

などの解説が役に立ちます。

ギリシア語

上はローマ文字用の方法です。ギリシア語については次の項目を参照してください。


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2019-03-30 (土) 04:06:21