KTUG마당은 KTUG를 방문하는 모든 이용자가 대화를 나누고 소식을 전하는 곳입니다.

  • 로그인 없이 자유롭게 글을 읽고 쓸 수 있는 철학은 처음과 같이 계속됩니다.
  • Team Blog의 글을 이곳 게시판의 "정보글"로 모았습니다. Team blog는 기고자가 올린 글에 질문을 받는 부담을 줄이기 위하여 댓글을 허용하지 않았습니다. 그러나 이곳 게시판으로 모으면서 댓글을 달 수 있습니다. 게시물을 작성하실 때 댓글을 원하지 않으시면 댓글을 허용하시지 않으시기를 바랍니다. 또한 불필요한 소모성 댓글을 달지 않도록 주의하여 주시기를 바랍니다.
  • TeX과 관련된 질문이나 답변은 QnA 마당을 이용하십시오. TeX과 관련된 질문은 지웁니다
  • MathJax를 이용한 수식조판을 사용하실 수 있습니다. 여기를 참조하세요.
  • 스팸 글을 막기 위하여 짧은 시간 내에 다시 글이 등록되는 IP를 막거나, 광고 글을 막기 위하여 금지어로 .com, .net 등을 설정하고 있습니다. 다소간의 불편함이 있으시더라도 양해 바랍니다.
    • 금지어에서 stackexchange, stackoverflow, ctan, overleaf, , github, google.com, gmail.com, .org, .io, sil.org, wiki.com, tistory.com등은 해제하였습니다.
  • 사용하는 편집기는 CKeditor입니다. 편집기에서 [enter]를 누르면 <p> 태그가 들어가고, 문단으로 생각하고 한줄을 비웁니다. 글줄만 바꾸려면 shift-enter 를 누르시면 <BR>가 들어가므로 용도에 맞게 나누어 쓸 수 있습니다.

자유글 국어의 로마자 표기법, 마지막

2015.06.17 17:11

nanim 조회 수:4185 추천:1

앞선 글

  • 문제: http://www.ktug.org/xe/index.php?document_srl=207243&mid=KTUG_open_board
  • 한글의 분해와 조립: http://www.ktug.org/xe/index.php?document_srl=208182&mid=KTUG_open_board
  • 전자법: http://www.ktug.org/xe/index.php?mid=KTUG_open_board&document_srl=208446
=====

이제 마지막으로, 실제 "국어의 로마자 표기법"을 구현해보겠습니다.

현행 국어의 로마자 표기법은 국어의 표준 발음법에 따라 적는 것이 원칙이고 로마자 이외의 부호는 (되도록) 사용하지 않습니다.
문제는 이 "표준 발음법"입니다. 기록된 문자와 실제 소리나는 발음이 상당히 다르고, 여러 음운현상이 끼어들기 때문에 이를 구현하기가 쉽지만은 않습니다.
제일 어려운 게 종성(받침)의 발음입니다. 어말 또는 자음 앞이냐, 음의 동화나 첨가가 인정되느냐 등에 따라 같은 글자라도 다른 소리로 적어야 하는 경우가 많습니다.

이 기능을 구현하는 데 있어 제일 먼저 떠오르는 생각은 초+중+종+초로 이어지는 string을 분석해서 종+초 부분을 상황에 따라 적절히 구성하면 되지 않겠는가 하는 것인데요, 그것도 한 가지 방법일 것입니다.
이 글에서는, 그러나, 애써 구해둔 "전자법"에 의한 표기를 살려보려고 합니다. 아이디어는 굉장히 단순합니다. 전자법에 의한 표기 문자열을 얻어둔 상태라면, 그 문자열의 특정할 수 있는 부분을 regex로 치환하자는 것이지요.

간단한 예를 들면 다음과 같습니다: `죽변'과 `곡안'을 생각하면, 앞의 것은 gb으로, 뒤의 것은 g-으로 적혀 있을 것입니다. 이 상태에서 g-는 g로 그 이외의 경우는 k로 적기로 하면 앞의 것은 kb, 뒤의 것은 g가 됩니다. 
이 아이디어를 밀고 나가기 위해, 전자법의 종성 부분을 다음처럼 넣어두겠습니다.

\dict_fn:nn { jong }
{
0=\empty,
1=K, 2=kk, 3=gs, 4=N, 5=NJ, 6=nh, 7=T, 8=L, 
9=LG, 10=lm, 11=lb, 12=ls, 13=lt, 14=lp, 15=lh,
16=m, 17=P, 18=BS, 19=S, 20=sS, 21=NG, 22=J, 23=C, 24=k,
25=t, 26=p, 27=H
}

(kk, gs, nh, lm, lb, ls, lt, lp, lh 등도 같은 방식으로 처리할 수 있겠지만 여기서는 아이디어만 보이기 위하여 이 모든 경우를 모두 구현하지 않았습니다.)
즉, 초성과 달리 종성은 일단 대문자로 써둔다는 것입니다. 그리고 다음과 같은 regex_replace를 적용합니다.

\regex_replace_all:nnN { K- } { g } \g_output_tl

나중에 K 대문자를 전부 소문자로 바꾸게 하면, 이 이외의 경우 종성 ㄱ은 모두 k로 나타날 것입니다.

참 재미나고 좋은 방법인데요, 문제는 l3regex 패키지가... 좀 속도의 문제가 있다는 거지요. 여러 개의 regex를 적용하면 아주 조금 지체가 발생합니다.
아무튼 이 강좌(?)의 목적은 아이디어를 구현하는 데 있으므로 (실용성은 차치하고) 이것으로 만족하려 합니다.
(당연하지만, 표준 발음을 옵션인자로 주면 정확한 표기를 얻을 수 있는 것은 동일합니다. 속도 문제로 구현하지 않은 말음의 처리가 문제가 되면 이 방법을 사용하십시오. 소스에 해당 사항이 있습니다.)

=====

\givenName이라는 명령은 로마자 표기법의 인명 표기 규정을 적용한 것입니다. 사용방법은 성과 이름을 세미콜론(;)으로 분리하고 필요하다면 붙임표를 쓸 수 있게 해두었습니다. \givenName{황;빛-나}

=====

첨부 파일을 컴파일하면 처음 변환되는 문자열을 먼저 보이고 최종 결과를 보여줍니다. 이 과정이 번거롭다면 소스 중에 !!!!!라고 주석이 달린 행을 주석처리하면 됩니다. 

첨부파일 참조: RR-f.tex
샘플의 컴파일 결과: RR-f.pdf

=====

이것으로 제1차 라텍 스터디를 마칩니다. 감사합니다.




XE Login