홈 $ 하나 빠뜨렸는데 컴파일 실패 — LaTeXFlow Ambiguity 카드로 미리 잡기
포스트
취소

$ 하나 빠뜨렸는데 컴파일 실패 — LaTeXFlow Ambiguity 카드로 미리 잡기

논문 컴파일 직전, pdflatex 이 ”! Missing $ inserted.” 를 뱉으면서 line 137 을 가리킵니다. 그 line 을 열어봐도 $ 개수는 맞아 보이는데, 실제 어긋난 자리는 그 위 어딘가입니다. 마감이 몇 시간 남지 않은 상황에서 문단을 하나하나 되짚어야 합니다.

원인은 대체로 단순합니다. inline 수식 하나에 닫는 $ 를 빠뜨렸거나, $$...$$ display 블록 한쪽이 잘못 지워진 자리입니다. 문제는 컴파일러가 그걸 “어디서 안 닫혔는지” 가 아니라 “어디서 이상해졌는지” 만 알려준다는 점입니다.

LaTeXFlow 의 Ambiguity 카드 는 그 자리를 컴파일 이전, 원고 단계에서 잡습니다. docx 를 올리면 $ 개수가 홀수인 문단이 “⚠ Odd number of $ — equation boundaries are ambiguous” 경고와 함께 따로 모이고, 문단 안에서 바로 고치면서 라이브 프리뷰로 확인할 수 있습니다. 이 글에서는 그 흐름을 시연합니다.

1. 문제 — 닫히지 않은 달러 기호는 왜 잡기 어려운가

LaTeX 컴파일 에러는 아래처럼 뜹니다.

1
2
3
4
! Missing $ inserted.
<inserted text>
                $
l.137 be positive.

line 137 은 에러가 감지된 자리 이지 에러가 시작된 자리 가 아닙니다. $ 를 하나 빼먹으면 그 뒤 본문 전체가 수식 모드로 해석되다가 다음 $ 를 만나서야 균형이 맞고, 그 사이 어딘가에서 처음으로 파서가 튕겨나가는 자리에 에러가 붙습니다. 즉 진짜 원인 문단 은 line 137 이 아니라 그보다 훨씬 위에 있을 수 있습니다.

1-1. 모드 누수(mode leakage)가 뒤에 있는 문장까지 오염시킨다

핵심은 $ 가 스위치 라는 점입니다. 여는 $ 는 텍스트 모드에서 수식 모드로, 닫는 $ 는 다시 텍스트 모드로 바꿉니다. 한 짝이 빠지면 이 스위치가 계속 켜진 채로 남아서, 뒤에 이어지는 평범한 문장 까지 전부 수식으로 해석됩니다. 이걸 흔히 모드 누수라고 부릅니다.

그 결과 에러는 대개 엉뚱한 곳에서 터집니다. 예를 들어 수식 모드에서는 공백이 무시되고 글자 간격이 이탤릭 수학 기울임으로 바뀌기 때문에, be positive 같은 멀쩡한 영어 단어가 b·e·p·o·s·i·t·i·v·e 처럼 변수 곱으로 읽힙니다. 그러다 한글이나 마침표, 문단 끝처럼 수식 모드에서 허용되지 않는 토큰을 만나면 그때서야 ! Missing $ inserted. 가 뜹니다. 그 지점이 바로 line 137 이고, 정작 $ 를 빼먹은 자리는 그보다 위입니다.

1-2. 에러가 하나로 끝나지 않고 연쇄한다

모드가 어긋나면 에러 하나로 끝나지 않는 경우가 많습니다. \section, \item, \begin{...} 같은 명령이 수식 모드 안에서 예상과 다르게 동작하면서 ! Missing } inserted., ! LaTeX Error: Something's wrong--perhaps a missing \item. 같은 2차·3차 에러가 줄줄이 따라붙습니다. 이렇게 되면 로그 맨 위 에러부터 차근차근 봐야 하는데, 첫 에러의 line number 조차 원인 자리가 아니라서 추적이 더 꼬입니다.

에디터의 syntax highlighting 도 $ 는 잘 안 잡습니다. $ 는 여닫이가 같은 문자라서, 하나가 빠지면 뒷부분 전체 색이 뒤집힐 뿐 어느 짝이 어긋났는지 는 알려주지 않습니다. 결국 눈으로 $ 를 세거나, 문단 하나하나에 $ 를 카운트하는 손이 필요합니다. 수식이 많은 논문일수록 그 시간이 늘어납니다.

