TeX とフォント

TeX におけるフォントの基礎知識や、LaTeX でのフォントの利用等についての情報を提供します。



はじめに

TeX あるいは LaTeX におけるフォントの利用については、なかなか思うようにいかなかったり、使いたいフォントがあってもどうしたらよいのか分からなかったりして、困った経験がある方も多いと思われます。

これは、TeX 以外の多くのアプリケーションソフトが OS にインストールされたフォントを OS の機能を通じて利用しているのに対して、TeX の場合はそうではないからです。TeX が開発されたころには、現在のように TrueType のようなフォント形式が一般に広まっているという状況ではなく、TeX での高度な数式組版に使えるだけの組版情報を持ったフォントもなかったので、TeX での組版に使えるフォントの規格までもを含めて開発する必要がありました。ところがその後、TeX 用のフォント規格は一般に普及せず、TrueType や PostScript などのフォント規格が普及するに至りました。その結果、TeX のフォントの扱いのほうが特殊なものになってしまって、OS にインストールされたフォントの利用の仕方についての知識が生かせずに、新たに TeX におけるフォントの利用の仕方を身につけなければいけないという不便な面が目立つようになったというわけです。

TeX が組版処理を行う際には、フォントごとに個々の文字の大きさやデザイン上の文字詰めの幅などの情報を TeX が理解できる形式で記されたファイル(TFM ファイル)が必要です。TeX と一緒に開発されたフォント群(Computer Modern ファミリなど)においては当然ながら TFM ファイルが準備されていますので、TeX での利用に問題はありません。ところが現在ユーザーの手元にあるフォントの多くは TeX の後で普及した形式であって、TeX での利用を意図しておらず、対応する TFM ファイルが準備されていません。したがって、それらのフォントを TeX で利用するためには、フォントから個々の文字の大きさなどの情報を抽出して TeX が理解できる形式の TFM ファイルに仕立て上げなければならないわけです。

うまく TFM ファイルを用意できて TeX による組版処理が済んだとすると、その TeX の処理結果(DVI ファイル)を表示したり、印刷用フォーマットに変換したりするのはデバイスドライバと呼ばれるプログラムです。DVI ファイルにはフォントに含まれる個々の文字の字形(グリフ)データは含まれていませんから、グリフデータを OS から引き出して利用するために、どの TFM ファイルにどの OS フォントを対応させるのかといったことをデバイスドライバに指示する必要があります。しかし、その指定の仕方や、どの形式のフォントを扱えるかといったこともドライバごとに異なっています。

さらに日本語に対応した pTeX については、ソースファイル中の半角文字と全角文字を自動で振り分けて、半角文字には欧文フォントを、全角文字には和文フォントを使うようになっているので、和文フォントに含まれる半角文字(従属欧文)はそのままでは使えないという問題もあります。

これまでに行われてきた TeX の拡張で、OS のフォントを直接使えるようにした XeTeX などは縦書きも含めた日本語組版には対応しておらず、逆に日本語組版に対応した pTeX は OS フォントの直接利用には対応していないといった状況です。

以上のような状況は、例えば LaTeX の出力で TrueType や PostScript などのフォントを利用可能にする際に、かなりの手間と不思議なファイル群の導入や各種設定の必要性をもたらします。LaTeX で TrueType フォントを利用して出力を得る際のおおまかな流れは、

  1. フォントファイルから組版に必要な情報を抽出する。(TFM ファイルの生成)
  2. 上記で抽出した情報に、ある一定の規則でアクセスする設定を行う。(.fd ファイルの作成)
    フォントファミリとエンコーディングやフォント属性のセットを指定することでフォント情報にアクセスできるようにします。
  3. フォント情報と実際のフォントファイルとの対応付けを行う。(.mapファイルの編集)

といった感じです。今ではこれらの作業を行う便利なツールがありますが、それでもなれない人にとっては未だ大変な作業で、うまくいかないこともあるでしょう。何か使ってみたいフォントがあったら、とにかくCTAN をあたって既にパッケージが用意されていないか調べましょう。

この文書の目的は、LaTeX は十分使えるが、フォントについてはあまり意識したことがないという方のために、とりあえず他人が用意したパッケージにお任せでフォントを変え始め、自分で好きなフォントを一から利用可能にできるようになるまでの、情報を提供することです。

