Skip to content

PR #323 회귀: 21_언어 page 1 col 1 시작 위치 (Paper-anchored body-wide 표 reserve 미적용) #326

@planet6897

Description

@planet6897

배경

PR #323 (Task #321) 검토 중 회귀 발견:

  • 21_언어_기출_편집가능본.hwp page 1 의 우측단(col 1) 첫 줄 "기법을 적용하여 …" 가 4×5 표(상단) 와 수직 겹침 위치에서 시작
  • 정상은 표 아래 "이때 기존의 …" 가 첫 줄

분석 (작업지시자 제공)

브랜치 단 1 used hwp_used diff 단 1 시작
devel 1223.1 38.9 +1184.3 body 하단 시작 (≈1184px reserve)
PR #323 1174.7 1213.1 -38.4 body 상단 시작 (reserve=0)

원인

21_언어 4×5 표:

[common] treat_as_char=false, wrap=위아래, vert=용지(9872=34.8mm), horz=용지
  • vert_rel_to=Paper, vertical_offset=131px, height=183pxshape_bottom=314px
  • body_top = 209.8px → shape 가 body 와 수직 겹침
  • v3 (commit 3932b83) 가 Paper-anchored 도형을 col 1+ reserve 에서 일률적으로 제외 → 본 케이스에서 reserve=0 되어 회귀

v3 의 가정 "Paper 기준 = 머리말 영역" 은 본 표에 부적합. body 와 겹치는 Paper 도형도 col 1 reserve 대상.

수정 방향 (Option A)

compute_body_wide_top_reserve_for_para (src/renderer/typeset.rs) 와 calculate_body_wide_shape_reserved (src/renderer/layout/shape_layout.rs) 양쪽:

if matches!(common.vert_rel_to, VertRelTo::Paper) {
    let shape_top = hwpunit_to_px(common.vertical_offset as i32, dpi);
    let shape_bottom = shape_top + hwpunit_to_px(common.height as i32, dpi);
    let body_top = layout.body_area.y;  // shape_layout 측은 body_area.y
    if shape_bottom <= body_top {
        continue;  // 본문과 겹치지 않을 때만 제외
    }
}

검증 기준

  • 21_언어 1페이지 col 1 hwp_used → ≈38.9 부근 회복
  • 4x5 표 아래에서 col 1 시작
  • exam_math/kor/eng 회귀 없음

관련

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