Skip to content

수식 포함 줄 본문 한글 압축·겹침 해소 (closes #1219)#1223

Merged
edwardkim merged 1 commit into
edwardkim:develfrom
planet6897:feature/issue-1219-equation-line-hangul
Jun 1, 2026
Merged

수식 포함 줄 본문 한글 압축·겹침 해소 (closes #1219)#1223
edwardkim merged 1 commit into
edwardkim:develfrom
planet6897:feature/issue-1219-equation-line-hangul

Conversation

@planet6897

Copy link
Copy Markdown
Contributor

문제

인라인 수식(treat-as-char)이 포함된 줄의 본문 한글이 압축되어 겹침 (samples/3-09월_교육_통합_2023.hwp 6쪽 문26, advance 8.96px(0.746em)). 해당 문단은 align=Left·자간 0%·장평 100% 로 압축 의도가 없음.

한글 advance
PDF (한글 2022, 정답지) ≈12px (1.0em)
rhwp (수정 전) 8.96px → 겹침

근본 원인 (둘 다 측정/렌더 불일치)

  1. est_x 측정 루프와 total_tac_width_in_line 이 전역 tac_offsets_px 를 run 경계로 재필터 → 줄 끝 위치(= 다음 줄 선두)의 수식을 현재 줄 폭에 오포함 (문26 라인0 에 다음 줄 a₁=b₁=1 55px 가산).
  2. 선두 미주 마커endnote_marker_x_advance(inline_offset) 와 footnote_positions 측정(fn_text 위첨자) 양쪽에서 이중 계상. 렌더는 인라인 위첨자를 그리지 않음.

total_text_width > available_width 거짓 오버플로우 → 비정렬(Left) 줄에 음수 자간 압축.

수정 (paragraph_layout.rs — 측정을 렌더의 줄-경계/마커 규칙에 통일)

  • TAC 소스를 line_tac_offsets(= tac_offsets_for_line, pos < 다음 줄 시작 엄격 미만)로 통일.
  • footnote_positions 측정에서 start_line==0 의 선두 미주(Endnote) 제외.

결과

문26 8.96px 11.93px (≈PDF 12px, 겹침 해소)
문27 10.27px 11.85px
문24/30 8.77/9.15px 11.3px

검증

  • cargo test --release1896 passed / 0 failed (golden SVG 스냅샷 8건 포함, 인라인 TAC·각주·목차·우측탭 회귀 없음).
  • 회귀 가드 추가: tests/issue_1219_equation_line_hangul_advance.rs (문26 줄 한글 최소 advance ≥ 11.0px 단언).

비고

글리프가 PDF보다 크게 보이는 현상은 폰트 대체(Noto Sans CJK KR ↔ 한컴 돋움; 같은 em 에서 Noto 글리프가 ~30% 큼) 문제로 본 건과 별개 — 별도 이슈로 추적 예정.

🤖 Generated with Claude Code

문제: 인라인 수식(treat-as-char)이 포함된 줄의 본문 한글이 압축되어 겹침
(3-09월_교육_통합_2023 6쪽 문26, advance 8.96px/0.746em). 문단은 align=Left,
자간 0%, 장평 100% 로 압축 의도가 없으나, 줄 폭 측정이 available_width 를 초과해
비정렬 오버플로우 압축이 발동했다.

근본 원인 (둘 다 측정/렌더 불일치):
1. est_x 측정 루프와 total_tac_width_in_line 이 전역 tac_offsets_px 를 run 경계로
   재필터 → 줄 끝 위치(= 다음 줄 선두)의 수식을 현재 줄 폭에 오포함.
2. 선두 미주 마커가 endnote_marker_x_advance(inline_offset) 와 footnote_positions
   측정(fn_text 위첨자) 양쪽에서 이중 계상. 렌더는 인라인 위첨자를 그리지 않음.

수정 (측정을 렌더의 줄-경계/마커 규칙에 통일):
- TAC 소스를 line_tac_offsets(= tac_offsets_for_line, pos<다음 줄 시작)로 통일.
- footnote_positions 측정에서 start_line==0 의 선두 미주(Endnote) 제외.

결과: 문26 한글 advance 8.96 → 11.93px (PDF 한글 2022 12px 정합), 겹침 해소.
cargo test 1896 passed (golden SVG 스냅샷 8건 포함). 회귀 가드 테스트 추가.

비고: 글리프가 PDF보다 크게 보이는 현상은 폰트 대체(Noto Sans CJK KR ↔
한컴 돋움) 문제로 본 건과 별개 (별도 추적).
@edwardkim edwardkim self-requested a review June 1, 2026 11:43
@edwardkim edwardkim added the enhancement New feature or request label Jun 1, 2026
@edwardkim edwardkim added this to the v1.0.0 milestone Jun 1, 2026
edwardkim added a commit that referenced this pull request Jun 1, 2026
@planet6897. golden SVG 8건 무회귀, 1925 passed, 한글 advance 8.96→11.93px. SVG 시각 판정 통과.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@edwardkim edwardkim merged commit 9c7298a into edwardkim:devel Jun 1, 2026
7 checks passed
@edwardkim

Copy link
Copy Markdown
Owner

머지했습니다(devel 9c7298ac). 감사합니다.

두 측정/렌더 불일치를 정확히 짚으셨습니다 — (1) est_x/total_tac_width_in_linepos <= line_end(포함)로 필터해 줄 끝 위치(= 다음 줄 선두)의 수식을 현재 줄 폭에 오포함하던 것을, 렌더 경로와 동일한 line_tac_offsets(엄격 미만)로 통일하고, (2) 선두 미주의 endnote_marker_x_advance ↔ footnote_positions 이중계상을 제거하셨습니다. 측정을 이미 정확한 렌더 규칙에 맞추는 방향이라 일관성이 높아졌습니다.

검증:

  • cargo test --tests 1925 passed — 특히 golden SVG 스냅샷 8건(인라인 TAC/각주/목차/우측탭)이 모두 통과해 측정 변경의 회귀가 없음을 byte 단위로 확인
  • 한글 advance: 압축 줄 8.96px → 11.93px(≈PDF 12px), 정상 줄 12.0px 는 보정 전후 동일(무관 줄 불변)
  • 작업지시자 SVG 시각 판정 통과(6쪽 문26 본문 한글 겹침 해소)

측정 경로 변경이라 WASM 을 재빌드했습니다. 글리프 크기(폰트 대체) 별도 이슈 분리도 적절합니다. 감사합니다.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants