DDungjae.github.io — agent notes

개인 사이트. Jekyll + Minimal Mistakes (remote theme), GitHub Pages 가 main 브랜치를 그대로 빌드합니다 (Actions 없음, gh-pages 없음). 사람이 읽는 개요는 README.md.

작업 시작 전에

수식 — 절대 헷갈리지 말 것

이 사이트는 kramdown (input: GFM, math_engine: mathjax) + MathJax 3 조합입니다. 이 조합에 비직관적인 함정이 두 개 있고, 둘 다 실제로 글을 깨뜨린 적이 있습니다 (2026-09-29).

  1. 인라인 수식도 항상 $$...$$ 를 씁니다. 절대 홑$...$ 로 바꾸지 마세요. $$...$$ 가 문장 중간에 있어도 kramdown 이 알아서 인라인(\( \))으로 바꿔주고, 그 안의 \{ \} 같은 백슬래시 이스케이프도 그대로 보존합니다. 반면 홑 $...$ 는 kramdown 이 수식으로 인식하지 않고 일반 텍스트로 취급하면서 markdown 이스케이프 규칙을 적용해 \{, \} 의 백슬래시를 조용히 지워버립니다 (예: $\mathbf{Z}=\{(x,y)\}$ → 렌더링에서 중괄호 이스케이프가 깨짐). “MathJax 설정에 인라인 $...$ 를 지원하니 그쪽이 더 표준적이지 않나” 라고 생각해서 $$ 를 $로 “고치지” 마세요 — 실제로 한 세션이 이 생각으로 고쳤다가 위 버그를 만들었습니다.
  2. 수식 안에 맨 파이프 문자 | 를 쓰면 안 됩니다 (조건부확률 P(y|x) 처럼). kramdown 의 GFM 파서가 문단이나 리스트 항목 안의 | 를 표(table) 구분자로 착각해서, $$...$$ 로 감싸져 있어도 그 문장 전체를 깨진 HTML <table> 로 바꿔버립니다. 단, $$...$$ 가 그 문단/리스트 항목의 유일한 내용으로 독립된 한 줄일 때는 안전합니다 (kramdown 이 그 한 줄 전체를 수식 블록으로 보호함). 위험한 건 “다른 글자와 같은 줄에 섞인” $$ 뿐입니다.
    • 고치는 법: | 를 그냥 지우고 \vert{} 로 씁니다 (\| 는 쓰지 마세요 — MathJax 에서 \Vert(겹선 ‖)로 렌더링되어 조건부확률의 홑선과 달라집니다). {} 는 바로 뒤 글자와 명령 이름이 붙어버리는 것(\vertx처럼 파싱되는 것)을 막기 위한 빈 그룹입니다.
    • tools/notion_to_jekyll.py 의 fix_math_inline/escape_pipes 가 노션에서 받은 인라인 수식은 이걸 자동으로 처리합니다. 하지만 이미 올라간 글을 손으로 고칠 때는 직접 \vert{} 로 바꿔줘야 합니다 — 스크립트를 다시 돌리지 않는 한 자동으로 안 고쳐집니다.
    • 절대 표시값 \lvert x \rvert (절댓값)는 이 문제와 무관합니다 (| 문자가 아니라 \lvert/\rvert 명령이라서 안전). \lvert...\rvert, \lVert...\lVert 처럼 여는 것과 닫는 것을 짝 틀리게 쓰지 않았는지도 확인하세요 (\lvert...\lvert 는 오타).
  3. 여러 줄로 된 수식 유도는 \begin{aligned}...\end{aligned} 로 감쌉니다. $$...$$ 안에서 그냥 \\ 로 줄바꿈만 하면 MathJax 가 제대로 못 그립니다.
  4. 글을 올리거나 고친 뒤에는 반드시 빌드된 HTML 에서 <table 이 뜬금없이 생기지 않았는지 확인합니다 (아래 “빌드 확인” 참고). $ 개수를 세는 것만으로는 이 버그를 못 잡습니다 — 브라우저에 실제로 그려지는 게 아니라 정적 HTML 에서 이미 깨져 있는 문제라서, 꼭 빌드 결과물을 봐야 잡힙니다.

빌드 확인 (수정 후, 푸시 전 필수)

export PATH="/c/Ruby40-x64/bin:$PATH" SSL_CERT_FILE="/c/Program Files/Git/mingw64/etc/ssl/certs/ca-bundle.crt"
bundle exec jekyll build 2>&1 | tail -20   # "done in" 만 나오고 error 없어야 함

# 이번에 고친 글/노트만 체크 (경로는 permalink 규칙에 따라 날짜 없이 나올 수 있음, _site 에서 찾기)
F="_site/posts/<slug>/index.html"   # 또는 _site/lectures/<course>/<slug>/index.html
grep -q "<table" "$F" && echo "⚠️ 표로 깨짐 — 그 줄에 이스케이프 안 된 | 가 있는지 확인"
grep -c '\\(' "$F"   # 인라인 수식 개수(대략) — 0 이면 뭔가 안 바뀜
grep -c '\\\[' "$F"  # 블록 수식 개수

로컬 빌드용 스크래치 폴더가 따로 있다면(%TEMP%\newsite 등) 거기서 확인해도 되지만, 그 폴더는 가끔 _config.yml/Gemfile/gem 설치가 빠져서 깨지므로 레포 전체를 다시 복사해 넣고 시작하세요.

노션 글 가져오기·수정하기

절차는 .claude/skills/notion-import/SKILL.md 를 그대로 따릅니다. 특히:

그 외