ModernLaTeX (rev. 1.15)

EDRSPIHCRSSRSS

Modern La TeX

지난 20수년 동안 TeXLaTeX은 놀라운 변모를 보여왔다. 그 가운데 이제는 낡은 것이 되어버린 여러 솔루션, 코딩 관행들이 있다.
  • 이 페이지에서는 LaTeX의 변모와 추이, 전망을 개략적으로 기술한다.
  • Recommended Classes and Packages 추천하는 클래스와 패키지의 목록을 작성한다.

엔진

  • 예전에는 tex과 latex밖에 없었다.
  • 2000년 전후하여 pdftex이 등장하였고, 별도로 개발되던 e-TeX과 합쳐져서 사실상의 표준 TeX 엔진이 되었다.
  • 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 공동체는 Tagged 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이라는 새로운 문헌 처리 방식이 대두하여 발전하고 있다.

수식

  • TeX 발전 초기에 미국수학회에서는 AmsTeX을 만들었다. 이것은 plainTeX과는 구별되는 매크로집합으로서 독자적인 format을 가지고 있었다.
  • LaTeX 자체는 수식 조판에 특별히 기여한 것이 없다. 그러나 LaTeX의 스타일 패키지 형식으로 수식 구현에 여러 기여가 이루어졌다.
  • LaTeX의 발달과 더불어 AmsTeXLaTeX으로 흡수되기에 이른다. 이것이 AmsLaTeX과 amsmath 패키지이다. 오늘날 \usepackage{amsmath}라고 하면 예전 AmsTeX의 수식 매크로와 환경을 LaTeX에서 쓸 수 있게 된다. 이와 더불어 AmSTeX Font도 LaTeX으로 편입되었다.
  • AmsLaTeX은 Ams 스타일의 몇 가지 클래스로 이루어져 있다. amsart, amsbook 등이 대표적이다.
  • 수식 조판은 amsmath가 표준이다. 여기에 다양한 분야의 수식을 조판하기 위한 수많은 패키지가 존재한다.
  • 최근 수식 조판의 이슈는 unicode-math이다.

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라 하더라도 그 후 수많은 패키지의 개선이 이루어져서 이전과 비교해서 좀더 읽기 쉽고 효율적인 코딩이 필요해졌다. 약간의 (미묘한) 호환성 문제도 나타나고 있다.

텍 작업환경의 구축

  • 1990년대 초에 실행파일과 매크로, 폰트를 일괄설치하는 TeX Implementation이라는 것이 등장하기 시작.
  • 1990년대 중반, Web2CteTeX의 등장으로 TeX 작업환경의 표준화가 이루어지게 됨
    • teTeX을 그대로 Windows로 포팅한 fpTeX과, 나름의 독자적인 환경을 구축한 MiKTeX이 등장
    • Classic mac에서는 여전히 OzTeXCMacTeX.
  • 원래 Live CD용으로 제작되었던 TeX Live가 teTeX을 이어받아 TeX Implementation으로 진화.
  • TeX Live가 Windows 바이너리로 W32TeX을 채택함. 명실공히 cross platform TeX implementation이 됨.
  • TeX Live: 현재 유일의 텍 작업환경.
    • MiKTeX은 여전히 독자적 배포판의 형식을 유지하고 있으나 차이는 크지 않음.
  • TeXWorks 에디터의 등장으로 모든 플랫폼에 동일한 Front-end 작업환경을 제공할 수 있게 됨.