ラテン文字の言語とギリシャ文字の言語が混在した(欧文 8 ビットの)LaTeX 文書を作成するときに、「ラテン文字(T1 エンコーディング等)とギリシャ文字(LGR エンコーディング)で異なるファミリを使いたい」とする。例えば、ラテン文字(のセリフ、つまり \rmfamily
)では Times 系の newtx パッケージ(ntxrx ファミリ)を使いたいが、これにはギリシャ文字(LGR)には対応していないので、それと調和するフォントとして、GFS Artemisia(artemisia ファミリ)を使いたい。こういう場合、Babel を利用するとエンコーディングは自動的に切り替えてくれる(言語を greek にするとエンコーディングが LGR になる)がファミリまでは切り替えてくれない。いちいち手動で切り替えるのは面倒である。
このような場合に、「ntxrx ファミリで LGR エンコーディングが指定された場合は自動的に artemisia ファミリで代替する」という設定ができれば便利である。その機能を提供するのが substitutefont パッケージである。(TeX Live、W32TeX に収録されている。)このパッケージは次の命令を提供する。
\substitutefont{<エンコーディング>}{<ファミリ1>}{<ファミリ2>}
: フォント指定が「ファミリ1」と「エンコーディング」になった場合は自動的に「ファミリ2」で代替する。
これを利用すると、例えば、最初に挙げた事例は次のようにして解決できる。
\documentclass[a4paper]{article} \usepackage[LGR,T1]{fontenc}% 普通にfontencでLGRを指定 \usepackage{newtxtext}% ラテン文字はTimes(ntxrx ファミリ) % ntxrx の LGR 版は artemisia で代替する \usepackage{substitutefont} \substitutefont{LGR}{ntxrx}{artemisia}%% これでOK! \begin{document} Hoge! % これは T1/ntxrx \fontencoding{LGR}\selectfont % エンコーディングを切り替える <'Ogh! % これは LGR/artemisia で出力される \end{document}
ところで、プレアンブルでフォント設定をした後の \rmdefault
の値は「メインで使いたい(セリフの)ファミリ」を表している。(上の例では \rmdefault
は ntxrx。)そのことを踏まえると、次の命令実行は「メインのギリシャ語の(セリフの)ファミリ」を設定していると解釈できる。
\substitutefont{LGR}{\rmdefault}{artemisia}
古典ギリシャ語のための Babel の設定も含めた完全な例を挙げておく。
% Encoded in UTF-8 \documentclass[a4paper]{article} \usepackage[LGR,T1]{fontenc} \usepackage[utf8]{inputenc}% yes, utf8 can be used! \usepackage{newtxtext}% Latin serif family is Times ('ntxrx') % I want to do ancienet Greek... \usepackage[greek,english]{babel} \languageattribute{greek}{polutoniko} \usepackage[greek=ancientgreek]{hyphsubst} %% ... and use GFS Artemisia for the Greek serif font. \usepackage{substitutefont} \substitutefont{LGR}{\rmdefault}{artemisia} \begin{document} \foreignlanguage{greek}{Ἡ τέχνη μακρὴ}, but {\TeX} is macro. \end{document}
ところで、上の例をよく見ればわかるが、
普通に fontenc で LGR を指定して、普通に inputenc で utf8 を指定して
ギリシャ文字の UTF-8 での直接入力ができている。これは少し昔には無理であったことは、LaTeX でギリシャ語を書いている人だったらご存じであろう。
以前の記事で、LGR エンコーディングの「改良版の定義」である「LGRx」エンコーディングについて紹介した。実は、最新のTeX Live では、本家の LGR の定義がこの「LGRx」のもので置き換えられた。(なので lgrx パッケージは obsolete になっている。)従って、今では T1 や T2A 等と全く同じ感覚で LGR が使えるようになっていて、それゆえ utf8 入力エンコーディングにも対応しているのである。なお、以前の LGRx が LGR になったので、utf8 対応だけでなく、一連の記事で述べた全ての機能が今では LGR で利用可能となっている。
ただし、この変更が行われたのは最近のこと(2013 年 8 月頃)なので、TeX Live 2013 の初期リリースのものと互換をとるのであれば、LGR も LGRx も表に出さずに、「textalpha パッケージを読む形にしておく」のが便利だと思う。