The Asian Journal of TEX, Volume 1, No. 2, October 2007 Article revision 2007/10/31 KTS THE KOREAN TEX SOCIETY SINCE 2007 한글라텍에서조사이형태교체의자동화에관하여 On the

Similar documents
28 THE ASIAN JOURNAL OF TEX [2] ko.tex [5]

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

수식모드수식의표현법 수학식표현 조남운 조남운 수학식표현

PowerPoint Presentation

설계란 무엇인가?

PowerPoint 프레젠테이션

PowerPoint Template

Chapter ...

프로그래밍개론및실습 2015 년 2 학기프로그래밍개론및실습과목으로본내용은강의교재인생능출판사, 두근두근 C 언어수업, 천인국지음을발췌수정하였음

untitled

C++ Programming

<3235B0AD20BCF6BFADC0C720B1D8C7D120C2FC20B0C5C1FE20322E687770>

ISP and CodeVisionAVR C Compiler.hwp

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap03-변수와데이터형.pptx

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - kandroid_for_HI-CNU.ppt

PowerPoint Presentation

BibLaTeX을 이용한 한국어 참고 문헌 처리의 가능성

Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3

Microsoft PowerPoint - chap06-1Array.ppt

<4D F736F F D20C0CCBEBEC1A6BEEE5FC3A5BCD2B0B35F >

강의 개요

윈도우즈프로그래밍(1)

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

* pb61۲õðÀÚÀ̳ʸ

금오공대 컴퓨터공학전공 강의자료

Microsoft Word - [2017SMA][T8]OOPT_Stage_2040 ver2.docx

MySQL-.. 1

C# Programming Guide - Types

OCW_C언어 기초

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

제 1 절 복습 \usepackage{ g r a p h i c x }... \ i n c l u d e g r a p h i c s [ width =0.9\ textwidth ] { b e a r. j p g } (a) includegraphics 사용의일반적인유형

Microsoft PowerPoint - e pptx

Microsoft Word - FunctionCall


<30352DC0CCC7F6C8F B1B3292DBFACB1B8BCD2B1B3C1A42E687770>

WS12. Security

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

The Asian Journal of TEX, Volume 1, No. 1, April 2007 Article revision 2007/03/02 KTS THE KOREAN TEX SOCIETY SINCE 2007 LATEX Dissection of LATEX Macr

Windows 10 General Announcement v1.0-KO

199

187호최종

국어 순화의 역사와 전망

쉽게 풀어쓴 C 프로그래밍

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

강의 개요

Chap 6: Graphs

Visual Basic 반복문

2016 년 1 학기국어학개론 형태론 (Morphology): 형태소와교체, 단어의구성요소 1. 형태론의개념과분야 1) 개념 : 단어의구조를연구하는분야 2) 분야 : (1) 단어형성법 ( 조어법 ) (2) 굴절법 ( 屈折法, inflection): 조사나어미가붙어문법적

<BFACBDC0B9AEC1A6C7AEC0CC5F F E687770>

Microsoft Word - ijungbo1_13_02

Chap 6: Graphs

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

step 1-1

Vector Differential: 벡터 미분 Yonghee Lee October 17, 벡터미분의 표기 스칼라미분 벡터미분(Vector diffrential) 또는 행렬미분(Matrix differential)은 벡터와 행렬의 미분식에 대 한 표

<B3EDB9AEC0DBBCBAB9FD2E687770>

JUNIT 실습및발표

FGB-P 학번수학과권혁준 2008 년 5 월 19 일 Lemma 1 p 를 C([0, 1]) 에속하는음수가되지않는함수라하자. 이때 y C 2 (0, 1) C([0, 1]) 가미분방정식 y (t) + p(t)y(t) = 0, t (0, 1), y(0)

슬라이드 1

로거 자료실



gnu-lee-oop-kor-lec06-3-chap7

JAVA PROGRAMMING 실습 08.다형성

Windows 8에서 BioStar 1 설치하기

Microsoft PowerPoint - chap05-제어문.pptx

컴파일러

<28C3D6C1BE29C7D1B1B9BEEEB9AEB9FDB7D028317E D E687770>

KMC.xlsm

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

04 형사판례연구 hwp

완벽한개념정립 _ 행렬의참, 거짓 수학전문가 NAMU 선생 1. 행렬의참, 거짓개념정리 1. 교환법칙과관련한내용, 는항상성립하지만 는항상성립하지는않는다. < 참인명제 > (1),, (2) ( ) 인경우에는 가성립한다.,,, (3) 다음과같은관계식을만족하는두행렬 A,B에

<4D F736F F F696E74202D C61645FB3EDB8AEC7D5BCBA20B9D720C5F8BBE7BFEBB9FD2E BC8A3C8AF20B8F0B5E55D>


45-51 ¹Ú¼ø¸¸

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

Microsoft PowerPoint 웹 연동 기술.pptx

Microsoft PowerPoint - chap04-연산자.pptx

슬라이드 1

Secure Programming Lecture1 : Introduction

*캐릭부속물

C 프로그램의 기본

금오공대 컴퓨터공학전공 강의자료

C++ Programming

대한한의학원전학회지26권4호-교정본(1125).hwp

우리들이 일반적으로 기호

PowerPoint 프레젠테이션

OCW_C언어 기초

자연언어처리

Microsoft PowerPoint - web-part02-ch15-문서객체조작.pptx

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

PowerPoint Presentation

고3-02_비문학_2_사회-해설.hwp

4번.hwp

윈도우시스템프로그래밍

<B1E2BCFAB9AEBCAD5FB9DABAB4B1D45F F F64746F72732E687770>

Transcription:

The Asian Journal of TEX, Volume 1, No. 2, October 2007 Article revision 2007/10/31 KTS THE KOREAN TEX SOCIETY SINCE 2007 한글라텍에서조사이형태교체의자동화에관하여 On the Automation of JOSA Allomorph Alterations in Hangul LATEX 김강수 Kangsoo Kim 한글텍사용자그룹 karnes@ktug.or.kr KEYWORDS ABSTRACT Josa, allomorph alteration, Hangul LATEX, ko.tex, HLATEX, hlatexp This article presents issues regarding the automation of Josa allomorph alterations in Hangul LATEX systems. Josa is one of the peculiar grammatical elements in Korean, which attaches to nouns to mark their cases or functions (subject, object, etc.) in sentences. In many cases, a single Josa has variants (or allomorphs) that are chosen according to the phonological condition of the preceding noun. In a LATEX document, the phonological feature of a noun cannot be often pre-determined. Therefore, automation of Josa allomorph alteration is required for a Hangul LATEX system. In this paper, we will review automatic Josa allomorph alteration methods in different Hangul LATEX systems, and identifies some related problems. 1 들어가는말 우리말에는 조사 ( 助詞 ) 라는독특한문법범주가있다. 주로체언또는부사나연결어미에 결합하여다른말과의문법적관계를나타내는관계언으로서, 이견이있기는하나학교문 법에서는품사 ( 즉단어 ) 의하나로취급되는의존형태소이다. [3] 조사의존재는우리말을 교착어로분류하게하는중요한특성가운데하나이다. 그런데조사들중에는동일한기능을수행하는이형태 ( 異形態 ; allomorph) 혹은변이 형 (variant) 을갖는것들이있다. 하나의기본형 ( 형태소 ) 에대한이형태들은상보적 ( 배타 적 ) 으로분포하며, 대부분의경우조사앞에선행하는단어의음성적특성에따라알맞는 이형태가선택된다. 1 예를들어주격조사 이 / 가 는의미가완전히동일하며 이 가자 음아래에서, 그리고 가 가모음아래에서분포하여상보적분포를보이는이형태인것 이다. 조사자체를라텍 (LATEX) 에서특별히취급해야할필요는없다. 그러나매크로로치환 된문자열의마지막음소의조건, 즉자음인가모음인가또는특정음성이오는가에따라 라텍이조사를달리선택해야하는경우가있다. 또는상호참조 (cross-reference) 와같이 1. 이러한이형태의결정은예외가없는필수적이고자동적인교체이다. 어떤이형태들은말하는이의의도에따라수의적이고비자동적으로교체되기도한다. Copyright 2007 by the Korean TEX Society

154 THE ASIAN JOURNAL OF TEX 나중에결정되는문자열을조사가이어받을때그조사를사전에미리결정하지못하는경우도있다. 이들을적절하게처리하는것은한글라텍이반드시가져야하는기능중하나이다. 이글은몇가지중요한한글라텍매크로들이이러한문제를어떻게처리하여왔는지검토하고, 현재의해결방법에대하여알아본후, 이에연관된문제들에관하여시론적인제안을하는것을목적으로한다. 대상으로하는한글매크로패키지는 hlatexp, HLATEX 과 ko.tex 이다. 2 문제의소재 2.1 조사결정의자동화가필요한상황 조사를사전에, 즉원본을입력할때결정할수없는대표적인경우는상호참조이다. 다음 인용문은이러한상황을잘설명하고있다. 라텍이제공하는기능중의하나로, ref, pageref 명령등을사용하면자 동으로생성된장이나절번호를참조할수있습니다. 그런데, 이들명령을사 용하여문서를작성하다보면자동으로표시될번호를미리알수없기때문에 바로다음에이어질조사를쓰는데에어려움이따릅니다. 문제 \ref{sampref} 를보면과같은예를생각해봅시다. 사용자가문서 를입력할때 \ref{sampref} 라는참조명령이생성할숫자를미리알수없 습니다. 따라서조사 을 을사용해야할지또는 를 을사용해야할지알수 가없습니다. [6, 6 7 쪽 ] 이러한상황을편의상 참조형조사자동처리 라고부르기로하자. 2 참조형조사자동처리 는상호참조의경우뿐아니라문헌인용 (citation) 의경우에도역시필요하다. 이와다른경우로서, 매크로로치환된문자열을생각할수있다. 예컨대, \mycar 라는 매크로로자동차라는문자열을치환하기위하여 \newcommand\mycar{ 자동차 } 라고정의한경우를생각하자. 우선 \mycar 는 과같은코딩은별다른문제가없는것처 럼보인다. 그러나, 나중에원본을수정하면서, 자동차 라는문자열대신 내차모닝 이 라고이정의를바꾸면위와같은입력이 내차모닝는 으로치환되기때문에잘못된결 과를얻는다. 이위치에서의보조사 은 / 는 은치환되는문자열의음성적상황에맞게 라텍이선택할필요가있다. 이러한상황을편의상 비참조형조사자동처리 라고부르기로 한다. [1, 23 쪽 ] 2. 이것을 자동조사 ( 처리 ) 라고부르는것은 hlatexp 이래의관행이다. HLATEX 에서는 0.99 버전까지 자동조사 라는용어를사용하다가, 그후조사의이형태뿐아니라매개모음및서술격조사어간탈락까지매크로로구현하면서 자동음운변화처리 라고불렀다. [4, 29 쪽 ] 이글에서는이두용어를구별없이사용하기로한다.

