ギリシャ文字

LaTeX で大文字のアルファを出そうとして \Alpha と打ち、! Undefined control sequence. に出くわす——ギリシャ文字の入口でいちばんよく起きる事故です。理由は拍子抜けするほど単純で、大文字のアルファは A とまったく同じ形だから、LaTeX は「ラテン文字の A を打てばいい」と考えて命令を用意していません。数式モードのギリシャ文字は、この「ラテン文字にない形にだけ名前を与える」という一本の方針でできています。このページはその方針から出発して、小文字・大文字の全命令、\epsilon\varepsilon のような異体字、太字と立体の出し方、そして本文中でギリシャ文字を使う方法までを順にほどいていきます。

\Alpha が無い理由と、代わりに打つもの

大文字のギリシャ文字で命令があるのは \Gamma\Delta\Theta\Lambda\Xi\Pi\Sigma\Upsilon\Phi\Psi\Omega11 字だけ です。残る 13 字は、対応するラテン大文字 A B E Z H I K M N O P T X をそのまま打ちます。LaTeX カーネルの fontmath.ltx を開いても宣言されているのは本当にこの 11 行だけで、\Alpha\Beta\Epsilon も、はじめから存在しません。Α と A、Β と B、Ε と E は活字として同じ形なので、二つ目の名前を与える理由が無かったのです。

設計としては潔いのですが、探す側にはひどく不親切です。\Alpha で検索しても何も出てこないのは、命令が「見つからない」のではなく「はじめから無い」から。エラーも ! Undefined control sequence. と言うだけで、代わりに A を打てとは教えてくれません。おもしろいのは、本文用の textgreek パッケージには \textAlpha\textBeta\textEpsilon がきちんと揃っていることです。本文で組むのは「数式の変数」ではなく「本物のギリシャ語の字」なので、24 字すべてに名前が要る。つまり数式モードの 11 という数は、ギリシャ語の都合ではなく ラテン文字と重ならない字形の数 なのです。

latex
% the eleven uppercase Greek letters that do have commands
\[ \Gamma(n) = (n-1)!, \qquad \Delta x, \qquad \Omega \]
% the other thirteen: type the Latin capital directly
\[ A, B, E, Z, H, I, K, M, N, O, P, T, X \]
% \Alpha, \Beta, \Epsilon ... -> ! Undefined control sequence.

小文字ギリシャ文字の一覧——\alpha から \omega まで

小文字は 24 字のうち オミクロンを除く 23 字 に命令があります。オミクロンだけ抜けているのは大文字と同じ理由で、ο はラテン小文字の o と見分けがつかないから。数式モードでそのまま o と打ちます。大文字で 13 字が欠け、小文字で 1 字が欠ける——別々の例外ではなく、たった一つの規則が二か所に顔を出しているだけです。命令名は文字の英語綴りそのままなので、\alpha\beta\gamma と、名前は覚えるより思い出すものに近くなっています。

命令字形読み
\alphaαアルファ
\betaβベータ
\gammaγガンマ
\deltaδデルタ
\epsilonϵイプシロン(丸い字形)
\zetaζゼータ
\etaηエータ
\thetaθシータ
\iotaιイオタ
\kappaκカッパ
\lambdaλラムダ
\muμミュー
\nuνニュー(ラテン v と紛らわしい)
\xiξクシー(グザイ)
ooオミクロン——命令は無く、ラテン o を打つ
\piπパイ
\rhoρロー
\sigmaσシグマ
\tauτタウ
\upsilonυウプシロン
\phiϕファイ(閉じた字形)
\chiχカイ
\psiψプサイ
\omegaωオメガ

取り違えやすい組がいくつかあります。\xi(ξ)と \zeta(ζ)、\nu(ν)と \upsilon(υ)、そして \nu(ν)とラテン小文字の v。とくに最後の一つは危険で、ν のつもりで v と書いてもコンパイルは通ってしまうため、エラーが出ないまま刷り上がりだけが間違います。原稿では字形ではなく 命令名で確かめる のが安全です。なお小文字は fontmath.ltxletters フォント(Computer Modern なら cmmi、数式イタリック)から取られており、変数と同じ斜体で出ます。次節で見るように、大文字の 11 字はまったく別のフォントから来ています。

大文字の 11 命令と、それだけ立体で出る理由

数式中に \Gamma\Omega と書くと、小文字と違って 立体(ローマン体) で出ます。これは偶然ではありません。fontmath.ltx の宣言を見ると、小文字が letters フォントから取られているのに対し、大文字 11 字は operators フォント(Computer Modern なら cmr、つまり本文と同じ立体)から取られています。同じ数式に \Gamma\gamma を並べれば、片方は直立、片方は斜体。LaTeX が何十年も変えずにいる、たいへん有名な非対称です。

