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

----------------------------------------------------------------------------
nhppf는 유닉스용 넷스케이프 3.0버전에서 한글 포스트스크립트 폰트가 있는
프린터가 없는 경우에 한글이 들어있는 문서를 출력하기 위한 목적으로 만들어진
것입니다. 특징은 다음과 같습니다.

   * Netscape 3.x/4.01버전의 Print/Save As명령의 출력결과를 필터링[Image]
   * HLaTeX-0.95/96/97의 폰트 사용으로 KSC5601-1987기준의 모든 문자 출력
     가능

버전에 따른 변경사항

현재 버전은 2.1입니다. 새 버전에 따른 변경사항은 이 글(ChangeLog)을
읽어주시기 바랍니다.
----------------------------------------------------------------------------

기능

nhppf는 출력을 위해 HLaTeX-0.95/0.96[1]/97의 한글 포스트스크립트 폰트를
사용합니다. HLaTeX-0.95에서는 5가지의 한글폰트가 제공되며(명조, 고딕,
그래픽, 궁서, 목각, 옛글), 0.96/97에서는 이보다 훨씬 많은 종류의 폰트를
제공하며, 비교적 미려한 포스트스크립트 타입 1방식의 한글폰트가 제공됩니다.
다만 완성형이기 때문에, 한글의 경우 폰트가 10개, 한자의 경우 20개, 심볼의
경우 3개(HLaTeX-0.96/97의 경우)로 나누어져 있습니다. 이 폰트를 이용하여 생길
수 있는 단점은 포스트스크립트 프린터의 경우 미리 폰트를 다운로드 해야 한다는
것과, gs를 사용하여 출력을 하는 경우 미리 폰트를 설치해야 한다는 것입니다.
이 한글폰트에 대한 자세한 사항은 CTAN의 HLaTeX의
문서(ftp://sunsite.snu.ac.kr/pub/packages/TeX/languages/korean/HLaTeX/hlguide.ps)(SunSITE
Korea)에서 알 수 있습니다. HLaTeX의 새 버전인 0.96/97에서는 한자폰트뿐만
아니라 새로 심볼도(전각, 약물, 선문자 등)도 들어 있어서 이제 KSC5601의 모든
글자가 표현 가능합니다.

또한, 폰트 로딩의 부담을 줄이기 위해서 2패스 방식을 사용합니다. 이것으로
인해 얻을 수 있는 장점은, 10개의 한글 폰트와 20개의 한자폰트, 그리고
추가적으로 3개의 심볼 폰트 중 사용하는 것만 로딩하여 시간을 절약할 수 있다는
것입니다. 또한 한자와 심볼에 대한 처리를 하지 않게 할 수도 있습니다. 이 경우
나타나지 않는 글자들은 모두 별도의 문자로 처리됩니다(심볼 폰트를 사용하는
경우에는 "□"으로, 아닌 경우에는 그 문자의 hex코드가 출력됩니다).

pre나 tt태그에서 나오는 고정폭 폰트를 맞추기 위해 노력을 많이 했는데도
실제로 잘 맞지 않는 부분이 있을 수 있으며, 폰트에 따라 달라질 수 있습니다.
하지만 명조(한글, 한자, 심볼)을 쓰는 경우에는 정확하게 맞도록 조정해
놓았습니다. 이제 선문자가 들어간 문서들이라도 정확하게 찍을 수 있습니다!
찍을 수 있는 모든 글자들을 보고 싶은 경우 문자 리스트(ksc5601-char-list)를
찍어 보시기 바랍니다.
----------------------------------------------------------------------------

설치

  1. nhppf본체
     설치는 매우 간단합니다. nhppf를 여러분의 실행경로 중 하나의 디렉토리에
     복사합니다. nhppf는 Perl로 짜여져 있으므로, 미리 Perl이 설치되어 있어야
     합니다. Perl은 CPAN미러 사이트에서 구할 수 있으며, 프로그램 작성에
     사용된 버전은 5.004입니다. 4.036등의 이전 버전에서는 동작하지 않습니다.
     예를 들면 다음과 같이 하면 됩니다(루트의 권한으로). 그리고 nhppf파일
     가장 앞부분에 perl의 경로등을 지정하는 부분이 있고, 조금 아래에 기본
     폰트 이름이나 스타일을 고칠 수 있는 부분이 있는데, 기본값을 바꾸고
     싶다면 그 부분을 고치면 됩니다.

       # cp nhppf /usr/local/bin

  2. 폰트
     폰트의 설치는, HLaTeX-0.95나 0.96/97의 포스트스크립트 폰트를 설치하는
     일을 말하는 것입니다. 이 일에 대해서는 HLaTeX의 설치
     가이드(ftp://ftp.kreonet.re.kr/pub/CTAN/languages/korean/HLaTeX/readme.ks)에서
     포스트스크립트 폰트에 대한 부분을 읽어보시기 바랍니다. 두 버전의
     차이는, 순서는 같지만 몇몇 폰트 이름이 차이가 나는 것 뿐입니다. 두 버전
     중 하나만 설치하면 되며, 되도록이면 0.96/97의 폰트를 설치하시기
     바랍니다.

     심볼과 한자까지 설치하면 모든 글자를 다 볼 수 있지만, 다양한 서체를 다
     설치하면 용량이 많이 드므로, 위 가이드를 참고하여서 필요한 폰트만
     설치하시기 바랍니다. 한가지 글꼴(한글 명조/한자 명조/심볼 명조)만
     설치하는 것이 가장 간단한 방법일 것입니다. 하지만 올바른 동작을
     위해서는 최소한 한글 폰트 한가지는 있어야 합니다. 모든 폰트가 하나의
     tar에 들어있는 0.95버전과는 달리 0.96/97버전에서는 원하는 폰트만 설치할
     수 있으므로 더욱 편리할 것입니다.

     포스트스크립트 프린터의 경우에는 gs에 해당하는 과정을 생략하고 폰트를
     다운로드하면 됩니다. 그 과정은 프린터마다 다를 수 있습니다. 하지만
     근처에 이런 프린터가 없어서 실제로 해 보지는 못했습니다.

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

프로그램 소스

프로그램은 Perl소스 하나입니다.

   * nhppf-2.1 (프로그램 본체)
   * ftp://jazz.snu.ac.kr/pub/unix/util/nhppf (프로그램 본체, Jazz FTP)
   * ftp://ftp.nuri.net/pub/hangul/tex/HLaTeX/fonts(누리넷)
   * ftp://ftp.kreonet.re.kr/pub/CTAN/fonts/korean/HLaTeX(KREONET) (한글폰트
     - HLaTeX-0.97에서)
   * PS-HLaTeX-pfb.tar.gz(한글폰트 - HLaTeX-0.95에서, Jazz FTP)

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

사용법

사용법은 1.x버전보다 조금 복잡해진 감이 있습니다만, 되도록이면 이전 버전과의
옵션간 호환성을 유지하려고 했습니다.

사용법: nhppf [옵션] 파일.ps

 -hfn, -hanfont, --hangul-font    한글 폰트 이름을 지정합니다(기본값
                                  Myoungjo).

 -hjfn, -hanjafont, --hanja-font  한자 폰트 이름을 지정합니다(기본값
                                  Myoungjo).

 -sfn, --symbol-font              심볼 폰트 이름을 지정합니다(기본값
                                  Myoungjo).

 -hst, --hangul-font-style        한글 폰트 모양을 지정합니다(기본값
                                  Regular).

 -hjst, --hanja-font-style        한자 폰트 모양을 지정합니다(기본값
                                  Normal).

 -sst, --symbol-font-style        심볼 폰트 모양을 지정합니다(기본값
                                  Normal).
 -nh, -nohanja, --with-no-hanja   한자를 처리하지 않습니다.
 -s, --with-symbol                심볼문자를 처리합니다.
                                  심볼문자를 처리하지 않습니다. 해당하지
 -ns, --with-no-symbol            않는 문자들은 모두 16진수 코드로
                                  나타납니다.
 -95, --with-hlatex-0.95-ps-fonts HLaTeX-0.95의 PS폰트 이름을 따릅니다.
 -96, --with-hlatex-0.96-ps-fonts HLaTeX-0.96의 PS폰트 이름을 따릅니다.
 -V, --version                    버전 정보를 출력하고 종료합니다.

입력은 Netscape에서 Print(인쇄)또는 Save As(다른 이름으로 저장)명령으로
출력한 포스트스크립트 파일이며, 출력 또한 포스트스크립트 파일이며,
표준출력으로 나옵니다. 기본적으로 HLaTeX-0.96의 폰트이름 방법을
사용하며(이것은 0.97에도 적용됩니다), HLaTeX-0.95의 PS폰트를 설치해 사용하는
경우(기존에 nhppf 1.x를 쓰고 있었고 새로 2.0버전만 설치한 경우)에는
-95옵션을 주어야 합니다. 이 필터를 사용하는 가장 일반적인 방법은 Netscape의
"Print"명령의 출력명령 필드에 다음과 같이 쓰는 것입니다.
 nhppf | lpr

