pdfTeX

내위키

전자조판 시스템인 TeX의 일종으로 조판 결과물로 TeX의 고유 형식인 DVI 대신 PDF를 내놓는다. 베트남 출신의 정보과학자인 한 더 탄(Hàn Thế Thành)이 체코의 마사리코바대학교에서 유학 생활을 할 때 정보과학 석사 논문의 일환으로 개발해서 1994년에 공개했으며[1], 이제는 TeX에서 DVI 대신 PDF가 표준 출력물이 되다시피 한 근원이라 할 수 있다. 물론 여기다가 LaTeX이나 ConTeXt를 얹어서 써도 잘 돌아간다. LaTeX 사용자가 압도적으로 많기 때문에 대부분은 pdfLaTeX으로 쓴다.

DVI는 PDF와 마찬가지로 장치 독립적으로 똑같은 출력 결과를 보장하는 전자문서 형식이지만 TeX의 고유 글꼴 형식인 METAFONT를 기반으로 하고 있다. METAFONT는 기술적으로 본다면 이게 70년에 나온 게 맞나 싶을 정도로 벡터 그래픽 방식 글꼴을 정교하게 표현할 수 있지만 실제로 이걸로 글꼴을 만들기가 너무 까다롭다는 게 문제다. 게다가 DVI로 문서를 보기 위해서는 TeX의 글꼴 처리 시스템도 함께 설치해야 한다. TeX 말고는 쓰는 데도 없기 때문에 METAFONT 글꼴을 만들어 주기를 바라는 것은 거의 불가능하다.[2] PDF윈도우든 맥이든 운영체제의 글꼴 처리 시스템을 사용할 수도 있고, 크기가 조금 커져도 괜찮다면 아예 글꼴을 문서 안에 내장해 버릴 수도 있다. 그래서 이미 DVI로 결과물을 뽑아낸 다음 dvips와 같은 유틸리티를 써서 PDF로 변환해서[3] 사용하거나 배포하는 사람들이 늘고 있었는데, 아예 DVI를 거칠 거 없이 애초에 PDF로 조판해 버리자는 게 pdfTeX의 기본 아이디어.

게다가 METAFONT는 글꼴 하나에 256개의 글자밖에 들어가지 못하는 것도 문제다. 이는 원래 TeX이 유니코드니 뭐니 하는 글자 인코딩 표준이 나오기 전인 1970년대에 만들어졌기 때문인데, 즉 도널드 카누스 교수가 TeX을 만들었을 때에는 T1 글자 인코딩이라는 것을 사용했다.[4]어차피 그때야 라틴 계열 문자만 잘 표현하면 만사 OK였고 그 인코딩 안에 안 들어간 글자를 쓰는 나라에서는 알아서 문제를 해결해야 했다. 유니코드를 지원하는 TeX 시스템이 등장하기 전까지는 TeX에서 한글을 비롯해서 T1 인코딩 안에 안 들어가는 글자를 쓰는 환경에서는 사용하고자 하는 글자를 256 글자씩 쪼개서 각각 METAFONT로 넣은 다음, TeX이 조판을 할 때 찍어내고자 하는 글자에 맞게 글꼴을 바꿔가면서 찍는 편법을 사용했다. 이렇게 하면 어쨌거나 보기에는 한글이나 한자가 들어간 문서를 만들 수 있었지만 정작 조판 문서 안에 저장된 텍스트는 표준 텍스트 인코딩과는 전혀 다른 내용이 들어가 있었기 때문에 문서에서 텍스트 추출을 한다거나 링크를 건다거나 하는 게 불가능했다. TeX이 Omega나 Lambda 같은 프로젝트를 통해 유니코드를 지원하는 방안들이 나오면서 결과물은 어쩔 것인가 하는 문제가 있었는데, DVI를 확장하는 방식으로 해결할 수도 있었지만 그보다는 PDF를 활용하는 방식으로 방향을 틀게 되었다.

그렇기는 한데, pdfTeX의 목적은 DVI 파일 대신 PDF로 출력한다는 거고, 그래서 내부의 TeX 조판 엔진은 여전히 예전의 텍스트 인코딩이나 글꼴 사용 방식을 답습하고 있다. 따라 pdfTeX도 소스 파일을 처리하는 과정에서는 이전 T1 인코딩을 기반으로 하고 있었기 때문에 라틴 계열 문자를 넘어서는 텍스트 추출이나 북마크가 잘 만들어지지 않았고 이는 ko.TeX과 같은 보조 패키지를 사용해야 유니코드를 처리할 수 있었다. 그래도 이렇게 하면 텍스트 추출이나 북마크도 잘 만들어진다. 이는 PDF에 텍스트 정보를 별개로 집어넣을 수 있는 기능을 이용한 것이다. 그러나 여전히 글꼴 선택에는 제한이 따른다.

이후에 시스템의 엔진을 활용해서 글꼴을 처리하고 유니코드를 기반으로 하고 있기 때문에 다국어 처리에도 더욱 능한 XeTeX이 등장하면서 TeX의 한글을 비롯한 온갖 다국어 문서 처리는 거의 불가능이 없을 정도로 뛰어난 능력을 자랑한다. 영어를 비롯해서 T1 인코딩에 있는 글자만으로 문서 작성에 문제가 없다면, 그리고 TeX에서 제공하는 글꼴만 쓰겠다면 pdfTeX을 써도 별 문제는 없지만 한국어를 비롯해서 T1 인코딩을 넘어서는 글자를 쓰거나 좀 더 다양한 글꼴을 사용하고 싶다면 XeTeX을 써야 한다. XeTeX타이포그래피와 관련해서도 더 정밀한 기능들을 지원한다.

아무튼 이제는 사실상 DVI는 사문화되었다고 해도 과언은 아닌데, 특히 PDF로 조판 결과를 뽑아낼 것을 전제조건으로 해서 PDF의 기능을 활용하는 패키지들도 많이 나왔기 때문이다. 그 대표적인 예가 정교한 그래픽을 구현하는 PGF/TikZ 패키지라든가, PDF 프레젠테이션 슬라이드를 뽑아내는 beamer 같은 패키지들이다.

pdfTeX 개발팀은 지금은 Lua 스크립트 엔진을 사용할 수 있는 시스템인 LuaTeX을 pdfTeX의 뒤를 잇는 프로젝트로 정하고 이쪽 개발에 집중하고 있다.

각주

  1. 당시 개발 배경을 담은 인터뷰를 여기에서 볼 수 있다. (영어)
  2. 알파벳은 글자 수가 많지 않으니까 그나마 낫지만 한글이나 한자 같은 경우는 정말 답이 없다. 한글 TeX 초기에 은광희가 만든 은글꼴 정도가 METAFONT로 만든 한글 글꼴의 거의 전부라고 봐야 한다.
  3. 정확히는 dvips는 DVI 파일을 포스트스크립트 파일(.ps)로 변환하며 이를 PDF로 변환하려면 어도비 디스틸러(Distiller)와 같은 유틸리티가 다시 필요하다.
  4. 정식 이름은 코크 인코딩(Cork Encoding)이다.