Skip to content

[layout] 한/글 2014 저장 줄 나눔과 한/글 2020 출력이 갈리는 칸 — 공백 폭·줄 끝 넘침 허용 차로 행이 한 줄 높아진다 (1342000 +700px) #7702

Open

Description

@planet6897

증상

한/글 2014(9.1.1.3933)로 저장된 samples/task2287/1342000_edu_curriculum_map.hwp 의 표 칸 문단에서, 저장 LINE_SEG 의 줄 나눔과 한/글 2020 정본(pdf/task2287/1342000_edu_curriculum_map-hwp-2020.pdf)의 줄 나눔이 다르다. rhwp 는 저장 줄 나눔을 그대로 써서 행이 한 줄씩 높아진다.

쪽 칸 저장 LINE_SEG 한/글 2020 정본 rhwp
124 구역 5 표 r=42 c=8 3줄(…게임하 / 기) 2줄 — …안전하게 게임하기 가 둘째 줄에 들어감(줄 끝 x 974.0, 칸 안 오른쪽 967.2 를 6.8px 넘김) 3줄, 행 +17.3px
154 구역 7 표 r=97 c=8 2줄(…찬반 토 / 론) 1줄 — - 청소년기에 … 찬반 토론 (폭 333.9 / 칸 안 333.7) 2줄, 행 +17.3px

정본 글자 진행폭(쪽 척도 보정): 한글 12.00px · 공백 5.605.77px · 쉼표 3.52px. rhwp 메트릭(휴먼명조 9pt): 한글 12.00 · 공백 6.00 · 쉼표 3.19. 한 줄에 공백이 67개라 공백 폭 차이만으로 1.5~2.6px 가 갈린다.

측정

1342000 가로 쪽 표의 연속 성취기준 코드 쌍 1,749개의 행 피치를 정본과 대조하면 1,352쌍은 일치하고 rhwp 가 합계 +700px 높다. 두드러진 군집이 +9px(35쌍)·+17px 이며, 위 두 사례가 그 대표다.

시도와 결과 (프로토타입, 미커밋)

칸 문단의 저장 줄을 전부 stale 로 표시해 rhwp 가 다시 줄을 나누게 하면(invalidate_layout_inputs):

판단

  • 「저장 줄을 믿을지」 스위치 문제가 아니라 rhwp 줄 나눔이 한/글 2020 과 일치하는가 의 정밀도 문제다. 공백 폭(정본 5.6~5.8 vs rhwp 6.0)과 줄 끝 넘침 허용(124쪽 6.8px)이 직접 증거.
  • 저장 줄을 다시 나누는 정책은 rhwp 줄 나눔 정밀도가 확보된 뒤에야 순이익이 된다.
  • 참고: 이 문서의 lastSavedWith 는 product: null, version: 9.1.1.3933 이다. 제품명이 비어도 버전으로 한/글 2014 계보가 확인된다(계보 없음으로 분류하면 안 된다).

관련: #7685(쪽 수용량), #7416(자기 모순 저장 사다리), #7160(줄 끝 넘침 허용)

