한자만 입력하면 독음을 자동으로 달아준다면 참 좋을텐데... 에 관련된 내용입니다.
유니코드 한자의 우리말 독음 데이터베이스가 없을까 찾아봤는데, Windows의 IME 관련 API에 그런 게 있기는 있는 모양입니다만 TeX으로 이용하는 건 불가능할테고요. 다른 거라도 혹시 관련 라이브러리 공개된 게 없는지 아시는 분이 계신가요?
아무튼, 일단 U+4EXX와 U+4FXX의 500여자에 대하여 독음 데이터베이스를 만들었습니다.
%% U+4EXX
\clist_set:Nn \ondb_iv_xiv_zero {일,정,교,칠,상,하,면,만,장,삼,상,하,기,불,여,면}
\clist_set:Nn \ondb_iv_xiv_i {개,축,축,전,차,비,세,세,구,병,병,총,동,사,승,주}
\clist_set:Nn \ondb_iv_xiv_ii {구,양,주,유,량,엄,병,상,곤,구,개,아,장,중,극,개}
\clist_set:Nn \ondb_iv_xiv_iii {봉,관,관,찬,림,착,주,하,환,단,위,주,정,려,거,별}
\clist_set:Nn \ondb_iv_xiv_iv {불,이,예,내,복,구,구,탁,요,의,호,지,오,사,호,핍}
\clist_set:Nn \ondb_iv_xiv_v {락,음,핑,퐁,교,호,괴,승,승,을,은,야,먀,구,걸,야}
\clist_set:Nn \ondb_iv_xiv_vi {습,향,개,규,할,홀,서,둘,시,계,낭,갈,걸,돌,묠,올}
\clist_set:Nn \ondb_iv_xiv_vii {매,란,찰,유,설,염,볼,살,나,건,솔,얼,줄,잘,건,치}
\clist_set:Nn \ondb_iv_xiv_viii {귀,간,란,린,의,궐,료,마,여,쟁,사,사,이,촉,우,우}
\clist_set:Nn \ondb_iv_xiv_ix {우,운,호,기,오,정,사,세,긍,긍,아,사,아,제,아,극}
\clist_set:Nn \ondb_iv_xiv_x {두,망,항,대,교,해,역,산,형,묘,역,향,경,정,량,향}
\clist_set:Nn \ondb_iv_xiv_xi {경,야,친,박,우,설,단,렴,타,미,인,인,집,라,망,을}
\clist_set:Nn \ondb_iv_xiv_xii {십,인,륵,정,측,부,부,구,팔,장,금,개,빙,잉,종,불}
\clist_set:Nn \ondb_iv_xiv_xiii {산,륜,어,창,자,사,타,장,부,선,헌,탁,홍,동,인,천}
\clist_set:Nn \ondb_iv_xiv_xiv {간,흘,작,대,령,이,초,장,삼,상,의,무,문,인,반,묘}
\clist_set:Nn \ondb_iv_xiv_xv {앙,금,중,비,월,오,건,개,요,봉,창,임,왕,분,저,방}
%% U+4FXX
\clist_set:Nn \ondb_iv_xv_zero {종,기,패,여,조,돈,물,역,심,항,이,급,애,오,기,복}
\clist_set:Nn \ondb_iv_xv_i {벌,휴,근,비,침,부,탕,음,우,화,회,구,쉬,전,산,위}
\clist_set:Nn \ondb_iv_xv_ii {전,거,아,현,상,창,륜,창,순,신,위,저,척,현,노,백}
\clist_set:Nn \ondb_iv_xv_iii {고,이,이,설,반,혁,령,주,신,저,사,팽,사,가,비,이}
\clist_set:Nn \ondb_iv_xv_iv {사,치,정,전,감,매,단,저,포,거,피,소,차,위,저,주}
\clist_set:Nn \ondb_iv_xv_v {좌,우,앙,분,점,하,필,타,사,여,일,불,작,구,녕,통}
\clist_set:Nn \ondb_iv_xv_vi {이,헌,거,용,와,첨,석,카,포,패,회,격,로,항,합,양}
\clist_set:Nn \ondb_iv_xv_vii {백,법,명,가,이,병,길,한,활,궤,전,조,교,차,일,사}
\clist_set:Nn \ondb_iv_xv_viii {형,신,탁,간,질,해,래,이,치,과,광,례,음,시,미,주}
\clist_set:Nn \ondb_iv_xv_ix {혁,유,안,률,모,이,륜,동,타,치,순,공,주,의,여,천}
\clist_set:Nn \ondb_iv_xv_x {협,가,재,려,고,요,정,측,교,쾌,제,녕,농,진,모,후}
\clist_set:Nn \ondb_iv_xv_xi {군,정,진,좌,호,침,려,국,두,정,심,태,발,남,효,편}
\clist_set:Nn \ondb_iv_xv_xii {퇴,우,계,촉,아,구,서,광,곡,오,준,읍,보,량,조,초}
\clist_set:Nn \ondb_iv_xv_xiii {리,용,흔,경,현,삼,배,속,부,희,리,면,빙,보,유,사}
\clist_set:Nn \ondb_iv_xv_xiv {협,신,수,오,제,거,주,지,엄,량,려,래,리,검,수,부}
\clist_set:Nn \ondb_iv_xv_xv {화,구,효,배,천,표,숙,비,봉,아,엄,비,죽,흔,비,치}
이렇게 해놓고 한자 한 글자가 입력되면 그 글자의 코드포인트를 얻습니다. 예컨대 低자의 코드포인트는 U+4F4E입니다.
이 가운데 앞의 세 16진수 숫자를 가지고 ondb 매크로의 이름을 찾습니다. 4, F 는 iv와 xv이므로 \ondb_iv_xv_iv라는 매크로가 여기에 해당합니다.
마지막 16진수 숫자의 10진수 표현에 1을 더하여(0부터 시작하기 때문에) 해당 아이템을 가려냅니다. 즉 \ondb_iv_xv_iv의 15(E=14+1)번째 항목을 찾는 것이죠.
그것은 "저"입니다.
첨부파일은 이 아이디어를 구현한 것입니다. 그러나...
KTUG 한국 텍 사용자 그룹