KTUGFaq

KTUG FAQ

"\parfillskip"에 댓글 더하기

로그인:
비밀번호:
가입
Your mode of life will be changed for the better because of good news soon.
FrontPage › LittleTree/ReadingTeXbook/2006-05
May 16, 2006
\parfillskip
Submitted by 작은나무 @ 05-16 [11:56 pm]
99~100쪽: 이전 글에서 줄바꿈 알고리즘의 결정판을 보았다. 이 14장의 목적을 거의 이룬 것이나 다름없다. 앞으로 남은 것들은 사소한 것들이다. 하지만 남아 있는 문단들에서 "당거러스 밴드" 두개짜리가 많이 보이는 이유는 무엇일까? 중요한 것과 어려운 것이 비례하는 것은 아닌 것 같다. 아니면, 남은 것들이 사소한 것이 아니던가...

줄바꿈 알고리즘에 의해서 나온 문단을 보면 폭이 모두 같고, 맨마지막만 다른데, 당연히 같거나 짧다. 이에는 특별한 트릭이 숨겨져 있는데, 아직까지 언급하지 않았다. 이와 관련해서 텍은 줄바꿈 알고리즘을 돌리기 전에 두가지 중요한 일을 한다고 한다.
  1. 만일 현재 처리하고 있는 수평리스트의 마지막 아이템이 글루이면, 그 글루는 무시한다.
  2. 위에서 마지막 글루를 제거하고, 그대신 세가지 아이템을 추가한다고 한다.
    penalty10000; \hskip\parfillskip; \penalty-10000
이 다음부터는 원문을 그대로 소개한다. 왜냐하면, 작은나무가 대신 설명할 수도 있으나, 원문 그대로 읽어야 저자의 의도와 재치를 알 수 있기때문이다. 작은나무가 귀찮아해서가 절대 아니다. 참고로 한마디 하면, 아래 문단은 사각형이다. 즉 맨 마지막 줄도 다른 줄과 그 길이가 같다. :)

rect.jpg

익히 알고있었지만, 크누스 할아버지는 정말 재미있는 분이시다.

연습문제14.13: 위 설명대로라면 문단의 맨 마지막줄은 \parfillskip이 부족한 부분을 글루로 채운다고 했다. Ben User는 장난기가 발동해서 그 \parfillskip의 효과를 없애기 위해서, 문단의 맨 마지막에 \hfilneg\par 라고 했다. 회심의 미소를 지으며, 그러나 결과는 장난이 먹히지 않았다. 왜 일까?
텍은 \par 바로 앞에 있는 글루를 모두 무시해서 \hfilneg를 제거해버렸기 때문이다. :) Ben은 다음과 같이 장난을 쳤어야 했다. "\hfilneg\ \par".

연습문제14.14: \parfillskip을 어떻게 설정하면, 맨 마지막 줄의 남은 간격이 맨 첫줄의 들여쓰기 만큼 되게 할 수 있을까? 마치 y=x에 대한 대칭인것 처럼 보이게끔 말이다.
\parfillskip=\parindent. 간단하다. 물론 이것이 먹히려면 만드는 문단이 충분히 길던가 아니면 짧은 문단에서도 효과를 나타낼만큼 운이 좋던가 해야한다.

연습문제14.15: 텍은 주어진 문단을 줄들로 나누기 위해서 일단 그 문단 전체를 입력으로 받아들여야 한다. 즉 전체 문단을 알아야 이 놈을 어떻게 줄들로 나눌지를 결정할 수 있을 것이다. 그런데 당신이 어떤 철학자나 현대 소설자들의 글을 조판한다고 해보자. 그들은 텍의 사정을 아는지 모르는지 한 문단을 200줄 이상이 넘도록 매우 길게 쓰기도 한다. 그러면 텍은 그 긴 문단을 모두 입력으로 받아들이다가 더이상 받아들일 공간이 없어서 텍시스템이 끝장날지도 모른다. 이 경우 여러분은 어떻게 해야할까? 그들에게 텍의 사정이 이러이러하니, 제발 문단을 짧게 해달라고 요청할까?

그 저자들이 이미 고인이 되었거나 매우 완고해서 문단을 제발 좀 짧게 해달라는 우리의 요청이 받아들여질 수 없는 상황이라고 가정하자 :) 해결책은, 대략 매 50줄마다 {\parfillskip=0pt\par\parskip=0pt\noindent} 를 넣는 것이다. 매우 기발한 방법이 아닐 수 없다. 이것이 동작하는 이유를 곰곰히 생각해 보기 바란다.
이름:

서명하지 않기
 

^
Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2006-05-29 22:35:20
Processing time 0.0367 sec