KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
You will soon meet a person who will play an important role in your life.
FrontPage › TeX
DonaldKnuth가 만든 최고의 문서 조판 언어.

목차

1 TeX이란 ?
2 What is TeX
3 엔진, 매크로, 유틸리티
3.1 TeX 확장 : 엔진
3.2 TeX 확장 : 매크로
3.3 기타 확장 매크로
4 유틸리티
5 TeX 배포판
6 TeX의 작동 원리

1 TeX이란 ?

DonaldKnuth가 만든 문서 조판 언어.

TeX은 문서조판용 언어를 가리키기도 하고(tex language) 그 언어를 처리해주는 컴파일러 프로그램을 지칭하기도 하고(tex program), 경우에 따라서는 TeX 프로그램을 운영하는 환경과 시스템 전체(tex implementation,TeX 배포판)를 가리키기도 한다. 예컨대 c 언어로 작성된 원본(소스)은 ccgcc와 같은 컴파일러로 실행파일을 만들어내지만 tex 언어로 작성된 원본(소스)는 tex이라는 컴파일러로 문서를 만들어낸다.

TeX이라는 명칭은 그리스어 $\tau\epsilon\chi$ 에서 온 것으로, technology의 어근 tech-에 해당한다. 발음은 또는 테흐로 한다. 텍스라고 읽으면 안된다.

TeX의 버전 넘버는 원주율( $\pi$ )의 십진 표현을 따라서 전개된다. 현재 대부분의 TeX 배포판 들이 채택하고 있는 버전은 3.1415926 이다. 버전 넘버는 명령행에서 다음 명령으로 확인할 수 있다.
  #> tex --version

TeX은 출력물에서 $\mbox{\TeX}$ 과 같이 인쇄되고, 텍스트로는 TeX로 쓴다.

2 What is TeX


TeX이란 다널드 카누쓰[1](DonaldKnuth)가 개발한 조판 시스템(typesetting system)이다. 그는 TeX에 관한 책(see TheTeXBook) 서문에서 다음과 같이 말했다.

(TeX은...) 책, 그 중에서도 특히 많은 수식이 있는 책을 아름답게 제작하기 위해서 개발하였다.

크누쓰는 미국 캘리포니아에 있는 스탠포드 대학의 컴퓨터 프로그래밍 명예교수(Emeritus Professor)이다. 크누쓰가 TeX의 첫번째 버전을 개발했던 것은 1978년으로서, 그의 저서 『컴퓨터 프로그래밍의 기술』(The Art of Computer Programming)의 개정판을 준비하기 위해서였다. 이 발상은 곧 유명해졌고, 곧이어 그는 1982년에 두번째 판을 내놓았는데, 이것이 오늘날 우리가 쓰고 있는 TeX의 기초가 되었다.

그는 TeX을 만들기 위해서 문서화 프로그래밍(literate programming)[2] 시스템을 개발하였다. 이 Literate Programming 언어(WEB)로 된 TeX 원본(소스)과 WEB 소스를 컴파일가능한 다른 언어로 변환할 수 있는 도구, 그리고 원본을 인쇄할 수 있는 도구를 무료로(free of charge) 제공하였다. 그러므로 TeX의 동작 방식은 누구라도 알 수 있게 되어 있다. 나아가 WEB 시스템은 TeX을 새로운 운영체제나 컴퓨터에 이식할 수 있는 메카니즘을 제공한다. 그리고 이 포팅을 신뢰할 수 있도록 크누쓰는 TeX 시스템의 확실성을 검증할 수 있는 테스트를 제공하였다.[3] TeX 및 그 문서들은 따라서 매우 이식성이 높다.

TeX은 일종의 매크로 언어 처리기이다. 그래서 사용자에게 상당히 높은 수준의 프로그래밍 능력을 요구한다. 이런 이유 때문에 TeX 자체는 다루기가 꽤 까다롭다. 그래서 크누쓰는 TeX 사용을 위한 매크로 패키지를 만들었다. 이것을 PlainTeX이라 부른다. PlainTeXTeX을 실제로 이용하기 위한 최소한의 매크로 집합이며, 몇 가지 고수준 명령의 시험용 버전을 포함하고 있다. 이 가운데 후자는 그 자체로 사용될 것이라기보다는 명령을 작성하는 모델로 간주되어야 옳다. "TeX으로 프로그래밍한다"고 말할 때는 대부분 PlainTeX 매크로를 가리키는 것이다.

