Skip to content

exam_math 13페이지 상단 머리말 누출 + 본문 중복 + 둥근사각형 글상자 누락 — typeset 경로 누락 보강 #340

@planet6897

Description

@planet6897

증상

samples/exam_math.hwp 13페이지 상단(미적분 첫 페이지)에서 PDF와 비교 시 세 가지 결함이 동시에 관찰됨.

항목 PDF (정답) rhwp (현재)
머리 제목 영역 2025학년도 대학수학능력시험 문제지 + 수학 영역(미적분) 위 텍스트 위에 수학 영역(확률과 통계) 가 겹쳐 출력
23번 문제 23. lim 3x²/sin²x 의 값은? 1회 동일 문단이 2회 출력
제 2 교시 둥근사각형 배지 표시됨 누락

페이지 9(확률과 통계 시작)에서도 23번 중복 + 배지 누락이 동일하게 재현됨.

원인

세 결함 모두 src/renderer/typeset.rs 의 처리 누락에서 비롯됨. 동일 로직이 pagination/engine.rs 에는 이미 존재하나 typeset 경로로 옮겨질 때 빠짐.

1. 머리말 누출 (확률과 통계 가 13페이지에 표시)

  • Control::PageHidecollect_header_footer_controls 에서 수집되지 않음 → finalize_pagespage.page_hide 를 None 으로 둠 → build_render_tree
    hide_header=false 로 판단하고 머리말 렌더.
  • pi=34[감추기] header=true 가 무시되어, 섹션 1 시작 시 등록된 "수학 영역(확률과 통계)" 머리말이 미적분 페이지까지 잔존.
  • backtrace 로 layout_header_footer_paragraphs → layout_shape → layout_textbox_content → layout_composed_paragraph 경로 확인.

2. 23. 문단 중복 — 다중 TopAndBottom 표 분할기 결함

  • place_table_with_text 가 마지막 표 처리 시 is_last_table && !is_first_table 분기에서 post_table_start=0 으로 잡아 PartialParagraph(0..total_lines)
    를 emit.
  • 이미 첫 표 처리 단계에서 동일 범위를 pre-text 로 emit 했음에도, engine.rs:1418-1421 에 있는 pre_text_exists 가드가 typeset 측에 누락되어 본문이 두 번
    등록됨.

3. 제 2 교시 둥근사각형 누락

  • typeset_table_paragraph 의 인라인 컨트롤 등록 분기가 Picture | EquationPageItem::Shape 로 추가하고 Shape 분기를 누락.
  • pi=34 ctrl[3](둥근사각형 글상자, InFrontOfText)이 페이지 항목에 등록되지 못해 layout_column_shapes_pass 에서 렌더 후보로 잡히지 않음.

수정

src/renderer/typeset.rs:

  1. collect_header_footer_controls 의 반환 튜플에 Vec<(usize, PageHide)> 추가, Control::PageHide 수집.
  2. finalize_pagespage_hides 매개변수 추가, engine.rs::para_starts_in_page 와 동일 규칙으로 page.page_hide 설정.
  3. place_table_with_text(마지막 표 post-text emit 직전)에 pre_text_exists 가드 추가.
  4. typeset_table_paragraph 인라인 컨트롤 분기에 Control::Shape(_) 추가.

각 수정의 참조 모델은 src/renderer/pagination/engine.rs 의 동일 함수.

검증

  • 페이지 13 SVG: 제목 겹침 사라짐, 수학 영역(미적분) 단독, 제 2 교시 배지 표시, 23. 1회 출력 — PDF 와 일치.
  • 페이지 9 SVG: 23. 다항식... 1회, 배지 표시 — PDF 와 일치.
  • cargo test --release --lib → 992 passed, 0 failed.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions