XeLaTeX:欧文フォントについての補足

「XeLaTeX で日本語する件について」の補足として、 欧文フォントの取り扱いについての高度な話題を扱う。
変更履歴

欧文フォントについての補足

従来の LaTeX で常用されたフォントに対応する Unicode フォント

任意の TrueType/OpenType フォントが使えるというののが XeLaTeX の魅力ではあるが、 時には従来の LaTeX で使っていたフォントと同じものが使いたい場合もあるだろう。 ここでは、LaTeX の既定設定である「Computer Modern フォント」 (およびその拡張)、および LaTeX で多用される 「Adobe 基本 35 書体」―Times、Helvetica 等― について、XeLaTeX の使用に適したフリーの Unicode フォントを紹介する。 (なお、W32TeX での新しいフォントの導入手順については既に説明した

  • Latin Modern フォント (LM フォント;リンク先は CTAN ミラー): Computer Modern フォント(CM フォント) の字形を基にして作られた OpenType フォント。 作者は Bogusław Jackowski と Janusz Marian Nowacki。 CM フォントに含まれる全てのシェープおよびサイズに対応している。 (例えば CM フォントの cmti12(OT1/cmr/m/it/12) に対して「Latin Modern Roman 12 Italic」、 cmssdc10(OT1/cmss/sbc/n/10)に対して 「Latin Modern Sans Demi Cond 10 Regular」がある。) また、細身のタイプライタ体である「Latin Modern Mono Light」ファミリ等の LM フォントで独自に追加された書体もある。 従来の TeX のラテン文字エンコーディング(OT1、T1、T5、L7x 等) およびシンボル用の TS1 エンコーディングに含まれる文字の全てをカバーしている。 ただし、Latin Modern の名から判るように、 ギリシャ文字・キリル文字は含まれていない(数式用ギリシャ文字はある)。

    先述の通り、fontspec での総称ファミリへの割当の既定値は LM フォントであるので、 XeTeX が含まれる TeX ディストリビューションでは LM フォントも既に入っていると思われる。 W32TeX では XeTeX のアーカイブ(xetex-w32.tar.xz) の中に一緒に収録されている。

    参考: CM フォントは同じシェープでもサイズ毎にデザインを変えていてそのサイズで綺麗に見えるようにしている。 例えば CM Roman の 5pt 版である cmr5 は 10pt 版の cmr10 を 50 %に縮小したものとはかなり違う字形を持っている。 コンピュータ用のフォントでこのような設計(optical size という) をもっているものは少ないが、一部の「高級な」フォントでは採用されている。 fontspec の既定である LM フォントの設定では、 指定サイズ毎に適切な変種が選ばれるようになっている―つまり、 従来の LaTeX の CM フォントの設定と同じである。
    参考: LM フォントの字形データは、OT1 の文字については、 品質について定評のある AMS の Type1 フォントのものを用いていて、 残りの文字はそれを基にして (MetaType1 システム上で)独自に作られている。 従って、LM フォントの製作の過程では、 ビットマップフォントからの自動トレースは用いられていない。 またこのため、OT1 以外の文字については、対応する CM 系フォント(EC フォント(T1)、TC フォント(TS1)等) とは異なる字形をもつものがある。
    参考: 従来(欧文 8 ビット)の LaTeX でも LM フォントを使うことができる。 方法は、単に lmodern パッケージを読み込むだけである (この場合、Type1 版の LM フォントが使われる)。 W32TeX には CM-Super コレクション(EC、TC フォントの Type1 版) が含まれていないので、既定の設定(つまり CM フォント)のまま T1 エンコーディングに切り替えると PDF 変換の時に EC、TC フォントのビットマップ版が使われることになるが、 Type1 版の LM フォントならば W32TeX にもあり (t1fonts.tar.xz アーカイブ)、 かつ最初から DVI ウェアの適切な設定もされている。 よって、CM 系のフォントを T1 エンコーディングで用いたい場合は、 LM フォントを使うのが手軽である。
    % 8 ビット LaTeX/pLaTeX において LM フォントを T1 で用いる
    \usepackage[T1]{fontenc}
    \usepackage{lmodern}
    
  • Computer Modern Unicode フォント: CM フォントのソースを用いて、X ウィンドウシステム (Unix 系 OS で広く用いられている)用の高品位な OpenType フォントを作成しようというプロジェクト。 基本的に METAFONT ソースからの自動トレース(+ FontForge による後処理) を用いた過程で製作されている。 先に挙げた LM フォントと比べると、以下のような特徴がある。

    • CM 系のフォントの METAFONT ソースで利用可能なものは全て利用している。 従って、ラテン文字(CM/EC フォント等)だけでなくキリル文字(LH フォント)、 ギリシャ文字(CB フォント)、国際音標字母(TIPA フォント)等もカバーしている。
    • 既存の文字の合成で作成可能な文字(アクセント付文字等) は大抵作成されている。 (ただし、その中には字形にかなり疑問の残るものもある。)
    • 先述の通り、CM フォントはサイズにより字形に違いがあるのだが、 その内の 10pt のサイズの字形に対応するもののみを用意していて、 これを全サイズで用いることになる(optical size でない)。
    • Computer Concrete フォントや Computer Modern Bright フォントに対応する OpenType フォントも含んでいる。

    Latin Modern で対応していない文字が必要な時に有用だと思われる。

  • TeX Gyre フォント (リンク先は CTAN ミラー): 従来の LaTeX において既定の CM フォント以外に簡単に使える欧文フォントといえば Times、Helvetica 等の「Adobe 基本 35 書体」が挙げられる。 TeX Gyre フォントコレクションはこれらの書体 (ただしシンボルフォントである Symbol と Zapf Dingbat を除く―後述の通り シンボルフォントは従来と同じものを使う) に対応する OpenType フォントである。 作者は LM フォントと同じ Jackowski と Nowacki で、 35 書体のクローンとして有名な URW++ の Type1 フォントを基にしている。

    TeX Gyre フォントのファミリ名は以下のようになっている。 このうち、TeX Gyre Chorus は Italic スタイルしかない (Zapf Chancery だから当然)が、 残りのファミリは Regular、Italic、Bold、Bold Italic の 4 スタイルをもつ (勿論、fontspec による自動割当が働く)。

    TeX Gyre ファミリ名元の Adobe フォント
    TeX Gyre AdventorAvant Garde
    TeX Gyre BonumBookman Old Style
    TeX Gyre ChorusZapf Chancery
    TeX Gyre CursorCourier
    TeX Gyre HerosHelvetica
    TeX Gyre Heros CnHelvetica Narrow
    TeX Gyre PagellaPalatino
    TeX Gyre ScholaNew Century Schoolbook
    TeX Gyre TermesTimes

数式フォントについて

XeTeX 自身は Unicode 数式フォントを扱える(らしい)が、 LaTeX での取り扱いについては未確定であり、 また現状では数式用の Unicode フォント自体が数少ない (数式用のメトリック情報を持った OpenType フォントが必要なのだと思うが、 この辺りのことは私自身がよく理解していない)。 従って、当面は数式フォントについては従来と同じ TFM ベースのフォント(多くは Type1 形式)を用いることになる。

fontspec の既定の設定では数式用フォントには従来の LaTeX と同じ CM フォントが割り当てられる。 ただし数式文字フォント(\mathrm\mathit 等で用いられるもの)は本文用のものに合わせられる (例えば \mathit\rmfamily\mdseries\itshape と同じになる)。 ここで、fontspec のパッケージオプションに no-math を付けることで、この数式フォントの設定を抑止できる。 従って、次の手順で(8 ビット欧文の) LaTeX 用の数式フォントパッケージを用いることができる。

  1. まず、数式フォントパッケージを読み込む。 多くの場合、数式フォントと同時に本文用フォント (8 ビット欧文エンコーディング用)も設定される。 (この状態では Unicode での直接入力はできない。)
  2. fontspec パッケージを no-math オプション付で読み込む。 数式用フォントの設定は変わらないが、 本文用フォントは LM フォント(fontspec の既定) に変更される。
  3. 改めて数式フォントと調和する本文用 Unicode フォントを \setmainfont 等を用いて設定する。

例として、pxfonts パッケージ(Young Ryu 氏製作)と TeX Gyre Pagella を組み合わせた(つまり Palatino 系で統一した)ものを示す。

\documentclass[a4paper]{article}
\usepackage[scale=0.83]{geometry}
\usepackage{pxfonts}
\usepackage[no-math]{fontspec}
\setmainfont{TeX Gyre Pagella}
\begin{document}
Mit {\LaTeX} kann man einen spezielle Buchstaben enthaltenden
Satz setzen, als:
\begin{quote}
„Aber sind Kafkas \emph{Schloß}, Äsops Œuvres, und auch
Tolstois \emph{Война и мир} nicht oft naiv
vis-à-vis der offizielen Rolle des dämonischen Phönixes
in flockigen Soufflés?“
\end{quote}
und auch kann man eine komplexe mathematische Formel, als:
\[
  \left( \int_0^\infty \frac{\sin x}{\sqrt x}\,\mathrm{d}x \right)^2 =
  \prod_{k=1}^\infty \frac{4k^2}{4k^2-1} \neq \frac{\pi}{2010}.
\]
\end{document}

8 ビット欧文テキストフォントの使用

(少し高度な話題である。)

XeTeX が従来の TFM に基づくフォントを扱えるのは数式フォントに限らない。 つまり TFM 定義のフォントは完全にサポートされている (ただしそのようなフォントは従来と同じ 8 ビット符号空間 (文字コード 0~255)しか扱えない)。 XeLaTeX で TFM 定義のフォントを使いたい場合は、単に LaTeX のフォント管理システム(NFSS)に従って 命令を実行すればよい。

\documentclass[a4paper]{article}
\useoackage[T1]{fontenc}
\usepackage{fontspec}
\setmainfont{Palatino Linotype}
\begin{document}
Здесь Palatino шрифт,
% Zapf Chancery の LaTeX ファミリ名は pzc
{\fontencoding{T1}\fontfamily{pzc}\selectfont et ici Zapf Chancery,}
и ещё Palatino.
\end{document}

ここで注意すべきなのは「フォントエンコーディングを指定する必要がある」 ことである。 XeLaTeX でもフォントは全て NFSS で管理していてこれは fontspec で指定されたフォントにも当てはまる。 そのようなフォントのエンコーディングは要するに「Unicode」であって、 既存の 8 ビットエンコーディングのどれとも異なるため、 XeLaTeX では Unicode に対して「EU1」という識別子を与えている。 従って、XeLaTeX では普通はエンコーディングは「EU1」 に指定されたままになっている。 従来の LaTeX の欧文フォントファミリに切り替えた場合、 そういうファミリは当然「EU1」には対応していない。 従って、そのファミリが対応するエンコーディングに切り替える必要があるわけである。

既存のフォントパッケージを利用する場合、そのパッケージが提供する命令が エンコーディング切替の処理を含むかどうかはパッケージにより異なる。 一般に、シンボルフォント(pifont や mflogo 等)の場合は、 シンボル用の「U」エンコーディングへの切替が元々入っていることが多い。 対して、テキスト用フォントは適切なエンコーディングでの使用が前提になっていて、 パッケージ側で切替をしていない場合が多い。

注意: 数式フォントの場合と同様に、パッケージ読込は fontspec より前に行う必要がある。 従って、パッケージの役割が単に特定のファミリを総称ファミリの既定に設定する (\rmdefault 等を書き換える)だけであれば、 結局それは fontspec に上書きされるので、 読み込んでも意味がないことになる。
\documentclass[a4paper]{article}
\usepackage{mflogo} % シンボルフォントのパッケージは
\usepackage{pifont} % XeTeX でもそのまま通用することが多い
\usepackage{fontspec}
\setmainfont{TeX Gyre Heros}
\begin{document}
\noindent Вот наши рекомендаци!
\begin{dinglist}{224} % Zapf Dingbat の記号を用いたリスト(pifont)
\item \TeX
\item \MF   % METAFONT ロゴ(mflogo)
\item TAOCP %←ロシア語じゃないよ ;-)
\end{dinglist}
\end{document}