Activity

  1. planet6897 commented on Oct 10, 2026

    @planet6897
    ContributorAuthor

    코퍼스 측정: 줄 출처별 정본 일치율

    정본 PDF 가 있는 샘플 784문서(정본 줄 300,076개)에서 rhwp export-text 줄과 한/글 PDF 줄을 공백 제거 문자열로 맞춰 봤습니다. 각 줄의 출처는 진단 스위치로 붙였습니다(로컬, 미커밋) — 줄 끝이 원본 저장 LINE_SEG 경계면 S, 저장 줄이 없는 문단을 rhwp 가 나눈 줄이면 N, 문단 끝이면 E.

    줄 출처 줄 수 정본 일치 rhwp 가 1~3자 더 담음 rhwp 가 1~3자 덜 담음
    S 저장 줄 경계 그대로 75,412 91.0% 203 393
    N 저장 줄 없음 → rhwp 줄 나눔 17,243 68.8% 287 81
    E 문단 끝 줄 166,992 82.8% 368 89

    (목차 리더·탭 뒤 쪽번호처럼 한/글 PDF 가 별도 글줄로 뽑는 차이는 제외했습니다.)

    읽은 것

    1. rhwp 가 직접 나눈 줄은 «더 담는» 쪽으로 기운다(N·E 합 655 대 170, 약 3.5:1). 좁은 표 칸이 대부분 — 21761835·78494·80168 hwpx·76076·issue2063.
      • 예: 76076 비교표 칸 — 한/글 1. ∼9. (생 / 략), rhwp 1. ∼9. (생략) 한 줄.
    2. S 의 어긋남은 이 이슈 본문의 사례처럼 이전 한/글 버전(2010·2014·2018) 저장 줄 ≠ 한/글 2020 출력이다.
    3. 칸 문단을 전부 rhwp 로 다시 나누면 1~3자 어긋남이 1,484 → 3,329 로 두 배가 된다 — 지금은 «저장 줄 폐기» 가 답이 아니다.

    다음

    N·E 의 «더 담음» 중 가장 흔한 형상(좁은 칸 닫는 괄호/기호 줄 끝)에서 글자 폭인지 줄 끝 규칙인지 가리고, 같은 측정으로 전후를 대조하겠습니다.

  2. planet6897 commented on Oct 10, 2026

    @planet6897
    ContributorAuthor

    측정 보정 + 폭 비교 결과

    앞 코멘트 수치 보정

    처음 측정에 세 가지 허수가 섞여 있었습니다 — ① 목차 리더·탭 뒤 텍스트를 한/글 PDF 가 별도 글줄로 뽑음, ② 양쪽 정렬로 넓어진 공백을 사이에 둔 한 줄이 두 글줄로 쪼개져 뽑힘(76076 (생 략)), ③ 같은 문장이 문서의 다른 쪽에 다시 나올 때 서로 다른 쪽의 줄과 짝지어짐. 같은 기준선·괘선 없는 간격의 조각을 한 줄로 합치고, 쪽 ±1 안에서만 짝을 짓도록 고쳐 다시 쟀습니다.

    줄 출처 줄 수 정본 일치 rhwp 1~3자 더 rhwp 1~3자 덜
    S 저장 줄 경계 75,013 90.8% 82 364
    N rhwp 줄 나눔(저장 줄 없음) 17,078 69.7% 283 76
    E 문단 끝 줄 165,585 84.2% 320 107

    rhwp 가 직접 나눈 줄의 «더 담음» 쏠림(약 3.7:1)은 남았습니다.

    글자 폭은 원인이 아니다

    양쪽 정렬로 늘어나지 않은 문단 끝 줄 중 텍스트가 정본과 정확히 같은 90,883줄에서 «한/글 폭 ÷ rhwp 폭» 중앙값은 0.9992 입니다.

    • 76076(맑은 고딕 13pt, 자간 −13%): 한글 15.08px·공백 0.5em×(1+자간) 모두 정본과 같음. 문제 줄은 rhwp 자연 폭이 가용 578.45px 에 1.3px 차로 들어가고 한/글은 0.3% 넓게 재어 넘긴 경계 사례.
    • 글꼴별로 갈리는 것 중 가장 큰 Haansoft Batang 1.117 은 거의 전부 편람 한 문서이며, 이는 정본 PDF 를 만든 기계에 KoPub 글꼴이 없어 한컴바탕으로 대체된 것입니다(rhwp 는 문서가 지정한 KoPub 메트릭을 씀). 편람은 kopub 판 정본으로 봐야 합니다.
    • «더 담음» 이 몰린 다섯 문서(21761835·78494·80168·issue2063·76076)도 폭 비는 1.0 ± 0.5% 안 — 넓이 편향이 아니라 경계선 근처 판정과 줄 나눔 규칙 차이입니다.

    판단

    이 축은 한 규칙으로 닫히지 않습니다. 남은 «더 담음» 은 (a) 0.3% 안팎의 경계 판정, (b) 글자 단위 나눔에서 한/글이 단어를 통째 넘기는 사례, (c) 문단 오른쪽 여백 적용 차이(76076 정본 줄 끝이 문단 오른쪽 여백 9.33px 를 무시한 본문 끝 718.7 에 정렬) 같은 개별 사례로 갈립니다. 측정 도구(줄 출처 진단 + 코퍼스 대조)는 로컬에 보존해 두고, 사례별 규칙을 하나씩 확인하겠습니다.

  3. planet6897 commented on Oct 10, 2026

    @planet6897
    ContributorAuthor

    한/글 대조 실험 — 기본 줄 나눔 규칙은 일치

    76076 본문 문단(구역 0 문단 184 — 맑은 고딕 13pt, 양쪽 정렬, 한글 글자 단위 나눔) 안에 시험 글자를 넣어 같은 글꼴·크기·자간·문단 속성으로 rhwp 와 한/글(MCP engine 2024) 줄당 글자 수를 비교했습니다.

    넣은 글자 한/글 줄당 rhwp 줄당
    가 반복, 자간 −13% 30 / 38 / 38 / 38 30 / 38 / 38 / 38
    가 반복, 자간 0% 35 / 33 / 33 / 33 35 / 33 / 33 / 33
    가나다 반복(공백 낀 어절), 자간 −13% 8 / 10 / 10 / 10 8 / 10 / 10 / 10
    가, 반복(쉼표+공백), 자간 −13% 17 / 22 / 21 17 / 22 / 21

    음절·공백·쉼표·자간에서 rhwp 측정과 줄 나눔은 한/글과 완전히 같습니다. 앞 코멘트의 «rhwp 가 1~3자 더 담음» 은 공통 규칙 하나의 편차가 아니라, 섞인 글자모양(76076 해당 줄은 밑줄 속성 글자모양이 섞임)·0.3% 경계선 판정·문단 오른쪽 여백 적용 같은 사례별 조건의 합입니다.

    이 축은 사례마다 같은 방식(시험 문서 → 한/글 변환 → 줄당 글자 수 대조)으로 하나씩 확인해야 하며, 1342000 의 «한/글 2014 저장 줄 ≠ 한/글 2020 출력» 사례도 같은 방식으로 원인 조건을 좁힐 수 있습니다. 측정 도구와 시험 문서는 로컬에 보존해 두었습니다.

  4. added 12 commits that reference this issue on Oct 12, 2026
  5. 2 remaining items

  6. added a commit that references this issue on Oct 13, 2026
  7. self-assigned this
    on Oct 17, 2026
  8. planet6897 commented on Oct 18, 2026

    @planet6897
    ContributorAuthor

    현행 devel(6ed1682c3) 재측정

    문서는 #7445 이관으로 mydocs/pr/assets/issue7445/education-curriculum-map/ 에 있습니다(같은 바이트). 기준은 같은 폴더의 current-source-hancom2020-print.pdf(415쪽)입니다.

    쪽 칸 한/글 2020 Print devel 6ed1682c3
    154 구역 7 표 r=97 c=8 1줄 …이성 친구 문제에 관한 찬반 토론 1줄 — 같음
    124 구역 5 표 r=42 c=8 2줄 …안전하게 게임하기 3줄 …안전하게 게임하 / 기 (저장 줄 그대로)

    154쪽은 이 이슈 뒤에 들어간 줄 나눔·글자 폭 수정(#7805·#7815·#7836·#7878 계열)으로 정본과 같아졌습니다. 124쪽은 남았습니다 — rhwp 가 한/글 2014(9.1.1.3933) 저장 줄 나눔을 그대로 쓰고, 한/글 2020 은 같은 칸을 다시 나눕니다.

    남은 사례는 rhwp 측정 결함이 아니라 저장 버전(2014)과 기준 버전(2020)의 차이입니다. 고치려면 «2014 저장 줄을 2020 기준으로 다시 나눌지» 를 정해야 하고, 이 문서에서 칸 전면 재분할은 앞서 순손실로 확인됐습니다(본문 표). 문서 전체의 쪽 소속은 #7743 에서 추적 중입니다.

  9. planet6897 commented on Oct 19, 2026

    @planet6897
    ContributorAuthor

    1342000 남은 «저장 줄 낱말 꼬리» — 원인과 수정 (로컬)

    원인

    한/글 2014(9.1.1.3933) 저장 줄이 공백 최소값(condense) 흡수 없이 낱말 끝 글자만 다음 줄로 보낸 칸 문단이 있다. 한/글 2020 Print 는 그 꼬리를 앞 줄에 붙인다.

    쪽 칸 저장 한/글 2020
    151 구역 5 r=56 c=8 p[1] …순서에 맞게 시연하 / 기 한 줄, 줄 끝 963.4px = 칸 안 오른쪽
    154 구역 7 r=97 c=8 …관한 찬반 토 / 론 한 줄

    rhwp 는 저장 줄을 따라 행이 한 줄씩 높았고(151쪽 r=56 57.1px, 정본 44px) 문서가 416쪽(정본 415쪽)이 됐다.

    규칙

    • 저장 제품이 한/글 2020(11.x) 이전이고(컨테이너가 기록한 마지막 저장: HWP5 요약 / HWPX version.xml),
    • 양쪽 정렬 + condense 문단의 마지막 저장 줄이 앞 줄 낱말의 나머지뿐이면,
    • 같은 프레임으로 새로 끊어 마지막 줄만 없어지고 앞 줄 시작은 그대로일 때만 저장 줄을 버린다(판정 = 실제 줄).

    측정기 #6135 저장 extent 증인이 재조판된 문단에도 원래 사다리를 써 행이 옛 줄 수 높이로 남던 결함도 함께 고친다.

    반례(저장 줄 유지 — 한/글도 유지)

    • condense 없는 문단: 1342000 25쪽 …포함 논의 필 / 요
    • 앞 줄 경계까지 옮기는 새 줄 나눔: 1342000 114쪽 …정보 / 가
    • 한/글 2020 저장: 21_언어_기출_편집가능본.hwp(11.0.0.2129) 1쪽 …확인하 / 십시오., 36388711…청년오피스.hwpx(요약 8.0 / version.xml 11.0) 1쪽 …과학 / 기술(150)

    결과 (로컬 head, #7965 리베이스 위)

    • 1342000 415쪽 = 정본, 성취기준 코드 쪽 일치 21.2% → 97.7%
    • Native/fresh WASM: 25쪽 95.3/95.1, 114쪽 100/99.9, 151쪽 99.9/99.9(수정 전 78.9), 154쪽 99.8/99.7(77.1), 124·125·152·153·155쪽 +21~25
    • samples/ 1,252건 SVG 변화 0

    남은 것

  10. planet6897 commented on Oct 19, 2026

    @planet6897
    ContributorAuthor

    수정은 #7965 에 합쳤다(head 8e1811336, code 065125a94). 별도로 냈던 #8092 는 닫았다.

  11. added 2 commits that reference this issue on Oct 20, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions