수식 8개로 LaTeX 노트 앱 테스트하기
오늘 밤 정리해야 할 수식이 한 페이지 있고, 휴대폰의 노트 앱은 LaTeX를 지원한다고 해요. 하지만 ‘LaTeX 지원’이라는 말에는 서로 다른 네 가지 구현이 섞여 있고, 그 차이는 세 번째 수식에서 드러나요.
x = \frac{-b \pm \sqrt{b^2-4ac}}{2a}
분수선은 두 부분의 옆이 아니라 사이에 와야 해요.테스트 수식 8개를 앱에 붙여 넣고 어떻게 나오는지 보세요. 중첩 분수, 위아래에 범위가 붙은 합, pmatrix, 늘어나는 괄호, align 블록, cases 분기, \def 매크로, \ce 화학식이 제대로 된 LaTeX 노트 앱과 인라인 분수 몇 개만 그리는 앱을 가려 줘요. 평범한 텍스트나 편집할 수 없는 그림으로 나오면 실패예요.
수식 8개를 붙여 넣고 결과를 읽어 보세요
확인하는 데 1분도 안 걸리고 계정도 필요 없어요. 아래 블록을 평가하려는 앱의 새 노트에 복사하세요. 하나씩 넣어도 되고 한꺼번에 넣어도 돼요. 그리고 각 스니펫 아래 줄과 결과를 비교하세요. 여기 있는 스니펫은 모두 KaTeX가 렌더링하는 올바른 LaTeX라서, 실패한다면 입력이 아니라 앱의 문제예요.
노트 앱 LaTeX 자가 테스트
블록을 하나씩 붙여 넣으세요. ‘정상’ 줄과 비교하세요.
1. 중첩 분수
\frac{1}{1 + \frac{1}{1 + \frac{1}{x}}}
정상: 분수 막대 세 개가 쌓이고, 안쪽 막대일수록 바깥 막대보다
짧고 작은 크기로 조판됨.
2. 범위가 붙은 연산자
\sum_{n=1}^{\infty} \frac{1}{n^2} = \frac{\pi^2}{6}
정상: 디스플레이 모드에서 n=1과 무한대가 시그마 오른쪽이 아니라
바로 아래와 위에 놓이고, 시그마가 주변 글자보다 큼.
3. 행렬 환경
\begin{pmatrix} a & b \\ c & d \end{pmatrix}^{-1} =
\frac{1}{ad - bc} \begin{pmatrix} d & -b \\ -c & a \end{pmatrix}
정상: 두 행, 행렬 전체 높이만큼 커진 둥근 괄호, 닫는 괄호의
오른쪽 위에 올라간 -1.
4. 늘어나는 괄호
\left( \sum_{i=1}^{n} a_i b_i \right)^2 \le
\left( \sum_{i=1}^{n} a_i^2 \right) \left( \sum_{i=1}^{n} b_i^2 \right)
정상: 모든 괄호가 안에 든 합의 높이만큼 커지고, 짝을 이루는
두 괄호의 높이가 같음.
5. 정렬
\begin{align}
(a+b)^2 &= a^2 + 2ab + b^2 \\
(a-b)^2 &= a^2 - 2ab + b^2
\end{align}
정상: 두 줄이 한 블록을 이루고, 등호가 같은 열에 놓임.
6. 경우 나누기
f(x) = \begin{cases}
x^2 & \text{if } x \ge 0 \\
-x^2 & \text{if } x < 0
\end{cases}
정상: 두 행을 감싸는 중괄호 하나, 두 조건은 똑바로 선 로만체,
조건이 따로 한 열을 이룸.
7. 매크로 정의
\def\dd#1{\mathrm{d}#1}
\int_0^1 x^2 \dd{x} = \frac{1}{3}
정상: 매크로가 펼쳐져 x 앞에 똑바로 선 d가 나오고, 적분 기호에
0과 1이 붙음.
8. 화학식
\ce{H2SO4 + 2NaOH -> Na2SO4 + 2H2O}
정상: 아래 첨자 숫자, 기울어진 변수가 아니라 똑바로 선 원소 기호,
완전한 반응 화살표.
8개를 마친 뒤
- 렌더링된 수식 안에 커서를 두고 글자 하나를 선택해 보기.
안 되면 그 수식은 그림이에요.
- 시스템을 다크 모드로 바꾸기. 계속 검은색인 수식은 밝은 배경이
이미지에 박혀 있는 거예요.
- 노트 글자 크기를 가장 크게 하기. 그림은 흐려지고, 조판된 수식은
선명하게 남아요. 텍스트 파일 다운로드성공보다 실패를 읽으세요. 스니펫 1은 앱이 조판을 하는지 문자열 치환을 하는지 알려 줘요. 짧은 치환표로 만든 렌더러는 스니펫 3과 스니펫 6에서 멈춰요. 스니펫 7은 LaTeX 파서와 LaTeX처럼 보이기만 하는 화면을 가르는 선이에요. \def를 무시하는 앱은 글자를 그대로 찍거나 파싱 오류를 내니까요. 스니펫 8은 기본 수식 문법 위에 얹는 패키지인 mhchem이 필요해서, 앞의 일곱 개를 통과하고도 마지막에서 실패할 수 있어요.
앱이 말하는 ‘LaTeX 지원’의 네 가지 의미
두 앱이 모두 기능 소개 페이지에 LaTeX를 적어 두고도 전혀 다르게 작동할 수 있어요. 아래 네 가지 구현은 저마다 소스 코드를 읽지 않고도 겉에서 알아볼 수 있는 방식으로 실패해요.
| 수준 | 작동 방식 | 알아보는 법 | 문제가 되는 곳 |
|---|---|---|---|
| 인라인 일부 지원 | 달러 기호 사이의 분수, 위 첨자, 그리스 문자를 짧은 치환표로 처리 | 스니펫 3에서 pmatrix라는 글자가 그대로 보이거나 한 줄로 이어져 나옴 | 처음 적는 행렬, 적분, 경우 나누기 |
| 렌더링된 이미지 | LaTeX를 변환기에 보내고, 돌아온 비트맵이나 SVG를 노트에 붙임 | 수식 안에 커서를 둘 수 없고, 글자를 키우면 이미지가 흐려짐 | 다크 모드에서 어두운 페이지에 검은 글자가 남고, 고치려면 소스를 다시 입력해야 함 |
| 브라우저 엔진 | 숨겨진 WebView가 JavaScript로 KaTeX나 MathJax를 실행 | 세션의 첫 수식이 노트의 나머지보다 한 박자 늦게 나타남 | WebView에 드는 50~150MB RAM, 그리고 첫 수식이 나오기 전의 시작 지연 |
| 네이티브 엔진 | 브라우저 없이 앱 자체 코드에서 TeX의 박스와 글루 규칙을 실행 | 행이 스크롤되어 화면에 들어오는 대로 수식이 그려지고, 시스템 화면 모드에 따라 색이 바뀜 | 속도 대신 지원 범위가 관건이 되니, 그래도 스니펫 8개를 돌려 보기 |
셋째 줄의 수치는 SwaTex README에서 가져왔어요. README는 흔한 크로스 플랫폼 구성을 이렇게 설명해요. 숨겨진 WebView가 50~150MB RAM을 차지하고, 첫 수식 전에 시작 지연이 있고, 오프라인 동작을 보장하지 않는다고요. 앱이 직접 만들지 않은 JavaScript 라이브러리를 재사용하는 대가예요. 네 번째 수준은 만드는 데 훨씬 많은 비용이 들지만, 페이지에서 브라우저를 없애요.
네이티브 조판 엔진은 무엇이 다를까요
Phrase는 순수 Swift로 만든 KaTeX 호환 수식 렌더링 엔진 SwaTex로 수식을 그려요. JavaScript도, WebView도, DOM도 없어요. MIT 라이선스로 github.com/PhraseHQ/SwaTex에 공개되어 있고, Rust로 만든 KaTeX 호환 수식 렌더러 RaTeX를 Swift로 처음부터 다시 옮긴 엔진이에요. Phrase의 AI 노트에 나오는 수식은 모두 SwaTex가 그려요. 레이아웃 엔진은 플랫폼 텍스트 API가 아니라 함께 들어 있는 KaTeX 글꼴 메트릭으로 TeX의 박스와 글루 규칙을 적용해서, 결과가 KaTeX, RaTeX와 글리프 단위까지 일치해요.

공식 KaTeX 지원 표의 1008개 항목 중 1007개를 지원해요. 여기에는 pmatrix, align, cases, CD 환경과 늘어나는 괄호, 악센트, \def, \newcommand, \expandafter 같은 매크로가 들어 있어요. 화학식은 \ce와 \pu로 mhchem을 완전히 지원하는데, 253개 사례 코퍼스에서 RaTeX와 바이트 단위까지 같다고 검증한 상태 기계 이식이에요. 증명 트리는 추론 규칙과 시퀀트 계산을 위해 bussproofs 방식의 prooftree를 써요. 위의 스니펫 3, 5, 6, 7, 8은 모두 이 범위 안에 있어요.
아래 속도 수치는 Rust 기준 엔진과 같은 코퍼스, 같은 기기에서 3회 실행한 중앙값으로 측정했고, 골든 수식 2,541개 모두 두 엔진 사이에서 비트 단위까지 같았어요. 모든 수치는 저장소의 BENCHMARKS.md에 있는 명령으로 재현할 수 있어요.
| 작업 | RaTeX (Rust) | SwaTex |
|---|---|---|
| 파싱에서 레이아웃, 디스플레이 리스트까지 | 수식당 41.4µs | 수식당 12.5µs (3.3배) |
| PNG 일괄 처리, 수식 100개 @40px 2× | 수식당 약 200µs | 실효 34µs (병렬, 5.9배) |
| 반복되는 수식, 편집기 캐시 적중 | 41.4µs | 105ns (약 390배) |
| 편집기 스크롤 | 해당 수치 없음 | 글리프 래스터화 0회 (updateLayer) |
동등성은 주장이 아니라 검사로 확인해요. 저장소에 들어 있는 scripts/diff_layout.py는 1000개가 넘는 골든 수식 코퍼스에서 LayoutDump 도구와 RaTeX의 레이아웃 바이너리를 비교하고, 테스트 모음은 RaTeX의 렉서, 파서, 환경, mhchem, 레이아웃 테스트를 Swift로 옮겨 왔어요. 수식을 그리는 건 편집기 문제의 절반이에요. 블록은 정확한 높이가 필요하고 뷰 재사용에도 버텨야 해요. 이 이야기는 수식 블록이 높이를 정하는 방법과 계산을 설명 옆에 두는 방법에서 다뤄요.
노트가 생기면 어시스턴트에게 그 노트로 결과물을 만들어 달라고 하세요. Pro에서는 Phrase가 노트를 슬라이드, 페이지, 대시보드, 플래시카드, 퀴즈, 마인드맵으로 바꿔 주고, 유도 과정을 풀어 쓴 페이지는 퀴즈나 플래시카드 세트의 좋은 재료예요. 수식이 들어간 강의 노트도 마찬가지예요.
SwaTex가 렌더링하지 않는 단 하나의 항목
빠진 항목은 1008개 중 유일한 예외인 \includegraphics이고, KaTeX 자체도 이 명령은 trust 설정 뒤에 막아 둬요. 이 명령은 외부 이미지를 수식 안으로 끌어오기 때문에, 원본 프로젝트는 이를 조판이 아니라 권한의 문제로 다뤄요. \html*로 시작하는 명령 네 개는 내용은 렌더링하고 DOM 전용 속성은 버려요. 네이티브 렌더러에는 그 속성이 가리킬 DOM이 없으니까요.
KaTeX 지원 표 1008개 항목 중 1007개
- 렌더링됨1003
- 렌더링하지만 DOM 전용 속성은 버림(\html* 명령 네 개)4
- 렌더링 안 함: \includegraphics(KaTeX 자체도 trust 설정 뒤에 막아 둠)1
- 최소 배포 버전은 Synchronization.Mutex 때문에 iOS 18, macOS 15, tvOS 18, watchOS 11, visionOS 2예요. 더 오래된 OS를 대상으로 하는 앱은 아직 SwaTex를 쓸 수 없어요.
- 네이티브 Apple 플랫폼 전용이에요. React Native, Flutter, 웹용 래퍼는 없어요.
- 몇 가지 동작은 일부러 RaTeX와 다르게 했고, 각각 회귀 테스트로 고정해 두었어요. 닫히지 않은 \verb와 x\limits^2는 조용히 받아들이지 않고 파싱 오류로 처리해요.
- 깊게 중첩된 입력은 재귀 횟수와 스택 여유 공간으로 막아서, 충돌 대신 파싱 오류가 나요. 그래도 악의적인 입력은 호스트 앱에서 길이를 제한해야 해요.
이 페이지에서 다루지 않는 게 두 가지 있어요. 손글씨 수식은 다른 문제예요. Phrase는 손글씨가 아니라 입력하고, 녹음하고, 가져온 자료를 다루니까요. 다이어그램과 코드 블록도 수식과는 별개의 주제이고, 위에 링크한 두 개발 글에서 이들이 같은 편집기에 어떻게 함께 들어가는지 설명해요.
구분해 둘 사실이 한 쌍 더 있어요. SwaTex는 macOS 15용으로 빌드되지만, Mac용 Phrase 앱은 macOS 26 이상이 필요해요. 엔진이 어떤 플랫폼용으로 컴파일된다고 해서 앱이 어떤 시스템을 지원하는지 알 수 있는 건 아니에요. Phrase는 iPhone, iPad, Mac에서 작동하고 각 기기에서 SwaTex로 수식을 그려요. 녹음용 Apple Watch 앱도 있어요.


