| name | slide-ko-polish |
| description | Use when reviewing or rewriting Korean presentation slides translated from English — fixes translationese ("X는 Y입니다" 남발, 한자어 명사 체인, "~의 ~을" 줄잇기), CJK line-break issues (어절이 중간에 끊김), and noun-heavy발표체. Triggers on "발표자료 다듬어", "한국어 어색", "번역체", "줄바꿈 이상해", "슬라이드 자연스럽게", "/slide-ko-polish". |
Slide KO Polish
영어 원문 → 한국어 번역으로 만들어진 발표 슬라이드를 자연스러운 한국어로 다듬고, CJK 줄바꿈 문제를 CSS로 잡는다.
When to Use
- 슬라이드 한국어가 "번역체"로 어색할 때
- 한국어 어절이 중간에서 끊기는 줄바꿈이 거슬릴 때
- 영어 약어/술어(verifier, AC, replay)는 살리고 싶지만 문장은 한국어답게 만들고 싶을 때
Don't use for:
- 한국어로 원문이 쓰인 자료 (다른 종류의 문제)
- 기술 문서/API 레퍼런스 (문장보다 정확성이 우선)
Core Diagnosis — 어색함의 3대 원인
- 명사 술어 남발 — "X는 Y입니다" 구조 반복 → 한국어는 동사 중심 언어
- "~의 / ~을" 체인 — 한자어 명사가 조사로 줄줄이 → 무겁고 끊김
- CJK 줄바꿈 기본값 —
word-break: normal이 한글을 글자 단위로 끊음
번역체 12대 시그널 — 보이면 즉시 의심
출처: 한빛+ "흔한 번역투 TOP 12", 국립국어원 "영한 번역 번역투 문장", 우리말 박예진 기자.
| 시그널 | 영어/일본어 원형 | 자연어 |
|---|
| ① 대명사 남발 ("그것", "그", "그 말") | it, this, that | 생략 또는 명사 반복 |
| ② 피동 남용 ("~되어지다", "위치한다") | passive | 능동 |
| ③ "~의" 남발 | of, の | 띄어쓰기 또는 생략 |
| ④ "~의 경우" | in case of | 생략 |
| ⑤ "~에 대하여" | about | 생략하거나 풀어쓰기 |
| ⑥ "~하고 있는 중" | be -ing | 단순 현재형 |
| ⑦ "~을 가지다" | have | "있다" |
| ⑧ "~로부터" | from | "에게서", "에서" |
| ⑨ "~을 통해" | through | "써서", "이용해" |
| ⑩ "~에 있어" | in / for | 생략 |
| ⑪ "~기 전에" | before -ing | "~지 말고" / "~이 아니라" |
| ⑫ 무정물 주어 ("시스템은 ~한다") | inanimate subject | 사람 주어 또는 명령형 |
부가 원칙
- 명사를 술어로 풀어라 — 한자어 명사+합니다 대신 동사로 마치기
- "~의 / ~을" 체인 끊기 — 한 문장에 부사구 3개 이상이면 무조건 쪼개기
- 영어 술어(verifier, AC, replay)는 그대로 — 조사·어순으로 한국어화
- 슬라이드는 입말 — 소리 내서 읽었을 때 자연스러우면 OK
- 추상 은유 금지 — 영어 관용어(
close, ship, land, kill)를 직역하면 한국어에서 뭘 하는지 모호해짐. 구체 동사로 바꿔라.
- ❌
Phase 1을 **닫는다** (영어 close 직역 → 뭘 닫나?)
- ✅
Phase 1을 **완성한다** (구체)
- ❌
이번 분기에 기능을 **태운다** (ship 직역)
- ✅
이번 분기에 기능을 **출시한다** / **내보낸다**
- ❌
버그를 **죽인다** (kill 직역)
- ✅
버그를 **잡는다** / **고친다**
판별 단일 기준
소리 내서 읽었을 때 어색하면 번역체.
+ 위 12대 시그널 중 하나라도 보이면 어색 확정.
CSS는 안전망일 뿐 — 줄바꿈은 수동 제어가 정답
핵심 깨달음: CSS는 "어절을 안 끊는다"까지만 보장한다. 어디서 끊을지는 브라우저가 모른다. 한국어 슬라이드는 의미 단위로 <br />를 직접 박아야 한다.
CSS 안전망 (필수, 기본 깔기)
body, .slide * {
word-break: keep-all;
overflow-wrap: break-word;
line-break: strict;
}
h1, .lede, .subtitle, .note { text-wrap: balance; }
.nb { white-space: nowrap; }
수동 제어 도구 3종
<br /> — 의미 단위 줄바꿈 (가장 많이 씀)
<span class="nb">…</span> — 절대 끊기면 안 되는 표현 (인용구, 고유명사, 흐름 끊는 영어 술어 등)
max-width 넉넉히 (52ch 정도) — 자동 wrap 트리거를 최소화. 줄바꿈은 <br />로만 일어나게.
⛔ <br /> 금지 지점 — 의미 단위 깨짐
조사 바로 다음에 <br /> 박지 말 것. 한국어는 조사 + 서술어가 한 묶음(문법 단위).
| 금지 패턴 | 심각도 | 왜 안 되는가 |
|---|
~을/를<br /> | FAIL | 목적어 ↔ 서술어 분리 (한국어는 항상 묶음) |
~하는/한/할/된/될<br />명사 | FAIL | 수식어(relative clause) ↔ 피수식 명사(head) 분리. 예: Phase 1을 완성하는<br />세 트랙 |
~이/가<br /> | WARN | 주어 ↔ 서술어 분리 |
~과/와<br /> | WARN | 명사 나열 끊김 |
~에<br /> | WARN | 부사구 ↔ 서술어 분리 |
주의 — ~은/는<br />는 자동 검출 안 함. 이유: 한국어에서 는/은은 주격 조사일 수도 있고 동사 활용 어미일 수도 있어서 regex로 구분 불가. 예:
- ❌
말은<br />증거가 아니다 (말 + 은 = 주격 조사 → 어색)
- ✅
Phase 1을 닫는<br />세 트랙 (닫 + 는 = 동사 어미 → 자연스러움)
사람이 직접 점검: 은/는<br /> 발견 시 앞 단어가 명사면 어색, 동사 어간이면 OK.
예시:
- ❌
AgentOS는 실행 증거와 verifier 판정, replay 기록을 <br />따로따로 다룹니다.
- ✅
AgentOS는 셋을 따로 다룹니다 — <br />실행 증거, verifier 판정, replay 기록.
- ❌
AgentOS의 첫 단계가 <br />자리를 잡았습니다.
- ✅
AgentOS의 첫 단계가 자리를 잡았습니다. (한 줄로)
✅ <br /> OK 지점
- 문장 종결 후 (
. <br />, ! <br />, ? <br />)
- 쉼표 다음 (
, <br />)
- 대시(—) 사용 —
X — <br />Y 형태로 자연스러운 단절
- 접속사 앞 (
<br />하지만, <br />그래서)
자동 검출: verify.sh Stage 1.5가 조사+<br /> 패턴을 잡아냄.
안 좋은 자동 wrap 예시
원문: "하지만 시스템은 그 말을 믿기 전에, 증거부터 따로 들여다봐야 합니다."
❌ max-width: 38ch만 두면 브라우저가:
하지만 시스템은 그 말을
믿기 전에, 증거부터 따로
들여다봐야 합니다.
"믿기 전에"가 "그 말을"이랑 떨어져서 의미 끊김.
✅ 수동 <br /> 박으면:
하지만 시스템은 그 말을 믿기 전에,
증거부터 따로 들여다봐야 합니다.
의미 단위(절) 유지.
Mandatory Workflow — 4단계 (검증 게이트 포함)
중요: 다듬기와 검증은 분리하지 말 것. polish → verify가 한 동작.
Step 1 — 추출
WebFetch 또는 직접 읽어 슬라이드별 원문(제목/본문/불릿)을 텍스트로 정리
Step 2 — 교정
번역체 11시그널 표 적용. 슬라이드별 Before/After.
Step 3 — CSS 패치 (HTML인 경우)
word-break: keep-all + text-wrap: balance + <br /> 수동 줄바꿈 + <span class="nb"> 보호
Step 4 — 자동 검증 (MANDATORY)
~/.claude/skills/slide-ko-polish/verify.sh <slide-file.html|.md>
스크립트가 자동으로 돌리는 검사:
- Stage 1 — 번역체 11시그널 regex 스캔 (line 번호 출력)
- Stage 1.5 — HTML 구조 (CSS, max-width, 조사+
<br />, 수식어+<br />+명사, 무거운 인용, 추상 은유 동사)
- Stage 2 — 시각 검증 명령어 출력 (수동 확인)
- Stage 3 — 입말 테스트 안내 (수동 확인)
- Stage 4 — LLM Fresh Review (Claude CLI 호출) — 영어 직역 은유·어색한 표현·제목-본문 호응을 fresh context로 검토. regex로 못 잡는 어색함을 잡아냄.
Exit code:
0 PASS — Stage 1/1.5 시그널 0개 + Stage 4 PASS
1 WARN — Stage 1.5 권장 사항 있음 또는 Stage 4가 검토 항목 발견
2 FAIL — Stage 1에서 시그널 4개 이상, Stage 1.5 FAIL 패턴 발견, 또는 word-break 누락
FAIL이 나오면 무조건 재작업. PASS/WARN이 나와도 Stage 2/3은 사람이 직접 확인.
Stage 4 Prompt (참고)
verify.sh의 Stage 4는 다음 5가지 항목으로 LLM 평가:
- 무거운 인용 부호 + 명사구 단편
- 추상 은유 직역 (닫는다/태우다/죽이다/살아있다 같은 영어 close/ship/kill 직역)
- 영어 어순 직역
- 제목과 본문 메시지 불일치
- 한국어 화자가 보기에 명백히 어색한 표현
영어 약어(verifier, AC, replay 등)는 의도적 용어로 보호. 명사구 enumeration은 슬라이드 정상 패턴으로 인정.
Quick Reference — 자주 등장하는 패턴
| 번역체 (Before) | 자연스러움 (After) |
|---|
| "X는 Y입니다" | "X는 Y" (체언 종결) 또는 "X가 Y한다" (동사화) |
| "~을 분리합니다" | "~을 따로따로 다룹니다" |
| "기준선을 만들었습니다" | "자리를 잡았습니다" / "토대를 다졌습니다" |
| "방식의 한계" | "이렇게 해서는 안 되는 이유" |
| "내부 상태입니다" | "안에서만 살아있는 상태입니다" |
| "타입화된 증거" | "타입이 박힌 증거" / "구조화된 증거" |
| "재시작 시 의도 손실" | "재시작하면 사라지는 의도" |
Common Mistakes
word-break: keep-all만 믿고 자동 wrap에 맡기기 → 어절은 유지되지만 의미 단위는 안 지켜져서 여전히 어색. 수동 <br /> 박아야 함
text-wrap: pretty 신뢰 → "한 단어만 다음 줄로 가는 것"은 막아주지만 의미 단위 끊김은 못 잡음. 슬라이드엔 balance가 더 안전
- 영어 술어까지 번역하기 →
verifier, replay, AC 같은 굳어진 용어는 그대로
- 한 슬라이드에 4개 이상 불릿 → 호흡 못 맞춤. 3개 이하로 자르거나 슬라이드 분리
- CSS만 고치고 텍스트는 그대로 → 줄바꿈은 좋아지지만 번역체는 그대로 남음
- 텍스트만 고치고 줄바꿈은 자동에 맡기기 → 좋은 문장이 엉뚱한 데서 끊겨서 안 살음
- 세 가지(CSS 안전망 + 자연스러운 문장 + 수동
<br />)를 다 잡아야 효과
Real-World Pattern
발표자에게 추천할 만한 작업 순서:
- 영어로 먼저 쓰지 말고, 슬라이드별 핵심을 한국어로 입으로 말해본 뒤 받아쓰기
- 그래도 안 되면 본 스킬로 사후 교정
번역의 흔적이 원천적으로 안 생기는 게 최선이고, 본 스킬은 차선.