LaTeX の細かい知識に関心がなく、フォント設定の煩わしさを少しでも軽減したければ、この文書は読まずに XeLaTeXLuaLaTeX への移行を考えましょう。

フォントを変えてみる(欧文フォント)

Computer Modern に飽きたら本文用フォントを変えてみましょう。ここでは、入手可能な LaTeX パッケージが存在し、本文用として使える本格的なフォントを利用する例をいくつかあげます。比較的広範な文字集合を含み、リガチャなどが充実したものを主に例示します。

ほとんどのパッケージでは、

   \usepackage{パッケージ名}

でフォントを変更できるようになっています。

以下のサイトに LaTeX で利用可能なフォント一覧があります:

Latin Modern

ポーランドの TeX Users Group、GUST で開発された、数式用を含む、広範な文字集合をサポートするフォントセットです。Latin Modern のページを参照してください。Bogusław “Jacko” Jackowski と Janusz M. Nowacki による設計です。ラテン文字をサポートします。ベトナム語でも利用可能です。Computer Modern を元にしています。

Latin Modern はおそらく標準で使えるようになっているでしょう。

EB Garamond

Georg Duffner によるフォントです。デザインは Claude Garamond による有名な書体が元になっています。

ebgaramond.jpg

Garamond 系のフォントに関しては Adobe をはじめとして様々なフォントベンダで作成されています。いわゆるオールド・スタイル・セリフに分類されます。

EB Garamond で利用可能な文字集合として、ラテン文字・ギリシャ文字・キリル文字があります。標準的な各種リガチャに加え、st や ct などのリガチャもあり、スモールキャップ・オールドスタイル数字もサポートします。いくつかのオプティカルサイズが用意されています。

TeX Live では tlmgr からインストール可能ですのでそれを利用しましょう。 インストールしたら、ターミナルから Map ファイルを有効にし、

   updmap-sys --enable Map=EBGaramond.map

あとは、LaTeX ソースで

   \usepackage{ebgaramond}

するだけです。イタリックも利用可能ですが、ボールドはありません。オプションとして、

   oldstyle,osf    old-style figures
   lining,nf,lf    lining figures
   proportional,p  varying-width figures
   tabular,t       fixed-width figures

があります。上付き・下付き数字(\textsu{}、\textinf{})、スワッシュ・イタリック(\textsw{})やいくつかの文字に関しては装飾付のものがあります(\textin{})。数式用はありません。(TeX Live 2015 では ebgaramond-math というパッケージがあり、数式用の記号の一部を EB Garamond で置き換えます)

CTAN のページは

Google Fonts のページ

Adobe Source ファミリ

Adobe によるオープンソース書体です。Source Serif Pro、Source Sans Pro、Source Code Pro とあり、豊富なウェイトと機能を揃えています。Source Serif Proは、トランジショナルに分類されるセリフ書体です。Serif、Sans と Code はお互いによく調和するようにデザインされてあります。

sourceserif.jpg

tlmgr から入れましょう。

プロジェクトページへは

CTAN ページ

ソースコード表示用に使える Source Code Pro があります。

TeX Gyre

TeX Gyre フォント群は,Times や Helvetica などの Adobe 基本 35 書体に対応する,高品質でオープンなフォントです。PostScript Type 1 形式と OpenType 形式で配布されています。

TeX Gyre 名元となった Adobe フォント使用法
AdventorAvant Garde\usepackage{adventor}
BonumBookman\usepackage{bonum}
ChorusZapf Chancery\usepackage{chorus}
CursorCourier\usepackage{cursor}
HerosHelvetica\usepackage{heros}
PagellaPalatino\usepackage{pagella}
ScholaCentury Schoolbook\usepackage{schola}
TermesTimes (new) Roman\usepackage{termes}

TeX Gyre フォントを上記のパッケージを利用して設定すると,日本語の太字が効かなくなってしまいますので,プリアンブルに以下を追加します。

\renewcommand{\bfdefault}{bx}

フォントを変えてみる(日本語フォント)

TeX (LaTeX) が登場した当時は,日本語フォントは「本文用明朝体」「見出し(強調)用ゴシック体」の2種類だけを利用するようになっていて,どの書体を使用するかは印刷時のソフトの設定次第でしたが,近年は PDF に書体を埋め込むことが推奨され,TeX 文書作成段階で書体を設定することが望ましくなりました。 なお,フォントの埋め込みの可否については,ライセンスも考慮する必要があります。 フォントの埋め込みとライセンスを参照してください。

最新の TeX Live / W32TeX では,TeX と共に配布されている IPAex/IPA フォントの他,ヒラギノ,MS,小塚,モリサワ,游明朝・游ゴシックが簡便に指定できるようになっています。OTF パッケージを利用すると,5書体以上の多書体化もできます。和文の仕組みに日本語フォントを使う仕組みについての説明があります。

(ヒラギノは,Mac (macOS) では OS に付属していますが,Windows で利用する場合は別途購入する必要があります。)

PDF 作成の都度,フォントを指定する方法

dvipdfmx を使用して IPAex を埋め込んだ PDF を作成するには以下のようにします。

PDF に埋め込むフォントをあらかじめ設定する

TeX Live (MacTeX) では,ターミナルから kanji-config-updmap-sys で設定できます。

$ sudo kanji-config-updmap-sys <fontname>  (otf-<fontname>.map にしたがってフォントを埋め込む)
$ sudo kanji-config-updmap-sys auto        (自動的に <fontname> のいずれかを埋め込む)
$ sudo kanji-config-updmap-sys nofont      (PDF にフォントを埋め込まない)
$ sudo kanji-config-updmap-sys status      (現在の埋め込み設定を確認する)

自動的に埋め込み設定できるフォント <fontname> は例えば次のものがあります.

ipaex, ipa

OTF の設定(TeX 文書のプリアンブルにて設定)

\usepackage[オプション]{otf}

主なオプションの設定

jis2004
ヒラギノのNシリーズ(JIS X 0213:2004に対応した字形)を利用
deluxe
明朝2ウェイト,ゴシック2ウェイト,丸ゴシックが使えます。(プロポーショナル仮名,ヒラギノ明朝W2,ヒラギノゴシックW8も使えます。)
expert
仮名が縦組専用,または横組専用のものに
uplatex
組版に upLaTeX を用いる場合は必須

その他のフォントの利用

みかちゃんフォントなどのフリー書体(フォント参照)や,その他の日本語書体を埋め込みたい場合は,そのためのスタイルファイルを利用するのが便利でしょう。 設定は,多少面倒です。 PXシリーズMacTeX 2013とみかちゃんフォントの設定を参考にしてください。 自力で一から構築する場合は (u)pTeX における和文多書体の実現 〜Sierraの全和文フォント出力を例として〜MacPortsのpTeXにおける和文多書体環境の整えかた が参考になります。

フォントを変えてみる(数式フォント)

各種パッケージを用いて,数式部分に用いるフォントを変えることができます。(いくつかのフォントを比較したものがこちらにあります。)

\usepackage{newtxmath}

などとするだけで数式フォントを変えられます。

Times 系

STIX フォントは Scientific and Technical Information Exchange (STIX) フォントプロジェクトによるフォントセットです。LaTeX 用のパッケージもあります。Times フォントと良く調和し、互換なようにデザインされています。

newtx は Michael Sharpe によりメンテナンスされている Times 互換なフォントです。Young U. Ryu による txfonts がもとになっています。newtx, newtxtt, newpx, boondox, fontaxes があります。newpx は Palatino と調和するように設計されています。

newtxTimes を元にした txfonts の改良版newtx の見本
newpxPalatino を元にした pxfonts の改良版newpx の見本

Mathptmx:本文,数式をともに Times に変えます。

AMS Euler

AMS の委託により Hermann Zapf が作成し、Knuth が『コンピュータの数学』で用いた手書き風の数式フォントです。結城浩氏の『数学ガール』シリーズに用いられていることでも知られています。(euler の見本

2008年に大規模な改定が行われたようです。

Computer Modern とはあまりよく調和なかったりと、あわせる本文用フォントを選ぶようです。前述の『コンピュータの数学』の原著では Concrete フォントが本文に使われています。

その他

その他には、

などがあります。商用フォントでは、

などもあります。

フォント関連の基本的なファイル

ここでは主に LaTeX で文書を作成する際に必要となってくるフォント関連ファイルについて、基礎的な事柄を解説します。

TeX Font Metric (TFM)

TFM は組版を行うのに必要な、フォントに関する情報が納められたファイルです。AFM や PFM と似たようなものです。

大雑把にいうと3つの部分から成り立ちます。

  1. 各文字のサイズに関する情報
  2. 特定の文字と文字の組み合わせが起きた時の動作の指定(リガチャとカーニング)
  3. 単語間スペースやアクセントの配置に関するパラメータなど

TeX の役割はある決まった大きさの領域に、文字という「箱」を詰め込んでいくことですが、それを行う際に基礎となる情報が文字サイズに関する情報です。

リガチャとカーニングは連続した2つの文字に関する微調整です。

ligature.png
kerning.png

上の図では、下側がリガチャやカーニングを適用したものとなっています。 左図はリガチャの例です。二つの文字 "f" と "i" が合体してひとつになっています。合体した字形(合字)は、それ自体が一つの文字としてデザインされたもので、フォントの中に他の文字ともに用意されています。TeX は "f" と "i"という二つの文字が並んだときに、この合字と差し替えます。リガチャが行われるためには、組版ソフトがリガチャに対応していることと、フォントが合字を持っていることが必要です。 右図はカーニングの例です。大文字 "V" の右下の余白に小文字の "e" がわずかに食い込んでいるのが見て取れます。TeX による組版では TFMファイルに含まれる情報にもとづいて、文字と文字の組み合わせごとに、このような微妙な余白の調整などが行われます。

日本語に対応した pTeX 系の TeX では、日本語フォント用には TFM に代わる「JFM ファイル」が利用されます(ファイル拡張子は TFM と同じく .tfm です)。

TFM についての(フォーマットに関する)詳しい解説については

を参照してください。(上記リンク先の PDF は低画質のスキャン画像です)

Font Definition (.fd)

LaTeX でフォントを使う際は、通常、フォントは属性(フォントの種類・太さ・サイズなど)の組で指定されます。例えば、cmr というファミリのメディアムウェイト・イタリック体を 10 pt のサイズで、エンコーディングは OT1、などです。LaTeX においては、フォントはこれら属性、

   <encoding, family, series, shape, size>

の組で完全に指定されます。Font definition ファイルの役割は、この属性の組で指定されたフォントを、TFM ファイルに結びつける事です。前述の例、

   <OT1, cmr, medium, italic, 10pt>

を、cmti10 に結びつけるには、

   \DeclareFontShape{OT1}{cmr}{m}{it}{<10>cmti10}{}

のような宣言となります。

.fd ファイルはこのような宣言の集りです。通常、それぞれのエンコーディングとファミリの組ごとに用意されます。例えば、T1 エンコーディングの Latin Modern Roman ファミリでは、t1lmr.fd に様々な定義があります。

詳しくは

を参照してください。

フォントマップ

フォントマップ .map は、TFM ファイルと元のフォントファイルとの対応を記したファイルです。 PDF や PostScript などの最終的な出力を得る段階になって必要とされます。出力ドライバは、TeX が組版に用いた TFM が、実際にはどのフォントに対応しているのか知る必要があります。このファイルの書式はドライバごとに異なりますが、基本的な部分は同じです。

例えば、dvipdfmx のフォントマップの書式は

   tfm-name encoding font-file options

のような形をとります。DVIPS/PDFTeX 書式でも基本は、TFM をあるフォントに対応付ける、ということです。

CTAN にないフォントを利用する(欧文フォント)

LaTeX におけるフォントの基礎をおさえたら、実際にフォントを LaTeX で使えるようにしてみましょう。 ここでは OpenType フォントに絞って話を進めます。実例として、Microsoft Windows に入っている Constantia を使います。これは TrueType 系の OpenType フォントです。

   C:\Windows\Fonts\

にある

   constan.ttf constanb.ttf constani.ttf constanz.ttf

がそれです。作業用フォルダを作り、とりあえずコピーしてきましょう。

ツールのインストール

フォントファイルから必要なものを生成するツールとして、LCDF Typetools を導入します。 tlmgr からインストール可能です。パッケージ名は lcdftypetools です。pltotf プログラムをあらかじめインストールしておく必要があります。これは fontware パッケージに含まれます。W32TeX には,LCDF Typetools も pltotf も入っています。

LCDF Typetools のインストールができたら、とりあえず付属の otfinfo でフォント情報を見てみましょう。

   otfinfo -i constan.ttf

でフォントの情報が表示されます。どのような OpenType 機能が利用可能か見てみましょう。

   otfinfo -f constan.ttf

"kern" や "liga" などの基本的なもの、"onum"(オールドスタイル数字)などや "smcp"(スモールキャップ)、その他様々な機能があることがわかります。

それでは実際に LaTeX で使えるようにしてみましょう。

TFM ファイルの生成

まずは OT1 エンコーディング(-e 7t オプションでこれを指定しています)で試してみましょう。リガチャ(liga)とカーニング(kern)を有効にします。

   otftotfm --no-type1 -e 7t -fkern -fliga constan.ttf -n constan > constan.map

ここで、

   warning: TrueType-flavored font support is experimental

という警告がでますが、とりあえず続けましょう。LCDF Typetools はもともと PostScript-flavored font のために開発されたソフトウェアなのです。オプションの詳細についてはヘルプ(-h)を参照してください。これで TFM ファイル constan.tfm と .enc ファイルやマップファイル constan.map が生成されるはずです。testfont で実際使えることを確認しましょう。

   tex testfont

フォント名は constan です。生成された DVI ファイルを処理するには

   dvipdfmx -f constan.map testfont

などとします。(いくらか警告が出て、いくつかの文字が欠落します。対処法については後述)

続けて イタリックも処理します。

   otftotfm --no-type1 -e 7t -fkern -fliga constani.ttf -n constani >> constan.map

そのほか、ボールドやボールドイタリックも処理します。スモールキャップ(sc shape)も使いたければ、

   otftotfm --no-type1 -e 7t -fkern -fliga -fsmcp constan.ttf -n constan-sc >> constan.map

のようにして、スモールキャップ用の TFM も生成します。(こちはも dvipdfmx で利用するには生成された .enc ファイルの修正が必要です)斜体(sl shape)は Constantia には含まれませんが、-S オプションでそれ用の TFM を生成することができます。

   otftotfm --no-type1 -e 7t -fkern -fliga -S .167 constan.ttf -n constan-sl >> constan.map

このようにすると、出力ドライバの機能を使って合成斜体を使うことになります。

Font Definition (.fd) ファイル

Font Definition ファイル、ot1constan.fd を作ります。とりあえず、最低限のものとして、

   \ProvidesFile{ot1constan.fd}
       [2015/06/08 font definitions for Microsoft Constantia.]
   \DeclareFontFamily{OT1}{constan}{}
   \DeclareFontShape{OT1}{constan}{m}{n}{<->constan}{}
   \DeclareFontShape{OT1}{constan}{m}{it}{<->constani}{}
   \DeclareFontShape{OT1}{constan}{b}{n}{<->constanb}{}
   \DeclareFontShape{OT1}{constan}{b}{it}{<->constanz}{}
   \DeclareFontShape{OT1}{constan}{bx}{n}{<->ssub * constan/b/n}{}
   \DeclareFontShape{OT1}{constan}{bx}{it}{<->ssub * constan/b/it}{}
   \endinput

と書き込みましょう。メディアム(m)・ボールド(b)ウェイトでそれぞれノーマル(n)・イタリック(it)を定義します。bx("bold extended")についてはボールドで代替します。TFM の指定の前の <-> の部分は「全てのサイズで」という意味となります。スモールキャップ(sc)や斜体(sl)も作ったら加えましょう。書式は同じで、シェイプのところ(n や it の部分)を sc や sl で置き換えます。

カレントディレクトリにこれまでに生成したファイルを置いた状態で、LaTeX ソースで

   \fontfamily{constan}\selectfont

とすることで Constantia が使えるようになっているはずです。

マップファイル

マップファイル constan.map がすでに生成されているはずです。PDFTeX 用のマップファイルですが、dvipdfmx でもそのまま使えます。

パッケージ化とインストール

スタイルファイルを作っておくと、

   \usepackage{constantia}

のようにできます。とりあえず今のところは

   \ProvidesPackage{constantia}[2015/06/08]
   \renewcommand{\rmdefault}{constan}
   \endinput

として、constantia.sty として保存しておきます。詳しい作り方については他のパッケージを参考にしてください。

できたファイル群をインストールする前に、TeX の標準的なディレクトリ構成にあうようにファイルを配置しましょう。フォント関連のファイルは主に fonts 以下に置きます。とりあえず、作業ディレクトリの下に仮のディレクトリツリーを作りましょう。

フォントファイルは

   fonts/truetype/microsoft/constantia/

以下に置きます。TFM ファイルは

   fonts/tfm/microsoft/constantia/

に配置しましょう。.enc ファイルは

   fonts/enc/dvips/constantia/

へ移動します。.map ファイルは

   fonts/map/dvips/constantia/

に置きます。.sty と .fd ファイルは別で

   tex/latex/constantia/

です。

それでは、

   zip -r constantia.zip fonts tex

でアーカイブしましょう。これでインストールはあなたの TEXMF ツリーに展開するだけです。(必要であれば mktexlsr や updmap も忘れないでください)

これまでは本文用のセリフ書体である Constantia のみ準備しましたが、サンセリフ体とタイプライタ体もセットとして揃えておくとよいでしょう。CorbelCalibri (サンセリフ)、Consolas (タイプライタ) などがおすすめです。Windows ユーザーは Microsoft の ClearType Font Collection を一通り揃えてみるのもよいでしょう。(一部 ttc があり、otftotfm がそのまま使えませんが)

よりすすんだ話題

Constantia は数字スタイルの切り替え(onum や lnum、pnum)などの OpenType 機能を備えています。これらを有効にするためのオプションを Constantia パッケージに加えましょう。

% LaTeX パッケージの書き方という話題になるのでどなたか書いてください。

LCDF Typetools と dvipdfmx

otftotfm が自動生成する .enc ファイルは dvipdfmx でうまく使えない場合があります。これは otftotfm が index278 といった、フォントファイルで内部的に使用されるグリフ・インデックスを元にした文字名を使用してくるからです。これは特に OpenType のグリフ置換機能で得られる、Unicode にないグリフ(文字)などを使用する際に見られます。例えば、スモールキャピタルの "a" などです。dvipdfmx では、"a.smcp" (あるいは "a.sc")といった、元の名前("a")と OpenType feature タグ("smcp")を組み合わせた名前に変えてやる必要が出てきます。

スモールキャピタル用の .enc ファイルでは以下のように修正します。

%10 の部分の2行目

   /uni00B8 /uni00DF /ae.sc /oe.sc /oslash.sc /uni00C6 /uni0152 /uni00D8

%60 の部分

   /uni2018 /a.sc /b.sc /c.sc /d.sc /e.sc /f.sc /g.sc
   /h.sc /i.sc /j.sc /k.sc /l.sc /m.sc /n.sc /o.sc

%70 の部分

   /p.sc /q.sc /r.sc /s.sc /t.sc /u.sc /v.sc /w.sc
   /x.sc /y.sc /z.sc /uni2013 /uni2014 /uni02DD /uni02DC /uni00A8

dvipdfmx で indexXXX がないといった警告がでたら、同様の処置を行う必要があります。

フォント関連のその他のファイル

Virtual Font (VF)

Virtual Font は小さなプログラムの集まりです。これは様々な目的で使われます。あるフォントのある文字を別のフォントの別の文字で置き換えたり、文字を合成したり、余白を入れたり削ったり、など。VF でできることはほとんど TeX のマクロでできますが、VF ではより低水準の層でこれが行われます。 例えば、\copyright とするかわりに、"c" を入力するとコピーライト記号になったり。

実際にどんなものか見てみましょう。ptmr7t.vf という Times Roman フォント用の VF を例にとります。あなたの TeX システムにこれが含まれるかは、

   kpsewhich ptmr7t.vf

が、そのファイルの場所を返すかどうかでわかります。VF ファイルはバイナリファイルですが、vftovp というプログラムで、人間が読める形のテキストファイルに「戻す」ことができます。vftovp は TeX Live では fontware パッケージに含まれます。W32TeX では最小インストールに含まれますので既に入っています。

   vftovp ptmr7t

とすると ptmr7t の内容が表示されます。ptmr7t は Adobe (p)の Times Roman (tmr)フォントを OT1(7t)エンコーディングで使うためのものですが、その内容には例えば、

   (CHARACTER O 0
      (CHARWD R 0.5)
      (CHARHT R 0.502997)
      (MAP
         (SETRULE R 0.5 R 0.5)
         (SPECIAL Warning: missing glyph `Gamma')
         )
      )

のようなものが含まれます。これは Virtual Font "ptmr7t" における文字コード \000 の文字の定義です。文字 \000 は文字幅 0.5 高さ 0.502997 で、その内容は幅と高さが 0.5、0.5 の罫線と

   Warning: missing glyph `Gamma'

(Gamma の文字がない)という警告文からなります。OT1 エンコーディングでは文字コード \000 は大文字のガンマですが、これが実際のフォントに存在しないため、このようなもので置き換えています。他の例として、

   (CHARACTER O 13
      (CHARWD R 0.640991)
      (CHARHT R 0.681989)
      (COMMENT
       ...略...
        )
      (MAP
         (SETCHAR C f)
         (MOVERIGHT R -0.025)
         (SETCHAR C f)
         )

は、文字コード \013 を "ff" の"リガチャ"として定義します。すなわち、"f" を描画した後、0.025 だけ詰めて、再び "f" を描画します。

Virtual Font が有用な局面は様々です。フォント関連で何か実現したい特別な機能があれば、VF の導入を検討するとよいでしょう。

以下の文献を参考にしてください

など。

エンコーディング

フォント・エンコーディング関連の重要なファイルは2種類あります。LaTeX の fontenc パッケージで利用される Encoding Definition ファイルと dvips などのデバイスドライバが利用する .enc ファイルです。

Encoding Definition ファイルについては、fontenc パッケージのドキュメント

を参照してください。

.enc ファイルは元々 dvips で利用されていた PostScript Type 1 フォント用の、エンコーディングを記述するためのファイルです。これは、どのスロット(文字コード)にどのグリフ(文字)が入るかを宣言します。例えば、T1 エンコーディング用の ec.enc では、

   /ECEncoding [    % now 256 chars follow
   /grave           % 0x00 U+0060
   /acute           % 0x01 U+00B4
   /circumflex      % 0x02 U+02C6
   ...(中略)...
   /thorn           % 0xFE
   /germandbls      % 0xFF U+00DF
   ] def

のようになっています。0x00 に "grave"、0x01 に "acute"、… 0xff に "germandbls" が入ります。書式は

   /エンコーディング名 [ /グリフ名 ... ] def

のような PostScript の形式です。

SFD (SubFont Definition)

Subfont Definition (SFD) ファイルは、CJK-LaTeX パッケージを利用して、8-bit TeX エンジンで日中韓などの言語を処理する際に使用されるファイルです。従来の TeX では、ひとつのフォントあたりで利用できる文字数が、256 までと限られているため、CJK-LaTeX ではそれ以上の文字を含むフォントを、複数の 256 文字までのフォントの集まりに分解して利用します。例えば、

   文字コード 0x0000 - 0x00ff を font01
   文字コード 0x0100 - 0x01ff を font02
   …

という風に。Unicode.sfd がインストールされていれば、それを見てみましょう。

   00  0x0000_0x00FF
   01  0x0100_0x01FF

というような行がたくさん並んでいるはずです。意味はそのまま、フォント fnt00 (fnt は任意のフォント名)は文字コード 0x0000 から 0x00FF までをカバーします。SFD ファイルはこのように、フォントの分割のルールを記述します。PDFTeX や dvipdfmx でも利用されます。

CTAN にないフォントを利用する(日本語フォント)

使いたい日本語フォントを使うことは、簡単とも難しいとも言えます。これは日本語フォントのデザイン上の都合に起因します。全角などの固定幅とプロポーショナル幅の明確な区別の存在です。全角幅の文字のみで良いのであれば話は簡単ですが、プロポーショナル仮名や従属欧文などプロポーショナル幅の文字も使いたい場合は話は複雑になってきます。後者の場合、必要なファイル群を準備するには相応の知識と技術が必要になることがあります。

全角幅のみで良い場合

この場合、すべての文字幅はフォントによらず同じですので、フォントの違いは実質、(TeX にとっては)名前の違いでしかありません。全角幅のみのフォントを使い分けるには、これまでは単純に、ドライバでの処理段階でフォントファイルの「すり替え」を行うことで対処していました。

% この項目は書きかけです。

日本語フォントを新規追加する

既存フォントを「すり替える」のではなく新規追加したい場合は、それぞれの tfm/vf を用意する必要があります。欧文フォントとは異なり、日本語フォントは基本的に文字幅が同じなので、既存 tfm/vf の複製を用意すれば対応できます。具体的な手順の一例が次の記事に記されています。

従属欧文を使う(1)

ここでは TrueType 系 OpenType フォントの場合を解説します。

TrueType 系のフォントで従属欧文を使うには、いくつかの手法があります。ひとつの簡単な方法は、単純にフォントを欧文フォントとみなし処理することです。TrueType 系 OpenType フォントの場合は、フォントファイルには欧文と和文の本質的な区別はありません。よって、欧文フォントの利用で用いた otftotfm などのツールと、同様の手法がそのまま使えます。例えば、Windows8.1 に付属している游明朝の従属欧文を使うには、

   otftotfm --no-type1 -e 7t -fkern -fliga yumin.ttf -n yuminp > yuminp.map

のようにして欧文用 TFM を生成し、それを通常の欧文フォントだと思って使えばいいだけです。

従属欧文を使う(2)

(1)の手法で簡単に従属欧文を使うことができますが、PDF ファイルを開いてプロパティをみるとわかるように、欧文部分と和文部分が別フォントとして埋め込まれます。別にこれで問題があるわけではないのですが、ここではこれらを一つのフォントにまとめ上げる方法を紹介します。ここから先はやや高度で複雑な話題となります。

基本的な方針としては、VF を使って従属欧文フォントと和文フォントをひとつの OFM (Omega Font Metric)にマップします。OFM は TFM の 16 bit 拡張版です。(CJK-LaTeX と dvipdfmx の組み合わせで使う場合はこような問題は発生しませんので、ここでは pLaTeX/pTeX を利用する場合についてのみ述べます)

% この項目は書きかけです。

% 全角半角メモに、任意の和文フォント(プロポーショナル・半角部分含む)を使う試みのドキュメント(未完成;2006 年頃のもの)が見つかりました。「TeX とフォント」のほうに移植できるといいと思います。 -- アセトアミノフェン

エラーへの対処

ここではフォントを新たに導入する際に起こる問題への対処法について記述します。

フォント関連のエラーとしてありがちなのは、「フォントがない」や「フォントが見つからない」です。 単純なエラーですが、TeX やその関連プログラムは、フォントがない場合でもなんらかのフォールバックを試み、その結果、複雑なエラーメッセージを返すことがあるため、単純なものであることに気づかない場合があります。特にエラーメッセージに mktextfm や mktexpk などの文字列が含まれる場合は気を付けましょう。

mktextfm は METAFONT ソースファイルから TFM ファイルを生成するためのプログラムで、要求された TFM ファイルが存在しない場合に TeX により実行されます。

mktexpk は METAFONT ソースファイルから PK フォントを生成するためのプログラムです。PK フォントは TeX の組版結果を表示したり印刷したりするときに出力ドライバによって用いられるビットマップ形式のフォントで、出力ドライバはアウトラインフォントが存在しない場合はフォールバックとしてこれの生成を試みます。

上記ふたつのプログラムは、昨今流通している多くのフォントに対しては、たいがい失敗します。(そもそも METAFONT で作られたものでなければソースファイルがないので。)

どのようなプログラムでも、ないものはさすがにどうしようもありません。このようなエラーが出た場合にまず確認することは、本当にフォントが存在していないかです。とにかくまず kpsewhich プログラムでフォントの存在を確かめましょう。cmr10 (Computer Modern Roman 10pt) の TFM がどこにあるか確かめるには、

   kpsewhich cmr10.tfm

あるいは

   kpsewhich -format tfm cmr10

とします。kpsewhich プログラムは Kpathsea ライブラリに含まれるプログラムです。

Kpathsea ライブラリは TeX とその関連プログラムが、要求されたファイルをシステムから検索する際に利用するライブラリです。TeX は膨大な量のリソースから成り立ち、ディレクトリ構成も複雑なものとなります。このため、様々な関連プログラムが、統一されたやり方でシステムからリソースを探し出す枠組みが必要なのです。

kpsewhich がそのファイルを見つけられないということは、ファイルが少なくとも TeX の検索パスの中には存在していないことを意味します。ファイルが確かにある場合は見つけられる場所に置きましょう。TFM ファイルの検索パスがどう設定されているのか知るには

   kpsewhich -show-path=tfm

のようにします。

参考文献


Last-modified: 2018-04-21 (土) 18:13:37 (31d)