[nh2ps - 한글 a2ps]
  ------------------------------------------------------------------------
최준호(junker@jazz.snu.ac.kr)
전산과학연구회 나래, 서울대학교 전산과학과 분산시스템연구실

  ------------------------------------------------------------------------
nh2ps는 기존의 a2ps 4.3에 한글 출력기능을 덧붙인 것입니다. 중요한 특징은
다음과 같습니다.

   * KS C5601-1987기준의 모든 한글/한자/기호문자 출력가능
   * HLaTeX-0.95와 0.96, 0.961, 0.97버전의 한글 포스트스크립트 폰트 사용
     가능
   * 한글 포스트스크립트(Type 0 Composite)폰트 사용 가능

출력은 기존의 영문 a2ps 4.3과 완벽히 호환되며, 옵션도 영문 a2ps의 것들을
모두 사용할 수 있으며, 한글폰트의 지정이 가능합니다. 한자출력은 HLaTeX폰트를
사용하는 경우 옵션이며, 한글 PS폰트를 사용하는 경우에는 폰트에 한자가 들어
있는 경우에는 표시됩니다.

일지

   * 버전 2.3.1(98/10/20)
     ^H이후에 이어지는 backspace나 underline처리에 있어 원본 a2ps에서
     무한루프에 빠지는 문제가 있었습니다. 황재준(jaejunh@mars.kma.re.kr)님께
     감사드립니다.
   * 버전 2.3(98/7/14)
        o 실행시 종이크기 지정 가능(A4/Letter). -a옵션을 잘 보세요.
        o 컴파일시에 기본 종이를 선택할 수 있습니다(A4/Letter). Makefile을
          읽어보세요.
        o CID/Type0 OCF 폰트 모드가 기본입니다. 이전처럼 HLaTeX모드로
          사용하려면 Makefile을 읽어보세요. 기본 폰트는
          Munhwa-Regular-KSC-EUC-H입니다.
   * 버전 2.1p1(98/3/31) 일부 글자 깨지는 현상 막음
     황재준(jaejunh@mars.kma.re.kr)님께 감사드립니다.
   * 버전 2.1(98/1/20) 한글 포스트스크립트 폰트 사용 기능 추가
   * 버전 2.0(97/6/23) HLaTeX-0.96의 PS폰트 사용으로 KSC5601의 모든 문자
     출력 가능
   * 버전 1.0p1(97/1/31) 한글/한자 이외 KS C 5601특수문자 처리
     버그수정(안찍도록)
     최종환(saxboy@shiva.snu.ac.kr)군에게 감사드립니다.
   * 버전 1.0(97/1/28) 한글/한자출력기능, 폰트갯수 최적화
     스크립트(nh2ps_opt)

  ------------------------------------------------------------------------

구조

nh2ps는 출력을 위해 두가지의 한글 폰트를 사용할 수 있습니다.

   * HLaTeX-0.95/96/97의 한글 포스트스크립트 폰트
   * Type 0 Composite(2바이트 완성형 인코딩) 또는 CID-Keyed
     Font(KSC-EUC인코딩)으로 구성된 한글 포스트스크립트 폰트

