KTUG 한국 텍 사용자 그룹

Menu

KTUG :: Q&A 마당

TeXbook과 플레인텍을 잘 아시는 분이 계실테지만, 제가 이해한 것을 거칠게 요약하면, \end 명령은 그 명령이 불린 시점에서 아직 남아 있는 vertical list의 모든 것이 출력될 때까지 재귀적으로(반복적으로) 실행된다고 합니다. 그러니까 마지막 페이지를 조판할 적에 "남은 것"을 출력하는 부분과 관련해서 \vfill이 꼭 필요하다고 생각하였습니다.

현재 버전의 plain.tex에서 \bye 명령은

\outer\def\bye{\par\vfill\supereject\end}

이렇게 정의되어 있고 vfill 이후에 \supereject가 호출되는데요, 이 supereject라는 것은 다시

\def\supereject{\par\penalty-\@MM}

여기서 penalty를 -20000으로 한 것은, output에서,

\def\plainoutput{\shipout\vbox{\makeheadline\pagebody\makefootline}%
  \advancepageno
  \ifnum\outputpenalty>-\@MM \else\dosupereject\fi}

outputpenalty가 -20000보다 크다면 아무 일도 일어나지 않고 (shipout 이후에) 페이지 번호만 증가하지만 이 값이 -20000이면 supereject ("이 위치에서 무조건 eject")를 실행하게 하고 있습니다.

(ps. 올리고 보니 작나 님이 답변을 다셨네요. 링크 거신 글의 내용이 위에 제가 후반부에 설명한 것과 비슷해보입니다. 해당 부분은 결과적으로 중복이지만 삭제하지 않고 그냥 두겠습니다.)

 

KTUG 한국 텍 사용자 그룹