命令字形読み
\GammaΓガンマ
\DeltaΔデルタ
\ThetaΘシータ
\LambdaΛラムダ
\XiΞクシー(グザイ)
\PiΠパイ(\prod とは別物)
\SigmaΣシグマ(\sum とは別物)
\UpsilonΥウプシロン
\PhiΦファイ
\PsiΨプサイ
\OmegaΩオメガ

ここに実務上の面倒が二つ潜んでいます。一つは書体の不揃い。命令の無い 13 字はラテン大文字で打つので、それは「変数」として 斜体 で組まれます。つまり \Gamma(立体)と A(斜体)が同じ行に並ぶと見た目が揃いません。もう一つは \Sigma\Pi\sum\prod の混同 です。前者はあくまで文字、後者は大型演算子で、字形の大きさも、ディスプレイ数式で範囲が上下に乗るかどうかも違います。総和・総積には必ず \sum_{i=1}^{n}\prod_{i=1}^{n} を使い、\Sigma\Pi は「ギリシャ大文字そのもの」が要るときだけにしてください。

\epsilon\varepsilon の違い、\phi\varphi の違い

\epsilon は丸い ϵ を、\varepsilon は三日月形の ε を出します。同じく \phi は閉じた ϕ、\varphi は開いた φ です。名前だけ見れば \epsilon のほうが「標準」に見えますが、数学の慣習では ε のほうが多数派 です。解析学の ε–δ 論法に出てくる ε も、「任意の ε > 0 に対して」の ε も、印刷では三日月形が使われるのがふつう。つまり「イプシロン」と言われて頭に浮かぶあの形を出すには、var の付いたほうを打たなければなりません。名前と実態がねじれているせいで、ここは初学者が確実につまずく場所です。

ϵ にはもう一つ、由緒ある混同があります。集合の所属を表す ∈ は、もともとギリシャ文字のイプシロンでした。ジュゼッペ・ペアノが 1889 年の『Arithmetices principia, nova methodo exposita』で所属記号として ε を用い、これはラテン語の est(「である」)の略だと自ら記しています。その後 ∈ は独立した記号として字形が分かれましたが、似ているせいで \epsilon\in の取り違えは今も起きます。しかも x \epsilon A と書いてもエラーは出ません。\in は関係子(\mathrel)として前後に空きを取るのに対し、\epsilon はただの文字(\mathord)なので、空きの詰まった妙な数式が黙って刷り上がる だけです。

latex
% the epsilon-delta definition conventionally uses the lunate \varepsilon
\[ |x - a| < \delta \implies |f(x) - f(a)| < \varepsilon \]
% \epsilon is a letter, \in is a relation -- different commands, different spacing
\[ x \in A, \qquad \epsilon > 0 \]
命令字形備考
\epsilonϵ丸いイプシロン
\varepsilonε三日月形。数学ではこちらが多数派
\thetaθ標準のシータ
\varthetaϑ筆記体風のシータ
\piπ標準のパイ
\varpiϖω に似た字形。取り違えに注意
\rhoρ標準のロー
\varrhoϱ尾のあるロー
\sigmaσ標準のシグマ
\varsigmaςギリシャ語の語末シグマ。数式ではまず使わない
\phiϕ閉じたファイ
\varphiφ開いたファイ。物理でよく使われる
\varkappaϰ異体カッパ。amssymb が必要
\digammaϝディガンマ(古代の文字)。amssymb が必要

実務の指針はごく単純で、文書のなかでどちらかに統一する こと。数学の原稿なら \varepsilon\varphi、既存のスタイル規定に合わせるならそちらに従います。上の表のうち \varkappa(ϰ)と \digamma(ϝ)の 2 つだけは標準では未定義で、プリアンブルに \usepackage{amssymb} が要ります。これを忘れると出るのは、やはり ! Undefined control sequence. です。なお var の付く異体字は小文字にしかありません。大文字を斜体にしたい場合は異体字ではなく、次に見る書体の切り替えの話になります。

ギリシャ文字を太字にする——\mathbf{\alpha} が効かない理由

ギリシャ文字を太字にするには \boldsymbol{\alpha}amsmath が読み込む amsbsy)か \bm{\alpha}bm パッケージ)を使います。\mathbf{\alpha}エラーも警告も出さずに、何も起こしません。実際に箱の幅を測ると、Computer Modern 10pt で \alpha\mathbf{\alpha} も 6.43404pt でぴたりと一致します。理由は記号の「クラス」にあります。\mathbf のような数式アルファベット命令が効くのは \mathalpha クラスの記号だけで、小文字ギリシャは fontmath.ltx\mathord として宣言されているため、そもそも対象外なのです。

