ModernLaTeX (rev. 1.3)

EDRSPIHCRSSRSS

Modern La TeX

지난 20수년 동안 TeXLaTeX은 놀라운 변모를 보여왔다. 그 가운데 이제는 낡은 것이 되어버린 여러 솔루션, 코딩 관행들이 있다.

엔진

  • 예전에는 tex과 latex밖에 없었다.
  • 2000년 전후하여 pdftex이 표준 텍 엔진이 되었다.
  • 2004년, 2007년부터 개발되기 시작한 XeTeXLuaTeX이 이전의 텍 엔진(legacy TeX)을 대체하기 시작하였다.
  • 한글 문서는 폰트 문제 때문에 일찍부터 XeTeX을 이용하는 방법이 발달하여, 2014년 현재 가장 널리 사용되는 텍 엔진이 되어 있다.
  • 요컨대, XeLaTeX으로 컴파일하는 것이 현재 기본이다.

출력

  • 예전에는 dvi라는 TeX 표준 출력이 사용되었다.
  • dvi는 반드시 변환 과정을 거쳐야 인쇄하거나 화면보기를 할 수 있었다. 이 dvi처리 유틸리티를 dvi driver 또는 dviware라고 하였고, 화면보기를 위한 xdvi, windvi, dviwin, yap 등의 유틸리티가 널리 사용되었었다.
  • 1990년대 중반부터 dvips라는 막강한 dvi driver가 등장하여 TeX의 세계에 postscript가 필수적 요소로 도입되었다.
  • 1990년대 후반부터 pdf가 표준 포맷으로 받아들여지기 시작하였다. 처음에는 dvips를 거쳐 만든 ps를 ps2pdf로 변환하는 방식이 주를 이루었으나 마침내 pdfTeX이라는 dvi를 거치지 않고 직접 pdf로 출력하는 엔진이 등장한다.
  • 현재 dvi 출력 포맷은 거의 쓰이지 않는다. pdfTeX, XeTeX, LuaTeX이 모두 pdf 출력을 기본으로 하고 있다.
  • 단, XeTeX은 사용자가 체감하지는 못하지만 xdv라는 확장 dvi를 먼저 만들고 이를 xdvipdfmx 드라이버를 통하여 pdf로 변환하는 방법이 여전히 사용된다. 그러나 이것은 대부분의 경우 배후에서 일어나고 사용자에게는 마치 pdf가 직접 만들어지는 것으로 보인다.
  • 즉, TeX의 기본 출력 파일 포맷은 pdf이다.

폰트

  • TeX의 폰트 취급 방법은 폰트 메트릭(tfm)만을 이용하여 dvi 파일에 정보를 넣는 것이다.
  • dviware가 이 정보를 분석하여 폰트로부터 실제 눈에 보이는 비트맵 결과물을 얻어내었다.
  • 초창기에는 MetaFont만이 사용되었고, 1980년대 후반부터 postscript type 1 폰트를 이용할 수 있게 되었다. 이에는 dvips 드라이버의 발달이 크게 영향을 끼쳤다.
  • pdfTeX 엔진은 여전히 tfm을 이용한 전통적 조판 방법을 이용하기는 하였으나 Type 1 이외에 트루타입을 사용하여 pdf를 제작할 수 있었다. 한편, dvipdfmx 역시 트루타입을 활용할 수 있었다.
  • XeTeXLuaTeX 엔진에서 비로소 트루타입과 오픈타입을 tfm를 통하는 전통적 방식 없이 네이티브하게 조작하는 능력을 갖추게 되었다. XeTeX에 주목하는 주된 이유가 이 폰트 관련된 사항 때문이다.

그래픽

  • TeX은 원래 그래픽에 대해서 아무런 조치도 취하지 않는다. 즉 그림은 텍의 소관이 아니다.
  • LaTeX은 latex font를 몇 가지 추가하여 선, 원, 사각형 등을 그릴 수 있는 picture라는 환경을 정의하였다. 이것이 LaTeX 세계에서 in-line graphic의 출발점이 되었다.
  • 외부 그림을 하나의 박스로 문서에 넣는 기법은 전적으로 dvi driver에 의존하였다. dvi driver가 해석할 수 있는 명령인 \special을 통하여 dvi driver가 이해하는 그림 포맷을 박스로 전달하면 dvi driver가 그림을 화면이나 출력물에 보여주는 방식으로 처리가 이루어졌다.
  • dvips가 득세하면서 EPS 그림이 표준적인 외부 그림 포맷으로 이용되기 시작하였다.
  • pdfTeX과 dvipdfmx는 JPG, PNG, PDF 그림들을 자체적으로 처리할 수 있게 되었다.
  • 현재의 주요 엔진인 pdfTeX, XeTeX, LuaTeX은 JPG, PNG, PDF 그림을 잘 처리한다. 이와 더불어 graphicx 패키지가 발전하여 외부 그림을 넣는 일반적인 방법이 널리 쓰이고 있다.
  • EPS는 dvips만이 제대로 처리할 수 있지만 epstopdf라는 유틸리티를 통하여 즉시(on the fly) PDF로 변환되어 문서에 삽입된다. 그러므로 EPS 그림도 별다른 어려움 없이 활용가능한 것으로 느껴진다.
  • in-line 그래픽 언어는 눈부신 발전을 거쳐 PSTricks, XY-pic, PGF/Tikz, Asymptote, MetaPost 등 여러 언어가 TeX과 공존하게 되었다. 특히 MetaPostLuaTeX 엔진에 기본적으로 포함되기까지 하였다.