또한 다른 방법은 "File(파일)"메뉴의 "Save As(다른 이름으로 저장)"메뉴를
택해서 포맷을 "PostScript(포스트스크립트)"로 정하고 저장된 파일을 필터링해서
찍는 것입니다.
 nhppf save-as.ps | lpr

폰트를 새로 설치하지 않았다면 -95옵션을 줍니다. 이 옵션은 --with-no-symbol을
포함합니다.
* 주의: 한자 이름의 경우 스타일 이름이 'Regular'가 되어야 하나, 그렇게 적어
주지 않습니다. 따라서 한자를 같이 쓰고자 하는 경우(--display-hanja)에는
`--hanja-font-style Regular'의 옵션까지 같이 주시기 바랍니다. 그렇지 않으면
한자의 출력이 되지 않습니다.
 nhppf -95 | lpr
 nhppf -95 --display-hanja --hanja-font-style Regular | lpr

폰트 이름을 바꾸고 싶다면 --hangul-font등의 옵션을 씁니다. 다음은 궁서체로
출력하고 싶을 때의 예입니다.
 nhppf --hangul-font Gungseo --hangul-font-style Bold --hanja-font Gungseo
 | lpr

영문 폰트는 바꾸지 못한다는 것에 주의하시기 바랍니다. 또한 궁서체와 같은
경우는 반드시 폰트 스타일을 Bold를 주어야 하는데, 폰트에 따라서 선택할 수
있는 스타일이 달라지므로, 고스트스크립트를 설치할 때 사용하였던
Fontmap파일을 읽어 보고 폰트에 따라 알맞은 Fontmap을 지정하기 바랍니다.

위 경우는, lpr에서 고스트스크립트를 통한 필터링 처리를 해 준다는 것을
의미합니다. 만약 그렇지 않은 경우에는, gs를 통한 필터 처리를 해 주는 다음의
몇몇 유틸리티중 하나를 설치하기 바랍니다.

   * apsfilter-4.9.1(ftp://ftp.kreonet.re.kr/pub/Linux/sunsite/system/printing/aps-491.tgz)
   * magicfilter-1.2(ftp://ftp.kreonet.re.kr/pub/Linux/sunsite/system/printing/magicfilter-1.2.tar.gz)

이 프로그램들은 리눅스가 아닌 시스템에서도 얼마든지 사용할 수 있습니다. 가장
잘 어울리는 시스템은 BSD lpr을 가진 시스템이지만, System V프린트 시스템을
가진 솔라리스에서도 사용할 수 있고, magicfilter의 경우 filter프로그램을
단독으로 사용할 수도 있습니다. 만약 여러분이 magicfilter를 설치하고, 필터 중
원하는 프린터의 필터를 골랐다면, lpr이나 lp시스템에 필터를 넣지 않은 경우에
다음과 같이 쓸 수도 있을 것입니다(여기서는 LaserJet 4을 가정합니다).
 nhppf | ljet4-filter | lp

한글 도움말 지원

-h, -help, --help를 옵션으로 지정하면 간단한 도움말을 볼 수 있습니다.
LANG환경변수의 값이 ko(ko, ko_KR, korean, ko_KR.EUC, ko_KR.euckr.
ko_KR.deckorean)등의 한글환경이면 도움말은 한글로, 이외의 경우에는 영어로
출력합니다.
----------------------------------------------------------------------------

관련 프로그램

이미 nhpf라는 한글필터가 있습니다(이용재, yjlee@cglab.snu.ac.kr). 이것은
넷스케이프의 Save as메뉴와 Print메뉴 둘 다의 경우 저장한 문서를 찍을 수 있는
기능을 가지고 있으며, 굵은 글씨등의 글꼴 변환을 지원합니다. 이 프로그램은
이용재님의 세벌식 ncode를 사용하며, Type1폰트가 필터링의 결과에 내장되어
별도의 폰트 준비 없이도 어느 포스트스트립트 프린터에서도 찍을 수 있습니다.
이 프로그램은 n3f폰트가 가변폭이 관계로 고정폭이 필요한 부분에서는 줄이
맞추어지지 않는다는 단점이 있습니다.

   * nhpf: http://cglab.snu.ac.kr/~yjlee/n3f/applications/nhpf.html

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

관련 이야기

nhppf의 근본적인 단점은 완성형 폰트를 사용하는 관계로 폰트를 로딩해야 하는
양이 많고, 포스트스크립트 프린터의 경우에는 미리 폰트를 다운로드해 주어야
한다는 것입니다. 한자를 지원하지만, 한자를 위해서는 한자폰트 20여벌이 따로
필요한 관계로, --with-no-hanja옵션을 주어 한자의 처리를 정하도록 하였습니다.
만일 한자가 필요없거나 용량이 없어서 한자폰트를 설치하지 못하였다면
--with-no-hanja옵션을 주도록 하십시오.

넷스케이프의 Print와 Save as의 차이는 몇가지 출력상의 차이를 낳습니다.
Print에서는 영어와 그렇지 않은 다른나라 언어를 구별하여
출력합니다만(우리나라의 경우 SMgoJ라는 한글 포스트스크립트 폰트를
사용합니다), 굵은글씨나 기울인 서체등에 대한 정보가 삭제되어 버립니다.
이때문에 nhppf는 "Print"명령에서 사용하는 경우에 <b></b>나 <i></i>,
<H1></H1>등에서 사용하는 굵은 글씨나 기울임체를 인식할 수 없습니다. 하지만
"Save As"명령에서 사용하는 경우에는, 이제 기울임/강조/기울임 강조와 같은
모든 형태의 글자 출력이 가능합니다. 이 방법은, 기울임 폰트의 경우
포스트스크립트 폰트 정의에서 변환 행렬을 바꾸는 것으로, 강조 폰트는
HLaTeX-0.97에서 \usepackage[pshan]{hangul}을 사용하였을 때의 강조 폰트
출력에 대한 dvips의 포스트스크립트 출력을 분석하여 얻을 수 있었습니다. 이
방법은 다른 필터 - a2ps등 - 에서도 활용할 수 있을 것입니다. Save as에서 PS로
출력한 결과를 필터링하는 경우에는 이 메뉴가 저장하는 메뉴이기 때문에,
넷스케이프에서 출력하려면 반드시 한번 저장을 하고 쉘에서 번역을 하고
찍어주는 방법밖에 없다는 것이 단점입니다. 반면에 Print에 필터를 다는 것은
이와는 달리 별도의 처리 없이 직접 찍을 수 있다는 것이 장점입니다.

Netscape Communicator에는, 4.0b5와 4.01b6의 경우 nhppf를 사용한 한글 문서
출력이 가능한데, 아마 정식버전에서도 달라질 것은 없으리라 생각합니다.

2.0은 느려지고 커졌습니다. 그 이유는 새로 폰트 이름과 인덱스를 얻어내기 위해
배열을 사용하기 때문입니다. 배열 때문에 느려진다는 것은 배열을 로드하는 시간
때문이고(perl은 반 인터프리터라는 점을 감안해 주십시오), 크다는 것은 그
배열이 소스 안에 들어있기 때문입니다. 별도의 폰트맵이 들어있는 파일을 만들고
이 파일을 읽도록 하면 속도가 절감되고 크기도 작아지겠지만, 이렇게 한 이유는
설치가 편리하기 때문입니다(만약 별도의 파일을 읽어들이도록 한다면 설치가
약간(!) 복잡해 질 수 밖에 없습니다). 2.01은 이런 단점을 조금이나마 개선하려
한 것입니다. 2.01에서는 파일 크기가 1/3으로 줄고, 비교적 효율적인 운영을
하며, 많이 빨라졌습니다. 2.1은 이 점을 그대로 계승하고 있습니다.
----------------------------------------------------------------------------

관련 자료

   * 한글과 Printing : http://nuclina.hoseo.ac.kr/ps/
     유닉스상에서(특별히 Linux) 한글 문서 출력에 대한 여러가지 방법이
     있습니다.
   * Solaris2.5의 X-Windows상의 Netscape에서의 한글 입출력법 :
     http://amangs.postech.ac.kr/yjkim/hnetscape/
     꼭 솔라리스 사용자에만 국한되지는 않는, 일반적인 유닉스 상의 한글
     입출력 방법이 잘 정리되어 있습니다. nhppf의 폰트 관련 설치 부분은
     이곳을 참조하시면 좋습니다.
   * Ogonkify : ftp://ftp.dcs.ed.ac.uk/pub/jec/programs/
     Ogonkify는 넷스케이프용 출력 필터입니다. 이 프로그램은 특별히
     Latin-1이상의 동유럽 언어(Latin-2등)을 출력하기 위해 기존의 폰트를
     조합해서 Composite Font를 만들어 사용합니다. 폴란드어나 체코어
     웹페이지를 출력하고 싶은 경우에는 이것을 사용하면 별 무리 없이 찍을 수
     있습니다.

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

기타

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

----------------------------------------------------------------------------
Total [Image] times accessed since 1997/5/25

http://jazz.snu.ac.kr/~junker/work/nhppf/index.html
Choi Jun Ho <junker@jazz.snu.ac.kr>
Last modified: Fri Aug 1 17:42:07 1997

----------------------------------------------------------------------------
                            [Jazz | Choi Jun-Ho]