VOLUME 1, NO. 2, OCTOBER 2007 155 표 1. 우리말조사규칙앞단어끝소리와 / 과을 / 를이 / 가은 / 는 ( 이 ) 라 ( 으 ) 로 리을 ( ㄹ ) ㄹ아닌종성 과을이은이라 로 으로 중성와를가는라로 2.2 조사교체의규칙우리가문제삼는조사이형태교체는 ( 다행히 ) 자동적교체이며음운론적으로조건된교체이다. 따라서조사가출현하는위치의음운적조건이명확하면형태는자동으로결정된다. 표 1은몇가지중요한조사들의형태교체를요약한것이다. 이표에서예시한조사들은모두앞단어끝소리라는음운론적조건에의해형태가결정된다. 이가운데, 라 / 이라 의경우는특별히언급할것이있다. 이것은그자체하나의조사라기보다, 유일하게활용하는조사인서술격조사 이 ( 다 ) 의활용형중하나일뿐이다. 3 서술격조사의어간은직전음운이모음일경우탈락또는생략이허용되는것으로보이나, 이것은강제되는조건이아니므로반드시 이 를생략해야하는것은아니다. 그러나활용어미가 라 이거나 라고, 라서 등의경우에는어간의생략형이더널리사용되는것이일반적이다. 즉, 이것은녹차이다. / 이것은녹차다. 위의문장은둘다허용되며앞의것이좀더문어적느낌을주는정도이지만, 이것은녹차이라고할수있다. / 이것은녹차라고할수있다. 이예에서는전자가거의쓰이지않는다. 3 해결방안의모색 3.1 hlatexp 의자동조사구현 조사이형태선택의자동화문제를처음으로구현한것은 hlatexp [6] 의 hangul.sty 패 키지였다. 이패키지는참조형조사, 그중에서도숫자형태의참조문자열에대해조사를 붙일때그조사의형태를자동으로선택하는코드를포함하고있다. 문서가남아있지않 아자세한사정을알수는없으나이때직면했던문제는다음과같았을것이다. 1 완성형 한글코드의자소분리가매우어려웠다. 4 3. 이 ( 다 ) 가과연조사인지에대해서견해가일치되어있지않은것같다. 은광희의 [4] 에서는 지정사 라는용어를사용하고있는데이글에서는학교문법을따라이를조사로간주한다. 국어학적문제는이글의주제와무관하다. 4. hlatexp 는완성형한글을처리하는패키지였다.

156 THE ASIAN JOURNAL OF TEX 2 라텍으로이미식자된또는처리된이전문자열의코드값을역추적하는것이어려 웠다. 만약한글코드의자소분리가가능하였다면조사처리는한결쉬웠을지도모른다. 종 성코드에자음또는모음에해당하는표지를넣는것이그다지수고롭지않은일이되 었을수도있고이를역추적하는데도큰노력이필요하지않았을터이다. 그러나완성형 (KSC5601; 후의 KS X 1001) 을표준으로채택한결과직전문자에서종성코드만을분 리해내는것이거의불가능해졌으며, 만약말음표지를붙이려한다면수천자또는수만 자에해당하는모든문자별로각각처리해야했을것이다. 한글코드에붙여넣은말음표지 매크로가다른라텍매크로와충돌할가능성까지염두에둔다면아주어려운일이었음을 짐작할수있다. 그래서 hlatexp 에서선택한방법은, 대략다음과같은절차를거치는것이었다. 5 1 장절명령또는라벨명령이불리는시점에현재의 \@currentlabel 값 ( 숫자 ) 을 \k@fsa 라는명령의인자로넣어두고이것을.aux 파일에기록한다. 2 \ref 명령이불리는시점에서 \k@fsa 의인자로넘어오는숫자를계산하여, 1 의자 리숫자에대해그값이 0, 1, 3, 6, 7, 8 이면 \k@fson 플래그를활성화하고, 그렇지 않은경우에는이값을 \k@fsoff 로한다. 즉, 마지막음성이자음인가모음인가를 표시해두는것이다. 3 자동조사명령 \ 가 는직전에넘어온 \k@fs* 를받아서그값에따라 이 나 가 를선택한다. 즉, \k@fson 이면 이 를, 그렇지않으면 가 를식자하도록한다. 먼저 hangul.sty 6 는필요한조건들을다음과같이선언하고있다. 77 \newif\ifk@fs 78 \newif\ifk@rfs 79 \DeclareRobustCommand*{\k@fsoff}{\global\k@fsfalse} 80 \DeclareRobustCommand*{\k@fson}{\global\k@fstrue} 81 \DeclareRobustCommand*{\k@rfsoff}{\global\k@rfsfalse} 82 \DeclareRobustCommand*{\k@rfson}{\global\k@rfstrue} \k@fson 과 \k@fsoff 는단지 \k@fs 라는조건이참인지거짓인지만을나타낸다. \k@rfs 조건은ㄹ종성을처리하기위한것이다. \label 명령을재정의하여라벨을.aux 에쓸때 \k@fsa 코드를붙이도록한다. 174 \ifauto@josa 175 \def\label#1{\@bsphack 176 \protected@write\@auxout{}% 177 {\string\newlabel{#1}{{\@currentlabel} 178 {\thepage\noexpand\k@fsa@org{\noexpand\number\noexpand\c@page}}}}% 179 \@esphack} 180 \fi 5. 이스케치에서는주격조사 이 / 가 의선택만을예로들었다. 6. 이글에서다루는 hangul.sty의버전은 1998/11/20이다.

