문제
samples/equation-lim.hwp (lim _{h→0} {f(2+h)-f(2)} over h 수식) 렌더링 결과가 한컴이 생성한 PDF와 비교해 폰트가 볼드처럼 두껍게 보임.
- 샘플:
samples/equation-lim.hwp
- 한컴 PDF (정답):
samples/equation-lim.pdf
- 현재 rhwp SVG 출력: 글자가 굵어 보임
원인 분석
1. 현재 폰트 스택 (src/renderer/equation/svg_render.rs:11)
const EQ_FONT_FAMILY: &str = " font-family=\"'Latin Modern Math', 'STIX Two Math', 'Cambria Math', 'Pretendard', serif\"";
Windows 기본 환경에는 Latin Modern Math / STIX Two Math 가 없고 Cambria Math가 매칭됨.
Cambria Math는 수학 디스플레이용 "무거운 획" 폰트 → 일반 Times 세리프보다 확연히 굵게 렌더링됨 → 사용자가 "볼드"로 인지.
2. HWP 원본은 HyhwpEQ (한컴 독점 폰트) 사용
PDF 내부 분석 결과 한컴은 HyhwpEQ 폰트를 서브셋으로 임베딩. 가는 클래식 세리프 스타일. HyhwpEQ는 독점 폰트라 rhwp가 직접 사용 불가.
3. lim과 본문 크기 차이는 함수명 일반 규칙 아님 (조사 완료)
PDF 콘텐츠 스트림에서 lim=110pt, 본문=92pt, 첨자=62pt 로 다르게 렌더링되어 "lim 1.2x 확대 규칙"이 있는지 의심했으나, 샘플 bbox 비교 결과 폰트 자체 설계상 ASCII/PUA 글리프 em 차이 보정이 원인으로 확인됨.
근거: exam_math.hwp의 \"b= log 2\" 수식 bbox가 1125 HWPUNIT (= font_size * 1.02)로 단순 수식과 동일. log가 1.2x 확대된다면 ~1320이어야 하는데 그렇지 않음 → log, sin, cos 등 함수 키워드는 본문과 같은 크기로 렌더링됨.
수정 방향
Phase 1 (이 이슈 범위): 폰트 스택 재정렬
// 변경 전
'Latin Modern Math', 'STIX Two Math', 'Cambria Math', 'Pretendard', serif
// 변경 후 (제안)
'STIX Two Text', 'Latin Modern Roman', 'Times New Roman', 'Times', 'Cambria', serif
- 가는 세리프 우선 → "볼드 느낌" 해소
- 수식 전용 기호(∫, ∑, ∏ 등)는 브라우저 글리프 폴백이 처리
- Cambria Math 는 최후의 수단으로만 (math 글리프가 필요할 때)
Phase 2 (별도 이슈 후보, 이 이슈 범위 밖):
- 괄호
( ) path 크기 조정 (paren_w = fs * 0.3 → 실제 폰트 글리프 비율과 맞게)
lim 등 함수명에 1.2x 적용은 하지 않음 (일반 규칙 아님 확인됨)
검증 방법
- 변경 전/후 SVG를 PNG로 렌더링해 시각 비교
samples/equation-lim.hwp 외에도 samples/exam_math.hwp 내 수식들 회귀 확인 (sin/cos/log/sqrt/int/fraction 포함)
- 기존 수식 단위 테스트(
src/renderer/equation/svg_render.rs #[cfg(test)]) 회귀 없는지 확인
관련 파일
src/renderer/equation/svg_render.rs (EQ_FONT_FAMILY 상수)
src/renderer/equation/layout.rs (변경 없음, 레이아웃 계산 유지)
비고
- HyhwpEQ는 한컴 독점 폰트라 픽셀 단위 일치는 불가능. "PDF에 충분히 근접한 모양"이 목표.
- 관련 매뉴얼:
mydocs/tech/font_fallback_strategy.md 참조 필요 시 업데이트
문제
samples/equation-lim.hwp(lim _{h→0} {f(2+h)-f(2)} over h수식) 렌더링 결과가 한컴이 생성한 PDF와 비교해 폰트가 볼드처럼 두껍게 보임.samples/equation-lim.hwpsamples/equation-lim.pdf원인 분석
1. 현재 폰트 스택 (
src/renderer/equation/svg_render.rs:11)Windows 기본 환경에는 Latin Modern Math / STIX Two Math 가 없고 Cambria Math가 매칭됨.
Cambria Math는 수학 디스플레이용 "무거운 획" 폰트 → 일반 Times 세리프보다 확연히 굵게 렌더링됨 → 사용자가 "볼드"로 인지.
2. HWP 원본은 HyhwpEQ (한컴 독점 폰트) 사용
PDF 내부 분석 결과 한컴은
HyhwpEQ폰트를 서브셋으로 임베딩. 가는 클래식 세리프 스타일. HyhwpEQ는 독점 폰트라 rhwp가 직접 사용 불가.3.
lim과 본문 크기 차이는 함수명 일반 규칙 아님 (조사 완료)PDF 콘텐츠 스트림에서
lim=110pt, 본문=92pt, 첨자=62pt 로 다르게 렌더링되어 "lim 1.2x 확대 규칙"이 있는지 의심했으나, 샘플 bbox 비교 결과 폰트 자체 설계상 ASCII/PUA 글리프 em 차이 보정이 원인으로 확인됨.근거:
exam_math.hwp의\"b= log 2\"수식 bbox가 1125 HWPUNIT (= font_size * 1.02)로 단순 수식과 동일.log가 1.2x 확대된다면 ~1320이어야 하는데 그렇지 않음 →log,sin,cos등 함수 키워드는 본문과 같은 크기로 렌더링됨.수정 방향
Phase 1 (이 이슈 범위): 폰트 스택 재정렬
Phase 2 (별도 이슈 후보, 이 이슈 범위 밖):
()path 크기 조정 (paren_w = fs * 0.3→ 실제 폰트 글리프 비율과 맞게)lim등 함수명에 1.2x 적용은 하지 않음 (일반 규칙 아님 확인됨)검증 방법
samples/equation-lim.hwp외에도samples/exam_math.hwp내 수식들 회귀 확인 (sin/cos/log/sqrt/int/fraction 포함)src/renderer/equation/svg_render.rs#[cfg(test)]) 회귀 없는지 확인관련 파일
src/renderer/equation/svg_render.rs(EQ_FONT_FAMILY 상수)src/renderer/equation/layout.rs(변경 없음, 레이아웃 계산 유지)비고
mydocs/tech/font_fallback_strategy.md참조 필요 시 업데이트