한글 수식 커스텀 폰트 만들기
1. 왜 커스텀 수식 폰트가 필요한가?
바로 ‘못 생겨서’이다. 개인적으로 의 기본 수식이 상당히 미려하다고 생각하는데, 한/글의 HyHwpEQ는 이를 어설프게 배껴 수식 상태가 좋지 못하다. 또 HancomEQN은 태광수식으로부터 나온 폰트이나 이것 역시 출판할 수 있을 정도로 상태가 좋진 않다. 여기에서는 HyHwpEQ 수식 커스텀 위주로 설명할 것인데, 내가 발견한 HyHwpEQ의 문제점은 다음과 같다.
- 로만체 알파벳이 예쁘지 않으며 이탤릭체 알파벳과 굵기가 다름.
- 등호가 없는 부등호와 등호가 있는 부등호의 글자 가로폭이 다르고 roundness도 다름.
- plus-minus 기호의 roundness와 굵기가 plus와 minus 기호와 다름.
- 등호 뒤에 minus sign을 입력하면 너무 달라붙고, 1/4칸 띄우면 간격이 너무 큼. (사실 이는 1/4칸 대신 it나 rm을 선언하면 간격이 딱 맞게 되는 일종의 편법이 있긴 하다)
- 루트 기호를 사용할 때 위의 ‘가로선’이 살짝 튀어나와 있음.
- 수식 내 한글을 사용하고자 할 때 폰트 변경이 불가능함. 수식과 한글을 따로 쓰면 되지 않냐는 반론억지를 부려야 함.이 있을 수 있지만 cases문이나 집합을 사용해보면 이것이 필요한 이유를 알 수 있을 것임. 이 문제를 해결하기 위해 테두리가 없는 표를 만들어 다소 불편한 방식으로 해결해야 함.
- 원시함수에 대괄호를 씌우는 과 같은 예에서, 에 분수가 포함되어 있지 않으면 대괄호 크기를 늘려주기 위해 강제로
pile{`#`}
등과 같은 억지를 부려야 하는데, 이 과정에서 대괄호와 사이 한 칸을 더 띄워야 하므로 불편함.
이 외에도 수식을 사용하면서 수많은 불편함을 느꼈으나 모두 열거하기엔 의미가 없을 것 같아 생략한다.
2. 한글 수식에 대하여
필자가 지금까지 사용해 본 한컴오피스 한/글 중 가장 오래된 버전은 한/글 2005였다. 하지만 한/글 2005에 대한 기억은 거의 없고, 초등학교 시절에는 주로 한/글 2007이나 2010을, 중학교 때는 한/글 2018을 주로 사용해왔다. 이후 맥으로 넘어오게 되면서 한/글 2014 VP for Mac을 주력으로 (놀랍게도 맥용 한/글은 2014가 2022년 현재 최신버전이다), 윈도우용 한/글 2020과 2022를 가상 데스크톱에 물려 사용하고 있다.
나무위키에 의하면 한/글에 수식이 도입된 것은 2.0~2.5 시절이나, 이에 대한 정보는 찾아볼 수 없었으며 인터넷에서 찾을 수 있는 가장 오래된 한/글 수식입력기는 한글 97이었다. 한/글 97~2002 시절에는 수식입력기에 “수식”이라는 글꼴을 사용하였는데, 말 그대로 폰트 이름이 “수식”이다. (파일명은 HSUSR.HFT
와 HSUSRI.HFT
) 이 폰트는 최신 버전의 한/글에서도 만나볼 수 있는데, 한/글의 글자 모양 탭에서 글자 언어를 ‘영어’로 바꾼 후 “수식”이라고 적힌 폰트를 검색하면 체험해볼 수 있다. 또는 한/글 문서를 ‘한글 97~3.0’ 형식으로 저장해도 옛날 버전의 수식이 뜬다.
한/글 2004부터는 수식 폰트가 HYHWPEQ.TTF
로 바뀌었으며 현재 최신 버전까지 이 폰트를 사용하고 있다. 이 폰트의 제작자는 한양정보통신이다. 그런데 한/글 2004~2007 시절의 수식과 2010~2022의 수식을 자세히 살펴보던 중 미세하게 다르다는 것을 알게 되었다. 실제로 한/글 버전에 따라 HYHWPEQ.TTF
의 버전도 같이 변하는데, 2004~2007 때는 버전 1.10
, 2010부터 현재까지는 버전 1.13
을 사용하고 있다. 두 버전의 가장 큰 차이점은 로만체이다. 한글 2004~2007의 수식 폰트는 의 디폴트 폰트인 Computer Modern Serif를 거의 그대로 가져왔는데, 2010 이후부터는 그 중 로만체 글자를 HY신명조로 추정되는 다른 폰트로 바꿨다. 또 폰트 파일을 분석해보면 각 글자가 할당된 유니코드 값이나, 글자의 세로폭 등 디테일한 부분들이 다르다. 이는 1.10
버전의 TTF 파일을 최신 한/글 버전에 깔면 글자가 깨져서 나오는 이유이다.
한편 한/글 2018부터는 HancomEQN.TTF
라는 새로운 폰트를 만들었으며 이는 태광서체에서 개발하였다. 태광수식은 본래 쿽과 인디자인에서의 수식 조판을 위해 만들어진 일종의 플러그인인데, 여기에서 라이선스를 가져온 듯하다. 실제로 태광수식으로 만들어진 출판물과 HancomEQN.TTF
으로 만든 수식을 비교해보면 문자의 생김새가 동일하다는 것을 알 수 있다. 물론 후자 쪽이 문자 간 간격이나 기타 디테일한 부분이 아쉬운 면이 있다.
3. 폰트 수정하기
폰트를 수정하는 상용 프로그램은 여러 가지가 있으나 그 중 한/글 수식에서 제대로 작동하는 것은 FontCreator 6.5밖에 되지 않았다. FontLab이나 최신 버전의 FontCreator는 모두 ttf 파일을 export하는 개념이라, 이 과정에서 발생한 미상의 문제점으로 인해 한/글 수식입력기에서 글자가 찌그러지는 문제가 발생하였다. 반면 10년 넘게 전에 출시된 FontCreator 6.5에서는 ttf 파일을 수정하고 그대로 저장하는 방식이라 이러한 문제가 발생하지 않았다. 대신 이 프로그램을 Windows 10, 11 등에서 실행하면 상당히 렉이 많이 걸린다.
HYHWPEQ.TTF
파일을 열어보니, 글리프 구성이 상당히 독특하게 되어 있었다. 크게 나누자면 로만체 알파벳 / 각종 기호 / 다시 로만체 알파벳 / 이탤릭체 소문자 알파벳 순으로 구성되어 있었는데, 1) 로만체 알파벳의 중복 등장, 그리고 2) 이탤릭체 대문자 알파벳의 부재가 흥미로웠다.
1)부터 살펴보자. 로만체 알파벳은 HY신명조로 추정되는 글꼴, 그리고 의 Computer Modern Serif (이하 CMU Serif)두 개가 모두 나온다. 우리가 로만체 수식을 입력하면 나타나는 건 HY신명조의 로만체이니 그건 이해가 간다. 그럼 CMU Serif 로만체는 왜 필요한가? 폰트를 바꾸는 실험을 하며 수식입력기에 어떻게 나타나는지 알아보았더니, 이는 이탤릭 대문자를 입력할 때 CMU Serif 로만체를 skew시키는 것으로 밝혀졌다. 이 부분은 다소 이해가 안 가는데, 이탤릭 소문자는 CMU Serif Italic 폰트에서 가져왔으면서 왜 이탤릭 대문자는 그러지 않았는지가 의아스럽다. 또 CMU Serif 소문자 로만체는 실질적으로 사용 용도가 없게 되는 것도 이상하다. 아무튼 이 원리를 이해하고 나니 폰트의 어떤 부분을 건드려야 할지 감이 왔다.
처음에는 HY 신명조 부분을 모두 CMU Serif로 대체하고자 하였으나, 막상 해보니 난관에 부딪혔다. CMU Serif의 세로폭이 상당히 커서, 한/글 수식입력기에서 글자가 잘리는 문제가 발생한 것이다. 이것이 아까 1.10
과 1.13
버전의 폰트의 세로폭과 베이스라인 등이 다른 이유가 아닐까 싶다. 그럼 이탤릭용으로 사용되는 CMU Serif는 어떻게 안 잘리느냐?고 질문할 것인데, 이는 skew시키면서 글자높이가 잘라지 않게 되는 마술(?)이 일어났기 때문이다.
결국 해결방법을 못 찾고 다른 대안을 생각해 보았다. HancomEQN.TTF
를 열어 이 폰트의 로만체를 HyHwpEQ.TTF
대신 넣어주었다. HancomEQN 로만체가 CMU Serif의 로만체와 다르긴 하지만 그래도 HancomEQN 로만체를 CMU Serif의 이탤릭체와 같이 혼용했을 떄 이질감은 크게 없을 것이라는 판단이었다. 이후 폰트명을 임의로 PyeonAhnTeX1
로 바꿔주고 폰트를 저장하였다.
이쯤 되면 왜 PyeonAhnTeX1
에서 1
은 왜 있는지 궁금할 것인데, 이는 향후 있을 PyeonAhnTeX2
폰트 제작을 염두에 두었기 때문이다. PyeonAhnTeX2
는 CMU Serif와 최대한 유사하게끔 제작할 예정인데, HyHwpEQ.TTF
의 글리프 세팅을 수정하고, 나 등의 기호를 모양으로 수정하는 등을 할 것이다. 다만 아직 방법론적인 부분에서 한계에 부딪혀, 추가적인 연구가 필요해 보인다.
4. 수식 입력창에 폰트가 뜨게 만들기
이제 수식 입력창에 폰트가 뜨게 만들어야 하는데, 가장 간단한 방법은 HyHwpEQ.TTF
나 HancomEQN.TTF
파일을 덮어씌우는 게 있다. 하지만 이렇게 하면 원본 폰트를 사용하지 못하게 되므로, 폰트를 하나 추가하여 한/글 수식입력기의 드롭다운 메뉴에서 선택할 수 있도록 방안을 마련하였다.
우선 커스텀한 폰트 파일을 컴퓨터에 설치하고, C:\Program Files (x86)\HNC\Office 2022\HOffice120\Bin\UxXml\Hancom2016\EqEditor\eqeditor_commands.xml
을 텍스트 에디터로 열어보면 163
번째 줄에
<Command name="EqFontNameCombo" desc="">
<Combo command="EqFontNameCombo" width="95" id="IDC_EqFontNameCombo" vertAlign="middle">
<Data caption="HYhwpEQ" />
<Data caption="HancomEQN" />
</Combo>
<!--폰트-->
</Command>
이라고 되어 있는 부분이 있다. 여기에 <Data caption="PyeonAhnTeX1" />
줄을 추가해주면 된다.
5. 수식 폰트 일괄 변경하기
수식 폰트를 일괄 변경하는 일반적인 방법은 수식을 선택하여 개체 속성(P) > 수식 > 글꼴
에서 글꼴을 바꾼 후 적용 범위
를 문서 전체로 하면 되는데, 문제는 이때 드롭다운 메뉴에서 선택할 수 있는 글꼴을 추가하기 위해서는 앞에서처럼 간단히 xml 파일을 고쳐서 해결할 수는 없고 C:\Program Files (x86)\HNC\Office 2022\HOffice120\Bin\Hwp.String.ko-KR.dll
파일을 바이너리로 뜯어서 변경해야 한다. HeX 에디터로 시도해보았으나 결과는 실패. (리버스 엔지니어링 쪽에 조예가 있는 사람은 한번 시도해보길 바란다.) 그래서 workaround를 사용할 수 밖에 없는데, 우선 문서를 .hwpx
확장자로 저장한 다음, .zip
으로 변경한다. 이 파일을 압축을 풀지 말고 디폴트 Windows File Explorer로 연 다음 Contents
폴더의 section0.xml
, section1.xml
등을 텍스트 에디터로 열어 Find & Replace 기능을 사용하여 font="HancomEQN"
를 모두 font="PyeonAhnTeX1"
로 바꿔주면 된다. 이 과정이 모두 끝나면 다시 .zip
확장자를 .hwpx
로 바꾸어서 한/글로 열면 된다.