Skip to content

수식 SVG 레이아웃: 빈 runs 줄의 TAC 수식 x 위치에 탭(\t) 반영 (#287 Phase 2) #288

@planet6897

Description

@planet6897

배경

#287 에서 큰 디스플레이 TAC 수식이 박스 좌상단으로 점프하는 버그를 수정했다. 수정 범위는 "빈 runs comp_line 에서의 TAC 인라인 처리 추가" 로 좁게 한정했고, x 계산은 col_area.x + effective_margin_left 만 사용한다.

본 Phase 2 에서는 빈 runs TAC 수식 줄의 x 정렬 을 다룬다.

증상

samples/exam_math_8.hwp SVG 의 큰 수식 a_{n+1} = { cases ... } 위치:

조사 결과 (#288 단계 1, 2026-04-24)

초기 가설("HWP composed text 에 \t 가 삽입되어 있음") 은 실측으로 틀림이 확인됨:

para.text = "(가) 모든 자연수 에 대하여\n\n이다."
  • \t 문자는 존재하지 않음
  • line 1 의 runs=[] 는 "탭 탈락" 이 아니라 연속된 \n\n 사이에 큰 수식 TAC 이 삽입된 구조의 자연스러운 결과
  • 큰 수식은 compose_paragraph 의 line 1 (char_range=[17,18)) 에 소속됨

따라서 이슈 원문의 접근 방향(A: 휴리스틱 tab 처리 / B: compose 에서 \t 보존) 모두 전제 무효.

상세: mydocs/working/task_m100_288_stage1.md

가설 재설정

한컴이 display 수식(단독 ls 차지)에 적용하는 것은 탭이 아닌 특수 정렬 규칙:

  1. 첫 탭 스톱 위치 사용tab_def_id=6, tab[0] pos=13600 HU (=181 px) 등 tab_def 참조
  2. segment_width 기준 중앙 정렬 — ParaShape.alignment 무시, 수식 단독 줄은 중앙
  3. HWP 내부 "display equation" 특수 처리 — 고정 들여쓰기 또는 별도 로직

단계 2 계획 (규칙 역추정)

  1. 한컴 PDF 의 수식 x 와 "이다." x 를 정밀 측정 (PDF content stream 파싱 또는 렌더 이미지 좌표)
  2. exam_math_008.hwp 등 동일 패턴을 가진 다른 문서에서 PDF 수식 x 교차 측정
  3. 측정값과 ParaShape/tab_def 파라미터의 관계를 회귀 분석해 규칙 확정
  4. 확정된 규칙을 paragraph_layout.rs 의 빈 runs TAC 처리 블록에 반영

검증 기준

  • samples/exam_math_8.hwp SVG 의 수식 x 가 PDF 와 ±2 px 이내
  • samples/exam_math.hwp 20페이지 회귀 없음
  • samples/equation-lim.hwp 회귀 없음

관련

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions