筆記体・花文字

チョークで太字は書けません。だから 20 世紀なかばの講義室で、数学者たちは縦棒をもう一本引くようになりました——二重にした線が太字の代わりだったのです。この黒板での手癖がそのまま活字になったものが黒板太字(blackboard bold)で、いま印刷物で見る ℝ・ℕ・ℤ の正体です。LaTeX が用意する装飾アルファベットは四つ、花文字 \mathcal、スクリプト体 \mathscr、フラクトゥール \mathfrak、そして黒板太字 \mathbb。やっかいなのは、いちばん需要のある \mathbb が標準では使えず、標準で使える \mathcal のほうは小文字を渡してもエラーを出さずに黙って別の記号を刷ってしまうことです。このページは、四つを見分けて事故なく使うためのものです。

\mathcal\mathscr\mathfrak\mathbb の違い

四つの違いは「どのフォントを呼ぶか」と「そのフォントにどこまで字が入っているか」に尽きます。そして、ここがこのページの要なのですが、\mathcal{A}A を花文字に変換する命令ではありません。命令が変えるのは引数の範囲で使う数式フォントの「族」だけで、文字の位置(スロット)はそのまま です。つまり A は「フォントの 65 番目の字」という指示のまま別のフォントに投げ込まれ、そこに何が入っていようとそれが刷られます。四つの装飾アルファベットで起きる事故は、ほぼすべてこの一点から生まれます。