もう一つの注意点を挙げておく。 TFM 定義のフォントでは、Unicode 同士の「素の直接入力」 は上手くいかない。 さらに「inputenc 利用の直接入力」も使えない(使わない)ため、 非英語文字の入力には ASCII 翻字(\oe\v{r} 等) を用いる必要がある。 Antykwa Toruńska フォント (antt パッケージ) を用いた例を示す。

\documentclass[a4paper]{article}
\usepackage{anttor} % 数式フォント不用の場合は実は無意味
\usepackage{fontspec}
\begin{document}
\noindent\textbf{Antykwa Toruńska Examples}\par
{\usefont{T1}{antt}{m}{n} % UTF-8 直接入力はダメ
Antykwa Toruńska jest antykwą dwuelementową projektu
toruńskiego typografa Zygfryda Gardzielewskiego.\par}
{\usefont{T1}{antt}{m}{n} % ASCII 翻字入力
Antykwa Toru\'nska jest antykw\k{a} dwuelementow\k{a} projektu
toru\'nskiego typografa Zygfryda Gardzielewskiego.\par}
\end{document}

参考: そもそも Antykwa Toruńska のパッケージ(antt パッケージ)には OpenType フォントも含まれているので、XeLaTeX ではこちらを用いるべきである。 数式用フォントと併用する場合は以下のようになる。

\usepackage[math]{anttor} % Antykwa Toruńska 数式フォントを指定
\usepackage[no-math]{fontspec} % こちらでは数式設定をパス
\setmainfont{Antykwa Torunska} % 本文用フォントの設定