LaTeX 수식 문제는 두 갈래입니다. 하나는 컴파일이 아예 멈추는 경우 — 로그에 빨간 오류가 뜨죠. 다른 하나는 컴파일은 되는데 출력이 어딘가 어긋나는 경우 — sin 이 세 변수처럼 붙거나, 지수 꼬리가 이상하게 잘립니다. 이 글은 그 둘을 각각 정리합니다.
먼저 멈추는 오류부터. 컴파일 버튼을 눌렀는데 PDF 대신 빨간 오류가 뜨면, 로그의 첫 줄부터 읽는 게 가장 빠릅니다. LaTeX 는 오류를 만난 자리에서 멈추고 무엇이 이상했는지 를 한 줄로 알려줍니다. 문제는 그 한 줄이 에러가 감지된 자리 이지 에러가 시작된 자리 가 아니라는 점입니다. 그래서 메시지를 그대로 검색해 봐도, 내 문서의 어느 줄을 고쳐야 하는지까지는 잘 나오지 않습니다.
Overleaf 를 쓴다면 화면 하단 Logs 탭에서 오류 전문을 볼 수 있고, 로컬에서 컴파일한다면 같은 내용이 .log 파일에 들어 있습니다.
| 오류 메시지 | 대개의 원인 |
|---|---|
! Missing $ inserted | 수식 기호를 수식 환경 밖에서 씀 / 수식 환경 안에 빈 줄 |
! Missing \endgroup inserted | { 와 } 의 짝이 안 맞음 |
! Extra }, or forgotten $ | 수식 안에 } 가 하나 더 있거나 수식을 안 닫음 |
! Undefined control sequence. | 명령어 철자가 틀렸거나 패키지가 없음 |
1부 · 컴파일이 멈추는 오류 메시지
오류 1 — 수식 기호를 수식 환경 밖에서 쓴 경우
1
2
! Missing $ inserted.
<inserted text> $
원인. LaTeX 는 본문 모드와 수식 모드가 나뉘어 있고, _ ^ \frac 같은 기호는 수식 모드 전용입니다. 본문에서 이 기호를 만나면 컴파일러가 “여기서부터는 수식이어야 하는데 여는 기호가 없다” 고 판단하고, 자기가 $ 를 끼워 넣어 수습하려다 멈춥니다. 메시지의 <inserted text> $ 가 그 끼워 넣으려던 문자입니다.
해결. 해당 기호를 $...$ 또는 \[...\] 안으로 옮깁니다.
1
2
3
4
5
% 오류
속도 v_0 는...
% 수정
속도 $v_0$는...
본문 한복판보다 더 자주 걸리는 자리가 따로 있습니다. 표 셀 안, 그림 캡션 \caption{}, 각주 \footnote{} 처럼 본문처럼 안 보이는 본문 입니다. 변수 이름 하나만 짧게 적고 지나가는 자리라 여는 기호를 빼먹기 쉽습니다.
같은 메시지, 다른 원인 — 수식 환경 안의 빈 줄
equation · align 같은 수식 환경은 빈 줄을 허용하지 않습니다. 다음처럼 적으면 같은 ! Missing $ inserted 가 납니다.
1
2
3
4
5
6
% 오류 발생 — 환경 안 빈 줄
\begin{equation}
E = mc^2
\end{equation}
LaTeX 는 빈 줄을 단락 구분자로 해석합니다. 수식 환경 안에서는 단락 구분이 의미가 없어 파서가 즉시 멈춥니다. 여러 줄 수식은 빈 줄이 아니라 \\ 로 나눕니다.
1
2
3
4
5
% 올바른 예
\begin{align}
a^2 + b^2 &= c^2 \\
c &= \sqrt{a^2 + b^2}
\end{align}
오류 2 — 중괄호 짝이 맞지 않는 경우
1
! Missing \endgroup inserted
원인. { 와 } 의 짝이 맞지 않습니다. 여는 중괄호가 닫히지 않은 채로 그룹이 끝나야 할 지점에 도달하면 컴파일러가 멈춥니다.
해결. 중괄호를 하나씩 세어 짝을 확인합니다. 눈으로 셀 때는 인자를 받는 명령어부터 봅니다 — \frac{}{} 는 두 개, \sqrt{} \text{} \mathbb{} 는 각각 한 개입니다. 중첩이 깊어질수록 여는 쪽만 늘어나기 쉽습니다.
1
2
3
4
5
% 오류 — 여는 중괄호 3개, 닫는 중괄호 2개
$\frac{\sqrt{x+1}{2}$
% 수정
$\frac{\sqrt{x+1}}{2}$
세는 일은 에디터에 맡기는 편이 빠릅니다. Overleaf 를 포함한 대부분의 LaTeX 에디터는 커서를 괄호에 대면 짝이 되는 괄호를 함께 강조해 줍니다. 짝이 없는 괄호는 강조가 뜨지 않으니, 의심되는 줄에서 커서를 옮겨 보면 어느 쪽이 비었는지 금방 드러납니다.
짝 문제의 사촌 — \left 와 \right
크기 자동 조정 괄호 \left( … \right) 도 반드시 쌍이어야 합니다. \left( 하나만 두고 \right) 가 빠지면 Extra \left. 또는 Missing \right. 가 납니다. 한쪽만 필요하면 다른 쪽에 점 을 붙여 보이지 않는 짝을 만듭니다.
1
2
% 왼쪽에 없는 괄호 — 점으로 짝 맞춤
\left. \frac{df}{dx} \right|_{x=0}
오류 3 — 닫는 중괄호가 하나 더 있거나, 수식을 닫지 않은 경우
1
! Extra }, or forgotten $
원인. 오류 2 의 반대쪽입니다. 수식 안에서 } 가 하나 더 있거나, 수식을 닫지 않은 채로 끝냈습니다.
해결. 수식 환경의 시작과 끝을 확인합니다.
1
2
3
4
5
% 오류 — 닫는 중괄호가 하나 더
$\frac{a}{b}}$
% 수정
$\frac{a}{b}$
메시지가 } 와 $ 를 한 문장에 함께 언급하는 데는 이유가 있습니다. 컴파일러 입장에서는 두 상황이 같은 증상으로 보이기 때문입니다. 열린 그룹이 정리되기 전에 수식이 끝나 버린 자리 를 만났을 뿐이고, 그게 여분의 중괄호 때문인지 빠뜨린 수식 기호 때문인지는 문서를 봐야 압니다. 그래서 이 메시지가 뜨면 중괄호와 수식 기호를 둘 다 확인하는 게 맞습니다.
오류 4 — 명령어를 알아보지 못하는 경우
1
2
! Undefined control sequence.
l.45 \frac
원인. 철자가 틀린 명령어를 입력했거나, 그 명령어를 정의하는 패키지가 프리앰블에 없습니다.
해결 1 — 철자 확인. LaTeX 명령어는 대소문자를 구분합니다. \Frac 은 \frac 이 아니고, \Alpha 는 아예 존재하지 않습니다 (그리스 대문자 A 는 영문 A 로 적습니다). 로그의 l.45 뒤에 문제가 된 명령어 이름이 그대로 찍히기 때문에, 네 가지 중에서는 위치를 특정하기가 가장 쉬운 오류입니다.
해결 2 — 패키지 확인. 철자가 맞는데도 같은 메시지가 뜬다면 패키지 누락입니다. 프리앰블에 추가합니다.
1
2
\usepackage{amsmath}
\usepackage{amssymb}
\text{} \operatorname{} 과 align 환경은 amsmath 에, \mathbb{} \mathfrak{} 같은 글꼴 명령어는 amssymb 에 들어 있습니다. 수식을 쓰는 문서라면 이 두 줄은 처음부터 넣어 두는 편이 낫습니다.
로그를 읽는 순서
네 가지를 다 알아도, 오류가 한 번에 여러 개 뜨면 어디부터 손대야 할지 막막합니다. 순서는 단순합니다.
- 첫 번째 오류부터 고칩니다. 앞의 오류가 파서를 어긋난 상태로 밀어 놓기 때문에, 뒤의 오류 대부분은 첫 오류의 그림자입니다. 하나 고치고 다시 컴파일하면 열 개가 한꺼번에 사라지는 일이 흔합니다.
l.N은 출발점이지 목적지가 아닙니다. 그 줄에서 아무것도 안 보이면 그 위쪽 문단을 봅니다.- 직전에 고친 자리를 먼저 의심합니다. 어제까지 컴파일되던 문서라면 원인은 오늘 새로 쓴 줄에 있습니다.
2부 · 컴파일은 되는데 출력이 어긋나는 실수
오류 메시지 없이 넘어갔는데 PDF 를 보면 뭔가 어색한 경우입니다. 컴파일러는 통과시켰지만 의미가 달라진 자리들 — 초심자가 가장 오래 고생하는 지점입니다.
실수 1 — 두 글자 이상 첨자에 중괄호 빼먹기
위·아래첨자 ^, _ 는 바로 다음 한 글자만 첨자로 처리합니다. 두 글자 이상이면 반드시 중괄호로 묶어야 합니다.
1
2
3
4
5
% 틀린 예 — e^{-}x^{2} 로 해석됨
$e^-x^2$
% 올바른 예
$e^{-x^2}$
- 틀린 예: $e^-x^2$ —
e의 마이너스 곱하기 x의 제곱처럼 읽힙니다. - 올바른 예: $e^{-x^2}$ — 정상적인 가우시안 꼬리.
1
2
3
$x^{10}$ % x 의 10승 (x^10 은 x^1·0 으로 해석)
$x^{-1}$ % 음수 부호도 두 글자 취급
$x_{ij}$ % 두 글자 아래첨자
근본 원인. TeX 파서는 토큰 단위로 동작합니다. ^ 뒤의 단일 토큰만 첨자로 가져가도록 설계돼 있어, “다음 단어 전부” 가 아니라 “다음 한 글자” 가 기본 단위입니다. 중괄호 {...} 가 여러 토큰을 하나로 묶는 그룹 표시입니다.
실수 2 — 함수 이름이 이탤릭체로 보임
sin(x) 라고 그냥 적으면 LaTeX 가 s, i, n 을 세 변수의 곱처럼 처리합니다. 수학 폰트의 기본이 변수 = 이탤릭이기 때문입니다.
1
2
3
4
5
% 틀린 예 — s·i·n 세 변수의 곱처럼 보임
$sin(x) + cos(y)$
% 올바른 예 — 직립체 함수 이름
$\sin(x) + \cos(y)$
| 함수 | 명령어 |
|---|---|
| 삼각함수 | \sin, \cos, \tan, \cot, \sec, \csc |
| 역삼각·로그·지수 | \arcsin, \log, \ln, \exp |
| 최대·최소·극한 | \max, \min, \sup, \inf, \lim |
| 기타 | \det, \arg, \gcd, \dim, \ker |
직접 정의한 함수 (예: Tr, Var) 는 \operatorname{Var} 로 처리합니다 (amsmath). 철자가 틀리면 오류 4 의 Undefined control sequence 로 이어지니, 함수 이름은 목록에서 확인하는 습관이 안전합니다.
실수 3 — 괄호 크기가 안 맞음
분수나 큰 식을 작은 괄호 () 로 감싸면 괄호가 너무 작아 위아래가 튀어나옵니다. \left … \right 가 안쪽 식의 크기에 맞춰 자동으로 늘려줍니다.
1
$\left( \sum_{i=1}^{n} x_i \right)^2 \leq n \sum_{i=1}^{n} x_i^2$
수동 조정은 \big, \Big, \bigg, \Bigg 4 단계입니다. (짝 문제는 1부 오류 2 의 \left/\right 항목 참고.)
실수 4 — 수식 안에 일반 텍스트를 직접 입력
수식 환경 안에서 where, if 같은 영문 텍스트를 그냥 적으면 변수처럼 이탤릭으로 붙고 공백도 무시됩니다.
1
2
3
4
5
% 틀린 예
$where E is energy$
% 올바른 예
$\text{where } E \text{ is energy}$
\text{} 안의 공백은 그대로 살아남고, 그 외 부분 (E) 은 수식 변수로 정상 처리됩니다. 단위·조건 표기에 매번 등장합니다.
1
2
$v = 9.8 \, \text{m/s}^2$
$f(x) = x^2 \quad \text{for } x \geq 0$
\text{} 는 amsmath 가 제공합니다. 한국어도 \text{} 안에 적어 두면 일관됩니다.
보너스 — 조용히 어긋나는 작은 것들
- 인라인
\frac이 너무 작음. 줄 안에서도 큼직하게 보이려면\dfrac. —$\dfrac{f(x)}{g(x)}$ dx가 적분 기호에 빡빡함.\,(미세 공백) 을 한 칸. —$\int_0^1 f(x) \, dx$\eqref{}자리에(??). 참조한 식에\label{}이 없을 때 나옵니다. 식을 적은 직후 라벨을 함께 박는 습관을 들이면 안전합니다.
정리
| 증상 | 확인할 것 |
|---|---|
! Missing $ inserted | 본문의 _ ^ \frac 을 수식 안으로. 캡션·표 셀·각주, 그리고 수식 환경 안 빈 줄 |
! Missing \endgroup inserted | 여는 중괄호가 닫혔는지. \left/\right 짝도 |
! Extra }, or forgotten $ | 여분의 } 와 닫지 않은 수식, 둘 다 |
! Undefined control sequence. | 명령어 철자 (대소문자), amsmath · amssymb |
| 지수·첨자가 이상하게 잘림 | 두 글자 이상 첨자는 {} 로 묶기 |
| 함수 이름이 이탤릭 | \sin, \log, 자작 함수는 \operatorname{} |
| 괄호가 식보다 작음 | \left( ... \right) |
| 수식 안 영문이 이탤릭으로 붙음 | \text{ ... } (amsmath) |
멈추는 오류든 조용히 어긋나는 실수든, 원인은 결국 모드를 벗어났거나, 짝이 안 맞거나, 이름을 못 찾거나, 묶음을 안 했거나 입니다. 로그의 첫 줄 또는 어긋난 출력을 이 갈래로 분류하는 습관이 붙으면 디버깅 시간이 눈에 띄게 줄어듭니다.
첫 번째 오류(! Missing $ inserted)는 수식 기호의 짝만 맞아 있어도 상당수가 아예 나지 않습니다. 그리고 그 짝은 컴파일하기 전, 원고 단계에서도 확인할 수 있습니다 — 짝이 어긋난 수식 기호를 컴파일 전에 잡는 방법 에서 docx 안의 홀수 문단을 먼저 걸러 내는 흐름을 다뤘습니다.