命令見た目必要なパッケージ入っている字
\mathcal流れるような花文字不要(標準で使える)大文字 A–Z のみ
\mathscr大きく傾いた本格的な筆記体mathrsfs(別系統に eucal大文字 A–Z のみ
\mathfrak角ばった亀甲文字amssymb または amsfonts大文字・小文字・数字
\mathbb線を二重にした太字amssymb または amsfonts大文字 A–Z のみ(+\Bbbk

表を眺めると、二つのねじれが目につきます。標準で使えるのは \mathcal だけ、そして 小文字まで揃っているのは \mathfrak だけ。この二つが、以下で見ていく落とし穴のほとんどを説明してくれます。まずは、いちばん検索される「ℝ をどう出すか」から始めましょう。

ℝ・ℕ・ℤ を出す——\mathbbamssymb が要る理由

プリアンブルに \usepackage{amssymb} を入れて、本文で $\mathbb{R}$ と書く——これだけです。amsfonts でも同じ \mathbb が手に入ります(amssymb は内部で amsfonts を読み込みます)。読み込みを忘れると ! Undefined control sequence. で止まります。素の LaTeX には黒板太字が 存在しない ので、これは設定ミスではなく仕様です。

document.tex
\usepackage{amssymb}   % gives \mathbb, \mathfrak and \Bbbk
% ...
\[
  \mathbb{N} \subset \mathbb{Z} \subset \mathbb{Q}
    \subset \mathbb{R} \subset \mathbb{C}
\]

なぜ標準に入っていないのか。理由は Knuth の趣味です。黒板太字は 1950 年代末のフランスあたりで生まれ、1960 年代初めにプリンストン大学の数学教室で定着したと言われます。印刷物に現れるのは 1960 年代なかばからで、Gunning と Rossi の Analytic Functions of Several Complex Variables(1965)が初期の例です。ところが Knuth は「太字は太字で組めばよい」と考え、TeX 用に自作した Computer Modern に黒板太字を 意図的に入れませんでした。代わりに AMS が 1985 年、AMS-TeX 用にチョーク風の黒板太字を作ります。当時の命令名は \Bbb で、その名残はいまも amsfonts.sty の中に「\Bbb は旧式なので \mathbb を使え」という置き換え定義として残っています。ちなみに Jean-Pierre Serre は講義では黒板太字を使いながら、著書では一貫して普通の太字を使い続けました。

  • \mathbb{R} — 実数全体 ℝ。
  • \mathbb{C} — 複素数全体 ℂ。
  • \mathbb{Z} — 整数全体 ℤ。ドイツ語 Zahlen(数)に由来し、Hilbert に帰されます。教科書での最古の使用例は Bourbaki の Algèbre(1947)。
  • \mathbb{Q} — 有理数全体 ℚ。
  • \mathbb{N} — 自然数全体 ℕ。
  • \mathbb{F}_q — 位数 q の有限体。添字は黒板太字にしません。

\mathbb{k} が ℸ になる——小文字には \Bbbk

\mathbb に小文字を渡してはいけません。黒板太字の小文字 k が欲しくて \mathbb{k} と書くと、警告もエラーも出ないまま ヘブライ文字ダレット ℸ が刷られます。前節の原理どおりで、k は「フォントの 107 番目」という指示のまま msbm フォントに渡され、そこに座っているのが \daleth だからです。同じ理由で \mathbb{a} は反転した G の ⅁(\Game)、\mathbb{1} は ⊮(\nVdash)になります。どれも組版としては正常終了するので、PDF を目で見るまで気づけません。

document.tex
% lowercase blackboard bold is its own command, not \mathbb{k}
\[
  \Bbbk = \overline{\Bbbk}, \qquad V \otimes_{\Bbbk} W
\]

正しい書き方は \Bbbk です。amssymb が黒板太字の小文字 k を 独立した一個の記号として 用意しているもので、体を k と書く代数の文書で重宝します。\mathbb{k} ではなく \Bbbk、つまり引数を取らない点に注意してください。それ以外の小文字や数字(黒板太字の 1 や 2、小文字の h など)が要るときは、別のフォントパッケージに頼ります。dsfont\mathds で大文字と h・k と数字 1 を、bbm\mathbbm で小文字と数字を提供し、bbold\mathbb 自体を再定義して広い範囲をカバーします。最後の一つは amssymb と定義がぶつかるので、同じ文書で両方読み込むなら どちらに \mathbb を任せるかを決めてから にしてください。

\mathcal は大文字専用——\mathcal{a} は ⊣ になる

\mathcal の引数は大文字 A–Z に限ってください。\mathcal{a} と書いても崩れた花文字の a が出るのではなく、まったく無関係な ⊣(\dashv が出ます。しかも警告一つ出ません。\mathcal の実体は \DeclareSymbolFontAlphabet{\mathcal}{symbols}、すなわち数式記号フォント cmsy10 への切り替えで、そのフォントには花文字の大文字が 65〜90 番に置かれている一方、小文字や数字の位置にはまったく別の記号が詰まっています。しかも 全部の位置が埋まっている ため「その字はありません」と言う機会がなく、TeX は黙って隣の記号を刷ってしまうのです。

書いたもの実際に出る字その位置にある記号
\mathcal{a}\dashv
\mathcal{b}\lfloor
\mathcal{g}}\rbrace
\mathcal{o}\wr
\mathcal{1}\infty
\mathcal{2}\in

同じ理屈で、\mathcal{Hom} は「Hom」という語にはなりません。花文字の H・o・m が三つ並ぶ……のでもなく、H だけが花文字になり、o と m はそれぞれ ≀ と ⇕ になります。装飾アルファベットの引数は 単語ではなく記号の並び として扱われる、と覚えてください。実務上の指針は単純です。\mathcal に渡すのは常に一文字の大文字。集合族の \mathcal{A}、フーリエ変換の \mathcal{F}、σ 加法族の \mathcal{B}、整数環の \mathcal{O} のような使い方が本来の姿です。

\mathcal\mathscr の違い——mathrsfs を入れる

\mathcal は標準の cmsy10 の花文字、\mathscr\usepackage{mathrsfs} で読み込む rsfs10 の筆記体です。並べると別物だと一目で分かります。\mathcal は横に広く、装飾のヒゲが控えめ。\mathscr はずっと大きく右に傾き、線の太い細いの差がはっきりした本格的な筆記体で、ラプラス変換の \mathscr{L} やラグランジアンの \mathscr{L} はこちらが定番です。二種類の飾り文字を一本の論文で区別して使いたいなら、この組み合わせがいちばん素直です。

document.tex
\usepackage{mathrsfs}   % adds \mathscr (RSFS); \mathcal is left alone
% ...
\[
  \mathcal{F} \subset \mathcal{P}(X), \qquad
  \mathscr{L}\{f\}(s) = F(s)
\]

RSFS は Ralph Smith’s Formal Script の略で、カリフォルニア大学サンディエゴ校の物理学者 Ralph Smith が Metafont で作り、1991 年 10 月に version 1.0 が公開されました。同梱の README によれば、彼は R. Hunter Middleton が設計した書体を手本にしており、その源流は 18 世紀に広まった Spencerian/Copperplate の手書き書体にあります。同じ README には「いずれ小文字を足してテキスト用フォントにしたい」とも書かれているのですが、その改訂はついに行われませんでした。だから今日でも \mathscr{a} と書くと、ログにこう出ます——Missing character: There is no a in font rsfs10!

この一行は、じつはありがたい知らせです。\mathcal が黙って別の記号にすり替えるのに対し、\mathscr足りない字をきちんと申告する。rsfs10 には大文字しか入っていないので、TeX は正直に「無い」と言えるわけです。\mathscr の系統はもう一つあり、eucal パッケージが呼ぶ Euler Script がそれです。Euler は AMS の依頼で Hermann Zapf が 1980〜81 年に描いた書体で、黒板に手で書く数学者の字——つまり傾かず立った字——を写そうとしたものです。RSFS の大きく傾いた古典的な筆記体とはまるで表情が違います。

読み込み方使えるようになる命令出てくる書体
\usepackage{mathrsfs}\mathscr\mathcal は無傷)RSFS
\usepackage[scr]{rsfso}\mathscrRSFS を穏やかに傾け直した書体
\usepackage[mathscr]{eucal}\mathscr\mathcal は無傷)Euler Script
\usepackage{eucal}\mathcal を置き換えEuler Script
\usepackage{calrsfs}\mathcal を置き換えRSFS