전자는 Netscape 한글출력 필터인
nhppf(http://jazz.snu.ac.kr/~junker/work/nhppf)에서 사용하는 것과 같습니다.
이 폰트는 공개되어 있고, 비교적 다양한 선택이 가능한 반면에, 폰트가 크기
때문에 미리 폰트를 설치해야 한다는 단점이 있습니다.

후자는 한글 포스트스크립트 프린터에 내장되어 있는 경우인데, 폰트 형태는 Type
0 Composite Font로, 2바이트 인코딩(완성형)을 허용하는 포스트스크립트 폰트의
특이한 형태 또는 CID-Keyed Font 중 KSC-EUC인코딩(완성형)을 갖는 것입니다. 둘
다 완성형 한글 코드를 따르는 것이어야 합니다. Type 0의 경우 공개된 한글
폰트에는 HLaTeX의 것을 Type 0로 변환한 것이 있는데, 이 글꼴에 대해서는
Ghostscript와 한글 페이지에서 한글 포스트스크립트 글꼴에 대한 내용을 보시면
됩니다. CID-Keyed font의 경우 Adobe에서 공개된 것이 있지만, 이 경우 한자나
기호를 사용할 수 없습니다, 또 한가지 방법은 윈도우95/NT에서 사용하는 한글
트루타입 폰트를 사용해서 이 폰트를 에뮬레이트하는 것입니다. 이 방법에
대해서는 "FreeType을 이용한 Ghostscript에서의
한글처리"(http://jazz.snu.ac.kr/~junker/work/gs-ko/gs-ko-freetype.html)를
참조하세요.

a2ps는 필터의 기능을 수행할 수 있도록 고안되었습니다. 따라서 읽어들이는
표준입력 스트림을 그대로 출력할 수 있도록 설계되었기 때문에 HLaTeX폰트를
사용하는 경우 nhppf에서 보여주는 것과 같은 폰트갯수 최적화 기능을 프로그램
본체에 집어넣을 수 없었습니다. 이 문제는 한자를 사용하고자 하는 경우에
시스템에 커다란 무리가 가고, ghostscript를 사용하는 시스템의 경우 Memory
fault를 일으킬 수도 있습니다. 따라서 한자를 사용하는 경우에 문제가
발생한다면 외부 필터로 만들어진 폰트갯수 최적화 필터(nh2ps_opt)를 같이
사용하시기 바랍니다. 버전 2.0에서는 메모리를 조금 적게 쓰도록 하였기 때문에
제 시스템에서는 이 최적화기 없이도 처리가 가능하였습니다만, 적은 메모리를
가진 시스템에서는 문제가 발생할 수도 있습니다. nh2ps_opt는 nh2ps의 버전업에
따라 새로 구성되었습니다. CID-keyed 폰트나 Type 0폰트를 사용하는 경우에는
nh2ps_opt를 사용해야 할 필요는 전혀 없습니다.

2.0에서는 HLaTeX 0.95폰트를 사용했던 1.0과 달리 폰트수의 제한이
없어졌습니다. 따라서, 한글과 한자 그리고 기호까지 포함한 KSC5601의 모든
심볼을 표시할 수 있습니다. 한자나 기호문자를 출력하지 않는 경우, 아스키의
0x20번 이하는 M-<8비트를 잘라낸 문자>로, MSB가 셋업된 경우에는, 심볼 폰트가
있다면 "□"으로, 아닌 경우에는 그 문자의 hex코드가 출력됩니다. a2ps의 옵션
중 -nv를 사용하면 0x20 이하의 문자들만 빈칸으로 표시하게 할 수 있다는 것에
유의해 주십시오.
  ------------------------------------------------------------------------

설치

사전요구사항

nh2ps를 컴파일하기 위해서는 반드시 K&R C컴파일러와 make가 필요합니다. 그리고
폰트갯수 최적화 필터 nh2ps_opt를 사용하려면 Perl 4.036이상이 필요합니다.
HLaTeX폰트를 사용하지 않고, CID-Keyed폰트나 Type 0폰트만을 사용할 경우에는
nh2ps_opt를 설치할 필요는 없습니다. nh2ps_opt도 문제가 생기는 경우에만
사용하세요. 최근에는 컴퓨터가 좋아서 별로 필요하지 않습니다.

컴파일

컴파일은, 먼저 mkpsfontmap.pl과 nh2ps_opt의 두 파일 앞을 보아서, perl의
정확한 위치를 확인해 주세요. 기본값은 /usr/local/bin/perl인데, 시스템에 따라
/usr/bin/perl(대부분의 리눅스와 FreeBSD 시스템)일 수도 있고, 관리자가 perl을
설치한 위치에 따라 다를 수 있습니다. 보통 perl의 위치를 알아보려면,

% which perl

해보는 것도 좋은 방법입니다.

다음은, Makefile을 참고하여 CFLAGS를 수정하고 난 후에 make를 하면 됩니다.
대부분의 경우 그대로 컴파일하면 됩니다. flag중 -DHFONT는 꼭 넣어 주어야
합니다. 안에 종이 크기나 기본 모드(HLaTeX폰트 모드, PS폰트 모드)를 지정하는
방법도 들어있습니다. 컴파일에 대한 자세한 사항은 배포본 안의 README.a2ps를
참고하세요. 그러나 거의 기본 설정대로 컴파일해도 좋습니다. nh2ps_opt는
Perl스크립트이 때문에 컴파일하지는 않습니다만, Perl이
/usr/local/bin/perl이라는 이름으로 되어 있지 않은 경우에는 nh2ps_opt를
에디터로 불러 1행에 있는 패스를 perl이 존재하는 패스로 바꾸어 주시기
바랍니다. 대부분의 시스템에서는 설정을 바꿀 필요가 없습니다.

# make

설치는 이어서 make install을 해 주면 됩니다.

# make install

nh2ps와 nh2ps_opt가 설치됩니다. 매뉴얼 페이지도 같이 설치하려면 다음과 같이
합니다.

# make install.man

폰트

폰트의 설치는, nhppf의 경우와 같으므로, nhppf와nh2ps를 위한 HLaTeX 한글
PS폰트 설치(http://jazz.snu.ac.kr/~junker/doc/hlatex-psfont-install.html)를
참고하시기 바랍니다. 배포본에는 README.font라는 이름으로 되어 있습니다.
  ------------------------------------------------------------------------

프로그램 소스

   * nh2ps-2.3.1
   * ftp://jazz.snu.ac.kr/pub/unix/util/nh2ps/nh2ps-2.3.1.tar.gz

  ------------------------------------------------------------------------

사용법

사용법은 기존의 a2ps와 완전히 같고, 여기에 한글관련 내용을 첨가하였습니다.

nh2ps [전체옵션] [파일옵션] 파일 [[파일옵션] 파일] ...

추가적으로 한글버전에 추가된 사항만을 설명하겠습니다.

HLaTeX의 한글 PS폰트를 사용하는 경우

nh2ps는 2.3버전부터 그대로 컴파일하면 CID/Type 0폰트를 사용하도록
바뀌었습니다.기본적으로 HLaTeX의 한글 폰트를 사용하려면 Makefile에서
DEFAULT_HLATEXFONT_MODE를 정의하고 컴파일하세요. HLaTeX폰트를 사용할 경우와
CID/Type 0폰트를 사용하는 경우에 출력은 서로 호환이 되지 않으므로,
사용하고자 하는 폰트 종류에 따라 맞는 옵션을 사용해야 합니다.

-KPH
     HLaTeX의 한글 폰트를 사용할 것을 지정합니다.
-KHF한글폰트이름
     폰트이름은 여러분이 어떤 폰트를 설치하였느냐에 따라 달라질 수 있습니다.
     기본값은 Myoungjo입니다.
-KHS한글폰트모양
     폰트모양은 여러분이 지정한 폰트에 따라 달라질 수 있습니다 기본값은
     Regular.
-KJF한자폰트이름
     폰트이름은 여러분이 어떤 폰트를 설치하였느냐에 따라 달라질 수 있습니다.
     기본값은 Myoungjo.
-KJS한자폰트모양
     폰트모양은 여러분이 지정한 폰트에 따라 달라질 수 있습니다 기본값은
     Normal.
-KSF기호폰트이름
     폰트이름은 여러분이 어떤 폰트를 설치하였느냐에 따라 달라질 수 있습니다.
     기본값은 Myoungjo입니다.
-KSS기호폰트모양
     폰트모양은 여러분이 지정한 폰트에 따라 달라질 수 있습니다 기본값은
     Normal.
-KJD/-KJd
     한자처리를 하도록(하지 않도록) 합니다. 이 옵션이 지정되면 한자 폰트가
     지정이 됩니다. 메모리 문제가 생긴다면 nh2ps_opt와 같이 사용하세요. 이
     경우 다음과 같이 하면 됩니다.

            # nh2ps -KJD aaa.txt | nh2ps_opt | lpr


     한글만을 사용할 때에는 nh2ps_opt를 사용하는 경우는 거의 없을 것입니다.
     그 이유는 한글폰트는 거의 모두를 사용하기 때문입니다. nh2ps_opt의
     역할은 단지 사용하지 않는 한글/한자/기호폰트를 처음부터 부르지 않도록
     하는 것입니다. 사용하지 않아도 문제가 생기지 않는다면, 사용하지 않는
     편이 좋습니다.
-KSD/-KSd
     기호문자 처리를 하도록(하지 않도록) 합니다. 이 옵션이 지정되면 기호
     폰트가 지정이 됩니다. 기본값은 -KSD인데, 아래의 -K5옵션을 지정하면
     기본값이 -KSd가 됩니다. 하지만 HLaTeX-0.95에서 기호 폰트를 사용하고
     싶다면, -K5뒤에 -KSD를 다시 지정해서 기호 폰트를 사용할 수 있습니다.
     물론 기호 폰트가 설치가 되어 있어야 합니다.
-K5/-K6
     HLaTeX-0.95(0.96이상)의 PS폰트 이름을 따릅니다. 기본값은 -K6입니다.
     -K5를 지정하면 -KJd옵션이 자동적으로 지정됩니다. 그 이유는
     HLaTeX-0.95의 포스트스크립트 폰트에는 기호문자가 없었기 때문입니다.

CID-keyed/Type 0의 한글 포스트스크립트 폰트를 사용하는 경우

이 폰트를 사용하고자 하는 경우에는 반드시 -KPS 옵션을 주어야 합니다.

-KPS
     nh2ps의 출력이 CID-keyed/Type 0폰트를 사용하는 출력이 되도록 합니다. 이
     옵션을 주어야만 이런 폰트를 사용할 수 있는 것입니다.
-KPF한글폰트이름
     CID-keyed/Type 0 폰트의 PS폰트 이름을 따릅니다. 기본값은
     Batang-Medium-KSC-EUC-H입니다. 이 옵션을 사용해서 원하는 값으로 바꾸어
     주기 바랍니다. 이 옵션은 -KHF와는 다르며, -KPS옵션을 주지 않는 경우
     아무런 효과도 없다는 것에 주의하시기 바랍니다.
-KPW숫자
     한글 폰트의 폭 비율을 조정합니다. 이는 한:영비를 2:1로 정확히 맞추고자
     할 때 사용하는데, 기본값은 1.2이며, 이 값는 사용하는 폰트에 따라 다를
     수 있습니다. 1.2라는 값의 기준은 트루타입 폰트 중 바탕체를 PS폰트로
     사용할 경우의 값이며, 다른 폰트를 사용하는 경우에는 다를 수 있습니다.
-KJD/-KJd
     한자처리를 하도록(하지 않도록) 합니다. 이 옵션이 지정되면 한자 출력을
     합니다.

            # nh2ps -KJD aaa.txt | lpr


-KSD/-KSd
     기호문자 처리를 하도록(하지 않도록) 합니다. 이 옵션이 지정되면 기호
     출력을 합니다. 기본값은 -KSD입니다.

출력은 포스트스크립트 프로그램이 표준출력으로 나옵니다. 이 프로그램을
사용하는 가장 일반적인 경우는 lpr등의 프린터 프로그램으로 보내거나, PS파일로
저장하는 것입니다.

% nh2ps -KHFGraphic aaa.txt | lpr
% nh2ps aaa.txt > aaa.ps

위의 경우 HLaTeX의 Graphic폰트가 설치되어 있어야 하며, 거의 모든 경우
GhostScript에 의해 필터링을 해서 찍어야 합니다. 폰트이름이나 모양을 지정하는
경우에는 반드시 옵션과 붙여 써야만 하는 것을 주의하세요. lpr이라고 단순하게
쓰고 말았는데, 실제로는 gs로 필터링를 사용할 수 있는 환경이어야 합니다. 그
방법중 가장 좋은 방법은
고스트스크립트(http://www.cs.wisc.edu/~ghost/index.html)에 폰트를 읽어들일
수 있도록 하고 필터링을 하여 출력하는 것입니다. 이 방법에 대해서는
고스트스크립트를 통한
프린트(http://jazz.snu.ac.kr/~junker/doc/gsfilter.html)를 읽어보시기
바랍니다.

개인적으로 생각하건대, HLaTeX 폰트 중에는 그래픽 체가 가장 잘 어울리지만,
명조 폰트의 경우를 기준으로 하면 한영비가 정확히 2:1이 됩니다. 궁서나 옛글,
그리고 목각체 등 Bold만 있는 폰트를 사용하는 경우에는 -B옵션을 주어 영문도
bold체로 하여 쓰시면 잘 어울립니다. Type 0폰트의 경우에는 트루타입
드라이버를 사용하는 바탕체나 굴림체가 적당합니다.

HLaTeX폰트를 사용하는 경우

한자를 쓰고자 하는 경우에는 -KJD옵션을 주시기 바랍니다.

% nh2ps -KJD inhanja.txt > inhanja.ps

메모리 문제로 찍지 못하거나 하는 일이 있다면 nh2ps_opt와 함께 씁니다.

% nh2ps -KJD inhanja.txt | nh2ps_opt > inhanja.ps

HLaTeX-0.95의 옛 폰트이름 짓는법을 사용한다면 -K5옵션을 주기 바랍니다.

% nh2ps -K5 han.txt > han.ps

-K5옵션을 사용할 때 한자까지 출력하는 경우에는 반드시 한자폰트 모양으로
Regular를 지정해야 합니다. 그렇지 않으면 출력이 되지 않습니다.

% nh2ps -K5 -KJD -KJSRegular han.txt > han.ps

CID/Type 0폰트를 사용하는 경우

이 폰트를 사용하는 경우에는 -KPS옵션을 반드시 주어야 합니다.

% nh2ps -KPS hangul.txt > han.ps

폰트 이름을 별도록 지정하고 싶다면 -KPF옵션을 주세요. 폰트 폭의 한영비가
다른 경우에는 이 값을 알맞게 조정해 주어야 합니다.

% nh2ps -KPS -KPFMunhwa-Regular-KSC-EUC-H hangul.txt > han.ps

  ------------------------------------------------------------------------

관련 이야기

다른 한글 -> 포스트스크립트 변환기

한글 텍스트를 포스트스크립트로 출력하게 해 주는 프로그램에는 hpscat,
h2ps등의 프로그램이 있습니다. 이 프로그램은 모두 cair-archive의 한글
디렉토리에서 구할 수 있습니다. hpscat는 조합방식의 한글폰트를 사용하는
관계로 nh2ps와 같이 한글폰트를 따로 설치해야 합니다. 그러나 폰트의 설치가
비교적 복잡하고, 출력의 질이 그리 좋지 않다는 것이 단점입니다. 대신 hpscat은
CID/Type0의 한글 포스트스크립트 폰트를 사용할 수 있도록 컴파일할 수
있습니다. h2ps는 사용하기도 쉽고, 설치도 쉬우며, 폰트를 출력에 내장시키기
때문에 별도의 폰트설치 없이 어느 포스트스크립트 프린터에서도 찍을 수 있다는
것이 장점인 반면에 고정폭 글자체가 아니라는 단점을 안고 있습니다. nh2ps는
hpscat과 비슷한 것을 목표로 하고 있지만, 출력에서 a2ps가 가지는 미려함을
이용하고, 보다 다양한 폰트로 예쁜 출력을 하려는 데 목표가 있습니다.

a2ps의 현재

a2ps 는 현재 프랑스의 Akim Demaille < demaille@inf.enst.fr > 씨가 관리하고
있습니다. nh2ps의 기반이 된 4.3버전에 정말 이루 말할 수 없이 많은 기능을
추가하여(Latin-2지원, 컬러지원, 30여개 이상의 각 언어에 대해 syntax
hilighting등) 아주 훌륭한 다국어 지원 프로그램이 되었습니다. 이 프로그램은
GNU gettext를 이용한 국제화 메시지를 지원하는데, 한글 메시지도
나옵니다(번역은 제가 하였습니다). 그러나, a2ps의 출력이 한글을 지원하지 않는
관계로, 출력물에서 한글을 볼 수는 없지만, 도움말이라든가 도중의 출력
메시지는 한글이 나옵니다. nh2ps도 업그레이드하면서 a2ps의 새 버전에 맞추려
했지만, 새 a2ps가 워낙 복잡한지라(소스만 1메가가 넘습니다 :> )고칠 엄두를
내지 못하고 메시지만 번역해 두고 말았습니다. a2ps가 2바이트 인코딩을
지원하고, 2바이트로 직접 이용할 수 있는 새 한글 폰트가 나올 때까지는 a2ps의
한글 직접지원은 어려운 일일 것입니다. 앞으로는 이 새 a2ps에 기반해서 nhppf와
같은 필터를 만들려고 하고 있습니다.
  ------------------------------------------------------------------------

단점

근본적인 단점은 HLaTeX폰트를 사용하는 경우 nhppf와 마찬가지로 완성형 폰트를
사용하기 때문에 폰트를 로딩해야 하는 양이 많고, 포스트스크립트 프린터의
경우에는 미리 폰트를 다운로드해 주어야 한다는 것입니다. 폰트 다운로드는
보통의 레이저 프린터에서는 불가능할 것입니다. 이럴 때에는 포스트스크립트
출력이 가능하더라도 gs를 거쳐 출력하시기 바랍니다. 한자를 지원하지만, 한자를
위해서는 한자폰트 20여벌이 따로 필요한 관계로, -KJD옵션을 주었을 때만
표시되도록 하였습니다. 게다가 앞에서 말한 폰트갯수 최적화가 불가능한 관계로
한자 출력시 메모리 문제가 생기면 별도의 필터가 필요한 단점을 안고 있습니다.
CID/Type0폰트를 사용하는 것은 시간상이나 용량상 좋은 방안이지만, 공개된
폰트가 CID의 문화부 폰트(한글만 출력가능)밖에 없는 관계로 한자나 기호등을
표현하려면 트루타입 폰트로 에뮬레이션을 해야 할 필요가 있으며, 이 때에는
gs를 패치해서 다시 설치해야 한다는 것이 단점입니다.
  ------------------------------------------------------------------------

기타

한글폰트를 만들고, HLaTeX을 만드시는
은광희님(zraun01@sunap3.zdv.uni-tuebingen.de)에게 감사를 표합니다. 이 폰트의
아이디어에서 쉽게 프로그램을 작성할 수 있었습니다.

  ------------------------------------------------------------------------
Total [Image] times accessed since 1997/6/23

http://jazz.snu.ac.kr/~junker/work/nh2ps/index.html
CHOI Junho <junker@jazz.snu.ac.kr>
$Id: README.nh2ps,v 2.5 1998/10/20 11:29:02 junker Exp $

  ------------------------------------------------------------------------
                            [Jazz | CHOI Junho]
