규칙 서술

학습 경로가 아니라 참고 문서다. 필요할 때 들어와 찾아보는 곳.

390 판에 지금 적용되는 규칙이다. 행마다 외우는 것이 아니라 한 번 익히면 여러 행에 그대로 적용되는 메타 규칙을 모았다 — 꼬리 공백·문장부호가 여기서 갈린다.

정본 데이터는 rules.md, 단계 설계는 rules_step.md, 표기는 notation.md. 배우려는 사람은 training.md.

아래는 전부 실측 확인분이다. 근거 없이 적지 않는다 — 규칙마다 검증 방법을 함께 적었다.

출력 꼬리 — 공백·기호

규칙1. 조사·명사형 뒤에는 공백이 자동으로 붙는다

sp=✔ 인 행은 출력 끝에 spacebar 가 붙는다. 조사(품사=p)와 명사형 전성어미(품사=n)가 그 대상이다.

품사 sp=✔ 비고
p 조사 30 / 36 예외 6건은 전부 수식키 변형(규칙2) — 무수식 조사는 전량
n 명사형 10 / 10 예외 없음. 2026-08-05 부터 8행이 2단계 소속(단계만 이동, 품사 유지)
e 어미 89 / 100 나머지는 ⌥ 변형 등

꼬리 공백의 표현은 sp 컬럼 하나다 (2026-08-04 정리)

txt 에는 꼬리 공백을 넣지 않는다. 넣으면 sp 와 이중이 되어 라벨이 실제보다 공백 하나를 더 가진 것처럼 읽힌다 — 생성기는 txt 의 꼬리 공백을 무시하므로 산출은 정상인데 문서만 틀리는 유형이다.

규칙2. 변형은 꼬리가 없다 — 공백도 기호도 안 붙는다

⌥=✔ 인 행은 기호·sp 컬럼과 무관하게 자모만 출력한다. 문장 중간에 조사를 붙여 쓸 때 쓴다.

규칙3. 390 의 기호 대응 — ⇧ 가 ?, ⇧⌘ 가 !

수식키 기호 실제 키
무수식 . period
? slash
⇧⌘ ! b
행마다 다름 period(는) / 없음(을·를) — 일괄 규칙 아님

최종식도 같다(2026-08-06 실기 확인 — 입력 소스를 최종식으로 두고 +/? · +b!). 원문(Numbers)은 =!·⇧⌘=? 라고 적지만 원문이 틀렸다. 390 실측은 .

트리거

⚠️ 전제 — 모디파이어는 자모보다 먼저 눌려 있어야 한다. c1·c2 두 자모는 모아치기라 서로 순서가 없지만, ⌥·⇧·⌘ 는 그 둘보다 앞서야 한다. 자모를 친 뒤에 모디파이어를 누르면 그 행은 발동하지 않는다. 아래 규칙들은 트리거가 제대로 잡힌 뒤의 이야기다.

규칙4. 같은 트리거를 두 행이 쓸 수 없다

(c1, c2, ⌥, ⇧, ⌘) 복합키는 유일해야 한다. Karabiner 는 같은 from 을 가진 manipulator 중 먼저 나온 것만 발동시키므로, 뒤엣것은 표에 있어도 죽은 규칙이다.

규칙5. 실제로 쓰는 기호 키는 10종

'  ,  -  .  ;  [  \  ]  ␣  ⏎

quote · comma · hyphen · period · semicolon · open_bracket · backslash · close_bracket · spacebar · return_or_enter

⚠️ 원문 규칙5는 8종만 적고 있다 — -(읽 j+-\(월 j+\)가 빠졌다. 위가 실측값이다(2026-08-04, 양 배열 전수).

규칙6. 조사는 패턴 규칙이라 억지 가 아니다

이·히·가·은·는·을·를 등은 자모 조립으로 정상 산출되므로 억지=✔ 를 붙이지 않는다. 2026-08-03 사용자 확인으로 3건(이·히·가)을 해제했다.

배열 차이 (390 ↔︎ 최종식)

같은 규칙인데 트리거가 배열마다 다른 것들이다. 전체 목록은 keymap_final_to_390.json(Extensions/n3sh/core/keymap_final_to_390.json).

출력 390 최종식 비고
r+f g+f — 390 정본이 최종식 값을 담고 있던 오기를 교정
u+[ u+[ ·49 — 양 배열 모두 구 u+] 에서 이동. 구 자리는 staging 빈자리 등재

관련