2010년 3월 23일 화요일

[파이썬+폰트포지] 우분쿠 크롬에서 나눔코딩글꼴 버그 수정.

요 몇 년 사이에 쓸만한 공짜(나눔코딩의 경우 무려 자유!)글꼴들이 많이 등장했는데, 매번 일일이 복사해다가 설정하기 번거로와서, 짬나는 대로 끌어모아 각각 deb패키지로 만들어 [제 PPA](https://launchpad.net/~suapapa/+archive/ubuntukofonts)에 쌓아두고 있습니다.

지금까지 모은 글꼴들은...

- 신영복엽서체 `ttf-araea`
- 아리따체 `ttf-aridda`
- 다음체 `ttf-daum`
- 함초롱체(한컴체) `ttf-hancom`
- 한겨레결체(한결체) `ttf-hankc`
- 나눔글꼴 `ttf-nanum`
- **나눔고딕코딩체**(나눔코딩체) `ttf-nanum-coding`
- 네이버사전체 `ttf-naverdic`

입니다. 글꼴 이름 뒤의 ttf-로 시작하는 영어이름은 패키지명이니까. 위의 ppa를 추가하신 후 패키지명으로 검색해서 설치하면 되요.

> 공짜글꼴이지만 위의 리스트에 없는 글꼴들은, 제 레이더에 잡히지 않았거나, 재배포를 막았거나, 다운로드 링크를 크롬브라우져에서 접근할 수 없는 경우 처럼 왠지 맘에 들지 않거나한 경우 입 니다. :)

이들 중 특히 나눔글꼴은 화면용 기본글꼴로, 한결체는 인쇄물에 잘 쓰고 있습니다.

