증상
samples/aift.hwp 4페이지 목차의 모든 (페이지 표기) 라인이 PDF (한컴) 정답지 대비 1.05 mm (≈4 px) 좌측에 위치.
| 항목 |
PDF (한컴) |
rhwp SVG |
차이 |
( 시작 (mm, 본문 좌측 기준) |
137.47 |
139.02 |
+1.55 mm 우측 |
) 끝 (mm) |
169.71 |
168.83 |
-0.88 mm 좌측 |
| 우측 마진 (mm) |
0.11 |
1.16 |
+1.05 mm |
본 결함은 Task #630 (· 포함 라인 8.67 px 이탈) 정정 후에도 잔존. Task #630 베이스라인부터 동일한 잔여 마진 — 별도 본질 영역.
원인 분석
HWP TabDef.position = 95662 HU. style_resolver.rs:643 의 / 2.0 처리로 47831 HU = 168.75 mm 로 변환. 본문 우측 끝 = 170 mm. 차이 1.25 mm.
aift p4 의 RIGHT 탭은 compute_char_positions (text_measurement.rs:386~) in-run 분기로 처리. tab_pos = 638 px (95662/2) 까지 right-aligned. 본문 우측 끝 (642.5 px) 까지 클램프 누락 → 4.5 px ≈ 1.18 mm 좌측 위치.
cross-run pending tab handler (paragraph_layout.rs:1402) 는 tab_type == 1 && fill_type != 0 조건에서 effective_pos = effective_margin_left + available_width 로 본문 우측 끝까지 클램프하는 로직 보유. 그러나 in-run RIGHT 탭 (단일 run 안에 \t 포함) 은 이 클램프 미적용.
검증 실험 (RIGHT 탭만 /2 제거): paren_x 변화 없음 (600~601 px 유지) — / 2.0 자체는 본질 아님. in-run RIGHT 탭의 본문 우측 끝 클램프 로직 누락이 본질.
정정 영역 후보
src/renderer/layout/text_measurement.rs::compute_char_positions:
- has_custom_tabs 분기 (line 378~) RIGHT 탭 처리에 leader (fill_type != 0) 인 경우 본문 우측 끝 클램프 추가
- 또는
find_next_tab_stop 의 type=1 분기에 leader 클램프 통합
영향 범위:
- 모든 in-run RIGHT 탭 + leader fill 영역 (목차, 표 우측 정렬 등)
- issue-147 (aift p3) / issue-267 (KTX TOC) 골든 SVG 갱신 가능성
- 광범위 sweep 회귀 검증 필수
권위 비교
| 메트릭 |
PDF |
rhwp Stage 5 (Task #630) |
정정 후 (Issue #631 후) 목표 |
| aift p4 우측 마진 |
0.11 mm |
1.16 mm |
≈ 0.1 mm |
메모리 정합
feedback_essential_fix_regression_risk.md — in-run RIGHT 탭 클램프 변경은 표 우측 정렬 / 목차 / 다른 right-tab 영역 광범위 영향
feedback_pdf_not_authoritative.md — PDF 200dpi 보조 ref. 한컴 2010/2020 다른 환경 비교 필요
feedback_rule_not_heuristic.md — "in-run RIGHT 탭 + fill 시 본문 우측 끝 클램프" 단일 룰로 적용
후속 태스크 권고
본 Issue #631 정정은 별도 task 로 진행 (Task #630 후속). 영향 범위 광범위로 5+ 단계 + 광범위 sweep 회귀 검증 + 시각 판정 필수.
증상
samples/aift.hwp4페이지 목차의 모든(페이지 표기)라인이 PDF (한컴) 정답지 대비 1.05 mm (≈4 px) 좌측에 위치.(시작 (mm, 본문 좌측 기준))끝 (mm)본 결함은 Task #630 (
·포함 라인 8.67 px 이탈) 정정 후에도 잔존. Task #630 베이스라인부터 동일한 잔여 마진 — 별도 본질 영역.원인 분석
HWP TabDef.position = 95662 HU.
style_resolver.rs:643의/ 2.0처리로 47831 HU = 168.75 mm 로 변환. 본문 우측 끝 = 170 mm. 차이 1.25 mm.aift p4 의 RIGHT 탭은
compute_char_positions(text_measurement.rs:386~) in-run 분기로 처리. tab_pos = 638 px (95662/2) 까지 right-aligned. 본문 우측 끝 (642.5 px) 까지 클램프 누락 → 4.5 px ≈ 1.18 mm 좌측 위치.cross-run pending tab handler (
paragraph_layout.rs:1402) 는tab_type == 1 && fill_type != 0조건에서effective_pos = effective_margin_left + available_width로 본문 우측 끝까지 클램프하는 로직 보유. 그러나 in-run RIGHT 탭 (단일 run 안에 \t 포함) 은 이 클램프 미적용.검증 실험 (RIGHT 탭만
/2제거): paren_x 변화 없음 (600~601 px 유지) —/ 2.0자체는 본질 아님. in-run RIGHT 탭의 본문 우측 끝 클램프 로직 누락이 본질.정정 영역 후보
src/renderer/layout/text_measurement.rs::compute_char_positions:find_next_tab_stop의 type=1 분기에 leader 클램프 통합영향 범위:
권위 비교
메모리 정합
feedback_essential_fix_regression_risk.md— in-run RIGHT 탭 클램프 변경은 표 우측 정렬 / 목차 / 다른 right-tab 영역 광범위 영향feedback_pdf_not_authoritative.md— PDF 200dpi 보조 ref. 한컴 2010/2020 다른 환경 비교 필요feedback_rule_not_heuristic.md— "in-run RIGHT 탭 + fill 시 본문 우측 끝 클램프" 단일 룰로 적용후속 태스크 권고
본 Issue #631 정정은 별도 task 로 진행 (Task #630 후속). 영향 범위 광범위로 5+ 단계 + 광범위 sweep 회귀 검증 + 시각 판정 필수.