Missing $ inserted 를 포함한 컴파일 에러 메시지 자체를 어떻게 읽는지는 LaTeX 오류·실수 가이드 에 따로 정리해 두었습니다. 이 글은 그 에러가 나기 전에 원고에서 미리 잡는 쪽에 초점을 둡니다.

2. 해결 — LaTeXFlow Ambiguity 카드

2-1. 도구 열기

LaTeXFlow 을 엽니다. 첫 화면에 dropzone 이 있습니다.

LaTeXFlow 첫 화면 — dropzone + bracket-mode 체크박스

docx 는 브라우저 안에서 파싱되며, 서버로 업로드되지 않습니다.

2-2. docx 올리면 Ambiguity 카드 자동 감지

docx 를 dropzone 에 끌어다 놓으면 도구가 문단을 훑어 수식을 탐지합니다. 감지하는 구분자는 $...$, $$...$$, \(...\), \[...\], 그리고 기본으로 켜져 있는 대괄호 모드의 [...] 입니다. 그 과정에서 $ 개수가 홀수인 문단이 발견되면, 도구는 어디서 수식이 끝나는지 를 확정할 수 없으므로 추측하는 대신 Ambiguity 카드 로 먼저 표시합니다. 카드에는 “⚠ Odd number of $ — equation boundaries are ambiguous” 경고 줄과 “⚠ Likely a missed closing $” 안내가 붙습니다.

Ambiguity 카드 2개 — Odd number of $ + Likely a missed closing $

상단 헤더에 Selected 5 · Skipped 0 · Unresolved ambiguity 2 가 보입니다. 즉 5개 수식은 자동 탐지되었고, 2개 문단은 $ 짝이 안 맞아서 경계를 확정할 수 없다 는 상태입니다.

각 카드에는 문단 원문이 그대로 보입니다.

  • 문단 3: 3) Let $\alph + 1 be positive. — $ 하나만 있고 뒤가 안 닫힘
  • 문단 6: 6) The formulas $\int e^x\, dx = e^x + C$ and $\lim_{n \to \infty} (1 + 1/n)^n = e$ hold but $a + b = c fails without closure. — 세 번째 $ 가 안 닫힘

pdflatex 이라면 line number 하나만 던지고 끝이지만, LaTeXFlow 는 어느 문단에서 짝이 어긋났는지 를 문단 원문과 함께 보여줍니다. 각 카드에는 버튼이 둘입니다 — 문단 텍스트를 직접 편집 하는 Edit text, 그리고 수식이 아니라 진짜 텍스트라면 넘기는 Skip.

2-3. Edit text 로 문단 안에서 바로 고치기

카드 우측 Edit text 를 누르면 textarea 가 열려 문단을 바로 편집할 수 있습니다.

Edit text 열림 — textarea 안 문단 편집 + 라이브 프리뷰

textarea 아래 “Detected: 0 equations · still ambiguous” 라이브 프리뷰가 붙어있습니다. 편집 중에 $ 를 하나 추가하면 이 프리뷰(Temml)가 실시간으로 바뀌어, 어디서 짝이 맞춰지는지 를 Save 전에 확인할 수 있습니다. 컴파일을 돌려 로그를 읽는 왕복 없이, 원고 화면 안에서 짝이 닫혔다는 사실을 눈으로 바로 확인하는 셈입니다.

문단 상단에 안내가 있습니다 — “Editing will remove any formatting (bold, italic, colors) from this entire paragraph. Fix the LaTeX or add the missing $ delimiter, then Save.” 즉 문단 전체 서식이 plain text 로 flatten 됨을 미리 알려줍니다.

2-4. 닫는 달러 기호 추가 → Save → 카운트 변화

3) Let $\alph + 1 be positive. 를 3) Let $\alph + 1$ be positive. 로 고치고 Save 를 누르면 헤더 카운트가 바뀝니다.

Save 후 — Selected 6 · Unresolved 1

Selected 5 → 6, Unresolved 2 → 1. 문단 3 의 ambig 가 해결되어 새 수식 $\alph + 1$ 이 Detected Equations 리스트에 편입되었고, 문단 6 만 남았습니다. 남은 문단 6 도 같은 방식으로 세 번째 $ 를 닫아주면 됩니다.