그리고, 또 하나 이 포스팅의 주제인 고정폭 글꼴 [나눔코딩 글꼴](http://kldp.org/node/102183)에 대해 말해 보도록 하겠습니다.



글자들의 너비가 동일한 글꼴을 고정폭(monospace) 글꼴이라고 합니다. 모바일 장치들도 다 외관선 폰트들을 쓰는 세상(그리고 보통은 가변폭이 더 보기 좋으니까)이라 이젠 고정폭 글꼴을 찾기가 어려워 졌는데, 아스키 글자들로 그린 다이어그램, 회로도, 악보들을 볼 때나 코딩시 소스의 가독성을 높이기 위해 고정폭 글꼴은 여전히 필요합니다.

고정폭 글꼴은 그 태생 상 비트맵 글꼴이거나 영문만 준비되어 있는 경우가 많아서 (이 경우 한글글꼴과 조합하여 사용할 수 있지만 일관성이 떨어져서)안 예쁘죠.

이런 와중에 나눔코딩글꼴은 한글이 포함된 고정폭 외곽선 폰트인데다 가독성과 완성도도 높습니다. 좋은 글꼴을 만든 산돌커뮤니케이션과 이 글꼴을 자유에 모므로(OFL) 내놓아 준 네이버에게 감사드려요!!

해서, 우분투의 기본 고정폭로 설정해 두고 잘 쓰고 있지만 한가지 문제점이 있었습니다.

유독 크롬 브라우져에서만 나눔코딩의 영문 자간이 벌어져 보인다는 것 입니다.

![](http://web.suapapa.net:8080/wordpress/wp-content/uploads/image/nanum_coding_bug.png)

찾아보니 네이버 개발센터 나눔 코딩 프로젝트의 게시판에도 이 문제가 보고(http://dev.naver.com/projects/nanumfont/forum/5513)된 바 있지만... 영향력 없는 OS의 영향력 없는 브라우져에서만 나타나는 이 현상을 알아서 고쳐줄 리 만무하지요. 1등만 신경쓰는 더러운 세상. ㅋ. 하지만 이 글꼴의 경우 OFL라이센스의 수정이 가능한 자유 글꼴이기 때문에 알아서 고쳐 쓸 수 있습니다.

# 자, 그럼 무엇이 문제인지 알아 내고, 고쳐 봅시다.

얼마간의 삽질 후에 그놈 데스크탑은 [Fontconfig](http://ubuntu.or.kr/viewtopic.php?f=9&t=791)를 사용해서 폰트를 그리고, 크롬은 별개로[skia](http://src.chromium.org/viewvc/chrome/trunk/src/skia/)를 사용해 폰트를 그린다는 것을 알게 되었습니다.

**그럼 크롬의 버그일까요?**

헌데, 크롬에서 다른 글꼴들은 이런 문제가 나타나지 않는다는 것이죠. 해서 FontForge를 사용해 문제가 없는 글꼴과 비교해 뭐가 다른지 찾아 봤습니다. 그랬더니...

"Element" -> "Font Info" -> "OS/2" -> "Panose" -> "Proportion" 가 Monospace로 설정되어 있는 차이점이 보이더군요.

![](http://web.suapapa.net:8080/wordpress/wp-content/uploads/image/nanum_coding_fixing.png)

그래요.

**나눔글꼴은 고정폭 글꼴이 아닙니다.** 사실 모든 한글 고정폭 글꼴은 고정폭이 아니라 한글이 영문보다 딱 두배 넓죠. 그런 Proportion은 **Even Width**(짝수 너비)가 되야 할 것 같은 느낌이 들어 바꿔 보니...

![문제해결](http://web.suapapa.net:8080/wordpress/wp-content/uploads/image/nanum_coding_fixed.png)

# 논 아직 자유의 모미 아냐

FontForge는 기능적으로는 모자란 곳 없는(없어 보이는) 폰트 툴이지만 사용하기 편리한 툴은 아닙니다. 오래되었고 불편해요. 이런 문제가 있는 폰트를 만날 때 마다 FontForge를 열어서 -그때쯤이면 까먹었을- 메뉴 위치를 찾아 해매는 것은 유쾌한 일이 아니죠.

다행히 파이썬의 손길이 이 외진 곳 까지 뻐쳐 있었습니다. 아래와 같이 관련 패키지를 설치하고,

$ sudo apt-get install python-fontforge

[폰트포지-파이썬 문서](http://fontforge.sourceforge.net/python.html)로 개념 탑재를 한 후,

굴려 봅니다. 여기서는 저작권 정보를 출력해 보았습니다.

>>> import fontforge
>>> font = fontforge.open('NanumGothic_Coding_Bold.ttf')
>>> print font.copyright
Copyright © 2009 NHN Corporation. All rights reserved. Font designed by Sandoll Communications Inc.

문서 상에는 proportion에 대한 내용이 부실했지만, 쉽게 어딜 고쳐야 하는지 알 수 있었습니다. GUI의 순서와 같은 네번째 항목이네요. 역시 리스트 메뉴의 순서대로 9->4로 수정합니다.

>>> font.os2_panose
(2, 13, 0, 9, 0, 0, 0, 0, 0, 0)
>>> font.os2_panose = (2, 13, 0, 4, 0, 0, 0, 0, 0, 0)
>>> font.generate('output.ttf')

이렇게 FontForge를 직접 실행하지 않고도 폰트의 속성을 바꿀수 있게 되어, 나눔코딩체의 우분투 패키징시에 이 변경 내용을 적용하도록 스크립트를 추가해 두었습니다.

> 스크립트의 내용이 궁금하신 분은 apt-get source ttf-nanum-coding 으로 소스패키지를 받으셔서 debian 폴더를 살펴 보세요.

# 삽질 정리

윈도나 그놈데스크탑에서 문제가 없었던 것은 이런 문제가 있는 글꼴들의 오류를 잘 피해 가도록 폰트엔진에 땜빵 처리가 되어 있었기 때문인 것 같습니다. 이걸 나눔 코딩의 문제라고 봐야 하는지, 그런 예외처리를 하지 못한 skia엔진의 문제라고 해야 할 지... 지금은 곤란해서 판단할 수가 ㅇ벗네요.

> 참고: 현재는 skia가 개선되어 이런 수정이 없이도 크롬에서 문제가 발생하지 않는 것으로 알고 있습니다. :)

댓글 5개:

  1. 감사합니다, ^-^
    드디어 나눔고딕코딩 글꼴 문제를 해결했네요, ^-^

    답글삭제
  2. 감사합니다^^ 열코?

    답글삭제
  3. 동아시아 '고정폭' (이중폭) 글꼴 가운데 그런 문제가 있는 글꼴이 많다고 하네요. Freetype에서 그런 글꼴을 위해 글리프 로딩할 때 전역폭을 무시하는 옵션이 있네요. Skia에서 그걸 쓰지 않아서 문제였고요.

    http://code.google.com/p/skia/issues/detail?id=222

    에 보시면 그걸 고치는 패치가 있습니다.

    그렇다고 해도 글꼴을 고쳐야지요. 네이버에 연락해 보셨나요?

    답글삭제
  4. Jungshik Shin 님/ 설명과 링크 감사드립니다. skia에서도 수정되는군요. 나눔고딕코딩 글꼴 사이트에 버그로 등록해 둔지 꽤 되었습니다. 판올림이 될 때 적용될란지 아직 아무 소식이 없네요.

    답글삭제
  5. 진지하게 잘 읽다가 막판에서 뒤집어지네요.
    ㅇ벗네요?
    그래서 세벌식을 쓰셔야 한다는....

    답글삭제