다음 이전 차례

2. 한글의 출력

한글 출력의 경우 가장 큰 문제는 정해진 방법이나 지켜야 할 표준이 없다는 것입니다. 따라서 한글 출력을 보조해 주는 각자의 프로그램은 나름대로의 방법으로 한글 출력을 지원합니다만, 공통적인 것은 모두 결과적으로 포스트스크립트 프로그램을 출력한다는 것입니다.

2.1 콘솔에서의 출력

콘솔과 같은 텍스트만의 환경인 경우에는 그 터미널이 한글 출력을 지원할 수 있는지가 큰 문제가 됩니다. Linux/FreeBSD의 경우 han을 사용하여 콘솔에서 한글 출력을 볼 수 있습니다만 han은 안정되어 있는 소프트웨어는 아닙니다. 이외에 리눅스용 콘솔 드라이버를 한글화 하려는 노력이 있으나, 현재 큰 진전은 없는 상태입니다.

2.2 X윈도우에서의 출력

출력의 대상을 조금 더 넓히면 X윈도우의 출력을 다루어야 합니다. X윈도우는 Type1글꼴을 사용하여 윤곽선 글꼴의 출력을 지원하지만, 단지 화면에 나타나도록 하는데에만 매달렸을 뿐, 이를 프린터로 출력하는 문제에 대해서는 간과하고 말았습니다.

X윈도우는 R4부터 2바이트 문자를 갖는 언어를 위한 출력 함수를 지원해 왔고, 이를 R5에서는 FontSet이라는 개념으로, R6에서는 이를 더욱 확장하여 XOM(X Output Method)라는 개념으로 지원을 하고 있습니다. 로케일과 연계되어, 이들은 각 언어를 출력할 수 있는 방법을 제공하여, 한글의 경우 R5이후부터의 국제화 방식에 잘 대응하고 있습니다. X11R5에서는 보통 완성형 글꼴(다만 ISO-2022-KR처럼 MSB가 0인)을 많이 사용하는데(XLFD에서 -ksc5601.1987-0으로 끝납니다), 이를 사용하면 X11에서의 출력은 국제화 규정을 지키며 프로그래밍하는 경우에 기존 프로그램이라도 간단한 리소스 조작만으로 원하는 효과를 얻을 수 있습니다.

이를 잘 지키는 예로는 Netscape가 대표적입니다. 이는 국제화 규정을 잘 활용하여 X11환경에서 다양한 언어를 표현할 수 있도록 하였습니다. 이와 반대로, hanterm이나 hanemacs등은 한글 출력의 문제를 프로그램에서 내장한 형태입니다. 이들은 주로 조합 글꼴을 사용하는데, 조합 글꼴은 X11에서 보통 사용하는 한글 완성형 글꼴과는 달리 자소를 조합하여 한글을 출력하므로 크기도 작고 모든 글자를 나타낼 수 있지만 표준적인 방법에서 처리하는 것이 어렵다는 단점이 있습니다.

2.3 출력물

그러나 이는 단지 화면 상에서만의 문제이고, 이를 프린터로 출력하고자 하는 때에는 또 다른 방법이 필요합니다. X11은 국제화된 화면 출력은 지원하지만, 프린터를 통한 출력에는 특별히 정해진 표준이 없습니다. XPrint라는 방식이 있는데, 이는 널리 쓰이는 것이 아닙니다. MS윈도우즈의 경우 트루타입이라는 윤곽선 글꼴을 사용하여 화면용의 글꼴과 출력용의 글꼴을 일치하여 사용할 수 있지만, X윈도우의 경우 기본적인 글꼴이 모두 비트맵 형식으로 사용되기 때문에, 그리고 윤곽선을 지원하지만 한글을 사용할 수 있는 윤곽선 폰트를 지원하지 않는 관계로, 출력에서 있어서는 모두 별도의 방식을 사용해 왔습니다. 이들은 여러가지 프로그램이 존재합니다만, 다음과 같은 프로그램이 대표적입니다.

양질의 문서를 얻을 수 있는 조판(typesetting) 프로그램인 TeX은, 주로 이를 많이 사용하는 이공계 계열 사람들에 의해 한글화가 진행되어 왔습니다. KAIST수학과의 hTeXp/hLaTeXp는 가장 처음으로 만들어진 한글 TeX과 그 역사를 같이 하고 있습니다. 이 프로그램은 TeX의 에러 메시지에서도 한글 문서를 확인할 수 있는 등의 장점을 가지고 있지만, 사용하는 글꼴의 저작권 문제로 출력에 필요한 DPI(300, 600등)의 비트맵 형태(pk글꼴)로만 제공된다는 것이 유일한 단점입니다. 하지만 일반적인 환경에서 사용하는데에는 무리가 없습니다. HLaTeX은 TeX의 매크로 패키지인 LaTeX에서 한글을 구현하도록 한 LaTeX의 보조 패키지로 사용할 수 있는데, 저자의 많은 노력의 결과로 공개된 형태의 여러가지 한글 글꼴을 제공합니다. 이 글꼴의 일부는 문화부에서 공개한 바탕체 등의 글꼴에 기반을 두고 있습니다.

일반적인 경우, 유닉스에서는 대부분 양질의 출력물을 얻기 위한 별도의 시스템을 갖고 있지 못합니다. 이를 위해서는 포스트스크립트 언어를 지원하는 프린터로 포스트스크립트 파일을 출력하는 경우가 많은데, 포스트스크립트 언어를 사용하는 프린터는 보통 고가이고, 별도의 옵션을 장착해야 하는 경우가 많으므로, ghostscript라는 포스트스크립트 해석기를 사용하여 프린터 뿐 아니라 화면 출력이나 이미지 등으로 포스트스크립트 프로그램의 출력 결과를 저장할 수 있습니다.

유닉스에서 많이 사용하는 일반 텍스트 출력을 작성하기 위해서는 먼저 어떤 글꼴을 사용할 것인가의 문제가 해결되어야 합니다. 각 프로그램을 이를 위해서 나름대로의 해법을 제공합니다. hpscat의 경우에는 ked에서 사용하던 조합 방식의 포스트스크립트 글꼴과 2바이트 한글 포스트스크립트 글꼴을, h2ps에서는 n바이트 방식의 포스트스크립트 글꼴을, nh2ps의 경우 HLaTeX에서 사용하는 완성형 방식의 한글 포스트스크립트 글꼴과 2바이트의 한글 포스트스크립트 글꼴을 모두 사용할 수 있습니다.

포스트스크립트 글꼴은 윤곽선 글꼴이며, 힌팅을 통해 낮은 해상도의 비트맵을 변환하여도 글자가 제 모양대로 보일 수 있다는 장점을 가지고 있지만, 영어 표현을 위해 널리 사용하는 Type 1 글꼴의 경우 한 글꼴에 256자만을 사용할 수 있다는 단점이 있습니다. 실제로 HLaTeX의 경우, 한글 포스트스크립트 글꼴은 256자의 한 글꼴 여러 벌을 사용하여 한글 글꼴 한 벌을 만들고 있습니다. 완성형의 경우 2350자이므로, 한글의 표현에는 10벌의 Type1 글꼴이 사용되며, 한자와 전각 기호를 감안하면 이 수는 더욱 많아집니다. nh2ps에서는 이 글꼴을 사용하기 위해 완성형 한글 코드를 HLaTeX의 한글 글꼴에 맞는 글꼴 번호와 그 인덱스로 변환해 주는 표를 이용하고 있습니다. 이 방법을 해결하기 위한 것이 Type 0 ``Composite'' 글꼴(OCF, Original Composite Font)입니다. 이는 여러개의 Type 1이나 Type 3 글꼴을 모아 계층적인 형태로 2바이트의 글꼴을 사용할 수 있도록 해 줍니다. 현재 상용으로 구현되어 있는 2바이트의 한글 글꼴은 이 방식을 취하고 있습니다. 이 글꼴의 문제는 글꼴의 크기가 크다는 것인데, 이는 대부분의 포스트스크립트 지원 프린터에서 미리 다운로드 할 수 없는 크기이며, 공개된 Type 0의 2바이트(8/8) 형태의 한글 글꼴이 존재하지 않습니다. 포스트스크립트 언어를 만들어 냈던 Adobe사는 CID-Keyed Font라는 새로운 글꼴 형식을 제안했는데, 이는 인코딩에 상관없이 글꼴을 제작할 수 있도록 하여 하나의 글꼴이 여러 인코딩에 사용할 수 있도록 하는 개념을 바탕으로 하고 있습니다. 바탕체를 이용한 공개 버전도 나와 있으며, 하나의 글꼴을 이용하여 유니코드, 완성형, 조합형 등의 여러가지 인코딩으로 사용할 수 있습니다.

hpscat은 독특한 한글 조합형 포스트스크립트 글꼴을 사용합니다. 이는 hpscat의 출력으로 나오는 포스트스크립트 프로그램 이전에 프린터에 로딩되어야 할 필요가 있는데, ghostscript를 사용하는 환경에서는 단지 먼저 글꼴을 출력하는 것만으로 충분합니다. 이 방법을 위해서는 미리 ghostscript를 수정할 수도 있고, h2ps와 같이 매번 글꼴을 출력하게 할 수도 있습니다. hpscat은 별도로 2바이트 한글 포스트스크립트 글꼴을 사용할 수 있습니다.

h2ps는 독특한 n바이트 한글 코드(ncode)에 기반을 둔 한글 포스트스크립트 글꼴을 사용합니다. 이는 크기가 작고 가독성이 높으며, 출력을 위해 별도의 조합 과정이나 여러 벌의 자소가 필요하지 않다는 장점이 있지만, 고정폭 글꼴을 제공하지 못하고, 널리 쓰이지 않는 코드를 사용한다는 장점이 있지만, 별도의 글꼴 로딩 없이 어느 포스트스크립트 프린터에서나 사용할 수 있는 프로그램이기도 합니다.

nh2ps는 HLaTeX의 미려한 한글 글꼴을 이용하고자 만들어진 프로그램이며, 기존의 a2ps에 기반을 두고 있습니다. 현재에는 Type 0의 한글 글꼴도 지원하도록 하고 있습니다. nh2ps를 사용하여 한글 문서를 출력하려면, 미리 ghostscript에서 글꼴을 읽을 수 있도록 등록을 해 주거나, 글꼴을 미리 다운로드 해 주어야 합니다. 글꼴을 다운로드 하는 작업은 쉽지 않은 관계로, 대부분의 경우 ghostscript를 통해 처리해 주어야 합니다.

유닉스에서 인터넷을 위해 가장 많이 사용하는 프로그램일 Netscape에서는 한글 문서의 출력을 지원합니다. 인코딩을 한글로 맞추고 출력을 하면 되지만, 여기에는 몇가지 문제가 있습니다.

이 문제를 해결하기 위해 nhpf와 nhppf라는 두가지의 프로그램이 존재합니다. 이 두 프로그램 모두 Save as...와 Print...의 포스트스크립트 출력 결과를 한글을 출력할 수 있는 형태로 잘 바꾸어 줍니다만, nhpf는 h2ps에서 사용하는 n바이트 한글 글꼴을 사용하고, KSC5601에서 한글 부분만 지원하며, nhppf는 nh2ps와 비슷한 졔약조건을 갖지만 KSC5601의 모든 글자를 나타낼 수 있습니다.

하지만, Print로 저장한 포스트스크립트 결과물의 경우 반드시 nhpf/nhppf를 거쳐야 할 필요는 없습니다. Type 0의 한글 글꼴을 사용할 수 있다면 문제가 없습니다만, 앞에서 말한 이유로 공개된 버전이 없다면 대안은 CID-Keyed Font밖에는 없지만, 이것도 마찬가지로 공개 버전에서는 한글만을 이용할 수 있다는 단점이 있습니다.

다른 방향으로 생각해 보면, 양질의 다른 글꼴을 포스트스크립트 글꼴로 사용할 수 있다면 문제는 달라질 것입니다. 그래서 만들어진 것이 gs-hfftype입니다. 이는 ghostscript를 수정하여 MS의 트루타입 한글 글꼴을 ghostscript를 사용하여 Type 0 한글 글꼴로 에뮬레이션을 하는 gs의 패치입니다. 이는 두가지의 큰 성과에 도움을 얻고 있는데, 하나는 공개 트루타입 래스터라이저인 FreeType Project이고, 다른 하나는 이를 사용하여 ghostscript에서 일본어를 처리하고자 한 gs-kfftype입니다. hfftype은 기본적으로 이 gs-kfftype에 기반을 두고 있으며, 한글 인코딩과 한글 글꼴 처리를 위한 부분을 추가한 것입니다. 이를 사용하면 트루타입 글꼴을 이용하여 Netscape의 문서를 출력할 수도 있고, Type 0 글꼴을 지원하는 hpscat이나 nh2ps에서 보다 다양한 글꼴을 사용하는 것이 가능합니다.

위의 논의와는 별도로, Adobe의 전자문서 포맷인 PDF(Portable Document Format)이 있습니다. 한글이 섞인 문서를 만들어 내는 것은 HLaTeX등을 사용하여 ghostscript를 사용하면 가능하지만, pdf의 특징 중 하나인 효율성을 살리지 못하는 경우가 많습니다. 한글 pdf를 만들려는 노력이 있습니다만, 아직 MS윈도우 환경에서 그치고 있습니다.

2.4 글꼴

X윈도우에서나 출력물을 위해서나, Linux등의 공개 유닉스에서 꼭 필요한 것이 공개된 한글 글꼴입니다. 잘 알려진 공개 X11용 글꼴에는 한양 글꼴과 조금 제한되기는 하지만 한양시스템의 웹바탕 등이 있습니다. X11R5이후는 기본적인 한글 글꼴로 대우가 기증한 명조와 고딕의 두가지가 있지만, 크기와 모양이 다양하지 못하다는 것이 단점입니다. 이 문제를 해결하기 위해서는

의 두가지 방법이 있습니다. HLaTeX의 한글 글꼴을 X의 비트맵으로 변환하는 SERI 글꼴의 예는 공개된 글꼴을 증가하고자 하는 노력이지만 손이 많이 가는 작업입니다. 다르게는 트루타입과 같은 다른 윤곽선 글꼴을 X11용 글꼴로 변환하는 방법도 생각해 볼 수 있습니다. ttf2bdf-k가 대표적인 예인데, FreeType Project를 이용하여 만들어진 프로그램 중에 ttf2bdf라는 트루타입을 X에서 사용하는 비트맵 글꼴로 바꾸어 주는 프로그램을 수정하여 한글 트루타입 글꼴에서 bdf포맷을 추출하는 일이 가능합니다.

출력물의 경우도 그리 다르지는 않아서, 공개된 CID-Keyed Font와 HLaTeX의 글꼴을 제외하면 양질의 글꼴이 많은 편은 아닙니다. 다만 현재는 gs-hfftype의 도움으로 공개된 한글 트루타입 글꼴(대부분 한글만 갖고 있지만)을 사용할 수 있습니다.

트루타입 글꼴을 사용할 때 가장 주의해야 하는 것이 바로 저작권 문제입니다. 이 글꼴을 다른 OS, 특히 유닉스에서 사용할 수 있는지, 정해진 용도가 아닌 다른 용도로 사용해도 되는지에 관한 문제입니다. 대략적으로 볼 때 Bitstream이 Cyberbit가 가장 적당한 글꼴이라고 생각합니다.


다음 이전 차례