프리뷰가 유용한 건 경계를 어디에 두느냐 까지 눈으로 판단하게 해준다는 점입니다. 문단 6 에서 but $a + b = c fails 의 닫는 $ 를 c 바로 뒤에 넣을지, fails 뒤에 넣을지에 따라 수식 범위가 달라집니다. 프리뷰에 a+b=c 만 깔끔하게 렌더되는 쪽이 의도한 경계임을 바로 알 수 있어서, 컴파일 후에야 “수식 안에 fails 라는 글자가 딸려 들어갔네” 를 깨닫는 일이 없습니다.

3. 결과 — 모든 ambig 해결 후 Render PNG · Export

두 문단을 다 고치고 나면 헤더가 Selected 9 · Skipped 0 · Unresolved ambiguity 0 이 됩니다.

모든 ambig 해결 완료 — Render PNG · Export 준비

Ambiguity 카드가 사라지고 Detected Equations 리스트만 남습니다. 상단 우측 Render PNG · Export 를 누르면 한 번에 PNG 수식이 들어간 docx 가 다운로드됩니다. 내보낸 이미지의 alt-text 에는 원래 LaTeX 이 그대로 보존되어, 나중에 다시 편집할 때 소스를 잃지 않습니다.

이 시점에서는 pdflatex 을 돌리기 전에 이미 $ 짝이 맞는 게 확인된 상태입니다. 즉 컴파일 에러의 pain point 를 원고 단계에서 잡은 셈입니다.

여기서 얻는 이득은 단순히 에러 하나를 없앤 것 이상입니다. 짝이 어긋난 $ 하나는 앞서 본 것처럼 모드 누수를 일으켜 뒤 문단까지 오염시키고 2차·3차 에러를 부릅니다. 원고 단계에서 짝을 맞춰두면 그 연쇄 자체가 애초에 생기지 않으므로, 정작 컴파일에서 마주칠 에러는 참고문헌·상호참조·패키지 충돌 같은 진짜 조판 문제 로 좁혀집니다. 마감 직전에 로그를 위아래로 훑으며 원인 line 을 되짚는 시간을, 문단 단위로 미리 소진해 두는 셈입니다.

4. 어디서 자주 생기나

닫히지 않은 $ 는 부주의라기보다 특정 작업 패턴 에서 반복적으로 나옵니다. 미리 알아두면 어느 문단을 의심할지 감이 잡힙니다.

  • 복붙 중 $ 하나 누락 — 다른 문서나 채팅, 이전 초안에서 수식을 드래그해 붙일 때 앞뒤 $ 중 한쪽만 선택되는 경우가 흔합니다. 특히 문장 끝 $ 바로 뒤에 마침표가 붙어 있으면 마침표만 남고 $ 가 잘려 나가기 쉽습니다.
  • 표·캡션 안 — 표 셀이나 그림 캡션은 본문보다 좁아서 수식을 짧게 줄여 넣다가 짝을 놓치기 쉽습니다. 게다가 이런 위치의 에러는 컴파일 로그에서 line number 가 표·figure 환경 내부를 가리켜 원인 추적이 더 헷갈립니다.
  • 금액 $100 이 수식으로 오인 — 경제·통계 논문에서 $100, $5.99 같은 달러 금액을 쓰면 그 $ 가 수식 여는 기호로 카운트됩니다. 문단에 이런 달러 표기가 홀수 개 있으면 짝이 안 맞는 것으로 잡힙니다. 이건 실제 오류가 아니므로 아래 FAQ 의 Skip 으로 처리합니다.
  • 여러 사람이 합친 문서 — 공저 논문에서 각자 쓴 조각을 합칠 때, 한 사람은 $...$ 로, 다른 사람은 \(...\) 로 쓰다가 경계에서 짝이 어긋나는 경우가 생깁니다.

5. 자주 묻는 질문 (FAQ)

Q. 컴파일도 안 하는데 어떻게 $ 오류를 미리 아나요? 컴파일러처럼 문법을 해석하는 게 아니라, 문단별로 $ 구분자의 개수를 셉니다. inline $ 는 여닫이가 반드시 짝수여야 하므로, 한 문단 안에서 개수가 홀수 면 어딘가 한 짝이 비어 있다는 뜻입니다. 이 단순한 규칙만으로도 실제 원인 문단을 정확히 짚어낼 수 있어서, 컴파일러가 엉뚱한 line 을 가리키는 문제를 피합니다.

