분필로는 굵은 글씨를 쓸 수 없습니다. 그래서 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뿐입니다. 아래에서 볼 함정 대부분이 이 두 가지로 설명됩니다. 가장 많이 검색되는 질문부터 시작하겠습니다. ℝ은 어떻게 입력할까요?
ℝ・ℕ・ℤ 입력하기 — \mathbb에 amssymb이 필요한 이유
전처리부에 \usepackage{amssymb}을 넣고 본문에 $\mathbb{R}$이라고 쓰면 끝입니다. amsfonts으로도 같은 \mathbb을 얻습니다(amssymb이 내부에서 amsfonts을 불러옵니다). 패키지를 빠뜨리면 ! Undefined control sequence.으로 멈춥니다. 순정 LaTeX에는 칠판 굵은체가 아예 없습니다. 설정 실수가 아니라 설계가 그렇습니다.
\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에 칠판 굵은체를 일부러 넣지 않았습니다. 그 빈자리를 1985년 AMS가 메웁니다. AMS-TeX용으로 분필 느낌의 칠판 굵은체를 만들었고, 당시 명령 이름은 \Bbb이었습니다. 그 이름은 지금도 amsfonts.sty 안에 \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를 눈으로 확인하기 전에는 알아챌 수 없습니다.
% 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은 각각 ≀와 ⇕로 나옵니다. 장식 알파벳의 인수는 단어가 아니라 기호의 나열로 처리된다고 기억하십시오. 실무 지침은 단순합니다. \mathcal에는 언제나 대문자 한 글자만 넘깁니다. 집합족의 \mathcal{A}, 푸리에 변환의 \mathcal{F}, σ-대수의 \mathcal{B}, 정수환의 \mathcal{O} — 이것이 본래의 쓰임입니다.
\mathcal과 \mathscr의 차이 — mathrsfs 넣기
\mathcal은 기본 내장 cmsy10의 필기체 알파벳이고, \mathscr은 \usepackage{mathrsfs}으로 불러오는 rsfs10의 스크립트체입니다. 나란히 놓으면 전혀 다른 손글씨임이 한눈에 보입니다. \mathcal은 폭이 넓고 장식이 절제되어 있으며, \mathscr은 오른쪽으로 크게 기울고 획의 굵고 가는 대비가 뚜렷한 본격 필기체로, 라플라스 변환의 \mathscr{L}이나 라그랑지안의 \mathscr{L}에는 보통 이쪽을 씁니다. 한 편의 논문에서 두 가지 장식 문자를 구별해 쓰고 싶다면 이 조합이 가장 무난합니다.
\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로 그렸고, 1.0 판이 1991년 10월에 공개되었습니다. 글꼴에 함께 실린 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} | \mathscr | 기울기를 완만하게 다듬은 RSFS |
\usepackage[mathscr]{eucal} | \mathscr(\mathcal은 그대로) | Euler Script |
\usepackage{eucal} | \mathcal을 대체 | Euler Script |
\usepackage{calrsfs} | \mathcal을 대체 | RSFS |
표의 아래쪽 절반에 함정이 있습니다. calrsfs과 옵션 없는 eucal은 \mathcal 자체를 덮어씁니다. "\mathcal 모양이 갑자기 바뀌었다", "공저자 쪽 결과물과 글자가 다르다" 같은 문의의 상당수는 누군가 이 패키지들 가운데 하나를 추가한 데서 비롯됩니다. 나아가 mathrsfs과 mathscr 옵션을 준 eucal을 함께 불러오면 나중에 불러온 쪽이 \mathscr을 가져가, 고르지 않은 서체가 나옵니다. 스크립트는 한 계열로 좁히십시오. 이것이 유일하게 확실한 방어입니다.
\mathfrak이 아이디얼과 리 대수의 글자가 된 이유
\mathfrak도 amssymb(또는 amsfonts)으로 쓸 수 있게 되지만, 넷 가운데 유일하게 대문자・소문자・숫자가 모두 갖춰져 있습니다. 그리고 이 서체만은 실제 쓰임에서 주역이 소문자입니다. 아이디얼은 \mathfrak{p}(소 아이디얼), \mathfrak{m}(극대 아이디얼), 일반적으로 \mathfrak{a}로 쓰고, 리 대수는 \mathfrak{g}, \mathfrak{h}, \mathfrak{sl}로 적어 대응하는 리 군 G, H와 한눈에 구별되게 합니다.
왜 하필 고딕 활자체일까요. 이유는 수학이 아니라 인쇄사에 있습니다. 19세기 독일에서 독일어 책은 보통 프락투어로 조판했습니다. 1876년 Richard Dedekind는 Dirichlet의 『Vorlesungen über Zahlentheorie』 제3판에 붙인 보유에서 Kummer의 이상수를 구체적인 수의 집합으로 바꾸고 이를 아이디얼이라 이름 지었습니다. 프락투어는 당시 독일 식자공의 손 닿는 곳에 있던 대비용 알파벳이었으므로, 아이디얼은 프락투어 소문자로 적혔습니다. 독일 인쇄가 그 활자를 버린 지 오래인 지금도, 대수의 기호만은 그 습관을 보존하고 있습니다.
\usepackage{amsmath,amssymb} % amssymb: \mathfrak — amsmath: \operatorname
% ...
\[
\mathfrak{g} = \operatorname{Lie}(G), \qquad
\mathfrak{p} \subset \mathfrak{m} \subset \mathcal{O}
\]참고로 amssymb이 불러오는 프락투어는 19세기 활자 그대로가 아니라, Hermann Zapf가 AMS Euler의 일부로 그린 Euler Fraktur(글꼴 이름 eufm10)입니다. 가독성은 크게 나아졌지만 획이 많은 서체라는 점은 그대로입니다. 아래 첨자 안이나 작게 조판되는 자리에서 \mathfrak을 남용하면 \mathfrak{p}과 \mathfrak{q}을 구별할 수 없게 됩니다. 크기가 작아지는 곳에서는 다른 기호로 돌리거나, 본문에서 한 번 읽는 법을 적어 주는 편이 친절합니다.
XeLaTeX・LuaLaTeX이라면 unicode-math의 \symbb
XeLaTeX이나 LuaLaTeX에서 unicode-math을 쓰면 네 장식 알파벳이 하나의 OpenType 수식 글꼴에서 한꺼번에 공급되며, \symbb, \symcal, \symscr, \symfrak으로 호출합니다. 여기서는 유니코드 문자 자체가 선택되므로 이 페이지의 함정 대부분이 사라집니다. \symbb{k}은 제대로 𝕜이 되고, \Bbbk을 외워 둘 필요도 없습니다. 다만 실제로 무엇이 나오는지는 고른 수식 글꼴이 얼마나 많은 글자를 담고 있느냐에 달려 있습니다. 예컨대 \symcal과 \symscr을 서로 다른 모양으로 낼 수 있는지도 글꼴의 기능입니다. 엔진별 선택은 「수식 서체」 페이지에 맡깁니다.
% 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}
\]