たちが悪いのは、大文字ギリシャは \mathalpha なので \mathbf{\Gamma}ちゃんと効いてしまう ことです(同じ条件で幅が 6.25002pt から 6.91663pt に変わります)。「大文字は太字になったのに小文字だけならない」という一見不可解な症状は、ここから来ています。ベクトルやテンソルをギリシャ文字で書くなら、最初から \boldsymbol\bm に統一するのが安全です。\bm のほうは \bm{\nabla \times E} のように部分式全体へ掛けられ、太字の書体が無い場合は合成までしてくれる分、融通が利きます。

latex
\usepackage{amsmath}  % provides \boldsymbol (via amsbsy)
\usepackage{bm}       % provides \bm
% ...
\[ \boldsymbol{\alpha} \cdot \bm{\omega}, \qquad \bm{\nabla \times E} \]
% \mathbf{\alpha} silently produces the same box as \alpha

立体のギリシャ文字と ISO 規則——upgreekunicode-math

定数や単位に使うギリシャ文字は立体で組むのが ISO 80000-2 の流儀で、pdfLaTeX なら upgreek パッケージが答えになります。\usepackage{upgreek} を読み込むと、小文字は \upalpha\upmu\uppi、大文字は \Upgamma\Updelta… が使えます(大文字側がやはり 11 字なのは、これまで見てきた規則がそのまま効いているからです)。ISO 80000-2 は、変数は斜体、値の変わらない数学定数と単位は立体、と定めています。だから円周率の π は本来 \uppi、単位接頭語のマイクロは \upmu が正しく、変数としての π はふつうに \pi のままにします。

同じ規則は逆向きにも働きます。ISO は 変数はすべて斜体 と定めるので、変数として使う大文字ギリシャも本来は斜体であるべきです。ところが標準 LaTeX の \Gamma は前節で見たとおり立体。pdfLaTeX でこれを直すのが Walter Schmidt の fixmath で、大文字ギリシャを operators ではなく letters から取り直します(isomath はこれを土台にして、ベクトル・行列・テンソル用の書体まで整えます)。XeLaTeX / LuaLaTeX なら unicode-mathmath-style キーが同じ切り替えを一行で片づけます。既定の math-style=TeX は「大文字は立体・小文字は斜体」という LaTeX 伝来の非対称をそのまま再現し、math-style=ISO に変えると両方とも斜体になります。ほかに frenchupright も選べます。ただし関数名としての Γ(ガンマ関数)は ISO でも立体が正しいので、規則を機械的に当てはめないでください。

latex
\usepackage{upgreek}
% ...
% constants and units are upright
\[ C = 2 \uppi r, \qquad \lambda = 5\,\upmu\mathrm{m} \]
% variables stay italic
\[ \pi_1(X), \qquad \gamma \]

% XeLaTeX / LuaLaTeX: one line switches the whole convention
% \usepackage[math-style=ISO]{unicode-math}

本文中でギリシャ文字を使う——! Missing $ inserted を避ける

地の文に \alpha と書くと ! Missing $ inserted. で止まります。ギリシャ文字の命令は数式モード専用の数式文字(mathchar)として宣言されているので、水平モードでそれに出会った TeX が $ を補おうとして失敗するのです。手っ取り早い回避は $\alpha$ ですが、これは「変数 α」として斜体で組まれるため、単位の μm や生物の学名のような 本文の一部としてのギリシャ文字 には本来ふさわしくありません。数式を書いているのか、文章を書いているのかで、使うべき道具が変わります。

本文用には textgreek パッケージがあり、\textalpha\textbeta\textmu に加えて \textAlpha から \textOmega まで、大小 24 字がすべてそろっています——数式モードでは 11 字しか無かった大文字が、ここでは全部そろうわけです。ギリシャ語の文章そのものを組むなら babelgreek オプション(実体は babel-greekgreek.ldf)を使い、\textgreek{…} の中で LGR 符号化の翻字入力からギリシャ文字へ変換させるのが定石です。単位接頭語のマイクロだけが必要なら siunitx\micro を使う手もあります。いずれにせよ、$\mu$m と書いて済ませるのは最初ではなく最後の手段だと考えてください。

latex
\usepackage{textgreek}
% ...
A wavelength of 5\,\textmu m, and a coefficient \textalpha.
% writing \alpha here instead -> ! Missing $ inserted.
命令・オプションパッケージ得られるもの
\boldsymbol{\alpha}amsmath (amsbsy)太字斜体のギリシャ文字
\bm{\alpha}bm太字。部分式全体にも掛けられる
\upalphaupgreek立体の小文字ギリシャ文字
\Upgammaupgreek立体の大文字ギリシャ文字(11 字)
\varkappaamssymb異体カッパ ϰ と \digamma ϝ
\textalphatextgreek本文(テキストモード)のギリシャ文字 24 字
math-style=ISOunicode-mathISO 準拠の全斜体(XeLaTeX / LuaLaTeX)