TEX 과그언저리 Karnes 2006 년 9 월 요약 이글은 2006년 9월 17일 KDLP F/OSS 컨퍼런스의부대행사로준비하는 KTUG BoF의토론자료로작성하는것이다. TEX 에관심이있거나언젠가한번쯤 TEX 을써보았던기억이있는분들에게최근 TEX 시스템자체의변화와발전을개략적으로소개하고토론을유도해내는것이목적이기때문에자세한보고서형식의글이되지는못하였다. 목차 1 緖................. 2 1.1 용어............ 2 2 TEX............... 3 3 TEX 의확장............ 4 3.1 ε-tex........... 5 3.2 pdftex.......... 6 3.3 enctex.......... 7 4 TEX 따라잡기.......... 7 4.1 NTS: TEX Written in Java........... 7 4.2 ANT........... 8 5 Omega를둘러싼이야기..... 8 5.1 Omega 의시작과끝.... 9 5.2 ε-omega, or Aleph ℵ.. 10 6 L A TEX 3 은오는가?........ 10 6.1 L A TEX 의현단계..... 11 6.2 한글 L A TEX 에관한짧은노트 12 6.3 ConTEXt 라는것..... 13 7 TEX 과폰트문제......... 14 7.1 XETEX 이란무엇인가?.. 15 7.2 XETEX 의가능성..... 15 8 TEX 의미래 : programmable TEX 16 8.1 luatex.......... 17 9 結 : 한글사용자의 TEX 쓰기.. 18 KTUG member. e-mail: info@mail.ktug.or.kr 1
1 緖 이짧은개요는 TEX 과그주변관련프로그램및매크로들의현재상황과 TEX 의이용현황및앞으로의발전방향에대한논의들을일별하려는목적으로쓰여진다. 이런종류의글을쓰기에필자가적합한것같지는않지만, 혹시라도도움이될는가하여메모수준의정리를행하는만용을저지르게되었다. 주마간산격의내용없는요약이라도용서해주시기바란다. 1.1 용어 TEX 이라는용어에관련해서몇가지를미리적어두려한다. 다른곳의발표 1 에서언급한것이기도한데, TEX 은적어도몇가지다의적의미를지니고있다. (1) 문서조판언어 (language). 나름의문법과구조를갖춘조판프로그래밍언어라는의미로쓰일때의 TEX 이다. (2) 소스컴파일러프로그램. 이것은.tex이라는확장명을갖고사용자가조판사항을지시한원본 ( 소스 ) 파일을.dvi라는표준출력으로변환해주는프로그램을가리키는말로쓰인다. 이프로그램은명령행에서 tex이라고부름으로써실행시킬수있다. (3) 매크로패키지. TEX language로쓰여진매크로집합으로서, 실제의문서작성을도와주는여러매크로의사전정의들로이루어져있다. 가장유명한두개의매크로패키지를들라면 Knuth 자신이작성한 plaintex 과, L A TEX 이있는데, 이들은이를테면실제문서작성을위해필요한명령들을미리정의해둔라이브러리에해당한다. 통상 TEX 으로문서를작성한다 고하면 L A TEX 을가리키는경우가많고, L A TEX 이아니고 TEX 이라고하면 plaintex 을지칭하는것인데, 이글에서는이들을일관되게 매크로패키지 라고불러서다른두가지와구별했다. 앞으로명백해지겠지만, 오늘날 TEX 이라함은실제로 TEX 확장 프로그램과언어를총칭하는말로쓰이는경우도많다. TEX 을확장한다 함은, 매크로패키지 ( 예컨대 L A TEX) 에새로운매크로를추가하는것을의미하는것이아니라, tex 프로그램의소스 2 수준에서새로운 primitive를 1 수원대학교 2006. 5. 2 WEB 또는 Web2C 에의하여변환된 C 가흔히쓰인다. 2
추가하거나변경하여 TEX 언어의설계와기능을바꾸거나, 함수의동작을수정하거나 새로운함수를추가하여 tex 프로그램의동작자체를개선하는것을의미하는것으로 한다. 2 TEX TEX 의현재버전은 3.141592이다. 소수점아래여섯번째자리업그레이드는 2002 년 12월에이루어졌고, 모두네가지버그를수정한것이라한다. 그중두가지는 leaders에대한것이고, 나머지두가지는정렬 (alignment) 에관한것이다. 이와함께 METAFONT도 2.71828로버전업이이루어졌다. 3 한때 3.14159에서프로즌되었다는얘기가있었지만그것은사실이아니고, 앞으로도버그수정은계속될것이라고보아야한다 ( 만약버그가남아있다면 ). 물론 TEX 자체의디자인은모두종료되었다고할수있다. 도대체 TEX 이란무엇인가? METAFONT라는 이제는낡은 폰트처리기술, 이제는일반화되어그다지새로울것도없는개행알고리듬, 그리고아무도사용하지않는 Pascal-WEB 언어, 여전히 8비트에묶여있는코드처리방식에따른유니코드처리의한계, 게다가복잡한문서에서종종맞닥뜨리지않을수없는 255(256) 개의 register 제한때문에벌어지는 TeX capacity exceeded... 메시지. 오리지널 TEX 은아무리보아도오늘날비영어권에살면서문서를만들어야하는우리의요구를충족하지못한다. 그리하여, ( 여전히우리가 TEX 이라고부르고는있지만사실은 TEX 이아닌 ) 여러종류의확장된 TEX 을통해서야겨우원하는결과를얻어내고있는것이현실인데, 이제부터우리가살펴볼내용의일부는이와같은문제와한계를극복하려는시도들이어떤식으로이루어졌는지를살펴보려는것이기도하다. 그렇다면, TEX 에남는것은무엇일까? (1) 문서조판언어라는바로그특성이 TEX 의핵심이다. 하나의언어로서 TEX 은, 배우기가쉽지않고조판이라는한분야에지나치게특화되어있다는치명적인단점이있기는하지만매우견고한매크로언어이다. 따라서, 아무리 TEX 의확장이있다하더라도그것은 TEX 설계의근간인 언어 로써문서를조판 (typeset) 한다는그개념을벗어나지않을것이고, 그런한그것은 TEX 일것이다. 3 TUGboat, vol. 23, 2002. 3
문서를프로그래밍한다는것 이주는성취감은비록소수에게만호소력이있는것일는지모르나대단한것으로서, TEX 의생명력의한원천이되고있다. (2) 비록낡았다하나, H&J 알고리듬의중요성을소홀히할수는없다. 하이프네이션과저스티피케이션은조판의가장기본적인요소를충족하는것으로, 이것이해결이되어야만그위에각종기능을추가해갈수있는것인데, TEX 은바로이것을제공한다. 20년이지나도록아직도상업용조판프로그램과 비교될수있는 알고리듬을제시하고있다는점을생각하면이점에서 TEX 의탁월성은오히려돋보이는바있다. (3) 개방성. TEX 을확장하거나변경하는것이용이했다할수있는이유는, 이것이개방적인공개프로그램이기때문이었다. TEX 의개방성은누구든지의사와능력이있다면매크로를추가하든소스를개선하든하는것이열려있다는뜻이므로, 상업용프로그램의사적소유물인코드에비교할바가아닌것이다. (4) 수식조판의표준. TEX 이오늘날까지사용되고있는주요요인가운데하나이다. 수식표현의문법은 TEX 문법을바탕으로하지않을수없을것이고이분야에서 TEX 의성능과장점이극대화됨을부인할수없다. 3 TEX 의확장 현재대부분의 TEX 배포판 4 이채택하고있는 TEX 이라불리는것 (TEX 엔진 ) 은실은 enctex 패치된 pdf-ε-tex 이다. 이것은다음세가지 TEX 확장을결합한것이라할수있다. pdftex + ε-tex + enctex 이엔진의채택은 tetex 2.x 버전에서 3.x로이행하는과정에서거의표준화되었으며, 시기적으로보면 2004년에서 2005년사이가이에해당한다. 즉, 비교적최근의일이다. 우리가명령행에서 tex이나 latex을부르면실제로는 pdf-ε-tex 이 TEX 호환성모드로실행되어원하는문서의출력을얻게되는것이다. 4 Web2C 에기반한배포판을말한다. 예를들면 tetex, TEXLive, KC2006 의 W32TEX, ( 그리고부분적이지만 ) MiKTEX 등. 이이외에도 PCTEX 이나 VTEX 과같은다른 TEX 배포판이많다. 배포판에관한문제는이글에서다룰만한것이아니므로다른자리로미뤄두기로한다. 4
3.1 ε-tex ε-tex 이란, extended( 또는, expanded) TEX 을가리키는것으로, 유럽의 NTS 그룹에의하여만들어졌다. 현재버전은 2004년에발표된 v2.1이다. ε-tex 을만든 NTS 그룹에서는 TEX 에기초한새로운조판시스템 (New Typesetting System) 을만들어내고자하였다. 이를위해우선 Knuth-Standard TEX 의몇가지한계를보충하는작업을시작하였는데, 그결과가현재우리가알고있는 ε-tex 이라할수있다. ε-tex 은원래의도였던 TEX 설계자체를리뉴얼하는데까지이르지는못하였으나, Knuth가 ( 의도적이었을지?) TEX 에설정해두었던여러가지제한을실질적으로제거하기위한상당히많은 primitives들을추가하였다. 5 그가운데는오늘날의관점에서보았을때없어서안될것들도포함되어있는데다가 ε-tex 의 normal 모드는실제 TEX 과똑같이동작하기때문에이제는 TEX 이라하면대부분 ε-tex 을가리키는말이되었다고보아도좋을정도이다. 그가운데, 우리입장에서주목을끄는몇가지만두서없이소개한다. 1. 양방향조판 (TeX-XeT primitives) Knuth 자신이이미선구적으로기여한바있었던 TeX-XeT을더욱발전시켜, 역방향조판을가능하게하였다. 2. register의개수제한확대. 3. 디버깅을위한추가매크로. 예컨대 assign, group, if, scantoken 등에대하여별도로 \tracing을걸수있다. 4. 간결한매크로탐색. 예컨대 \unless\expandafter\ifx\expandafter\relax \csname과같은코드에서발생할수있는 \relax의 side effect를없애주는새로운매크로검사 primitive \ifcsname을쓸수있다. 이외에도상당한개선과확장이이루어졌으므로, 자세한참고를원한다면 ε-tex Manual을보라. 사용자입장에서이런 primitive를직접조작할일은많지않기때문에실감하지못하지만사실상 현재의 TEX 은 TEX 이아니다 는발언이나오게된배경은 ε-tex 에기원이있다해도될것이다. 5 primitive 란, TEX 설계의근간이되는기본매크로를의미한다. 5
3.2 pdftex ε-tex 이여러연구자들의공동작품인데비해, pdftex 은 Hàn Thế Thànn 씨의연구결과물이고작품이다. 이것은.tex 소스로부터 dvi를거치지않고직접 pdf로출력하도록함으로써, pdf로는구현할수있지만 dvi를거치기에는까다로운복잡한고급조판기능을 TEX 에부여하려는목적으로만들어졌다. 여기에더하여필요하다면.dvi를만들어내는모드로도동작하기때문에 pdftex 엔진이 TEX 엔진을대용할수있게된것이다. 처음에는 Web2C의 TEX 소스로부터출발했지만곧 ε-tex 을받아들여, 현재의 pdftex 은사실상 pdf-ε-tex 으로동작한다. 현재 pdftex 은 Hàn 씨외에 Martin Schröder, Hans Hagen 등이참여하여활발한유지와개발활동을하고있다. 6 pdftex 은아마 TEX 에프로그래밍언어를도입한첫번째사례로기억되어야할것이다. TEX 자체를폐쇄적인언어로보지않고 TEX 에더필요한것을오리지널 TEX 보다더잘할수있는외부언어를통하여구현함으로써결과적으로 TEX 을확장할수있다는개념은이로부터보편적으로받아들여지게될소지가생겨났다. pdftex 에서주목해서보아야할첫번째요소는역시 pdf 포맷자체의특성이다. pdftex 은 pdf 언어를거의완전하게제어할수있기때문에, 그표현능력의한계는곧 pdf 언어명세의한계와비슷하다. pdf 언어를 tex 소스로제어할수있다는것이 pdftex 의최대의매력이라고할만하다. 7 pdftex 이가진또하나의장점은고급조판능력에서기인한다. 위대한디자이너라고알려진 Hermann Zapf에게서시작된 font expansion, margin kerning 등의이른바 micro-typography를 TEX 에서구현할수있게된것은특기해야할일이다. 8 pdftex 이기여한또하나의중요한측면은 TEX 에있어서폰트사용측면의확장이다. pdftex 이 PostScript type 1 폰트를다루는방법은놀라워서, 사실상 TEX 6 우리는트루타입을주로사용하기때문에 pdftex 의직접혜택을그다지받지못했다. 아직도 pdftex 의트루타입지원은몇가지측면에서만족할만하지못하고오픈타입폰트에대한지원도제한적이다. 이문제는 pdftex 의다음버전인 luatex 에서개선되리라고기대하고있다. 7 물론 DVIPDFMx 라는, 조진환과히라타의 dvi 드라이버도 pdf special 코드를상당히잘처리한다. 이에대해서는조진환의 2005 년 TUG Conference 발표자료를참고하라. 그러나그 implementation 은 dvi 드라이버수준에서이루어진것으로, 우리가문제삼고있는 TEX 확장과직접관계가적어서이글에서는각주로언급하는데그친다. 8 이개념들을한글폰트에얼마나적용할수있는지는모르겠다. 그러나적어도문장부호등에대해서는이런개념을적용한다면유용한결과를얻을수있을터인데, 우연인지모르겠으나한중일삼국중에서문장부호에영문폰트를그대로쓰는나라는우리나라밖에없는지라, 용케도마이크로타이포그래피의효과를우리는시각적으로체험할수있게되어있다. 이문서에 pdftex 의 margin kerning 을적용하였다. 사용한폰트는 lmodern 이다. 6
에있어서폰트의제약을구미권에한정된일이지만상당한정도로극복하게하였다는점은인정해야할것이다. 구미언어권에서는현재 dvi를매개로하는 TEX 작업방식에서 pdftex 이직접 pdf를 generate하게하는방식으로급격히변해가고있는중이라고한다. 9 3.3 enctex enctex 은 Petr Olšák( 체코 ) 이제작한 TEX 확장으로서입 출력의실시간리인코딩 (re-encoding) 을구현한것이다. 특히중요한것은 UTF-8 인코딩을포함한 multibyte 인코딩을 TEX 이직접다룰수있도록하였다는점일것이다. 현재모든유니코드코드포인트에이르기까지 conversion table이완성되어있지는않지만앞으로유니코드를좀더잘다룰수있는가능성이생겼다는데서주목받고있는확장이라고할수있을것이다. 4 TEX 따라잡기 TEX 의 확장 과는별개로 TEX 을다시작성 (re-write) 하려는시도들도간간이있었다. 그가운데두어가지를적어둔다. 이와같이 TEX 을다시쓰려는시도가직면하는어려움은, 우선 TEX 수준의동작이에러없이이루어질정도까지는 TEX 을앞서갔다고하기어렵다는데있다. 시도는시도일뿐이어서, 아직까지획기적인성과를내었다고할만한시스템은보이지않지만, 누가알겠는가, 어느날엔가 TEX 을능가하는 TEX- 아닌시스템에서문서를작성하게되는날이올는지. 4.1 NTS: TEX Written in Java ε-tex 을만든 NTS 그룹에서는이와는별도로 NTS라는이름의 Java Typesetting System을공개한바가있다. 아직 β-버전인이유는 TEX 과호환될정도까지개발이진행되지않아서인데, 최근관심이줄어든듯하나, 여기적어둔다. 9 최근 pdftex 은 cmap 을직접 generate 하는새로운기능을실험적으로도입하였다. 이과정에서우리나라에서는조진환, 김도현등의기여가있었는데, 이문제가우리의 TEX 사용환경과직접관계가있었기때문이다. 이런저런과정에서 pdftex 에새로운기능도추가되고변화도생겨나서, 한글문서를 pdftex 으로작성하는것이그다지어려운일이아니게되었다고할수있다. 이자체가최근몇개월동안의변화이다. 그결과, 2005 년에 lshort-kr 을번역하면서 pdftex 을폄하했던내용이사실이아니게되었다. 아마도이런것을발전이라할것이다. 7
4.2 ANT Achim Blumensath의 ANT 10 Project는, NTS와는달리 TEX 구현을따라잡거나다른언어로흉내내려는것이아니고, TEX 을대 체하는 새로운 typesetting mark-up 언어를만들어내려는것이다. 이분이 TEX 에대해서하는말이재미있다. TEX 이훌륭하지만, 배우기어렵고성가시다. 게다가수학식조판이라는협애한분야를벗어나면조판의일반적요구에대응하기가불가능하다. 한예를들자면현재 L A TEX 의새로운출력루틴은무려 100페이지가넘는다. 게다가 TEX 의성능을확대하기도매우어려운것이, 소스코드가도저히읽을수없는잡동사니이기때문이다. 그래서나는심플하고클린하고 modular한디자인의 ANT를새로작성하기로결심했다. ANT가지향하고있는것은, catcode 없는쉬운코드, 고수준의스크립트언어, 유니코드지원, type 1과트루타입및오픈타입지원, 오픈타입의고급기능지원, 칼라와그래픽의지원, 페이지레이아웃설정의단순화등이라고한다. 이자체만놓고보면가히 TEX 의미래라고할만한데, 현재개발중인프로그램이므로그귀추를주목해볼만하다하겠다. 11 이시스템은주로 Ocaml이라는언어로개발되고있다고한다. ANT의일부실험적코드는 Omega와결합하여 ANTOmega라는매크로패키지를만들어내기도하였다. 5 Omega 를둘러싼이야기 한때는 UTF-8로한글문서를작성하면당시 lambda라는 Omega-L A TEX 을실행해야했다. TEX 을둘러싼환경이얼마나급격하게변하는지, 현재 Hangul-ucs를중심으로문서작성을하고있는우리입장에서는 굳이그럴필요가있겠는가 생각하지만, 아직도위와같은질문과답변이이루어지는곳이없지않다. 물론 HL A TEX 을쓰지않으면안되는상황예컨대 HL A TEX 자체를테스트한다든가도있겠지. HL A TEX 의가이드였던 한글L A TEX 길잡이 라는은광희님이작성한문서에는 Omega에대한기대가몇페이지에걸쳐자세히개진되어있다. 즉, Omega는 TEX 의미래이며, 앞으로 TEX 시스템은 Omega로발전하지않을수없을거라는것이다. 10 유명한말장난을흉내낸이름으로서, ANT is not TEX 이라는뜻이라고한다. 11 현재 ANT 로조판된결과물은, pdftex 의수준에이르려면해결해야할문제가만만치않아 보였다. 8
실제로 HL A TEX 은사실상 Lambda 시스템으로발전했지만, 바로그 발전 때문에 쓸모가없어졌다. 이얘긴좀슬픈이야기다. 5.1 Omega의시작과끝 Omega(Ω) 는생각건대야심적인 TEX 리뉴얼프로젝트였다. 프리미티브를몇개추가하는데그친것이아니라, TEX 자신에게 multibyte 이해능력을부여하려는계획이었던것이다. 20년전과컴퓨팅환경이변했고유니코드가일반화된지금, 이것은너무나합당하고올바른방향인것처럼보였다. Omega는 1990년대중반, John Plaice와 Yannis Haralambous에의하여개발이시작되었다. 이시스템이가진특징을몇가지로요약하면다음과같다. 1. 문자와포인터의데이터구조를 8비트에서 16비트로확장하였다. 2. 프로그래밍가능한필터 (otp) 를통하여입출력을제어할수있도록하였다. 3. TEX Unicode 인코딩을정의하였다 (UT1, UT2). Omega는특히아랍어, 히브리어등 RL 언어권과 CJK 언어를식자하거나다국어문서를조판할수있는기능을갖추게되어그발전가능성에기대가컸다. odvips나 oxdvi 등 Omega가만들어낸 dvi를처리할수있는기술도발전하였으며, 만족스럽지는않았으나 UT1 및 UT2 인코딩의폰트도일부사용이가능하게되어갔다. 특히 2003년에는 DVIPDFMx가 Omega의 dvi를처리할수있는유력한드라이버가되어 pdf 제작에도방법이생겨나게되었다. 2003년과 2004년사이에, Omega 프로젝트는개발이중단되기에이른다. 개발중단을언급 ( 발표 가아니고 ) 하던자리에마침조진환박사가참석하고있었는데, 청중들은모두 황당해했다 는전언이다. 이석연치않은중단은 Omega에많은기대를걸고있던아랍및 CJK 언어권의 Omega/Lambda 사용자들을실망하게만들었다. 실제로그이후로지금까지 Omega 시스템은더이상새로운릴리스를발표하지도않았고, 차츰논의의중심에서멀어져가고있는것이현실이다. 12 Omega가원래의도하였던완전한 TEX 다국어환경으로의이행은충분히실현되지않았다. 그러나 otp라는형태로프로그래밍가능한 TEX 이출현했던것은, TEX 12 이것은조금다른문제이기는하나, 확실히 Omega 는 16 비트유니코드 TEX 시스템 이었다. 그러나유니코드는 16 비트가아니다. 이차이는별것아닌듯해도엄청난것으로서, 사실 16 비트문자밖에다룰수없다면진정한의미에서유니코드시스템이라말하기에는한계가없지않았다할것이다. Omega 의유연성은어떤식으로든이런문제를해결할길을열어둔것이사실이었으나그구체적물증을볼수없음이안타깝다. 9
이가진한계를극복하는유력한방법가운데하나로보였다. 앞으로어떤형식이 되든이 프로그래밍가능성 이 TEX 의발전방향이될것임은의문의여지가없다. 5.2 ε-omega, or Aleph ℵ Omega에 ε-tex 을머지한것을 ε-omega라고부른다. 나중에 Aleph로명명되었다. Omega의제작자들이처음의도하였던프로젝트가너무나멀고원대하여단시일내에사용자의요구에부합하기어려워보였기때문에, 당장사용가능한 Omega 를 ε-tex 과결부시켜제공한다는계획으로시작된것이었다고한다. Omega의미래가불투명한지금, 아마도 Omega 프로젝트가낳은많은자원을실질적으로사용할수있는것은 Aleph를통해서일것이다. 다행히 Aleph는느리지만개선이이루어져가고있고, 특히 ConTEXt가 Aleph 포맷을지원하면서부터그사용가능성이없지않은것으로보아도될것이다. 13 대부분의 TEX 배포판에서 omega를실행하면 aleph가, 그리고 lambda를부르면 lamed가실행되게되어있다. 오리지널 Omega는오늘날거의사용되지않는다. Aleph에한글문서조판을결부시키려는시도는아직본격적으로이루어지지않았다. 비록일부 bug-fix가이루어졌다고는하나, Omega 자체가가진불완전함이적지않았기때문에, 아마도이시스템의한글화시도는동시에 Aleph 자체의개선과거의동의어가될가능성도없다고할수없다. 6 L A TEX 3 은오는가? L A TEX 은 TEX 을대표하는매크로패키지이다. L A TEX 을그냥 TEX 이라고부르는경우도많다. 이제는과학문헌작성의표준포맷으로받아들여지고있다. L A TEX 은 TEX 을조판엔진으로하는 문서작성시스템 이다. 14 즉, 일종의워드프로세서인것이다. TEX 이프로그래밍언어인것과대조된다고하겠다. TEX 언어그자체로조판을못할것은없지만, 최소한의매크로패키지가마련되어있지않으면불편하기짝이없을것이다. 그것은마치라이브러리전혀없이 raw C 언어만으로복잡한사용자인터페이스와내부동작을갖춘 CAD 프로그램을만들어내라는것이나같 13 Mem 이라는, 다국어 L A TEX 문서를 Aleph 로조판하는패키지가개발되고있다. http: //mem-latex.sf.net. 14 그러므로, 흔히이루어지는 TEX 과 MS Word의비교는잘못된것이다. 굳이비교를하려든다면 L A TEX 과다른워드 ( 도큐먼트 ) 프로세싱프로그램을비교해야할것이다. 10
다. Application 작성자에게는라이브러리가필요하고, 문서작성자에게는매크로패키지가필요하다. L A TEX 을만든사람은 Leslie Lamport이지만, 현재의 L A TEX 은그의손을떠난지꽤되었다. Lamport 자신도 TEX 관련된분야를떠났다. 6.1 L A TEX 의현단계우리는 Godot를기다리는사람들이다. 아무리기다려도 L A TEX 3은오지않는다. L A TEX 의현재버전은 L A TEX 2ε인데, 15 이버전이나온지 10년이지났고, 아마도이상태는상당기간더유지될것으로보인다. L A TEX 3 Project Team 16 이하는일은 L A TEX 2ε를유지하는것이다. 일부 L A TEX 3 코드가공개되어있기는하나, L A TEX 2ε의영향력이너무나크기때문에설령오늘당장 L A TEX 3이나온다고해도과연단기간에 L A TEX 3으로의이행이이루어질지확신할수없다. 그러나, 확실한것은 L A TEX 3 프로젝트문서에서이미말하고있는바와같이 L A TEX 2ε가가진한계가비교적명확하다는것이다. 기술적으로 pdftex 과같은새로운 TEX 이나오기전에이루어진 L A TEX 2ε에새로운기능을추가하는과정은아무래도코드를복잡하게만들고어려운사용자인터페이스를통한우회적방법에의하지않을수없었을터이다. L A TEX 3은이런문제들을근본적으로해결할방법을찾고있는듯하다. L A TEX 의가장큰강점은, 설계의효율성도아니며매크로의강력함도아니요, 탁월한기능이있어서도아니다. 많은사람들이사용한다는것 그것이 L A TEX 을 L A TEX 이게하는것이며, 그러다보니수많은솔루션이집적되어있다는그사실에서 L A TEX 은편하다 는말이나오는것이다. 게다가결정적으로각종저널에서 L A TEX 으로기고를받는다는것이 L A TEX 의독점적지배력의원천이되고있다. L A TEX 은 TEX 세계의윈도우즈이다. 사실우리가실제문서를작성하는과정에서필요한거의모든기능이 L A TEX 으로구현되어있기는하다. 그러나그것은 L A TEX 을기반으로한추가패키지를통해서인경우가더많으며, 첨단기능일수록더욱그러한데, L A TEX 의설계자체를바꾸게되면이런추가패키지를이용한여러해결책이더명료해지고단순해질수있을것이라는기대를가지고있다. 아무튼 L A TEX 의수명은길 것이틀림없고, 그런만큼더강력한 15 2005 년 12 월에최신버전이업데이트되었다. 16 Johannes Braams, David Carlisle, Robin Fairbairn 11
매크로가되기를바라마지않는다. L A TEX 자체의개발이정체되어있는느낌을주지만응용패키지의개발은매우활발하다. 지금도 CTAN 17 의 macros/latex/contrib 아래는가장빠르게갱신되는영역이다. 6.2 한글L A TEX 에관한짧은노트 TEX 자체의한글화는시도된바가없지않을것이나범용성을획득하지못했다. 가까운일본의경우는이와달리 ptex 이라는 일본어 TEX 을성공적으로개발하여정착시킨것과대조적이다. 아마도일본어記寫체계가우리와달리로마문자를거의사용하지않았기때문에가능하지않았을까하는짐작을하는데, 유례가적은독특한경우임은틀림없다. 그대가로, TEX 관련시스템의눈부신발전에유기적으로적응하는데한계가있을테지만. 아무튼 CJK로흔히묶어서하나의문자체계권비슷하게처리하는경우가많은데, 우리나라의글쓰기방식은 CJ와는다른특성이있고, 이것이여러가지어려움을가져온다. 예컨대띄어쓰기라는독특한체계나영문자를문장부호로차용하는관행, 그리고부족하고부실한자유글꼴등, 넘어야할벽이장난아니었다. 1990년대부터시작된 L A TEX 매크로에한글을입 히 는 노력은거의결실을거두었다. 현재 L A TEX 문서작성에있어사용자수준에서어려움을거의느끼지않는다. 우리현실에서한글사용에대한노력이 L A TEX 매크로에집중되어있었던것은불가피했던측면이있다하겠다. 그리고, 그모든노력은대략한글을유니코드로처리하는방법으로최종결론이내려진상태이다. 여담이지만, 유니코드텍스트를처리하는데있어 L A TEX 자체는아무것도해주지않는다. L A TEX 패키지가운데하나인 ucs 패키지가이문제에대해잠정적해결책을제시하고있으나, 만약유니코드자체를지원하는 TEX 시스템이범용으로사용되게된다면 ucs보다나은해결책을활용하게될수도있을것이다. L A TEX-ucs가편리하고필요에부응하는것이기는하나, 그 architecture에있어상대적으로아름답다고하기주저되는것은사실이다. 17 Comprehensive TeX Archive Network. http://ctan.tug.org/tex-archive/ 12
6.3 ConTEXt라는것 L A TEX 의한계를새로운매크로패키지로넘어서려한시도들은기존에도많았다. HTML 문법과비슷한 mark-up 방식을채용한 StarTEX 과같은특이한것도있었고그밖에도 BLUeTEX 과같은독자적인매크로가명멸했지만, L A TEX 에필적할만한사용자군을형성하는데는거의모두실패했다. 유일하게, 사용자군이넓어져가고있는새로운매크로패키지가바로 Hans Hagen 씨의 ConTEXt이다. 다른매크로와달리이패키지는처음부터 L A TEX 을전혀의식하지않고완전히새로운매크로코딩방식을채용하여발전하였다. ConTEXt의새로움은여러측면이있지만, 특기할만한것은처음부터 pdf 출력만을타겟으로제작되었다는것이다. dvi를만들지못할것은없으나, pdf를제작하기위한중간단계로만활용하기때문에종래의 dvi와는그용도가같지않다. 18 따라서 ConTEXt는설계부터 pdftex 에크게의존했고 pdftex 의발전이 ConTEXt에의해추동된측면도크다. 또한 pdftex 의발전으로 ConTEXt 자체도크게변모할수있었다. 현재 ConTEXt 제작자인 Hans Hagen 씨자신이 pdftex 팀의일원이되어있음을생각하면이것은어쩌면당연한결과인지도모르겠다. 아마도 TEX 의설계상엄격함을매크로패키지수준에서넘어서려시도한것은또다른특징이라할수있을것이다. TEX 의 pagebreak 알고리듬은상당히 rigid 해서한번 shipout한페이지에대해서재검토하지않는다. ConTEXt는 TEX 을반복호출하는불편을감수하면서라도이런 rigid한알고리듬을더유연하게바꾸기위한노력을감행했다. 이런면면은 pagebreak 뿐아니라개행알고리듬에이르기까지다양한방면에걸쳐있다한다. 또한, ConTEXt는조판상의요구를더효과적으로 mark-up 언어로구현하는데관심을가졌다. ConTEXt의많은화려한예제들은종래레이아웃프로그램으로나구현할수있을것으로여겨졌던효과들을 TEX 코딩으로도할수있음을보여준놀라운것이많다. 또한, MathML이나 METAPOST, ruby 및 lua와같은외부언어를깊숙히차용하여본경험은아마도다음세대 TEX 의발전에귀중한자산이될것이다. 일반사용자입장에서 ConTEXt는아직은안정화된매크로로보이지않는면이 18 유구한역사와전통의 dvips 는이제그수명을다한것인가? 현재 dvips 는 pstricks 라는강력한그래픽툴을위해서만쓸모가있다고보는것이틀리지않는다. 아마 pstricks 패키지도머지않은장래에그대응물에의하여대체될가능성이없지않고보면 TEX 의 PostScript 출력기반은와해되어간다고해도과언이아닐것이다. 이것은필자의개인적인의견이고전망이기때문에각주에적어둔다. 아무튼 300dpi 프린터용비트맵폰트를만들어서찍던시대가아닌것은확실한듯하다. 13
있을것이다. 그러나 ConTEXt garden 19 을방문하여보면, 이미상당한정도로문서 작성에큰불편이없을만큼발전해있음을알게될는지도모른다. 특히화려한 스크린 pdf 예제들이눈길을끈다. 7 TEX 과폰트문제 오리지널 TEX 의설계에서재미있는것하나가, METAFONT라는폰트기술언어를함께만들어낸것이었다. TEX 이사자로상징되고 METAFONT가암사자로상징되는유명한일러스트레이션에서도그긴밀한관계를알수있다. METAFONT는 TEX 의일부가아니라그자체로독립된시스템이었으며, TEX 이폰트를처리하는기술이던 tfm을만들고비트맵으로번역 ( 컴파일 ) 해주는유틸리티와함께제공되었다. META- FONT는매우재미있는윤곽선글꼴기술언어였지만그실제사용에있어서는특정프린터에맞는비트맵으로변환해야지만출력을볼수있었다. 어찌되었든, TEX 자체는 tfm이라는폰트메트릭을이용하여조판한다. 그이후의많은 TEX 확장들도이 TEX 의기본설계를재검토한것은없다. TEX-류에서 tfm 폰트처리기술은당연한것으로받아들여지고있었다. 이것은 TEX 의특징이고장점이면서동시에한계로도작용하였다. 이한계는, TEX 이 METAFONT를벗어나서 PostScript 글꼴을받아들이면서부터문제가되었다. PostScript에는 afm 또는 pfm이라는별도의메트릭이있음에도불구하고 tfm을일일이별도로만들어주어야했던것이다. 많은솔루션이제공되어거의불편함을느낄수없을정도가되기는하였어도역시폰트자체에디자인된정보를이용하지못하고별도의 tfm을매번만들어제공해야하는것은번거로운일이었다. 20 폰트부분에있어 TEX 자체에약간의확장이가해짐으로써다양한폰트활용이가능해지기는했지만, 여전히폰트문제는 TEX 의가장 TEX 다운측면으로남아있다. TEX 의설계가 tfm에워낙밀착해있기때문이다. 그러나, 오픈타입폰트와같은새로운폰트설계를 tfm과연계하는것은어렵기도하거니와폰트자체에프로그래밍된 meta-data를포기해야하는문제점도동시에가지고있는것이다. 19 http://wiki.contextgarden.net 20 이사태는특히우리와같은 CJK 폰트를이용할때더욱현저하다. 예컨대하나의한글폰트를 서브폰트로취급한다할때, 도대체몇개의 tfm 을만들어내어야하는가. 14
7.1 XETEX 이란무엇인가? XETEX 은, SIL international 社의 Jonathan Kew에의하여제작된새로운개념의 typesetting system이다. 처음에는매킨토시 Mac OS X에서만실행되도록개발되었다가, 최근 Linux와 Windows 포팅이차례로발표되었다. 21 원래의매킨토시버전은 ATSUI라는라이브러리를써서구현된것이었다는데, Linux와 Windows 버전은 Freetype을채용하고있다. 이시스템은폰트와입력을처리하는방법에서 TEX 의처음디자인에의의존성을제거하였다. 즉, 모든 문자 는폰트에대응하여식자되며그식자규칙은유니코드표준을따른다. tfm은더이상필요하지않다. 오직잘디자인된고품질의폰트만있으면되는것이다. 이폰트에대한정보는폰트자체또는그폰트를해석하는시스템과라이브러리에의존한다. 이것이 TEX 프레임워크내에서동작하는한, tfm 중심의기존 TEX 폰트에호환성이유지되겠지만, 그보다는폰트사용의혁신이훨씬돋보이는바있다. 오픈타입글꼴과같은신기술을 TEX 에도입하는새로운선례를만든것으로, 현재로서도폰트에관한한, 이만큼혁신적인 TEX 시스템은없었다. 22 그런데, 문제는이것이과연 TEX 인가하는것이다. 폰트사용설계를배제하고도 TEX 이라고부를수있다면 TEX 이란과연무엇일까? XETEX 은여전히 mark-up 방식의소스를처리하며, TEX 명령과매크로에의하여동작한다. 기존의 L A TEX 코드들도잘해석해서식자해준다. ConTEXt에서 XETEX 을엔진으로하는, XonTEXt 라고불리는시스템도상당히원활하게작동한다. 그러나내부적으로문자와폰트를처리하는방식은 TEX 에의존하지않고있다. 7.2 XETEX 의가능성 우리는 XETEX 의가능성에상당한기대를걸지않을수없다. 이시스템을잘만 성장한다면, 그동안한글문서작성에서겪었던많은문제들이단숨에해결된다. 21 Windows 포트는 W32TeX 에포함되어있다. 당연히 KC2006 에도포함되어있는데, MiKTEX 에집착하는많은 Windows 사용자는이시스템을아직까지는구경해보지못하고있다. 필자는 MiKTEX 이라는시스템이 Windows TEX 사용자를오도하는측면이있다고생각하며, MiKTEX 에의종속에서벗어나는것이시급한일이라고판단하고있다. ( 이판단은당연히언제든바뀔수있는것이다.) 22 물론, 모든문제가다해결된것은아니다. 특히한글문서를 XETEX 으로식자하는데서부딪치는근본문제는, 신뢰할만한고품위의디자인을갖춘한글폰트가정말드물다는것이다. 예컨대웬만한성가를얻고있는상업용폰트의경우에도영문자디자인이성의없이처리되거나적절한리가쳐와커닝정보를포함하지않음으로써, 참고보기힘든판면을만들어내게되는것은시스템의잘못은아닌것이다. 15
예컨대, 비록트루타입을사용할수있게되었다고하나그복잡했던절차를모두생략할수있다는것, 또한앞으로발전할새로운폰트기술을 TEX 문서작성에통합할수있다는것등, 할수있는일이많다. 그러나아직은많은부분이미래를위해유보되어있다할것이다. 23 8 TEX 의미래 : programmable TEX 프로그래밍언어와 TEX 의만남은그자체로하나의토론주제가될것이다. 24 글에서이문제를근본적으로다루는것은아마불가능할것이다. 여기에는두가지방향이있겠다. 이 (1) 매크로수준에서프로그래밍언어를활용하려는것. (2) TEX 자체를확장하는수단으로 TEX 의언어적유연성을높여프로그래밍가능하게만드는것. PerlTEX 이나 SQL-TEX 이첫번째방향을대표하고있다. 이것은 TEX 시스템자체를개선하거나확장하는것이아니라, 특정언어로구현된내용을마치 TEX 매크로인것처럼사용하게해주려는것이다. 이것도매우재미난결과를얻을수있고, 특히사용자인터페이스에밀착한것이니만큼사용자입장에서는더흥미로울수있다. PerlTEX 을이용하여정렬이나데이터처리를구현한예가 KTUG에소개되어있기도하다. 우리가이글에서관심을가지는방향은 TEX 언어를개선하고처리과정을재편하는것으로두번째것에해당한다. 최근유력한것은 lua라는프로그래밍언어를 TEX 과통합하는이른바 luatex 프로젝트이다. 25 왜프로그래밍가능한 TEX 이필요한가? TEX 의유연성을위해서는물론이고, 특히오픈타입폰트의활용을위해서필요하다고할수있다. 오픈타입이라는폰트스펙자체가프로그래밍가능한것이므로, 그것을이용할 TEX 도당연히프로그래밍이 23 그전에필자는개인적으로, 이모든신기술을테스트할수있는고품질의오픈타입글꼴한벌을보게되는것이소원이다. 한글 TEX 발전을가로막고있는여러요인중에는상업적폰트제작회사와출력소의이해관계가한몫을하고있다고판단하지않을수없다. 이것은물로가는자동차를만들어도정유회사의이해관계때문에판매금지를피할수없을것이라는어느분의말씀을생각나게하는점이있다. 24 KTUG 컨퍼런스나연구발표회가열린다면언젠가는주제로등장할것이틀림없다. 25 한때 ruby 가적극적으로검토된적이있었다고하나, 최종결론은 lua 쪽으로가는것으로난 모양이다. 16
가능해야할것이다. 현재그런종류의오픈타입이과연있느냐는별개의문제라고생각한다. TEX 에는그래픽처리언어가없다. 26 TEX 친화적인그래픽언어로 pstricks나 METAPOST가있는데, 이런언어를내재적으로활용하여문서를작성해본경험이있다면 TEX 의확장성에감탄을금할수없을것이다. TEX 자체에언어처리가가능하게하는것은어떤의미에서는필수적인면이있다. 8.1 luatex TEX 과프로그래밍언어의결합이구체적으로추진되고있는프로젝트가있다. ConTEXt와 pdftex 진영은그다음차기버전으로 luatex 을준비하고있다고한다. 이것은 lua라는가벼우나강력한프로그래밍언어와 TEX 을결합하여 TEX 의정체된언어적능력을보강하려는계획이다. 간략히표현하면 lua-embedded TEX language 의탄생을눈앞에두고있는셈이다. 아마도 luatex 은, TEX 으로할수있는모든것 과 lua로할수있는모든것 을결합하게될것이다. 생각만해도즐거운상상이지만, 문제라면, lua라는스크립트언어를새로배워야한다는거. 알려진바에따르면 pdfluatex 은 pdftex 의후신이될것이고, 미루어진많은문제, 예컨대오픈타입에대한보다근본적인지원등도 luatex 프로젝트에포함될것이라한다. 왜 perl이나 ruby가아니라 lua였을까? 이질문에대해서 luatex 사이트에서는, free embeddable small portable easy fun이라고답변하고있다. 27 현재 pdftex 의영향력이나 ConTEXt의확장성과발전가능성을볼때, luatex 은상당한영향력을가지게될가능성이높아보인다. 그러나일반사용자, 즉말단문서작성자에게 lua 언어의습득을요구하는일은아마없을것이다. 설계하는사람과코딩하는사람의분리, 그리고디자인하는사람과글쓰는사람의분리는 L A TEX 만이아니라 TEX 이라는매크로언어를통한문서조판에서면연히흐르는하나의근본합의라고생각한다. 26 L A TEX 의 picture 환경은폰트기반환경이지그래픽언어가아니다. 27 http://www.luatex.org/faq.html 17
9 結 : 한글사용자의 TEX 쓰기 원래이글의초안에는 XML과 TEX, 그리고 TEX 과그래픽문제를다루려는두개절이더있었다. 시간의제약과능력의부족으로이문제를언급하지못하였는데, 훗날다시논의할기회가있기를바란다. 지금까지우리가살펴본것은, TEX 또는그주변프로그램들의현재상황이대단히역동적이라는것이다. 흔히알려진것과달리 TEX 은정체된프로그램도아니요해결해야할문제가없는프로그램도아니다. 이러한역동적상황이창출된가장큰계기는역시유니코드의등장이었다. 어떤사람이유니코드를다루지못하는것을 TEX 의설계상하자 라고하고말하는것을들은바있지만, TEX 이설계되던 70년대당시유니코드를고려할이유도방법도없었던것이다. 유니코드를 TEX 이라는조판프로그래밍언어와조화시키려는노력은다양한방식으로전개되어왔고, 우리는그과정을훑어볼수있었다. 또하나의중요한계기는폰트문제이다. 오리지널의 Knuth-standard TEX 에서상정한폰트시스템과는비교할수없는 폰트라는새로운세상 이펼쳐진것은 TEX 의설계가종료된이후였다. 현재주요이슈는역시오픈타입이고이미말한대로이오픈타입을적절하기다루기위한준비가진행되고있다고해도될것이다. 오픈타입을취급하는것이한결쉬워지면아마도한글사용에있어서새로운돌파구가열릴수도있을는지모른다는기대를하여본다. 원래부터다국어설계가아니었던 TEX 으로, 한글문서를훌륭하게조판해낼수있게된지금, 한편으로는 TEX 시스템자체를개선하려는수많은노력과, 다른한편으로한글에특화된여러측면을구현하려는노력이결합된결과라는결론을잠정적으로내릴수있겠다. 한글이라는특정문자의식자와조판에있어서 TEX 은이제야말로그가능성의일면을내포하게되었다고할수있겠으며, 그런의미에서우리는새로운출발선에서있다고생각한다. 해결해야할숱한문제가우리를기다리고있는것이다. 28 Knuth 박사의 The Art of Computer Programming의한국어번역본이출간된다는반가운소식과더불어, TEX 의출판적용가능성에대한회의적시각으로인해한글 (HWP) 로이책을번역하게되었다는슬픈소식이전해지자, KTUG 내부적으로약간의기소침해진일이있었다. 이책조차한글 TEX 으로처리하지못한다면, 28 그러나동시에, 현재요구되는한글문서의타입세팅에 TEX 이충분히대응할수있을정도가되어 있다는것을자랑스럽게생각한다. 18
지금까지해온모든것이다쓸데없는일이아니었을까? 어쩌면아직도 TEX 으로는한가지서체밖에쓸수없다든가, 똠방각하 를찍을수없다든가, 확장한자를사용할수없다든가, 자간행간조절이안된다든가, 글자모양이출판물에는적합하지않다든가하는수많은 상식화된오해 를극복할만한결과물을납득할만하게제공하지못한잘못도없지않은것일터이다. 아니면, TEX 이아직도개선되고발전하고있는새로운프로그램임을알리지못한것이거나. 19