LaTeX에 unicode와 cjk 패키지 적용하기
Published by Nineye under development tools on November 23, 2009
회사에서 정보 공유의 목적으로 MediaWiki를 이용하여 위키를 만들게 되었는데, 업무를 목적으로 하다보니, 입력되는 위키 페이지들을 보고용으로 쉽게 만들 수 있게 하는 기능이 필요하게 되었다. 따라서 그 기능을 지원하기 위해, w2l이라는 MediaWiki extension을 설치하게 되었고, w2l을 이용하기 위해 기본적으로 세팅해야 하는 내용들 중, 폰트와 관련된 부분을 보기로 한다.
w2l extension은 LaTeX 기반이며, pdflatex명령어를 통해 “위키문서 => LaTeX코드 => pdf문서”로 만드는 extension이다. 즉, w2l extension을 이용하려면 해당 서버에서 LaTeX을 지원해 주어야 하는 것이다.
필자가 MediaWiki를 설치한 서버에는 texlive LaTeX package가 이미 설치되어 있었으며, 영문 문서를 테스트 했을 때는 아무런 문제가 없었다. 하지만 linux가 항상 그렇지만, 한글 문서를 적용하려고 하니 여러 가지 문제가 발생하였고, 문제의 근간이 된 폰트 문제에 대해 쓰고자 한다.
우선, 적용하고자 하는 서버에 LaTeX이 설치되어 있지 않다면 설치하자. 필자는 현재까지 계속 지원되고 있는 texlive를 설치하였다.
# Debian의 apt-get을 통한 설치(필자의 환경은 이것인데, 다른 환경은 구글링을 통해...ㅋㅋ) # LaTeX 기본 설치(texlive tool + 기본 포맷 package) $ apt-get install texlive # LaTeX 풀 설치(약 700MB 정도된다. ㅡㅡ;;; 기본으로만 설치하고 필요한 package만 따로 설치해도 된다.) $ apt-get install texlive-full
1 LaTeX에 한글은 어떻게 적용할까?
LaTeX 에 있어서의 변환 툴은 그저 껍데기에 지나지 않고, 실질적으로는 LaTeX문서를 다양하게 표현하는 package가 더욱 중요하다. LaTeX은 이러한 다양한 문서 표현에 대해, 사용자들이 직접 문서 표현 포맷을 작성하고, 이 포맷을 package로 공유하게 함으로써, 현재의 LaTeX은, 표현하지 못하는 문서의 모습은 거의 없을만큼 방대해 졌다. 하지만 너무 방대해 지고, 전 세계의 사용자들이 각각 package를 제작하다보니, package들 끼리의 관계가 너무 복잡하게 얽혀있어서 소위 삽질을 많이 하게 된다. 필자도 한글을 적용하면서 삽질을 많이 하였고, 다시 삽질을 하지 않기 위해 한글 적용 문제를 정리해 보고자 하는 것이다.
LaTeX에서의 한글 적용은 다양한 package들이 존재하는데, kotex, cjk(chinese, japanese, korean – 우리나라가 맨 마지막에 나와서 기분 나쁘지만 뭐, 알파벳 순서니… ㅡㅡ;;;)등이 그것들이다. kotex은 국내에서는 많이 알려졌는데, 세계적으로는 아시아권(한국, 중국, 일본) 언어를 지원하는 cjk package가 더욱 알려져있으며, 이 package에 대한 지원도 잘 되고 있어서, cjk package를 선택하기로 했다.
# cjk package는 각 언어별로 따로 설치할 수 있다. "latex-cjk-해당언어"의 명칭으로 package가 제공된다. 필자는 귀찮고 문제 생길까봐 다 설치했다. $ apt-get install latex-cjk-all # fontforge로 cjk 관련 폰트를 생성할 때, 폰트 스크립트가 필요하다. 이는 latex-cjk-common package에 들어 있으니, 없으면 설치하자.
자, cjk가 설치되었으니, pdflatex명령을 통해 한글 tex문서를 변환해 본다. 아마… 잘 안될 것이다. 변환이 잘 된다면 성공이고, 이후의 과정은 무시해도 된다. 필자의 경우 utf-8 인코딩으로 저장된 tex문서를 변환해야 해서, unicode font를 설치해야 했고, byte단위의 한글 인코딩 문서라면 잘 변환될 수도 있을 것 같다. 아래 과정은 tex문서가 utf-8로 인코딩된 문서라 가정하고, utf-8문서를 다룰 수 있는 unicode font의 설치에 관련된 내용이니, 다른 문제로 고민한다면 아래 내용을 읽지 않아도 된다.
2 LaTeX에서는 어떻게 unicode를 지원할까?
pdflatex명령을 통해 생성되는 ~.log 파일에 “!Undefined control symbol ~어쩌구~ <문서내의 한글 내용> ~어쩌구~” 라는 에러 메세지가 있다면, 한글을 변환하는 cjk package는 정상적이지만, utf-8 인코딩 tex문서내의 한글 변환에 사용되는 폰트가 정상적이지 않은 것이다. 이 글에서는 이 경우의 오류만 다루기 때문에 다른 종류의 오류라면 구글링을 통해 찾아보기 바란다.
우선, LaTeX package들이 설치되는 곳에 truetype폰트가 설치되어 있는지 확인해 보자. 위치는 필자의 경우, /usr/share/texmf/fonts/truetype/ 이었다. 일단 여기 font가 설치되어 있다면 unicode를 지원하는 font인지 확인해 보자. unicode를 지원하는 폰트라면 LaTeX cjk package가 사용가능한 font인지 해당 font정보를 확인해 보도록 하자. 만약 cjk package에서 적용하지 못하는 font이거나, unicode를 지원하는 font가 없다면 Bitstream의 Cyberbit font를 설치하자.
잠깐 Cyberbit font에 대해서 설명하면, 이 font는 Bitstream사가 보유한, 비영리적인 목적으로 사용할 때는 공짜인 font이다. 그리고 이 font는 전 세계에서 큰 비중을 차지하는 unicode 입력 리스트들에 대해 지원을 하는, 역사적으로 가장 널리 알려진 font중 하나이다. 이 font에 대한 상세 내용은, Bitstream사의 홈페이지(www.bitstream.com)에 가보면 어딨는지 잘 모르겠고, Wikipedia의 설명(http://en.wikipedia.org/wiki/Bitstream_Cyberbit)을 참고하자.
3 unicode를 표현하기 위한 cyberbit font를 설치해 보자.
Cyberbit font를 LaTeX내에 설치해 주는 package가 존재한다면, 그 package를 통해서 쉽게 설치할 수 있겠지만, 아쉽게도 아직 없나보다. 따라서 수동으로 설치하는 방법을 따라 설치하였다. 다음의 순서에 따라 cyberbit font를 LaTeX내에 설치해 보자. 참고로 설치하는 위치는 필자의 환경 기준으로 쓰며, 만약 설치 장소가 /usr/share/~ 가 아니면 환경에 맞게 설치한다.
1. cyberbit font의 복사
1. 여기를 클릭해서, cyberbit font를 받자.
2. 압축을 해제하면 Cyberbit.ttf가 나오는데 이를 cyberbit.ttf로 이름을 변환해서(LaTeX에서는 대소문자를 구분한다.) /usr/share/fonts/truetype/bitstream/ 위치에 넣자.
3. 이렇게 설치한 font를 LaTeX에서도 사용할 수 있게 링크를 걸어준다.
$ mkdir -p /usr/share/texmf/fonts/truetype/bitstream/cyberbit/ $ ln -s /usr/share/fonts/truetype/bitstream/cyberbit.ttf /usr/share/texmf/fonts/truetype/bitstream/cyberbit/cyberbit.ttf
2. LaTeX 문서의 변환에 이용되는 파일들의 설치
- fontforge tool을 이용하여, LaTeX typesetting 시스템에 사용되는 파일 포맷인 .tfm(http://en.wikipedia.org/wiki/TeX_font_metric 참고)과, uuencoding에 사용되는 파일 포맷인 .enc(http://en.wikipedia.org/wiki/Uuencoding 참고)와, PostScript에 이용되는 파일 포맷인 .pfb(http://en.wikipedia.org/wiki/PostScript_fonts)파일을 설치
1. fontforge가 설치되어 있지 않다면 설치한다.
$ apt-get install fontforge
2. 앞에서 latex-cjk-common package를 설치했으면, /usr/share/latex-cjk-common/utils/subfonts/ 위치에 cjk용 폰트 스크립트인 subfonts.pe 파일이 있다. 이를 작업 디렉토리에 복사하자.
3. fontforge에서 사용하는 unicode 폰트 형판(?) 파일(http://en.wikipedia.org/wiki/FontForge 참고)인 Unicode.sfd를 작업 디렉토리에 복사한다. 보통 freetype1-tools(현재는 freetype2-demos로 명칭이 변경된 듯 하다. 정확한 설명이 없음) package를 설치하면 /usr/share/texmf/fonts/sfd/ 위치에 있다고 하지만 필자의 경우 없었다. 따라서 여기에서 다운 받아서 위의 위치에 넣었다.
4. 이제 fontforge를 이용해서, 작업 디렉토리에 .tfm, .enc, .pfb 파일들을 생성한다. 이 작업은 시간이 많이 소요된다. 필자의 경우 한 4~5시간 정도? ㅡㅡ;;;
# 작업 디렉토리에서 실행 $ fontforge -script subfonts.pe cyberbit.ttf cyberbit /usr/share/texmf/fonts/sfd/Unicode.sfd
5. 파일들이 생성됐으면, LaTeX문서를 PostScript로 변환 시, 사용하는 .map 파일을 생성한다. 이는 .pfb파일로부터 다음의 스크립트를 통해 생성한다.
# 작업 디렉토리에서 실행 for i in *.pfb do echo "$(basename $i .pfb) $(basename $i .pfb) <$i" >> cyberbit.map done
6. 이제 생성된 파일들을 다음의 위치에 넣는다.
- .afm ==> /usr/share/texmf/fonts/afm/cyberbit/
- .tfm ==> /usr/share/texmf/fonts/tfm/cyberbit/
- .pfb ==> /usr/share/texmf/fonts/type1/cyberbit/
- .map ==> /usr/share/texmf/fonts/map/dvips/cyberbit/
7. texmf 디렉토리 내의 구조가 변경되었으므로 “texhash”나 “mktexlsr” 명령을 root권한으로 실행하여 ls-R을 다시 구성한다.
3. 20cyberbit.cfg 파일의 추가
- /etc/texmf/updmap.d/ 위치에 20cyberbit.cfg 파일을 다음과 같은 내용으로 편집하여 추가한다.
###### # 20cyberbit.cfg Map cyberbit.map ######
4. cyberbit.map파일의 적용
- 다음과 같은 명령을 실행하여, cyberbit.map font map 파일을 적용한다. 이 때 주의할 점은 작업 디렉토리내의 cyberbit.map 파일로 적용되지 않기 위해, 작업 디렉토리 내의 cyberbit.map 파일을 삭제하고 실행한다.
$ update-updmap -c /etc/texmf/updmap.d/ $ updmap-sys
5. c70song.fd파일의 생성
- /usr/share/texmf/tex/latex/CJK/UTF8/의 위치에 c70song.fd 파일이 있는지 확인하고, 있으면 삭제하고 다음의 내용으로 c70song.fd 파일을 생성한다.
%%%%%%
% This is the file c70song.fd of the CJK package
% for using Asian logographs (Chinese/Japanese/Korean) with LaTeX2e
%
% created by Werner Lemberg <wl@gnu.org>
%
% Version 4.6.0 (11-Aug-2005)
\def\fileversion{4.6.0}
\def\filedate{2005/08/11}
\ProvidesFile{c70song.fd}[\filedate\space\fileversion]
% character set: Unicode U+0080 - U+FFFD
% font encoding: Unicode
\DeclareFontFamily{C70}{song}{\hyphenchar \font\m@ne}
\DeclareFontShape{C70}{song}{m}{n}{<-> CJK * cyberbit}{}
\DeclareFontShape{C70}{song}{bx}{n}{<-> CJKb * cyberbit}{\CJKbold}
\endinput
%%%%%%
6. ls-R의 재 구성
- root 권한으로 “texhash” 명령어를 다시 실행한다.
자, 이제 다 되었다. 위에서 테스트 한 LaTeX 소스 파일로 다시 테스트 해 보자. 필자의 경우 오류 없이 한글이 변환되었다. 드디어~ MediaWiki 한글 페이지를 pdf문서로 만들 수 있다~!!! 언제나 생각하는 것이지만 정말 linux에서는 어떤 프로젝트든지, 한글을 적용하는 것은 삽질이다. ㅡㅡ;;;
[...] LaTeX에 unicode와 cjk 패키지 적용하기 [...]
[...] LaTeX에 unicode와 cjk 패키지 적용하기 [...]