Q. $100 처럼 진짜 달러 기호는 어떻게 하나요? 그건 오류가 아니므로 카드에서 Skip 을 누르면 됩니다. Skip 하면 그 카드가 목록에서 사라지고 본문의 $100 텍스트는 그대로 유지됩니다. 화면에서 눈에 띄는 변화는 헤더의 Unresolved ambiguity 가 하나 줄어드는 것뿐입니다 — 옆의 Skipped 는 오르지 않습니다. 그 카운트는 감지된 수식 중 건너뛴 것을 세는 자리라 Ambiguity 카드와는 집계가 다릅니다. 도구가 홀수 $ 를 기계적으로 표시하되 판단은 사용자에게 맡기는 이유가 이것입니다.

Q. 이 도구로 .tex 파일을 직접 고칠 수 있나요? 아니요. LaTeXFlow 는 LaTeX 을 컴파일하지도, .tex 를 편집하지도 않습니다. 대상은 어디까지나 .docx 원고이고, 하는 일은 (1) 원고 단계에서 짝 어긋난 $ 를 점검하고 (2) 수식을 PNG 이미지로 렌더해 docx 로 내보내는 것입니다. .tex 소스를 다룬다면 여전히 실제 LaTeX 컴파일이 필요합니다.

Q. Overleaf 같은 실제 컴파일러와 병행해도 되나요? 네, 그게 권장하는 쓰임새입니다. LaTeXFlow 는 컴파일러를 대체하지 않고 보완 합니다. docx 원고 단계에서 짝이 맞는지 먼저 확인해 Missing $ inserted 부류의 왕복을 줄이고, 최종 조판과 참고문헌·상호참조 같은 진짜 컴파일 작업은 Overleaf/로컬 pdflatex 에 맡기면 됩니다.

Q. 프리뷰는 무엇으로 렌더되나요? 브라우저 안에서 Temml(및 MathJax) 로 렌더합니다. 실제 조판 결과와 미세한 차이는 있을 수 있지만, $ 짝이 맞는지·수식 경계가 의도대로인지 확인하는 용도로는 충분합니다. 최종 모양새는 컴파일 단계에서 다시 확인하시면 됩니다.

6. 본인 docx 라면

.docx 에 LaTeX plain text 를 섞어 쓰는 workflow 라면 아래 자리에서 도움이 됩니다.

  • 학회 submission 직전 최종 점검 — 논문 초안 전체의 $ 짝을 육안으로 세는 대신 도구 한 번에 확인
  • 학위 논문 최종 원고 — 챕터별로 넣은 수식 수백 개 중 어긋난 짝이 어느 문단인지 특정
  • 협업 문서 — 여러 사람이 나눠 쓴 docx 를 합쳤을 때 짝이 어긋난 자리 정리

LaTeXFlow 은 브라우저 안에서 동작하며, docx 는 서버로 올라가지 않습니다. PC / Mac / iPad 어디서나 열립니다. Ambiguity 카드가 뜨지 않는다면 이미 짝이 맞는 상태이니, 그대로 Render PNG · Export 로 넘어가면 됩니다.

컴파일 에러 메시지를 되짚는 시간을 줄이고, docx 안에서 눈으로 확인 → 편집 → PNG 로 완결하는 path 를 제안합니다.


수식 정확히 다루는 경로 — LaTeX 시리즈 #1~#12 가 있습니다. align 환경 / 수학 기호 cheatsheet / 그리스 문자 정리 등이 있어, 어긋난 $ 를 고치는 시점에 함께 참고하실 수 있습니다.

LaTeX 가 Word 에서 수식 처리 되지 않아, 하나씩 다시 쓰고 계신가요? Docs·Word 파일을 올리면 $...$ · $$...$$ · \(...\) · \[...\] · [...] 로 감싼 수식을 골라 이미지로 바꿔 돌려줍니다. LaTeX 한 번에 검증하고 한 번에 변환하기! 설치 No! 로그인 No! 내 문서로 확인해 보기

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

AI 챗봇 답변의 [수식], docx 에 그대로 살리기 — bracket-mode 시연

챗봇에게 연습 문제 20개를 시켰을 때 — docx 에 붙이면 raw LaTeX 로 남는다