----
  • [1] Ka-Nooth로 발음
  • [2] 문서화 프로그래밍이란, 문서(documentation)와 프로그래밍 코드를 함께 작성하여 사람이 읽고 이해할 수 있도록 하는 프로그래밍 기법을 말한다. 문서화 프로그래밍은 하나의 파일에 문서와 소스코드가 함께 작성되는데, 나중에 이를 처리할 때는 문서부분과 컴파일 가능한 코드 부분을 분리하여 처리한다. LaTeX에서 제공되는 문서화된 LaTeX(*.dtx) 파일은 문서화 프로그래밍의 한 예이다.
  • [3] 무엇을 TeX이라고 부를 수 있는가의 문제에 있어서, Knuth가 제공하는 테스트 방법을 trip test라 한다. MetaFont에 대해서는 trap test라는 것이 있다. 이 둘을 합쳐서 'torture test'라 부른다. 이 테스트를 통과한 것은 TeX이라 부를 수 있다.

3 엔진, 매크로, 유틸리티

TeX을 기반으로 한 프로그램의 개발은 자유로우며, 많은 종류의 TeX-확장들이 존재한다. 기존의 TeX에 primitive를 추가하거나 수정하여 만들어 낸 tex 대응(확장) 프로그램을 TeX 엔진이라 한다.

TeX의 원시명령(primitives)을 바탕으로 미리 매크로를 정의하여 문서 편집을 위한 바탕을 제공할 수 있다. 이것을 매크로 집합이라 하고 사용자는 이 매크로 집합을 이용하여 자신의 작업을 수행한다.

TeX 시스템을 운영하기 위해서는 매크로 집합과 엔진 이외에 각종 유틸리티를 필요로 한다. 대표적인 것으로 폰트를 처리하기 위한 유틸리티나 결과물인 dvi를 처리하기 위한 dviware들이 있다.

엔진, 매크로, 유틸리티를 합쳐 플랫폼 위에서 운영되도록 설계된 프로그램 집합을 TeX Implementation(TeX 실행체계)라고 한다.

3.1 TeX 확장 : 엔진

새로운 primitives를 수정/추가하거나 TeX의 기능을 확장한 프로그램. 최근의 주요 배포판은 encTeX 패치된 pdfeTeX을 기본 TeX 엔진으로 사용하는 경우가 많다.

  • PDFTeX
    PDF 출력을 위하여 만든 TeX 확장판이 PDFTeX이다.
  • e-TeX
    TeX에 중요한 몇 가지 primitive를 추가하여 확장한 확장 TeX.
  • encTeX
    다국어처리를 위한 primitive가 추가된 TeX 패치.
  • XeTeX
  • OmegaLambda, Aleph와 Lamed
    TeX을 개선하여 다국어처리를 가능하게 한 16비트 유니코드[4] TeXOmega이다. LambdaLaTeXOmega판. Aleph는 e-Omega가 발전한 것이고 Lamed는 LaTeX의 Aleph판이다.
  • LuaTeX

----
  • [4] 유니코드는 16비트가 아니지만 Omega가 모든 유니코드를 전부 처리할 수 있는 능력을 가진 것은 아니므로 표현을 수정하지 않았다.

3.2 TeX 확장 : 매크로

다음은 모두 TeX을 기반으로 기능을 확장하는 매크로 패키지들이다.

3.3 기타 확장 매크로

특별한 format 파일을 만들어서 특정 목적에 이용하는 TeX 확장들이 있다.

4 유틸리티

TeX 시스템의 일부를 이루는 유틸리티들이 있다.
  • MetaFont
    • MetaFont는 그 자체가 독자적인 폰트기술언어이면서 동시에 TeX 시스템의 일부를 이루는 폰트처리 유틸리티이기도 하다.
  • MetaPost
  • DVIware
    • xdvi, YAP, dviout, dvips, dvilj, dvitty, dvipdfm, dvipdfmx
  • Fontwares

