マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

欧文の従属“ギリシャ”文な書体を指定する件

ラテン文字の言語とギリシャ文字の言語が混在した(欧文 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 パッケージを読む形にしておく」のが便利だと思う。