KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
You will hear good news from one you thought unfriendly to you.
FrontPage › TeX의작동원리

입력 처리 과정

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 2010-12-01 17:25:54
Processing time 0.0427 sec