表の下半分に落とし穴があります。calrsfs と(オプションなしの)eucal\mathcal そのものを 上書きします。「\mathcal の見た目が急に変わった」「共著者の環境と字が違う」という相談のかなりの部分は、これらのパッケージが誰かの手で足されたのが原因です。さらに mathrsfseucal[mathscr] を両方読み込むと、後から読み込んだほうが \mathscr を上書きし、意図しない書体になります。スクリプトは一系統に絞る。これが唯一の安全策です。

\mathfrak はなぜイデアルと Lie 環に使われるのか

\mathfrakamssymb(または amsfonts)で使えるようになりますが、四つのうち唯一 大文字・小文字・数字がすべて揃っています。そしてこの書体だけは、用途で主役を張るのが小文字のほうです。イデアルは \mathfrak{p}(素イデアル)・\mathfrak{m}(極大イデアル)・\mathfrak{a}、Lie 環は \mathfrak{g}\mathfrak{h}\mathfrak{sl} と書き、対応する Lie 群の G・H と一目で区別できるようにします。

なぜ亀甲文字なのか——理由は数学ではなく印刷史にあります。19 世紀のドイツでは、ドイツ語の本はフラクトゥールで組むのが普通でした。1876 年、Richard Dedekind は Dirichlet『Vorlesungen über Zahlentheorie』第3版に付した補遺で、Kummer の理想数を具体的な数の集合に置き換えて「イデアル」と名づけます。手元の活字で自然に選べる対照的な書体がフラクトゥールだったので、イデアルはフラクトゥールの小文字で書かれました。ドイツ語圏がフラクトゥールをやめて久しい現在も、代数の記号だけがその慣習を保存しているわけです。

document.tex
\usepackage{amsmath,amssymb}   % amssymb: \mathfrak — amsmath: \operatorname
% ...
\[
  \mathfrak{g} = \operatorname{Lie}(G), \qquad
  \mathfrak{p} \subset \mathfrak{m} \subset \mathcal{O}
\]

なお amssymb が呼び出すフラクトゥールは、19 世紀の活字そのものではなく、AMS Euler の一部として Hermann Zapf が描いた Euler Fraktur(フォント名 eufm10)です。読みやすさは大幅に改善されていますが、それでも画数の多い書体であることに変わりはありません。添字の中や、小さく組まれる箇所で \mathfrak を多用すると、\mathfrak{p}\mathfrak{q} の区別が付かなくなります。小さくなる位置では別の記号に逃がすか、本文中で一度は読み方を添えておくのが親切です。

XeLaTeX・LuaLaTeX なら unicode-math\symbb

XeLaTeX か LuaLaTeX で unicode-math を使う場合、四つの装飾アルファベットは一つの OpenType 数式フォントからまとめて供給され、\symbb\symcal\symscr\symfrak で呼び出します。ここでは Unicode の文字そのものが選ばれるので、この章で見てきた落とし穴の多くが消えます——\symbb{k} はちゃんと 𝕜 になり、\Bbbk を覚えておく必要もありません。ただし何が出るかは選んだ数式フォントの収録字数しだいで、たとえば \symcal\symscr を別の字形として出し分けられるかどうかもフォントの機能に依存します。エンジンごとの選び方は「数式の書体」のページに譲ります。

document.tex
% XeLaTeX or LuaLaTeX only
\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
% ...
\[
  \symbb{R}, \quad \symcal{F}, \quad \symscr{L},
  \quad \symfrak{g}, \quad \symbb{k}
\]