증상
text-align-2.hwp 를 rhwp SVG 로 내보내면 콤마(,)·중점(·) 등 실제 글리프 폭이 반각(em/2)보다 훨씬 좁은 narrow glyph 뒤에 오는 글자가 한컴 오피스 PDF 보다 3~5 px 더 오른쪽에 배치됨.
위치
한컴 PDF
rhwp SVG
표 셀 숫자
1,000항목
1, 000항목
표 셀 숫자
30,000항목
30, 000항목
표 헤더 중점
어휘·표현
어휘· 표현
재현
cargo run --bin rhwp -- export-svg text-align-2.hwp -o output/svg/text-align-2/
생성된 output/svg/text-align-2/text-align-2.svg 의 TAC 표 셀 내 1,000항목 / 30,000항목 / 어휘·표현 좌표를 PDF 출력과 비교하면 콤마·중점 뒤 글자 x 좌표가 PDF 대비 3~5 px 우측으로 밀림.
상세 비교: mydocs/tech/text_align_2_svg_pdf_compare.md §2.2
원인 가설
src/renderer/layout/text_measurement.rs:280-290 compute_char_positions 의 음수 자간 min-clamp 로직:
if style. letter_spacing + style. extra_char_spacing < 0.0 {
let min_w = base_w * ratio * 0.5 ;
w = w. max ( min_w) ;
}
콤마 base_w = font_size × 0.5 (반각 휴리스틱)
자간 -8% 시 w = 반각 + (-8% × font_size) 로 줄어드는 게 정상
그러나 min_w = 반각 × ratio × 0.5 ≈ font_size × 0.25 이 하한으로 작동 , 실제 글리프(font_size × 0.15 수준)보다 과도한 advance 로 남음 → 콤마·중점 뒤 공백 벌어짐
폰트 메트릭 DB(measure_char_width_embedded)에 실제 advance 값이 있으면 해당 경로로 처리되지만, 미등록 폰트(HY헤드라인M 등)에서는 반각 휴리스틱으로 fallback 되어 증상 발생
영향 범위
표 셀 내 숫자 (1,000, 30,000 등 콤마 포함 숫자 전반)
일반 본문 내 콤마·중점이 다수 쓰이는 문서
콤마·중점 빈도가 높은 시험지·보고서·사양서 등
text-align.hwp (원본 Task 원문자(③) 위에 ⓪이 겹쳐 렌더링되는 버그 #146 샘플)에는 해당 문자가 없어 회귀 검증에서 드러나지 않았음
수정 접근 후보
안
내용
리스크
A
base_w 휴리스틱 개선 — Unicode Punctuation 범주의 narrow glyph 는 font_size × 0.3 수준의 작은 값 반환
낮음
B
min_w 하한값 폐지 — narrow glyph 에 per-char clamp 미적용
낮음
C
폰트 메트릭 DB에 공통 narrow glyph (, . · : ;) 실제 값 추가
중간 (유지보수 비용)
권장: A + B 조합 (narrow glyph 감지 후 clamp 우회).
관련
선행 Task 원문자(③) 위에 ⓪이 겹쳐 렌더링되는 버그 #146 (text-align.hwp SVG↔PDF 일치, v1~v4 종결)
비교 문서: mydocs/tech/text_align_2_svg_pdf_compare.md
샘플 파일: text-align-2.hwp, text-align-2.pdf
산출 예상
소스: src/renderer/layout/text_measurement.rs 1개 (+ 유니코드 범주 분기 추가 시 helper 함수)
테스트: 단위 테스트 1~2개 (콤마/중점 advance)
회귀: text-align-2.hwp SVG 좌표 골든 테스트 or 시각 확인
text-align-2.zip
증상
text-align-2.hwp를 rhwp SVG 로 내보내면 콤마(,)·중점(·) 등 실제 글리프 폭이 반각(em/2)보다 훨씬 좁은 narrow glyph 뒤에 오는 글자가 한컴 오피스 PDF 보다 3~5 px 더 오른쪽에 배치됨.1,000항목1, 000항목30,000항목30, 000항목어휘·표현어휘· 표현재현
생성된
output/svg/text-align-2/text-align-2.svg의 TAC 표 셀 내1,000항목/30,000항목/어휘·표현좌표를 PDF 출력과 비교하면 콤마·중점 뒤 글자 x 좌표가 PDF 대비 3~5 px 우측으로 밀림.상세 비교:
mydocs/tech/text_align_2_svg_pdf_compare.md§2.2원인 가설
src/renderer/layout/text_measurement.rs:280-290compute_char_positions의 음수 자간 min-clamp 로직:base_w=font_size × 0.5(반각 휴리스틱)w = 반각 + (-8% × font_size)로 줄어드는 게 정상min_w = 반각 × ratio × 0.5 ≈ font_size × 0.25이 하한으로 작동, 실제 글리프(font_size × 0.15수준)보다 과도한 advance 로 남음 → 콤마·중점 뒤 공백 벌어짐measure_char_width_embedded)에 실제 advance 값이 있으면 해당 경로로 처리되지만, 미등록 폰트(HY헤드라인M 등)에서는 반각 휴리스틱으로 fallback 되어 증상 발생영향 범위
1,000,30,000등 콤마 포함 숫자 전반)text-align.hwp(원본 Task 원문자(③) 위에 ⓪이 겹쳐 렌더링되는 버그 #146 샘플)에는 해당 문자가 없어 회귀 검증에서 드러나지 않았음수정 접근 후보
base_w휴리스틱 개선 — Unicode Punctuation 범주의 narrow glyph 는font_size × 0.3수준의 작은 값 반환min_w하한값 폐지 — narrow glyph 에 per-char clamp 미적용,.·:;) 실제 값 추가권장: A + B 조합 (narrow glyph 감지 후 clamp 우회).
관련
text-align.hwpSVG↔PDF 일치, v1~v4 종결)mydocs/tech/text_align_2_svg_pdf_compare.mdtext-align-2.hwp,text-align-2.pdf산출 예상
src/renderer/layout/text_measurement.rs1개 (+ 유니코드 범주 분기 추가 시 helper 함수)text-align-2.hwpSVG 좌표 골든 테스트 or 시각 확인text-align-2.zip