SyncTeX

  • 옛날에는 ForwardSearch니 하는 것 자체가 없었다.
  • dvi가 주된 포맷이던 시절, 이 dvi에 special code를 넣어서 에디터와 뷰어 사이를 연동시키는 기술이 유행하였다. latex을 실행할 때 -src 옵션을 주던 것이 이를 위한 것이었다.
  • 2000년대 중반 이후에 SyncTeX이라는 기술이 선보이게 된다. 이를 통하여 PDF 출력물과 편집기 사이의 서로 찾기가 가능하게 되었다. 이것은 대유행을 하여 이제 거의 대부분의 pdf viewer와 editor가 이를 지원하게 되었다. --synctex=1 옵션을 컴파일시에 주면 pdf special로 synctex 코드가 삽입된다. 이것은 한때 상상도 할 수 없던 것으로 텍 작업의 편의성이 극대화된 대표적인 예의 하나이다.

문자와 입력

  • 초창기 TeX은 7bit ASCII 문자만을 고려하여 만들어졌다.
    • 1989년과 90년 사이에 TeX90이 등장하여, 마침내 8비트 문자를 처리할 수 있게 되었다. 이것은 특히 유럽어 조판에 기여하였다.
    • 현재까지 legacy TeX은 기본적으로 8비트 문자를 처리하는 시스템이다.
    • 1990년대에서 2000년대 초까지 Omega라는 프로젝트가 16비트 문자 처리가 가능한 TeX을 만들기 위해 노력하였으나 이 프로젝트는 중단되었다.
    • 한글과 같이 8비트로 처리할 수 없는 문자를 TeX으로 처리하기 위해서 여러 해결책이 제시되었다. inputenc 패키지는 그러한 노력의 산물이다.
  • XeTeXLuaTeX은 유니코드를 직접 처리할 수 있다. 한국어/한글을 XeTeX으로 처리하는 것을 권장하는 이유 가운데 하나이다.
  • UTF-8 Unicode를 입력 인코딩으로 하는 것을 권장한다.
  • 다국어 처리를 위해서 babel 패키지가 발전하였다. XeTeX에서는 polyglossia 패키지가 babel이 하던 일을 이어받고 있으나 최근 이 패키지의 개발이 정체되면서 xe-babel을 만들려는 노력도 나타나고 있다.
    • 한국어 처리는 babel이나 polyglossia를 통하지 않는다.

Index와 Bibliography

  • 색인 작성을 위한 makeindex 유틸리티와 문헌 처리를 위한 bibtex 유틸리티가 TeX에서 표준적인 것이었다.
  • 현재도 이 두 유틸리티는 널리 쓰이고 있다.
  • 그러나, 특히 유니코드 문자의 처리에 이 두 유틸리티가 문제를 드러내기 시작하면서, 현재는 색인 작성을 위한 xindy, 문헌 처리를 위한 biber가 주목받고 있다.
  • 특히 biber를 backend로 하면서 biblatex이라는 새로운 문헌 처리 방식이 대두하여 발전하고 있다.

LaTeX

  • Leslie Lamport가 마지막으로 만든 LaTeXLaTeX 2.09라고 불리는 버전이다.
  • 그 후 LaTeX3 Team이 LaTeX 2e 버전을 만들었고, 이것이 LaTeX현재 버전이다.
  • LaTeX3 Team은 LaTeX 패키지 제작을 위한 프로그래밍 언어 expl3를 발표하여 이를 LaTeX3라고 부르고 있으나 LaTeX2e를 대체하는 것은 아니다. 단지 패키지나 함수 정의를 위한 내부 언어가 새로 정의된 것으로 보아야 한다.
  • LaTeX 2.09와 LaTeX 2e의 차이점은 다음과 같다.
    • \documentstyle 명령이 없어졌다.
    • class와 style package라는 사전 정의된 명령 묶음을 일관성있게 처리하는 방식이 도입되었다. 즉, \documentclass\usepackageLaTeX 2e의 문법이다.
    • preamble의 기능이 확장되었다. 여기에 사용자 명령 등을 둘 수 있게 되고 style 파일을 불러올 수 있게 하였다.
    • 이전에 만들어진 수많은 style 들을 체계적으로 정리하였다.
    • \bf, \it, \rm과 같은 폰트 선택 명령(OFSS)을 새로운 폰트 선택 스킴(NFSS)으로 교체하였다. 따라서 예컨대 \textit과 같은 LaTeX 2e 명령을 쓰는 것이 좋고 \bf와 같은 예전 명령은 쓰지 않는 것이 좋다.
    • LaTeX format이 정비되었다. 이전과 같이 tex &lplain 방식으로 쓰지 않는다.
  • LaTeX 패키지 수가 상상할 수 있는 범위를 넘어서면서 패키지 간의 충돌이나 이중적인 정의들, 읽기 힘든 소스 등이 문제점으로 등장하였다. 이를 해결하기 위한 노력이 LaTeX3 (expl3)이다.
  • LaTeX 2e라 하더라도 그 후 수많은 패키지의 개선이 이루어져서 이전과 비교해서 좀더 읽기 쉽고 효율적인 코딩이 필요해졌다.