VOLUME 1, NO. 2, OCTOBER 2007 157 된다. 이러한조작의결과, 첫번째 LATEX 실행시.aux 파일에예컨대다음과같은행을쓴다. \newlabel{samplelabel}{{4\k@fsa {4}.2\k@fsa {2}} {10\k@fsa {10}}} 다음실행시이행이처리되는데, 이때 \k@fsa 명령은다음과같이정의되어활성화 83 \DeclareRobustCommand*{\k@fsa}[1]{{\count0=#1\relax 84 \ifnum\count0<0 \count0=-\count0 \fi 85 \count1=\count0 \divide\count1 10 \multiply\count1 10 \advance\count0 -\count1 86 \ifcase\count0 87 \k@rfson \k@fson \or%0 88 \k@rfsoff\k@fson \or%1 89 \k@rfsoff\k@fsoff\or%2 90 \k@rfson \k@fson \or%3 91 \k@rfsoff\k@fsoff\or%4 92 \k@rfsoff\k@fsoff\or%5 93 \k@rfson \k@fson \or%6 94 \k@rfsoff\k@fson \or%7 95 \k@rfsoff\k@fson \or%8 96 \k@rfsoff\k@fsoff %9 97 \else\k@fson\k@rfson \fi}} 84 85 행은넘어온인자 (number) 의일의자리수를구하는것이다. 그런다음 0 9 의각 경우에대하여종성표지조건들을설정한다. 7 이제입력된원본에서 \ref{samplelabel}\ 가 라는매크로를만나면, 8 287 \DeclareRobustCommand*{\^^b0}[1]{% 288 \ifx#1^^a1\@yi@ \else 289 \ifx#1^^fa\@gwa@\fi 290 \fi} 위의정의에의하여 \@yi@ 라는매크로를부르게되는데, 이것은 275 \def\@yi@{\ifk@fs 이 \else 가 \fi} 로정의되어있다. 즉, \k@fson 이면 이 가선택되는것이므로참조문자열 ( 숫자 ) 의일의 자리가 0, 1, 3, 6, 7, 8 이면주격조사로 이 가식자된다. 이런방식으로 hlatexp 에다음과같은조사자동처리매크로가정의되어있다. \ 이, \ 가, \ 은, \ 는, \ 을, \ 를, \ 과, \ 와, \ 로, \ 으로 hlatexp 의조사이형태선택의자동처리는그선구적인의미가크지만아직은본격 적인조사자동선택이라고말하기어려운면이있다. 1 자동조사가 \label, \ref 에한정되고 \cite 에대해서는구현되지못했다. 7. 0 은 영 이라고읽고 10 은 십 이라고읽으므로서로다른끝소리이지만ㄹ이아닌자음이라는조건이같으므로별도로처리하지않고일의자리만으로처리해도상관없다. 8. 가 는완성형한글코드 B0A1 이다.

158 THE ASIAN JOURNAL OF TEX 2 참조문자열이숫자, 영문자, 일부한글부호문자인경우만정의되어, 일반적인문 자열인경우에대한대책이없었다. 3 참조가아닌상황의자동조사문제가해결되지않았다. 4 \label 명령을자체적으로재정의하는다른라텍패키지들과함께사용될경우충 돌을피할수없다. 5 pdf 제작을위한 hyperref 패키지에서문제를일으켰다. 위의 3, 5 항은후술하는 HLATEX 에서도여전히문제가되었던것이므로이후상술할 것이다. 3.2 HLATEX 의자동조사구현 HLATEX 의조사선택알고리즘은기본적으로 hlatexp 를계승하고확장한것이다. 9 즉, 말 음표지매크로를미리붙여두었다가식자시에말음표지매크로의인자를검토하여조 사이형태를선택하는아이디어를여전히사용하고있다. 그러나숫자에만적용되던말음 표지를완성형한글문자까지확장한것과 \cite 에대하여부분적이나마자동조사가동 작하도록한것이 HLATEX 의기여에해당한다. HLATEX 의자동조사매크로중 \ 가 는 hangul.sty 10 에서다음과같이정의된다. 900 \def\^^b0{\@ifnextchar^^ed\only@gt\ga@or@gwa} 901 \def\ga@or@gwa#1{% 902 \ifx#1^^a1\@josa{ 가 }{ 이 }\else 903... 904 \fi 905 } 그렇다면여기서 \@josa 란무엇인가. 이것은아직확정되지않은매크로로서, 상황에따라 \@firstoftwo 가되거나 \@secondoftwo 가될것이다. 이상황을제어하기위한매크로 로서, \@jung, \@jong, \ri@ul 이마련되어있다. 즉, 649 \DeclareRobustCommand*{\@jung}{\gdef\is@rieul{n}% 650 \global\let\@josa\@firstoftwo\ignorespaces} 651 \DeclareRobustCommand*{\@jong}{\gdef\is@rieul{n}% 652 \global\let\@josa\@secondoftwo\ignorespaces} 653 \DeclareRobustCommand*{\ri@ul}{\gdef\is@rieul{y}% 654 \global\let\@josa\@secondoftwo\ignorespaces} 말하자면, \@jung 인경우 \@josa 는 \@firstoftwo 로재정의되므로중성 ( 모음 ) 아래서는 \@josa 의두인자가운데첫번째것 가 가선택되는것이다. 이들이모두 robust 명령으 로정의된이유는인자들이옮겨다니는과정에서풀리지않게하려는것이다. [8, 847 쪽 ] 9. HLATEX 1.0.1 버전은유니코드 UTF-8 입력을받아들이는 Omega(Lambda) 패키지를중심으로구성되어있다. 그러나이글에서문제삼는것은 hangul.sty 을중심으로하는라텍패키지로서의 HLATEX 이다. Lambda 에서한글자동조사문제는이와는다른방식으로구현되었다고할수있으나, 이에대한고찰은이글의범위를넘는다. 후일다른글에서이문제를다룰수있기를희망한다. 은광희의같은글 [4] 를참조. 10. 이글에서다루는 hangul.sty 은 HLATEX 1.0.1 버전에서 euc-kr.tex 버전 1.0 을부른다.

VOLUME 1, NO. 2, OCTOBER 2007 159 이매크로들의명칭이의미하는바는자명하여, 앞단어의끝소리가각각중성 ( 모음 ) 인지종성 ( 자음 ) 인지아니면ㄹ자음인지를나타내고있다. 한편, 이러한 \@jung, \@jong 등은 \make@josa 라는매크로에의하여결정된다. 이매크로는후에참조될모든참조자에 미리붙여서.aux 파일에쓴다. \newlabel{test}{{1\make@josa{1}}{1\make@josa{1}}} \newlabel{test2}{{ 테스트 \make@josa{ 테스트 }}{1\make@josa{1}}} 그후이참조자를호출하면, 예컨대숫자의경우 \ifnum 0=\k@second\@jong\else \ifnum 1=\k@second\ri@ul\else \ifnum 3=\k@second\@jong\else \ifnum 6=\k@second\@jong\else \ifnum 7=\k@second\ri@ul\else \ifnum 8=\k@second\ri@ul\else... 와같은방식으로 \make@josa 가 \@jung, \@jong, \ri@ul 가운데하나로바뀐다. 숫자나영문자가아닌한글또는한글기호문자의경우에는조금특별한방법을이용한 다. HLATEX 배포파일중의하나인 josa.tab 에는기호문자, 한자, 한글중에서끝소리가 모음이거나ㄹ인것을미리정의해두고있다. hangul.sty 이이파일을읽어서각문자에 대하여 \@jung, \@jong 등의값을미리설정해두는것이다. 이를통해일반문자의경우 까지도자동조사를처리할수있게되었다. 이제남은일은참조자에따라 ( 숫자든문자든 ) \make@josa 를붙여서.aux 에쓰게하 는것이다. 한글이름 (names), 예컨대 \indexname 의경우, 191 \def\ksnamedef#1#2{% 192 \AtBeginDocument{\@namedef{ks#1}{#2\protect\make@josa{#2}} 193 \@namedef{#1}{\expandafter\protect\csname ks#1\endcsname}}} 194 \ksnamedef{indexname}{ 찾아보기 } 와같은방식으로정의하여 찾아보기 라는문자열다음에자동조사명령을쓸수있게 한다. \bibitem 과 \label 명령도 \make@josa 를붙이도록다음과같이정의한다. 856 \def\label#1{\@bsphack 857 \protected@write\@auxout{}% 858 {\string\newlabel{#1}% 859 {{\@currentlabel\string\make@josa{\@currentlabel}}% 860 {\thepage\string\make@josa{\thepage}}}}% 861 \@esphack} HLATEX 은 hlatexp 의열개의자동조사명령이외에 \ ㅣ 와 \ ㅡ 라는특별한매크로 두개를더두고있다. 이것은매개모음이나서술격조사어간의탈락을일반화하여처리할 수있게하는것이다. 즉, \ ㅣ는모음아래서는아무글자도찍지않고자음아래서는 이 를선택하도록하는매크로이다.

160 THE ASIAN JOURNAL OF TEX 3.3 새로운문제점 HLATEX 의조사이형태자동선택방식은숫자가아닌문자까지자동조사를붙일수있다는점외에도 \cite에자동조사를처리할수있다는장점을가지고있었다. 그러나, 일반적인의미에서다음과같은한계를가졌다. 1 Lambda와달리라텍매크로로는참조나인용이아닌일반적텍스트에자동조사를붙일수없었다. 즉, \make@josa가미리설정되어있지않은문자만이드러나는상황에서는자동조사가작동하지않는다. 이것은위의두매크로패키지에서채택한알고리즘이가진한계였다. 2 문헌인용에있어서흔히사용되는 cite 나 natbib 와같은패키지는그자체에서 \bibitem을재정의한다. 이재정의가 hangul.sty보다나중에온다면자동조사처리를위한정의가무력화될수있다. 반대로 hangul.sty를이들보다나중에로드하면이번에는 natbib 등이제대로동작하지않는다. 즉, 여러패키지를활용해야하는상황에서 \make@josa를일일이붙여주는방식은패키지충돌의가능성을항상안고있다. 한편, 2000년대에접어들면서 pdflatex 의사용이일반화되고라텍으로고품위 pdf를제작 11 하는문제가제기되면서주목받은 hyperref라는패키지가 HLATEX 의자동조사처리기능과충돌한다는것이알려졌다. hyperref과 hangul 패키지를동시에로드하면, 모든라벨과참조자들에붙은 \make@josa가모두풀려서다른패키지에서이를처리할방법이없게되어에러를보이게된것이다. 이러한현상은 ulem, endfloat와같은중요한패키지에서도나타났다. KTUG에서는궁여지책으로 hangul-nojosa라는제3의패키지를만들게되는데이것이하는일은 hangul.sty 내의조사관련코드를완전히제거한것이었다. 그결과, 다른패키지와의충돌은없어졌으나이번에는자동조사라는한국어문헌조판에매우중요한기능을사용할수없게되는결과를가져왔다. [2, 4쪽 ] HLATEX 1.0.1에서제공하는 khyper라는패키지는부분적으로 hyperref와의충돌을완화해주지만 hyperref 의모든기능을사용할수있게한것은아니었던까닭에여전히문제를안고있다. 4 새로운시도 4.1 hangul-k 패키지 2004 년 5 월경, 김도현은종래와다른새로운자동조사처리방식을발표하였다. 이것은 어차피 hangul.sty 에서는사용할수없었던 hyperref 이상호참조시에만들어내는참조 문자열을역으로추적하여이문자열자체로부터자동조사결정에필요한값 (jong/jung /rieul) 을알아내는방식이었다. [1] 11. 주로문제가되었던것은 pdf 한글 bookmark, pdf 내의 hyperlink, pdf 파일의한글텍스트검색과추출등에관련된것이었다.

VOLUME 1, NO. 2, OCTOBER 2007 161 이새로운자동조사처리루틴을 hangul-nojosa 와결합하여 hangul.sty 를대체하 고자한것이 hangul-k.sty 이다. 우선, hyperref 패키지의 \hyper@link 라는매크로를다음과같이재정의한다. 12 759 \let\hyper@link@orig\hyper@link 760 \def\hyper@link#1#2#3{\hyper@link@orig{#1}{#2}{#3}% 761 \begingroup\let\null\@empty\xdef\make@josa{#3}\endgroup 762 } 여기서도 \make@josa 라는매크로가사용되고있지만, 이매크로를.aux 파일에쓰지는 않는다. 즉, 하이러링크로만들어지는참조부에대해서만이매크로가실행되도록한것이 다. \make@josa 로들어온문자열을분석하여마지막한글자를취한다. 784 \providecommand*{\josa@lastthreechar}[1]{% 785 \@ifemptyarg{#1}{0000}{\expandafter\@lastthreechar#1 \^^M}} 786 \def\@lastthreechar#1#2 \^^M{% 787 \@ifemptyarg{#2}{000#1}{\@@lastthreechar#1#2 \^^M}} 788 \def\@@lastthreechar#1#2#3 \^^M{% 789 \@ifemptyarg{#3}{00#1#2}{\@@@lastthreechar#1#2#3 \^^M}} 790 \def\@@@lastthreechar#1#2#3#4 \^^M{% 791 \@ifemptyarg{#4}{0#1#2#3}{\@@@@lastthreechar#1#2#3#4 \^^M}} 792 \def\@@@@lastthreechar#1#2#3#4#5 \^^M{% 793 \@ifemptyarg{#5}{#1#2#3#4}{\@@@@lastthreechar#2#3#4#5 \^^M}} \@josa 라는매크로는두개의인자를취하는데, 첫번째인자를 \@jung, 두번째인자를 \@jong 등으로정의하여둔다. 그런다음 \make@josa 를처리하여마지막문자를취하고 그문자에따라 \@jung, \@jong, \ri@ul 중하나의값을되돌려준다. 797 \def\@josa#1#2{% 798 \def\@jung{#1}\def\@jong{#2}\def\ri@ul{\@ifemptyarg{#1}{}{#2}}% 799 \edef\lastthree@make@josa{\josa@lastthreechar{\make@josa}}% 800... 801 \if 0\@last\@jong\else % 0이면 \@jong 되돌림. 즉 #2. 802 \if 1\@last\ri@ul\else 803 \if 2\@last\@jung\else 804 \if 3\@last\@jong\else 805 \if 4\@last\@jung\else 806 \if 5\@last\@jung\else 807 \if 6\@last\@jong\else 808 \if 7\@last\ri@ul\else 809 \if 8\@last\ri@ul\else 810 \if 9\@last\@jung\else 811... 812 } 만약생성된문자열의마지막문자 \@last 가기호문자나한글또는한자라면 josa.tab 에서적절한값을가져오도록하는것은 hangul.sty 의경우와동일하다. 13 그런다음에, \ 가와같은자동조사매크로를이를테면 12. hyperref 의로딩위치때문에이재정의는 AtBeginDocument 에서이루어진다. 13. 다만, hangul-k 의 josa.tab 은 HLATEX 의것에몇문자를더추가하고있다.

162 THE ASIAN JOURNAL OF TEX \def\ 가 {\@josa{ 가 }{ 이 }} 와같이정의해둔다. 14 hangul-k에서는 \ 라 와 \ 이라 를새로이추가하였고이것은 ko.tex 에이어졌다. hangul-k의최대장점은,.aux 파일에아무런조작을가하지않는다는것이다. 그결과 hyperref은물론이고상당히많은다른스타일과의충돌을해결하였다. 한편, 여전히해결해야할문제로남은것은다음과같다. 1 hyperref에대한의존성은반드시바람직하지않다. 모든문서에 hyperref을로드하도록요구하는것은약간불필요한면이있다. 2 hyperref 에의해생성되는 hyperlink 텍스트가아닌, 일반적인평범한텍스트에자동조사를적용하지못하였다. hangul-k에서는궁여지책으로 \jong과같은말음표지를문서작성자가강제로부여하는방법을제안하였으나, 말끔하게이런표지없이자동조사가작동하는것이바람직할것이다. 이두가지문제는 hangul-ucs, 즉 ko.tex/utf에서해결된다. 15 4.2 ko.tex 의방법 16 한글문헌을 UTF-8 인코딩으로조판하는 hangul-ucs 패키지는초창기에앞에서설명한 hangul-k 와마찬가지로 hyperref 패키지에의존하는방법이차용되었다. 이당시 hangulucs 는한글문자의식자를 ucs 패키지에의존하고있었는데, 이패키지에알맞도록 hangulk 의 2 바이트문자를위한자동조사정의들을유니코드 UTF-8 인코딩에맞게포팅하는정 도였다. 그러나곧, 다음과같은문제가드러났다. 첫째, hyperref 패키지는온라인 pdf 문서를 만드는데특화되어있는것인반면, hangul-ucs 는다중목적의패키지로서굳이온라인 문서에만사용될것은아니라는점. 온라인문서가아닌도서나저널을조판하는데있어 서 hyperref 이굳이필요할것은없다는것이다. 두번째, 더심각한문제로서 hyperref 패키지가제공하는 \hyper@link 매크로에약간의후킹을추가하는 hangul-k 의방식이 프레젠테이션을제작하는데쓰이던 beamer 와계속충돌하였다는것이다. hyperref 패키 지에의존하는방법을고수하는한, 이충돌을제거하는것이쉽지않아보였다. 결국우리는 hangul-ucs 에서의자동조사구현에있어서 hyperref 에대한의존성을제 거하기로결정했다. 그러나이미언급한바 HLATEX 에서겪은바있는 hyperref 과의충 돌을다시불러들이고싶지는않았다. 이런양자의요구를모두충족하는지난한과업의 유일한해결책은 \ref, \pageref, \cite 와같은자동조사에연관된주요명령을재정의 하는것으로생각되었다. 이명령이불러오는참조자를특정토큰리스트에집어넣고필요 하다면이토큰리스트를분석하여조사를결정하게하자는것이다. 14. 실제로는 ^^b0^^a1 을정의해야한다. 15. 현재의 ko.tex/euc 버전은이부분에서설명한 hangul-k 의자동조사방식을따르고있다. 16. 이절은김도현이집필한내용을거의그대로재현하였다.

VOLUME 1, NO. 2, OCTOBER 2007 163 예를들어, \ref 와 \pageref 명령은 hangul-ucs 의중심엔진인 dhucs.sty 에서다 음과같이재정의된다. 262 \AtBeginDocument{% 263... 264 \let\@setref@dhucs@orig\@setref 265 \def\@setref#1#2#3{% 266 \@setref@dhucs@orig{#1}{#2}{#3}% 267 \ifx#1\relax\else 268 \gdef\josa@hyper@link@toklist{\expandafter#2#1}% 269 \fi}% 270 }%. 이제 \ref{fig:...} 나 \pageref{tab:...} 와같은코드는원래이명령이수행하던기 능을그대로수행할뿐아니라 17 피참조문자열이나페이지번호와같은숫자를 \josa@hype r@link@toklist 라는매크로에저장하여나중에이를처리할수있도록하고있음을볼 수있다. cite 나 natbib 와같이참고문헌을처리하는다른패키지에서도이와유사한재 정의를활용한다. 그러므로이러한패키지와함께사용될경우상호간같은명령을따로 재정의하는데따른위험이없는것은아니라고생각한다. 그런종류의충돌이발견되거나 보고되면자동조사처리메카니즘을확장하여나가야할것이다. \josa@hyper@link@toklist 에저장된토큰을분석하는일은 \ 이나 \ 가와같은자동 조사명령이불릴때활성화된다. 우리말조사 가 (U+AC00) 는 UTF-8 인코딩으로 0xEA 0xB0 0x80 이라는세개의옥텟으로표현되며, 이 (U+C774) 는 0xEC 0x9D 0xB4 로인코 딩된다. other character (catcode 12) 범주에속하는문자는그앞에이스케이프문자를 추가하여 control symbol 로만들수있으므로, 자동조사명령을다음과같이정의한다. 426 \def\^^ea#1#2{% 427 \ifx#1^^b0\ifx#2^^80% 가 428 \make@josa{ 가 }{ 이 }% 429 \else\error@josa\fi 430 \else\error@josa\fi} 431 \def\^^ec#1#2{% 432 \ifx#1^^9d\ifx#2^^b4% 이 433 \make@josa{ 가 }{ 이 }% 434 \else\error@josa\fi 435 \else\error@josa\fi} 436 \def\error@josa{\packageerror{dhucs}% 437 {Undefined Control Sequence}{}} 입력문서의원본에서 \ref{...}\ 가와같은코드를만나면 \make@josa 라는매크로 명령으로확장된다. 이명령은 \josa@hyper@link@toklist 에저장된토큰을검토하여 첫번째인자 ( 가 ) 또는두번째인자 ( 나 ) 가운데하나를되돌려준다. 376 \def\make@josa#1#2{% 377 \josa@hyper@link 17. latex.ltx 의 \@setref 명령과비교해보면, 위의정의는원본정의를거의그대로가져다쓰고있음을알수있다.

164 THE ASIAN JOURNAL OF TEX 378 %... 379 \ifnum\@josa=\@ne \ifx#1\empty #1\else#2\fi% rieul 380 \else \ifnum\@josa=\tw@ #1% jung 381 \else #2% jong 382 \fi\fi} 이코드에서보는대로, \make@josa 는 \@josa 라는카운터를활용하는데, 이카운터는 0, 1, 2 가운데하나가된다. 0 은이토큰리스트의마지막음소가 ( ㄹ이아닌 ) 종성자음임을 의미하며, 1 이면 ㄹ, 2 면종성이없는모음으로끝난다는것을뜻하는것이다. 257 \newcount\@josa 258 \def\jong{\global\@josa\z@} 259 \def\rieul{\global\@josa\@ne} 260 \def\jung{\global\@josa\tw@} 토큰열의마지막글자를얻기위해서다음과같이하였다. 312 \def\josa@hyper@link{% 313 \begingroup 314 \edef\dh@josa@temp{\josa@hyper@link@toklist}% 315 \toks@{}% 316 \expandafter\josa@hyper@link@\dh@josa@temp\@nil 317 \expandafter\josa@hyper@link@@\the\toks@ 318 \empty\empty\empty\empty\@nil 319 \endgroup} 여기서 \josa@hyper@link 는또다른매크로 josa@hyper@link@ 를부르는데, 이것은후 미재귀 (trail recursion) 기법 [7, 103 104 쪽 ] 을이용하여토큰을역순으로임시토큰리스 트 \toks@ 에저장한다. 323 \def\josa@hyper@link@#1{% 324 \ifx#1\@nil\let\next\relax 325 \else \let\next\josa@hyper@link@ 326 \if\noexpand#1\relax\else 327 \edef\act{\noexpand\toks@{#1\the\toks@}}\act 328 \fi 329 \fi\next} 이제마지막문자가제일처음위치에온또다른매크로 \josa@hyper@link@@ 를얻었 는데, 이것은다시 \josa@hyper@link 에의하여호출되어첫문자가무엇인지를확인하고 이로부터적절한조사이형태를결정하게한다. 331 \def\josa@hyper@link@@#1#2#3#4\@nil{% 332... 333 \ifx 1#1\rieul\else % il 334 \ifx 3#1\jong\else % sam 335 \ifx 6#1\jong\else % yuk 336 \ifx 7#1\rieul\else % chil 337 \ifx 8#1\rieul\else % pal 338 \ifx 0#1\jong\else % yong

VOLUME 1, NO. 2, OCTOBER 2007 165 339 \ifx l#1\rieul\else % el 340 \ifx m#1\jong\else % em 341 \ifx n#1\jong\else % en 342 \ifx L#1\rieul\else % el 343 \ifx M#1\jong\else % em 344 \ifx N#1\jong\else % en 345 \jung 346 \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi 347 \ifx n#2\ifx g#1\jong\fi\fi %skating 348 %... 349 \ifx i#3\ifx m#2\ifx e#1\jong\fi\fi\fi %time 350 %... 351 } 조사선택을위해서는마지막문자하나만있으면되지만, 이런간단한추적방법은어떤 경우마지막문자를적절하게얻는데실패하는경우도있다. 그래서마지막한글자만을 체크하지않고원래의토큰열에서마지막두세글자를얻어서검사하도록하고있다. 이상의복잡한과정을거쳐조사자동선택에필요한메카니즘을거의구현했다고생 각한다. 이제남은것은원래의토큰열의마지막글자가아스키문자가아니라 CJK 문자일 경우이다. 이를위해서 CJK 문자를식자하는매크로 \unihangulchar 를추가한다. 107 \DeclareRobustCommand*\unihangulchar[1]{% 108 %... 109 \global\@josa=#1 110 %... 111 } \unihangulchar 의인자는유니코드코드포인트이다. 즉 가 를 AC00 으로식자한다. 위의 코드는이유니코드코드포인트를 \@josa 카운터에할당하는것뿐이다. 그다음에위에서 말한 \make@josa 명령에의해조사가결정된다. \make@josa 매크로에는이렇게할당된 유니코드코드포인트번호를적절한조사유형으로구분하는다음과같은코드가포함되어 있다. 387 \ifnum\@josa>44031 \ifnum\@josa<55204 % hangul syllables 388 \advance\@josa-44032 % "AC00 389 \count@=\@josa \divide\count@28 \multiply\count@28 390 \advance\@josa-\count@ \advance\@josa4519 % "11A7 391 \ifnum\@josa=4519 \jung 392 \else\ifnum\@josa=4527 \rieul % "11AF 393 \else \jong \fi\fi \fi\fi 이코드는유니코드 Consortium이제공하는 Hangul Decomposition 을텍코드로구현한것이다. [9] 이것은한글음절문자 (U+AC00... U+D7A3) 의유니코드번호를각각에해당하는한글자모조합 (U+1100... U11FF) 유니코드번호로변환하고이로부터종성만을취하여해당문자가모음으로종결되는지, ㄹ종성인지기타종성인지구별하고있다. 한자와기호문자일경우는어떻게하는가? 한자는그한글음을얻어서같은방식으로종성

166 THE ASIAN JOURNAL OF TEX 유형을얻고기호문자의경우에도비슷한방법을사용한다. 18 5 맺는말 조사이형태선택의자동화는한글라텍에서빠뜨릴수없는기능이다. 지금까지구현된아이디어는크게두가지로나눌수있는데그하나는말음표지를미리.aux에기록해두었다가이를나중에말음코드로변환하여조사를선택하는방법이고, 다른하나는직전문자열을직접분석하여이로부터조사를결정하는방법이다. 조사이형태선택문제가해결되어온과정을살펴보면한글라텍의극적인발전과정을한눈에볼수있다. 또한유니코드를중심으로하는 ko.tex 으로이행해야할당위성이극명하게드러난다. ko.tex 이유니코드를채택함으로써얻을수있었던것은비단확장문자의식자에한정된것이아니라내부적인처리과정에있어서도대단히유용한이점을획득하였음을알수있다. 현재자동조사에관한문제는 ko.tex 에와서거의해결되었다. 그러나조사선택을위하여상당한노력을기울이지않으면안되는상황을피할수는없다. 향후한글라텍또는텍관련시스템을구축하는데있어서새로운텍엔진을구현하거나요구하게될때, 텍의 \sfcode나 \efcode와유사한새로운원시명령 (primitive) \josacode 같은것을추가한다면위에서언급한번거로운절차를일소할수있을것이다. 현재 luatex 이빠르게발전하고있으므로자동조사선택의구현에있어서도본격적으로프로그래밍언어를활용할수있는새롭고효율적인방법을기대한다. 참고문헌 1. 김강수, hangul-k 사용자안내서, 2004. http://faq.ktug.or.kr/faq/hangulkstyle 2., HLATEX 이후 LATEX 의발전, 2006. http://faq.ktug.or.kr/faq/karnes 3. 남기심 고영근, 표준국어문법론 ( 개정판 ), 탑출판사, 1992. 4. 은광희, 한글라텍길잡이, 2005. http://project.ktug.or.kr/hlatex/hlguide.pdf 5. 은광희 김도현 김강수, 한국어텍 ko.tex v0.1.0 사용설명서, 2007. http://project.ktug. or.kr/ko.tex/kotexguide.pdf 6. 차재춘, 한글 LATEX 사용자설명서, 1995. http://knot.kaist.ac.kr/htex/ 7. V. Eijkhout, TEX by Topic, Addison-Wesley, 1992. 8. F. Mittelbach, M. Goossens, and et. al., The LATEX Companion, 2nd edition, Addison- Wesley, 2004. 9. Unicode Consortium, Unicode Normalization Forms, Unicode Standard Annex #15, 2006. http://unicode.org/reports/tr15/ 18. 더자세한구현은 dhucs.sty 소스코드를참고하라.