■ lm-tools パッケージの利用について ■
lm-tools パッケージは,本文用フォントに Latin Modern を使用した際に,ギリシア文字 cbfonts,キリル文字 LH OT2/X2,TIPA の出力に際して生じる不都合を解消するために作成した各種 FD ファイルからなっています。
ご使用の言語に合った FD ファイルを,カレントディレクトリまたはパスの通ったディレクトリに置いてご使用ください。各 FD ファイルは自動的に読み込れますので特別な設定は不要です。EC フォントを本文用フォントとする際は,本パッケージの FD ファイルは使われませんので,そのまま置いておくことができます。
lm-tools パッケージは次のファイルを同梱します。
sample.tex sample.dvi sample.pdf
Greek lgrlmr.fd lgrlmss.fd lgrlmtt.fd
Cyrillic ot2lmr.fd ot2lmss.fd ot2lmtt.fd
x2lmr.fd x2lmss.fd x2lmtt.fd
TIPA t3lmr.fd t3lmss.fd t3lmtt.fd
■ Latin Modern とギリシア文字フォントを併用する際の不都合 ■
本文用フォントに Latin Modern を使い,ギリシア語を含む下記サンプルファイルをコンパイルして,不都合を確認します。
\documentclass{jsarticle}
\usepackage[10pt]{type1ec}
\usepackage{lmodern}
\usepackage[T1]{fontenc}
\usepackage[greek,english]{babel}
\begin{document}
Latin Modern
\selectlanguage{greek}
\section{l'ogos}
l'ogos {\large l'ogos} \textbf{l'ogos}
\end{document}

すると,次の Warning が出ます。
Warning は,ギリシア文字を Latin Modern の下で使用するためのフォン指定 "LGR/lmr/m/n" (エンコーディング / ファミリー / シリーズ / シェイプの組み合わせを表します)が定義されていない,という意味です。"LGR/lmr/bx/n" は Bold Extended 体,"LGR/lmss/m/n" は Sans Serif 体が定義されていないための Warning です。そのため,\textbf 等によって書体を変えることができず,全てのギリシア文字が Roman 体 grmn1000 で出力されることになります。(Typewriter 体の場合は 'LGR/lmtt/m/n/' undefined という Warning がでます。)
(I search kanjifont definition file: . . ) (I search font definition file: . .
. . . . . . . ) (c:/usr/local/share/texmf/tex/latex/lm/t1lmr.fd)
LaTeX Font Warning: Font shape `LGR/lmr/m/n' undefined
(Font) using `LGR/cmr/m/n' instead on input line 10.
LaTeX Font Warning: Font shape `LGR/lmr/bx/n' undefined
(Font) using `LGR/lmr/m/n' instead on input line 11.
LaTeX Font Warning: Font shape `LGR/lmss/m/n' undefined
(Font) using `LGR/cmr/m/n' instead on input line 11.
[1] (./test.aux)
LaTeX Font Warning: Some font shapes were not available, defaults substituted.
)
LGRlmr.fd の作成
上の例で未定義とされた "LGR/lmr/m/n" を設定するために,ギリシア語用フォント定義ファイル LGRlmr.fd を作成します。例として Roman 体の場合を挙げますが,Sans Serif 体:LGRlmss.fd,Typewriter 体:LGRlmtt.fd の場合も同様です。
Roman 体用の LGRlmr.fd は Babel で提供されている lgrcmr.fd を修正して作成します。オリジナル lgrcmr.fd は下記のとおりです。
\DeclareFontShapeの五つの引数は,#1:エンコーディング,#2:ファミリー,#3:シリーズ,#4:シェイプ,#5:実フォントを定義しています。
\ProvidesFile{lgrcmr.fd}
[2001/01/30 v2.2e %
Greek Computer Modern]
\providecommand{\EC@family}[5]{%
\DeclareFontShape{#1}{#2}{#3}{#4}
{<5><6><7><8><9><10><10.95><12><14.4>%
<17.28><20.74><24.88><29.86><35.83>genb*#5}{}}
\DeclareFontFamily{LGR}{cmr}{}
\EC@family{LGR}{cmr}{m}{n} {grmn}
\EC@family{LGR}{cmr}{m}{sl} {grmo}
\EC@family{LGR}{cmr}{m}{it} {grmi}
\EC@family{LGR}{cmr}{m}{sc} {grmc}
\EC@family{LGR}{cmr}{m}{ui} {grmu}
\EC@family{LGR}{cmr}{bx}{sc} {grxc}
\EC@family{LGR}{cmr}{bx}{n} {grxn}
\EC@family{LGR}{cmr}{bx}{sl} {grxo}
\EC@family{LGR}{cmr}{bx}{it} {grxi}
\EC@family{LGR}{cmr}{bx}{ui} {grxu}
\DeclareFontShape{LGR}{cmr}{b}{n}
{<->ssub*cmr/bx/n}{}
\DeclareFontShape{LGR}{cmr}{b}{sc}
{<->ssub*cmr/bx/sc}{}
\endinput
Latin Modern 用 LGRlmr.fd を作成する際,上記 lgrcmr.fd における五つの引数の内,#2:ファミリー名と #5:実フォントを下記のように修正します。また,lgrcmr.fd では EC フォントと同じ書式 \EC@family を使って定義しているので,一般的な書式で書き換えます。
\DeclareFontEncoding{LGR}{}{}は Babel の lgrenc.def で定義されているので,ここで定義する必要はありません。
\DeclareFontFamily{LGR}{lmr}{}
\DeclareFontShape{LGR}{lmr}{m} {n} {<-> grmn1000}{}
\DeclareFontShape{LGR}{lmr}{m} {sl}{<-> grmo1000}{}
\DeclareFontShape{LGR}{lmr}{m} {it}{<-> grmi1000}{}
\DeclareFontShape{LGR}{lmr}{m} {sc}{<-> grmc1000}{}
\DeclareFontShape{LGR}{lmr}{m} {ui}{<-> grmu1000}{}
\DeclareFontShape{LGR}{lmr}{bx}{sc}{<-> grxc1000}{}
\DeclareFontShape{LGR}{lmr}{bx}{n} {<-> grxn1000}{}
\DeclareFontShape{LGR}{lmr}{bx}{sl}{<-> grxo1000}{}
\DeclareFontShape{LGR}{lmr}{bx}{it}{<-> grxi1000}{}
\DeclareFontShape{LGR}{lmr}{bx}{ui}{<-> grxu1000}{}
\DeclareFontShape{LGR}{lmr}{b} {n} {<-> ssub*lmr/bx/n}{}
\DeclareFontShape{LGR}{lmr}{b} {sc}{<-> ssub*lmr/bx/sc}{}
上記 LGRlmr.fd で定義している引数 #5 について補足します。オリジナル lgrcmr.fd の定義は次のとおりです。
\providecommand{\EC@family}[5]{%
\DeclareFontShape{#1}{#2}{#3}{#4}
{<5><6><7><8><9><10><10.95><12><14.4>%
<17.28><20.74><24.88><29.86><35.83>genb*#5}{}}
\DeclareFontFamily{LGR}{cmr}{}
\EC@family{LGR}{cmr}{m}{n} {grmn}
この定義は古いバージョン用ですが,\usepackage[10pt]{type1ec} と指定することにより,現在のバージョンと互換を保っています。type1ec のオプションで 10pt を指定することにより,Roman 体では grmn1000 を拡大・縮小して任意のサイズで使えるようになります。type1ec.sty の定義は次のとおりです。
\DeclareOption{10pt}{%
\providecommand{\EC@family}[5]{\DeclareFontShape{#1}{#2}{#3}{#4}{<->#51000}{}}%
\providecommand{\EC@ttfamily}[5]{\DeclareFontShape{#1}{#2}{#3}{#4}{<->#51000}{}}%
}
この定義により,Roman 体の場合ですと #5 には lgrcmr.fd で定義している文字列 "grmn" が入り,さらに "1000" を結合して全体として "grmn1000" という実際のフォントを指すことになります。
LGRlmr.fd では,\DeclareFontFamily の引数 #5 で {<-> grmn1000} と定義して type1ec の機能を取り込んでいるので,プリアンブルで type1ec を読み込む必要はありません。

■ Latin Modern とキリル文字 ■
ロシア語,TIPA の音声記号を含む文章を組み版する際にも,ギリシア語の例と同じ不都合が生じます。ここではロシア語の例を挙げますが,TIPA の場合も同じ方法で Latin Modern に対応することができます。
OT2エンコーディングの例
以下のテストファイルをコンパイルします。
\documentclass{jsarticle}
\usepackage{lmodern}
\usepackage[OT2,T1]{fontenc}
\usepackage[russian,english]{babel}
\begin{document}
Latin Modern
\selectlanguage{russian}
\section{Slovo}
Slovo {\large Slovo} \texttt{Slovo}
\end{document}

キリル文字の場合は,"OT2/lmr/m/n","OT2/lmss/m/n","OT2/lmtt/m/n" 等が定義されていない,という意味の Warning が出ます。
LaTeX Font Warning: Font shape `OT2/lmr/m/n' undefined
(Font) using `OT2/cmr/m/n' instead on input line 9.
LaTeX Font Warning: Font shape `OT2/lmr/bx/n' undefined
(Font) using `OT2/lmr/m/n' instead on input line 10.
LaTeX Font Warning: Font shape `OT2/lmss/m/n' undefined
(Font) using `OT2/cmr/m/n' instead on input line 10.
LaTeX Font Warning: Font shape `OT2/lmtt/m/n' undefined
(Font) using `OT2/cmr/m/n' instead on input line 11.
"OT2/lmr/m/n" 等の定義は,LH パッケージの ot2cmr.fd,ot2cmss.fd,ot2cmtt.fd を基にして作成した Latin Modern 用の fd ファイルで行います。次はオリジナルの ot2cmr.fd の一部です。
\ProvidesFile{ot2cmr.fd}
[2001/08/11 v3.2c Computer Modern Cyrillic font definitions]
\DeclareFontFamily{OT2}{cmr}{\hyphenchar\font45 }
\DeclareFontShape{OT2}{cmr}{m}{n}{%
<5><6><7>wnr7 <8><9><10><10.95>wnr10%
<12><14.4><17.28><20.74><24.88>wnr12}{}
\DeclareFontShape{OT2}{cmr}{m}{sl}{%
<5><6><7>wnsl8<8><9>gen*wnsl<10><10.95>wnsl10%
<12><14.4><17.28><20.74><24.88>wnsl12}{}
ここでは \DeclareFontShape の第 2 引数:ファミリー名を lmr に書き換えます。
\ProvidesFile{ot2lmr.fd}
[Computer Modern Cyrillic font definitions]
\DeclareFontFamily{OT2}{lmr}{\hyphenchar\font45 }
\DeclareFontShape{OT2}{lmr}{m}{n}{%
<5><6><7>wnr7 <8><9><10><10.95>wnr10%
<12><14.4><17.28><20.74><24.88>wnr12}{}
\DeclareFontShape{OT2}{lmr}{m}{sl}{%
<5><6><7>wnsl8<8><9>gen*wnsl<10><10.95>wnsl10%
<12><14.4><17.28><20.74><24.88>wnsl12}{}

■ OT2/X2 エンコーディングの例 ■
Latin Modern と OT2 / X2 エンコーディングを併用するケースを取り上げてみます。X2 については
CTAN Directory: Russian を参照してください。サンプルは次のとおりです。なお,上で作成した OT2lmr.fd,OT2lmss.fd,OT2lmtt が Path の通ったディレクトリに置いてあるものとします。
\documentclass{jsarticle}
\usepackage{lmodern}
\usepackage[X2,OT2,T1]{fontenc}
\usepackage[russian,english]{babel}
\begin{document}
\newcommand{\xtw}[1]{{\fontencoding{X2}\selectfont#1}}
\selectlanguage{russian}
\section{Aduneizh\xtw{\cyrschwa}}
Darbanzaalak \textbf{aua\xtw{\cyrabhha}y} abri Adeklaracia
\textit{irylana\xtw{\cyrhdsc}\xtw{\cyrschwa}o}
\end{document}
これをタイプセットすると

と出力され,\cyrschwa \cyrabhha などコマンドで入力した X2 エンコーディングの文字全てが Roman 体になります。原因はギリシア文字,OT2 エンコーディングでみたとおりです。対策も同じで,X2/lmr/m/n 等を設定するフォント定義ファイルを作成することで次の出力を得ることができます。

■ 他の言語・フォントとの組み合わせ ■
ここで取り上げた以外の言語あるいはフォントを利用した際に同様の不具合が生じた場合は,Warning あるいは Error 情報から該当する言語定義ファイル FD を調べて,上で検討した方法で対応することができます。フォントに関する情報は『改訂第 4 版 LaTeX2e 美文書作成入門』第 12 章などを参照してください。