화학 반응식, 분자 골격, 입자물리의 파인만 도표처럼 과학 분야의 그림에는 분야마다 고유한 "그리는 문법"이 있습니다. 범용 TikZ로 처음부터 만들 수도 있지만, 분야 전용 패키지를 쓰면 화학자나 물리학자가 종이에 쓰는 표기 그대로 짧은 코드만으로 정확한 그림을 얻을 수 있습니다. 이 페이지에서는 화학 도구인 mhchem, chemfig, XyMTeX, 물리 도구인 tikz-feynman, feynmf, 그리고 분자 궤도 도표용 modiagram을 각각 무엇을 만들기 위한 도구인지에 초점을 맞춰 정리합니다.
먼저 전체 그림부터 보겠습니다. 같은 "화학ㆍ물리 그림"이라도 만들고 싶은 대상에 따라 선택할 도구가 뚜렷하게 갈립니다. 아래 표에서 각 패키지와 분야의 대응을 확인한 뒤 하나씩 살펴보겠습니다.
| 패키지 | 분야 | 만들 수 있는 것 |
|---|---|---|
mhchem | 화학 | 화학식과 반응식(문자로 조판하는 H₂O, 2H₂+O₂→2H₂O) |
chemfig | 화학 | 구조식ㆍ골격식ㆍ반응 스킴(결합과 분기의 그림) |
XyMTeX | 화학 | 구조식(명령 기반의 오래된 패키지) |
tikz-feynman | 물리 | 파인만 도표(TikZ 기반ㆍ자동 배치) |
feynmf / feynmp | 물리 | 파인만 도표(METAFONT/MetaPostㆍ2패스) |
modiagram | 화학ㆍ물리 | 분자 궤도(에너지 준위) 도표 |
화학식과 반응식 — mhchem
mhchem 은 화학식과 반응식을 문자로 조판하는 패키지입니다. 구조(골격) 그림을 그리는 도구가 아니라, H2O 또는 2 H2 + O2 -> 2 H2O처럼 본문이나 수식 안에 쓰는 화학 표기를 담당합니다. 프리앰블에서 \usepackage[version=4]{mhchem}로 불러오고, 본문에서는 핵심 명령 \ce{...}(chemical equation) 안에 식을 씁니다.
\ce{} 의 장점은 자연스럽게 입력하기만 해도 화학 표기로 알맞게 정리된다는 점입니다. 원소 기호 바로 뒤의 숫자는 자동으로 아래 첨자가 되고(\ce{H2O} → H₂O), ^를 붙인 숫자나 기호는 전하 위 첨자가 됩니다(\ce{SO4^2-} → SO₄²⁻). 화살표는 ->(정반응), <=>(평형), <-(역반응)처럼 그대로 쓸 수 있고, +는 반응물의 덧셈으로 적절한 간격을 두고 조판됩니다. 상태는 \ce{H2O(l)}처럼 괄호로 붙이고, 침전은 v, 발생 기체는 ^를 공백으로 구분해 씁니다(\ce{BaSO4 v}).
\usepackage[version=4]{mhchem}
% ...
\ce{2 H2 + O2 -> 2 H2O}
\ce{CO2 + C ->[\Delta] 2 CO}
\ce{H2O <=> H+ + OH-}
\ce{Ba^2+ + SO4^2- -> BaSO4 v}이들은 순서대로 물의 생성(양쪽 계수 2와 아래 첨자가 자동으로 정렬됨), 가열(->[\Delta]가 화살표 위에 Δ 조건 라벨을 올림), 물의 전리 평형(양방향 평형 화살표), 황산 바륨의 침전(끝의 v가 아래쪽 화살표 ↓가 됨)으로 조판됩니다. 화살표 라벨은 ->[위][아래]처럼 두 개를 쓸 수 있어 조건을 위아래에 함께 표시할 수 있습니다. \ce{}는 본문 중에도 $...$ 수식 안에서도 사용할 수 있습니다.
mhchem 은 구조식을 그릴 수는 없습니다. 결합선이나 고리는 범위 밖입니다. 단일 결합이나 이중 결합 같은 짧은 결합 기호는 \ce{C\bond{-}C}처럼 \bond로 나타낼 수 있지만, 본격적인 골격 그림이 필요하다면 다음의 chemfig를 써야 합니다. 비슷한 기능을 제공하는 후발 패키지 chemformula도 있으며, 이쪽은 \ch{...} 명령을 사용합니다.
구조식과 반응 스킴 — chemfig
chemfig 는 분자의 구조식(골격도) 을 그리기 위한 대표적인 패키지입니다. TikZ를 바탕으로 "결합과 분기의 미니 언어" 를 사용해 분자를 한붓그리기처럼 기술합니다. 불러오기는 \usepackage{chemfig}만 쓰면 됩니다. 핵심 명령은 \chemfig{...} 이며, 중괄호 안에 원자와 결합을 나열합니다.
문법의 핵심은 결합 기호와 각도입니다. 결합은 -(단일 결합), =(이중 결합), ~(삼중 결합)으로 나타내며 원자와 원자 사이에 둡니다. 각 결합의 방향은 바로 뒤의 대괄호로 지정합니다. [2]처럼 0~7의 숫자는 45° 간격의 미리 정해진 방향이며, [0]은 동쪽(오른쪽, 0°), 거기서 반시계 방향으로 [2]는 위쪽(90°), [4]는 서쪽(180°), [6]은 아래쪽(270°)입니다. 임의 각도는 [:30] 처럼 콜론을 붙여 절대 각도(도)를 씁니다. 가지는 괄호 (...)로 나타내며 주 사슬에서 분기시킵니다.
\usepackage{chemfig}
% ...
% メタン CH4:中心 C に H を 4 方向へ
\chemfig{H-C(-[2]H)(-[6]H)-H}
% ベンゼン環(交互の二重結合)
\chemfig{*6(=-=-=-)}위의 메테인은 먼저 H-C로 탄소의 서쪽에 수소 하나를 두고, 이어지는 두 가지 (-[2]H)와 (-[6]H)로 바로 위와 바로 아래에 수소를 더한 뒤, 마지막 -H로 동쪽(기본 방향)에 수소를 뻗어 십자 모양의 CH₄가 됩니다. 아래의 벤젠에서 *6(...)은 6원자 고리를 뜻하고, 괄호 안의 =-=-=-는 단일 결합과 이중 결합을 번갈아 배치해 익숙한 육각형 방향족 고리로 그립니다. *는 일반 고리, **는 내부에 원을 그린 방향족 표현을 만듭니다.
chemfig 는 반응 스킴(여러 분자를 화살표로 연결하는 그림)도 그릴 수 있습니다. \schemestart ... \schemestop 으로 감싸고, 그 안에 분자(\chemfig{...})를 배치한 뒤 \arrow 로 화살표를 넣습니다. \arrow{->[조건]}처럼 화살표 위에 시약이나 조건을 쓸 수 있고, \arrow{<=>}는 평형 화살표가 됩니다. 다음은 단순한 A → B 스킴입니다.
\schemestart
\chemfig{H-C(-[2]H)(-[6]H)-H}
\arrow{->[\small oxidation]}
\chemfig{O=C(-[2]H)-[6]H}
\schemestop이 코드는 메테인의 구조식에서 산화를 나타내는 라벨 달린 화살표를 거쳐 포름알데하이드의 구조식으로 이어지는 가로 방향 반응 스킴을 만듭니다. chemfig는 pdfLaTeX, LuaLaTeX, XeLaTeX 모두에서 동작하며, 기반이 TikZ이므로 보통 추가 드라이버 설정은 필요 없습니다(DVI 경유 pLaTeX에서는 dvipdfmx 지정).
또 하나의 구조식 도구 — XyMTeX
구조식을 그리는 오래된 패키지로 XyMTeX(Shinsaku Fujita 제작)가 있습니다. chemfig가 "결합을 한붓그리기처럼 그리는" 발상이라면, XyMTeX는 고리나 골격 자체를 명령으로 호출하는 발상입니다. 예를 들어 벤젠 유도체라면 전용 명령에 치환기의 위치와 종류를 인수로 넘기는 식으로 씁니다. 복잡한 축합 다환이나 치환 패턴을 정형화된 명령으로 안정적으로 조판할 수 있다는 점이 강점입니다.
\usepackage{xymtex}로 불러오며, 벤젠 고리를 세로형이나 가로형으로 그리는 명령 등 여러 명령이 준비되어 있습니다. 새로 작성한다면 표기가 더 직관적이고 활발히 유지보수되는 chemfig를 선택하는 사람이 많지만, XyMTeX 기반의 기존 원고나 그 명령 체계가 손에 익은 경우에는 지금도 유용합니다. 출력은 LaTeX 표준 모드 외에 PostScript와 PDF 모드를 지원합니다.
파인만 도표 — tikz-feynman과 feynmf
이제 물리로 넘어갑니다. 소립자의 상호작용을 나타내는 파인만 도표에는 크게 두 계열의 도구가 있습니다. 현대적인 것은 tikz-feynman 으로, TikZ를 기반으로 꼭짓점(vertex)과 선(propagator)을 선언하면 자동으로 배치해 줍니다. 불러올 때는 호환성 지정을 붙인 \usepackage[compat=1.0.0]{tikz-feynman}가 권장됩니다.
빠르게 그리려면 한 번에 그리는 명령 \feynmandiagram 을 사용합니다. 선 스타일은 [fermion](페르미온 = 화살표가 있는 직선), [photon](광자 = 물결선), [gluon](글루온 = 나선) 등으로 지정하고, 꼭짓점은 이름을 쓰기만 해도 암묵적으로 만들어집니다. 세밀하게 배치를 정하고 싶을 때는 tikzpicture 안에서 feynman 환경을 열고 \vertex 로 꼭짓점을 놓은 뒤 \diagram* 으로 연결합니다.
\usepackage[compat=1.0.0]{tikz-feynman}
% ...
% 一発命令:e+ e- → μ+ μ-(光子交換)
\feynmandiagram [horizontal=a to b] {
i1 -- [fermion] a -- [fermion] i2,
a -- [photon] b,
f1 -- [fermion] b -- [fermion] f2,
};이 그림은 전형적인 s-채널 산란입니다. 왼쪽의 전자ㆍ양전자 쌍이 꼭짓점 a에서 합류하고, a와 b를 물결선(광자) 이 잇고, 오른쪽에서 다른 입자 쌍으로 갈라집니다. horizontal=a to b는 "a와 b를 수평으로 배치하라"는 배치 힌트입니다. 중요: 자동 배치 계산에는 LuaTeX가 필요하며, tikz-feynman은 내부적으로 Lua 알고리즘을 사용합니다. pdfLaTeX에서도 동작은 하지만 배치가 단순한 형태로 퇴화하고 경고가 나옵니다. 실질적으로 LuaLaTeX 컴파일이 전제라고 생각하세요.
다른 계열은 고전적인 feynmf / feynmp 입니다. 각 그림을 METAFONT(feynmf) 또는 MetaPost(feynmp) 로 따로 조판한 뒤 그 결과를 가져오는 2패스 방식을 사용합니다. 그림은 fmffile 환경에서 파일 이름별로 묶고, fmfgraph(또는 fmfgraph*) 안에서 \fmfleft와 \fmfright로 외부 선을, \fmf{...}로 선을 지정합니다. 첫 번째 LaTeX 실행에서 그림 정의 파일이 쓰이고, mf/mpost가 이를 글꼴이나 그림으로 변환한 다음, 두 번째 실행에서 결과를 가져오는 흐름입니다.
\usepackage{feynmp-auto}
% ...
\begin{fmffile}{myfd}
\begin{fmfgraph*}(120,80)
\fmfleft{i1,i2}
\fmfright{o1,o2}
\fmf{fermion}{i1,v1,o1}
\fmf{photon}{v1,v2}
\fmf{fermion}{i2,v2,o2}
\end{fmfgraph*}
\end{fmffile}이 코드는 앞서와 같은 산란을 feynmp로 그린 것입니다. feynmp-auto를 사용하면 MetaPost 실행을 자동화할 수 있어 수동 2패스가 한결 쉬워집니다. feynmf/feynmp는 안정적이고 출력이 아름다우며 오래된 논문과 TeX 환경에서 지금도 널리 쓰이지만, MetaFont/MetaPost를 별도로 호출하는 수고가 있습니다. 새 작업에는 간편한 tikz-feynman, 기존 자산이나 최소 의존성을 중시할 때는 feynmf 계열로 구분해 쓰면 좋습니다.
분자 궤도 도표와 에너지 준위 — modiagram
화학과 물리의 경계에 있는 것이 분자 궤도 도표(MO 도표) 입니다. 원자 궤도(AO)가 결합성ㆍ반결합성 분자 궤도(MO)로 조합되는 모습을 에너지 높이에 따라 세로로 배열해 그리는 그림입니다. 여기에 특화된 패키지가 modiagram 이며, TikZ를 기반으로 합니다. \usepackage{modiagram}로 불러오고, MOdiagram 환경 안에서 좌우 원자 궤도는 \atom 으로, 그것들을 잇는 분자 궤도는 \molecule 로 기술합니다.
\usepackage{modiagram}
% ...
\begin{MOdiagram}
\atom{left}{ 1s = {0; up} }
\atom{right}{ 1s = {0; up} }
\molecule{ 1sMO = {1; pair, } }
\end{MOdiagram}이것은 수소 분자 H₂의 가장 단순한 MO 도표입니다. \atom{left}와 \atom{right}가 각 수소의 1s 궤도에 위쪽 스핀 전자 하나씩({0; up}, 여기서 0은 에너지 준위)을 놓고, \molecule이 둘을 결합성 궤도로 합쳐 전자쌍(pair)을 넣습니다. 전자의 채움 방식(up, down, pair)과 준위 높이를 인수로 주기만 하면 가로선과 스핀 화살표로 이루어진 준위 도표가 만들어집니다. 이런 에너지 준위 도표는 순수 TikZ만으로도 그릴 수 있지만, modiagram은 MO 도표의 관례에 특화되어 있어 정형적인 그림을 더 짧고 정확하게 쓸 수 있습니다.
용도별 선택과 컴파일 주의점
마지막으로 실무적인 지침입니다. 무엇을 만들고 싶은지 에 따라 자연스럽게 고를 수 있습니다. 본문 안에 화학식ㆍ반응식을 쓰려면 mhchem, 구조식ㆍ반응 스킴을 그리려면 chemfig(복잡한 축합 고리에 명령 기반 방식이 맞으면 XyMTeX), 파인만 도표라면 tikz-feynman(오래된 환경이나 기존 원고라면 feynmf/feynmp), MO 도표라면 modiagram입니다. mhchem과 chemfig는 서로 보완하는 관계라, 본문 식은 mhchem, 별도 줄의 골격은 chemfig처럼 같은 문서에서 함께 쓰는 경우가 많습니다.
엔진과 패스 요구 사항도 확인해 두어야 합니다. tikz-feynman의 자동 배치는 LuaLaTeX를 전제로 하며, 다른 엔진에서는 배치 품질이 떨어집니다. feynmf/feynmp는 MetaFont/MetaPost를 별도로 호출하는 2패스가 필요합니다(feynmp-auto로 자동화 가능). chemfig와 modiagram은 TikZ 기반이라 pdfLaTeX, LuaLaTeX, XeLaTeX 모두에서 동작하지만, TikZ 그림은 계산이 무거워 수가 많으면 컴파일이 느려집니다. tikzexternalize로 그림을 캐시하거나 standalone 클래스로 그림만 따로 컴파일하면 편집이 쾌적해집니다.