5 TeX 배포판

TeX을 사용하려면 단일 프로그램을 설치하는 것으로 끝나는 것이 아니라 여러 프로그램들과 폰트, 매크로로 이루어진 시스템을 구축하여야 한다. 이러한 시스템을 사용자의 환경(플랫폼)에 맞게 손쉽게 구축하고 운영하도록 도와주기 위하여 여러 종류의 TeX 실행환경이 개발되어 있다. 이것들을 TeXImplementations 또는 TeX 배포판이라 한다.

유명한 배포판으로 TeXLive, MiKTeX, W32TeX, KTUGCollection 등이 있다.[5]

----
  • [5] KC2006KC2007은 독자적인 배포판이었다가 현재는 TeXLive의 frontend 역할을 하게 바뀌었다

6 TeX의 작동 원리

The LaTeX Companion, 2nd ed., p.9에 실려 있는 그림 texprocessing.png

van der Laan씨의 wots.tex(What is TeX)에 처음 실렸고 lshort-kr 3.20까지 실려 있던 그림 whatsteximage.gif

입력 처리 과정

TeX에서 입력은 각 '줄'로 구별된다. 그러나, 이 입력시의 줄은 출력과는 전혀 상관이 없다. 따라서, TeX의 사용자는 자신이 원하는 위치의 아무 곳에서나 줄을 바꾸어 입력하거나 편집할 수 있다. 이것은 다른 문서 편집기를 이용하여 문서를 작성할 때와는 달리 어떤 특정한 입력기의 존재를 필요로 하지 않는다는 장점이 있다. 이외에 몇 가지 규칙이 입력시에 적용되는데 다음과 같은 것들이다.
  • 줄을 바꾸는 것은 공백 문자를 하나 입력하는 것과 동일한 효과를 낸다.
  • 여러 개의 공백문자는 하나의 공백문자와 동일하다.
  • 공백줄은 문단의 끝을 나타낸다.
그리고, 이 때 TeX의 입력처리 과정에서는 각 글자를 다음과 같은 16가지의 종류(CatCode)로 나누게 된다.

입력 처리 과정은 내부적으로 다시 두 단계를 밟는다. 입력시 어떤 문자를 단말기에서 직접 입력할 수 없을 경우 이를테면 ASCII코드 0번을 입력 해야 하는데 이것을 자판에서 입력하는 방법이 대부분 존재하지 않는다. 그 경우에는 ^^@라는 식으로 입력할 수 있다. 즉, ASCII코드 값의 128번 이내의 문자 중 자판에서 없는 것 중에서 64번 이내의 것은 그 코드에 64번을 더한 문자를 ^^ 뒤에 써주면 되고, 64번 이후의 글자는 그 코드에 64를 뺀 글자를 ^^ 뒤에 써주면 된다. 이런 방식은 1대1 변환을 거치게 되며 이 과정이 끝난 후에야 토큰으로의 변환과정을 거치게 된다. 예를 들어 \vskip이라고 입력해야 하는데 자판에서 k를 입력할 수 없다면 \vs^^+ip이라고 입력해도 똑같이 처리된다. 그리고 참고로 TeX 3.0 이후부터 지원되는 것으로 ASCII코드 128번에서 255번까지를 입력하기 위해서는 16진수 숫자를 ^^의 뒤에 써주는 과정을 거친다. 즉 "가"의 KS-코드가 B0A1인데, 이것은 TeX식으로 하면 ^^B0^^A1으로 표현된다. 따라서, 에러 메시지에서 한글이 이런 식으로 나오면 그것이 무슨 의미인지 이제 알 수 있을 것이다.

TeX에서 {\hskip 36 pt}라고 하는 문장은 입력 과정에서 처리되어 다음과 같은 토큰들의 나열로 바뀐다. 아래 첨자는 종류를 의미한다.

{1 hskip 312 612 space10 p11 t11 }2

