EDRSPIHCRSSRSS

Modern La TeX

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

엔진

  • 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가 표준이다. 여기에 다양한 분야의 수식을 조판하기 위한 수많은 패키지가 존재한다.
    • mathtools: 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 작업환경을 제공할 수 있게 됨.