수식이 많은 페이지로 공부하려면, 이미 적어 둔 유도 과정으로 노트를 플래시카드 세트로 만드는 방법을 따라가 보세요.
노트 앱의 LaTeX에 대해 자주 묻는 질문
Apple의 메모 앱에서 수식을 쓸 수 있나요? 1년 전에 쓰인 주장을 믿기보다 이미 가진 앱에서 자가 테스트를 해 보세요. 메모 앱이 무엇을 하는지는 Apple 지원 페이지에 나와 있고, 답은 iOS 버전마다 달라져요. 스니펫 1과 스니펫 3이면 10초 안에 판가름 나요.
Apple의 메모 앱에서 LaTeX 수식을 쓸 수 있나요? LaTeX를 입력하는 것과 렌더링하는 것은 별개의 문제예요. 어떤 앱이든 \frac{a}{b}라는 글자는 텍스트로 담아 둘 수 있어요. 중요한 건 가로 막대가 나타나고 그 위에 a, 아래에 b가 놓이느냐이고, 스니펫 1이 바로 그걸 확인해요.
LaTeX를 지원하는 노트 앱이라면 무엇을 처리해야 할까요? 공개되어 있고 항목이 1008개인 KaTeX 지원 표를 공통 잣대로 삼으세요. 환경, 늘어나는 괄호, 매크로, mhchem까지 다루는 앱은 기준 구현과 같은 문법으로 작동해요. 인라인 분수만 다루는 앱은 훨씬 작은 일을 하는 거예요.
수식 노트 앱이 수식을 그리려면 네트워크 연결이 필요한가요? 수준에 따라 달라요. 이미지를 돌려주는 변환기는 요청을 주고받아야 하고, WebView 엔진은 첫 수식 전에 시작 비용이 들어요. SwaTex는 브라우저 없이 앱 자체 코드에서 파싱하고 레이아웃해요.
출처와 편집 참고 사항
출처는 2026년 9월 25일에 확인했어요. Apple 기능에 관한 단계는 아래 링크한 Apple의 최신 문서를 따라요. 조건은 iOS 버전마다 달라질 수 있어요.
- SwaTex: 순수 Swift로 만든 KaTeX 호환 수식 렌더링 엔진 KaTeX 항목 1008개 중 1007개 지원, \includegraphics 예외, \ce와 \pu를 통한 mhchem, 벤치마크 표, 최소 배포 버전. 2026년 9월 20일 확인.
- KaTeX: 지원 함수와 지원 표 지원 범위 수치의 기준인 1008개 항목 표, \includegraphics에 걸린 trust 설정.
- MathJax용 mhchem: \ce와 \pu 문법 자가 테스트 스니펫 8에 쓴 화학식 문법.