여기서 이스케이프 문자인 \가 나온 이후에는 그 뒤에 나오는 문자열을 해석한 후 문자 토큰 여러 개가 아닌 하나의 제어 토큰으로 바꿔준다. 예를 들어 위에서 \hskiphskip이라는 독자적인 제어 토큰으로 바뀐 것이다. 그리고, 여기에 인수를 사용하거나 하는 경우에는 더욱 복잡한 과정을 거치게 되는데 자세한 내용은 DonaldKnuthTheTeXBook을 참고하기 바란다. 이 토큰 리스트를 이해하는 것은 TeX을 이해하는 데 필수 불가결한 것이지만 일반 사용자들은 거기까지는 알 필요가 없고 대략 속에서 이렇게 쓰는구나 하는 정도로 알면 된다.

확장 처리 과정

TeX의 확장 처리 과정은 위의 입력 처리 과정의 결과로 주어진 토큰 중 제어 처리 토큰을 다시 해석해서 더 이상 확장 처리할 토큰이 필요없을 때까지 반복해서 확장하는 역할을 한다. 대표적인 것이 매크로 확장기능이다. 제어 처리 토큰의 이름이 매크로의 이름이라면 매크로를 원래 매크로를 정의했던 문자열로 대치하는데, 그 문자열에서 다시 확장할 문자열이 있다면 계속해서 그 과정을 반복하게 한다. 확장 처리 과정은 내부적으로 다음과 같은 4단계를 밟게 된다.
  • 토큰이 확장 가능한지를 살펴본다.
  • 토큰이 확장할 수 없다면 그것을 현재 완료된 토큰 리스트에 건네 주고 다음 토큰으로 진행한다.
  • 화장 가능하다면, 그것을 그 확장된 결과로 바꾼다. 이때 인수가 있는 매크로는 조금 더 복잡한 과정을 거친다.
  • 확장된 결과의 토큰의 처음부터 다시 위의 과정을 반복한다.
이중에서 토큰이 확장 가능한지 그렇지 않는지를 결정하는 것은 매우 간단하다. TeX 자체의 명령(PrimitiveControlSequences)은 몇 개 되지 않기 때문이다. 그리고, 입력과정에서 현재까지를 읽으면서 만들어진 매크로와 활성화 문자, 조건문, 그리고 몇가지 TeX 자체명령들은 확장해야 할 것들이고, 그렇지 않는 것은 그냥 넘어가야 할 것들이다.

실행 처리 과정

실행 처리 과정은 리스트를 만드는 과정이라고 할 수 있다. 리스트들은 수평 모드, 수직 모드, 수식 모드 등 세 가지 모드에서 작동하는, 말하자면 수평 리스트, 수직 리스트, 수식 리스트등으로 나뉜다. 앞에서 확장 처리 과정을 거친 후 이 실행 처리 과정으로 넘어 오는 토큰 스트림은 다음과 같은 두 가지 종류가 있다.
  • 대입처리를 위한 토큰들과 모드에 상관없는 작업을 알려주는 토큰들이 있다.
  • 리스트를 만드는 토큰들이 있다. 글자(character), 박스(Boxes), 글루(Glue) 등이 리스트를 만드는 토큰들이다. 이것들은 현재의 모드에 따라 다르게 다루어진다.

시각 처리 과정

이 과정을 통해 TeX은 문단 나누기, 정렬, 수식 조판과 DVI 파일 생성을 하게 된다. 사용자는 이때 몇 가지 인수를 통해 이 과정의 작업을 조절할 수 있다는 정도만 알면 된다. 사실, 대부분의 작업이 이미 실행 처리 과정에서 다 진행되었고 이 과정에서는 단순히 처리가 끝난 리스트를 가상의 종이 위에 직접 놓는다는 정도의 작업이 되는 것이다. 그리고, 그 결과를 DVI 파일에 기록하게 되는데 이 과정을 거쳐 나온 DVI 파일은 앞부분에 초기화 내용, 중간에선 각 쪽, 마지막에는 종료 사항들을 적게 되는데 매우 이해하기 쉬운 명료한 포맷이므로 각종 출력기(레이저 프린터, 화면, 사진식자기 등)용의 드라이버를 손쉽게 제작할 수 있으며, 다른 종류의 시스템과는 달리 화면에서 나오는 출력이 출력기에서도 동일하게 나오도록 유지되는 것이다.




^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2009-02-18 11:09:45
Processing time 0.0767 sec