Skip to content

Right Tab 정렬 수정: 목차 페이지 번호 정렬 오차 (선행 공백 처리) #250

@seanshin

Description

@seanshin

개요

목차(TOC)에서 페이지 번호의 right tab 정렬이 문단 구조(단일 run vs 교차 run)에 따라 달라지는 문제를 수정한다.

문제 현상

목차 소제목의 페이지 번호가 장제목 대비 약 9.33px 왼쪽으로 밀림.

장제목 (Ⅰ, Ⅱ...): 페이지 번호 올바르게 우측 정렬  ✅
소제목 (1., 2. ...): 페이지 번호 9.33px 왼쪽으로 밀림  ❌

재현 파일: KTX.hwp 2페이지 목차

원인

compute_char_positions()의 right tab 처리 경로가 3가지로 분기됨:

  1. 같은 run 내 탭seg_w 계산 시 탭 직후 선행 공백(≈9.33px) 포함
  2. 교차 run 탭 (추정 패스)pending_right_tab_est 별도 처리
  3. 교차 run 탭 (렌더 패스)pending_right_tab_render 별도 처리

한컴은 right tab 정렬 시 탭 직후 선행 공백을 무시하고 실질 텍스트 기준으로 정렬.
세 경로의 공백 처리 불일치가 정렬 오차를 발생시킴.

수정 방향

3경로 모두에 동일한 선행 공백 skip 규칙 적용 (right tab 전용, center tab 제외).

// compute_char_positions() right tab 분기
let trimmed_start = (i+1..chars.len())
    .find(|&j| chars[j] != ' ')
    .unwrap_or(chars.len());
let trimmed_seg_w = measure_segment_from(..., trimmed_start, ...);
x = (rel_tab - trimmed_seg_w).max(x);

수정 파일

  • src/renderer/layout/text_measurement.rs

검증 계획

  1. cargo test — 793개 전체 통과
  2. KTX.hwp 2페이지 목차 — 장제목/소제목 페이지 번호 x좌표 일치
  3. Visual Diff 기존 검증 페이지(p1, p5, p6, p10) — regression 없음
  4. 추가 목차 문서 교차 검증

관련

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