KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
The best prophet of the future is the past.
FrontPage › LittleTree/ReadingTeXbook/2006-06
Jun 15, 2006
단어사이의 간격주기(1)
Submitted by 작은나무 @ 06-15 [05:59 pm]
72~75쪽: 플레인텍에서 단어들 사이에 간격은 글루라고 하였다. 이 단어들 사이의 글루는 그 크기가 대개 일정한데, 몇가지 예외가 있다. 그것은 마침표나 큰따옴표 같은 문장부호 다음에 는 단어들 사이의 보통의 글루보다 약간 더 많은 글루가 들어간다. 그리고, 그 글루는 보통의 글루보다 신축성이 더 좋다. 늘어날 때는 더 늘어나고 줄어들때는 좀 덜 줄어든다. 왜 그런고 하니, 그렇게 하면 보기에 더 좋기때문이다. 또한 이렇게 하는 것을 이미 알고 있듯이 nonfrechspacing 이라고 한다. 문장 부호에 관계 없이 일정한 간격을 갖는 것을 frenchspacing 이라고 한다. 예를들어 보자.



위 예는 주어진 예문을 \hbox에 넣은 것이다. 위에서 보면 알 수 있듯이, 콤마나 큰따옴표나 마침표 다음에는 보통 보다 약간의 간격이 더 들어간 것을 볼 수 있다. 주어진 \hbox를 5, 10, 15pt 더 넓게 해보자.



위 에서 알 수 있듯이, 주어진 박스의 크기가 조금씩 더 커짐에 따라서 그 커진 만큼의 글루가 단어들 사이의 간격에 반영되는 것이 아니라, 마침표같은 문장부호들에 적용이 되어서 단어들 사이의 간격은 일정하고 문장부호 다음의 간격이 더 늘어나는 것을 볼 수 있다. 사람 눈은 대개 못믿는다고 한다. 그렇다면, 텍의 로그 파일을 살펴보자. 실제로 얼마 만큼의 간격이 주어졌는지를. 아래의 예는 \nonfrenchspacing 으로 된 예이다. 11장에서 박스의 내용을 보는 방법을 배웠고, 그 방법대로 살펴보면 다음과 같다.
.\tenrm \ (ligature ‘‘)
.\tenrm O
.\tenrm h
.\tenrm ,
.\glue 3.33333 plus 2.08331 minus 0.88889
.\tenrm o
.\tenrm h
.\tenrm !
.\tenrm " (ligature ’’)
.\glue 4.44444 plus 4.99997 minus 0.37036
.\tenrm c
.\tenrm r
.\tenrm i
.\tenrm e
.\tenrm d
.\glue 3.33333 plus 1.66666 minus 1.11111
.\tenrm B
.\tenrm a
.\tenrm b
.\kern-0.27779
.\tenrm y
.\glue 3.33333 plus 1.66666 minus 1.11111
.\tenrm S
.\tenrm a
.\tenrm l
.\tenrm l
.\tenrm y
.\kern-0.83334
.\tenrm .
.\glue 4.44444 plus 4.99997 minus 0.37036
위 로그에서 다음을 알 수 있다.
  • 단어들 사이의 간격: \glue 3.33333 plus 1.66666 minus 1.11111
  • 쉼표 다음의 간격: \glue 3.33333 plus 2.08331 minus 0.88889
  • 큰따옴표 다음의 간격: \glue 4.44444 plus 4.99997 minus 0.37036
  • 마침표 다음의 간격: \glue 4.44444 plus 4.99997 minus 0.37036

플레인텍에서 단어들 사이의 간격은 기본으로 "\glue 3.33333 plus 1.66666 minus 1.11111" 로 주어진다. 그리고 나머지 간격은 플레인텍이 가지고 있는 어떤 규칙을 통해서 얻을 수 있다. 그 규칙이라는 것이 좀 까다롭긴 하지만, 그렇다고 전혀 이해할 수 없는 것도 아니다. 다음 글에서 그 규칙에 대해서 알아보자. 해답은 space factor 라는 놈이 쥐고 있다고 한다.

위의 레이텍 코드 부분은 firefox에서 보면 정상적으로 보이고, ie에서 보면 안보입니다. 쩝. 그림으로 대체해야하나? :( -- 작은나무 2006-06-15 18:05:57

파폭으로 잘 보여서 몰랐는데 이상한 현상이네요 @@~ ^^ -- hermian 2006-06-15 19:30:26

Jun 13, 2006
To Infinity and Beyond
Submitted by 작은나무 @ 06-13 [08:14 am]
71~72쪽: 제목인 "To Infinity and Beyond"은 픽사가 만든 3D 장편 애니메이션인 "토이스토리"에서 우주 용사 버즈라이트이어가 비상할 때면 언제나 왜치는 말이다. 이 번글이 바로 무한히 늘어날 수도 줄어들 수도 있는 글루에 대한 것이기 때문이다. :) 사실 텍에 있어서 무한 확장 수축 글루 만큼 흥미있는 것도 드물 것이다.

앞선 글인 "매직모르타르 Glue"에서 예제로 들었던 그림을 다시 살펴보자. 그 예에서 글루가 모두 세 개 사용되었는데, 나머지는 모두 똑같고, 두번째 글루만이 무한히 늘어날 수 있는 글루라고 하자. 즉 "space 9 stretch 무한 shrink 2". 그리고 앞에서 했던대로 가로 길이가 58인 박스에 그 내용물을 채운다고 해보자. 앞에서는 각 글루의 확장성에 비례해서 늘어나야할 6만큼의 글루를 적절히 분배를 했었다. 하지만, 지금 이경우, 두번째 글루가 무한히 늘어날 수 있는 경우에는 각 글루의 확장성에 비례하는 것이 아니라 무한히 늘어날 수 있는 글루가 있기때문에 나머지 글루는 원래 그대로의 길이를 갖고, 두번째 글루만이 6만큼 늘어나서 두번째 글루의 간격은 총 15가 된다.

무한 확장 글루를 이용하면 재미있는 것들을 할 수 있다. 그 대표적인 것들인 각 줄을 왼쪽 정렬, 가운데 정렬, 오른쪽 정렬등을 할 수 있다. 예를 들어서 hbox가 주어지고 이 박스를 채울 내용물이 박스의 가로 크기에 비해 작을때, 무한 확장 가능한 글루가 왼쪽에 있다면, 그 박스의 내용물은 오른쪽 정렬이 될 것이다. 그리고 무한 글루가 양쪽에 있다면, 당연히 가운데 정렬이 될 것이다!

이러한 무한 글루를 이용한 간격 설정은 매우 자주 일어나서 플레인텍 에서는 \vfil, \vfill, \hfil, \hfill 이라는 매크로를 가지고 있다. 여기서 v 는 세로 간격을 의미하고, h 는 가로 간격을 의미한다. 따라서 \vfil의 의미는 세로로 무한히 확장할 수 있다는 것을 뜻하고 \hfil의 의미는 가로로 무한히 확장할 수 있다는 것을 뜻한다. 심지어는 무한히 확장도 가능하고 수축도 가능한 글루도 있다. 바로 \vss 와 \hss가 그것인데, \hss의 의미는 "horizontal stretch or shrink" 이다. 마지막으로 \hfilneg 와 \vfilneg 가 있는데, 이 들이 하는 일은 \hfil 과 \vfil의 확장성을 상쇄하는 역할이다. 이는 나중에 살펴볼 것이다.

예를 들어보자.
\line{This text will be flush left.\hfil} \line{\hfil This text will be flush right.} \line{\hfil This text will be centered.\hfil} \line{Some text flush left\hfil and some flush right.} \line{Alpha\hfil centered between Alpha and Omega\hfil Omega} \line{Five\hfil words\hfil equally\hfil spaced\hfil out.}
결과는 다음과 같다.



좀 더 확실히 하기 위해서 위에서 예로 들었던 매크로들의 의미를 확실히 하자. \vfil, \vfill, \vss, \vfilneg의 정의는 다음과 같다.
\vskip 0pt plus 1fil \vskip 0pt plus 1fill \vskip 0pt plus 1fil minus 1fil \vskip 0pt plus -1fil

위에서 보면 fil 과 fill 이 있는 것을 확인할 수 있다. 두 다 무한 확장을 뜻하는 단위인데, fill 이 fil 보다 끝발이 더 세다. 그리고 최고 강력한 filll이 있기는 한데, 좀처럼 사용되지 않는다. 그래서 \vfilll 이나 \hfilll 과 같은 매크로는 없다. 중요한 것은 fil 과 fill 이 동시에 쓰일때는 fil의 효과는 fill에 의해서 무시 된다는 것이다.

Jun 11, 2006
글루 정의하기
Submitted by 작은나무 @ 06-11 [08:42 pm]
70~71쪽: glue를 설정하는 법은 다음과 같다.
<dimen> plus<dimen> minus<dimen>
여기서 'plus<dimen>'과 'minus<dimen>'은 없어도 되고, 없으면 0으로 간주된다. plus가 의미하는 바는 글루가 늘어날 수 있는 정도고, minus는 줄어들 수 있는 정도를 나타낸다. 예를들어보자. \medskip이라는 것을 알고 있을 것이다. 이 vertical skip의 실상은 이렇다.
\vskip6pt plus2pt minus2pt
따라서 \medskip은 주어진 환경에 따라서 4pt~8pt 만큼 세로로 간격을 띄운다.

\smallskip과 \bigskip도 자세히 알아보자. 다음은 텍을 실행시켜서 직접 알아본 값이다.
*\show\smallskip
> \smallskip=macro:
->\vskip \smallskipamount .
<*> \show\smallskip
                   
? 

*\show\smallskipamount
> \smallskipamount=\skip13.
<*> \show\smallskipamount
                         
? 

*\showthe\skip13
> 3.0pt plus 1.0pt minus 1.0pt.
<*> \showthe\skip13
                   
? 

*\show\bigskipamount
> \bigskipamount=\skip15.
<*> \show\bigskipamount
                       
? 

*\showthe\skip15
> 12.0pt plus 4.0pt minus 4.0pt.
<*> \showthe\skip15
정리를 하면 이렇다.
  • \smallskip = \vskip3.0pt plus 1.0pt minus 1.0pt
  • \medskip = \vskip6.0pt plus 2.0pt minus 2.0pt
  • \bigskip = \vskip9.0pt plus 4.0pt minus 4.0pt

위에서 확인할 수 있듯이, \medskip은 \smallskip의 두 배 이고, \bigskip은 \medskip의 두 배이다. 따라서 \bigskip은 \smallskip의 네 배이다.

여기서 궁금한게 한가지 생겨서 다음과 같이 실험해 보았다.
*\newskip\sam
\sam=\skip18

*\sam=2\skip13

*\showthe\sam
> 6.0pt.
<*> \showthe\sam
\smallskipamount의 값은 실제로 \skip13 레지스터의 값이고 그 값은 "3.0pt plus 1.0pt minus 1.0pt" 이었다. 그리고 \meskipamount의 값은 \skip14에 들어있고, 그 값은 앞의 설명대로 \skip13의 두 배인 "6.0pt plus 2.0pt minus 2.0pt" 이었다. 그렇다면, \skip14는 2\skip13으로 하면 될 것을 왜 길게 다 썼을까? 그래서 직접 2\skip13을 해보았다. 그랬더니 결과는 위에서 보는 바와 같이 6.0pt plus 2.0pt minus 2.0pt가 아니라 그냥 6.0pt 이다. 이상하다. 스킵레지스터를 상수곱 하였더니 뒤의 옵션인 plus와 minus가 사라졌다. 그래서 길지만 그냥 다 써주었나보다. 쩝.

*\newskip\sam
\sam=\skip18

*\multiply\skip13 by2

*\sam=\skip13

*\showthe\sam
> 6.0pt plus 2.0pt minus 2.0pt.
<*> \showthe\sam
-- 작은나무 2006-06-12 09:36:30

Jun 09, 2006
매직모르타르 Glue
Submitted by 작은나무 @ 06-09 [10:56 pm]
[아래의 글은 3월달에 작성했던 글인데, glue를 새로운 마음으로 공부하는 지금 이곳으로 옮겨 봅니다.]

69~70쪽: Glue는 여러 box들 서로 붙이는데 사용한다. 하나의 줄(line)에 보면 단어들 사이에 간격이 있습니다. 이 간격이 바로 Glue다. 이 Glue는 신기하게도 줄어들거나 늘어날 수 있어서 단어들 사이의 간격 즉 Glue를 잘 조절하여 페이지의 오른쪽 여백이 일직선으로 보이도록 해준다.

텍은 작은 여러 개의 박스들로 부터 가로로된 한줄의 커다란 박스를 만들 때, 그 작은 박스들 사이에 Glue를 넣어서 적절한 간격을 유지하도록 해준다. 바로 이 방법이 여러 개의 단어를 가지고 한 줄을 만드는 방법입니다. Glue는 세가지 속성을 가지고 있다: 주어진 고유의 간격(natural space), 팽창정도(stretchability), 수축정도(shrinkability)

glue1.jpg

위 그림에는 네 개의 박스와 세 개의 Glue가 쓰였다. 첫번째 Glue는 9만큼의 고유 간격을 가지고 있고, 3만큼의 팽창성, 1만큼의 수축성을 가지고 있습니다. 두번째는 9만큼의 간격, 6만큼의 팽창성, 2만큼의 수축성을, 마지막 Glue는 12만큼의 고유간격을 가지고 있고, 수축성, 팽창성은 없다.

이 예에서 박스의 너비와 Glue의 총합은 5+9+6+9+3+12+8=52 이다. 이 52를 가로로 긴 박스의 고유의 너비라고 하고, 위와 같이 주어진 박스들과 Glue들로 만들 수 있는 가장 보기 좋은 조합이다. (가장 보기 좋다고 하니까 뭐 생각나는것 없으세요? 그렇죠. 바로 badness가 0이라는 소리입니다. :) ) 그런데, 위의 네 개의 박스와 세 개의 Glue로 58만큼의 너비의 긴 박스를 만들려면 어떻게 해야 할까? 일단 주문은 고유의 너비보다 6 만큼 길다. 박스는 늘어날 수 있는 것이 아니기 때문에 Glue를 늘여야 하는데, 다행히 주어진 Glue들은 팽창성이 있기때문에 Glue들을 6만큼 늘여서 58을 맞추면 된다. 그럼 어떤 Glue를 얼만큼 늘이면 될까? 첫번째 Glue는 3만큼, 두번째는 6만큼, 늘어날 수 있고, 세번째는 늘어날 수 없으니까 그 비율이 3:6:0 즉 1:2:0 이다. 따라서 6을 1:2:0 으로 나누면 2:4:0 이 되므로 첫번째 Glue를 2만큼, 두번째 Glue를 4만큼 늘이면 아래 그림처럼 된다.

glue2.jpg

너비가 58이 되었을때의 badness는 얼마일까요? 지난번에 badness를 설명할 때, 어떤 줄의 badness 구하는 식이 min(100r^3,10000) 이라고 하고 r은 어떤 비율이라고만 하고 자세한 설명은 하지 않았는데, 지금이 좋은 기회인것 같다. r을 'glue set ratio'라고 부르며, 수축(팽창)성의 총합분의 실제 수축(팽창)Glue길이 이므로 badness는 30(100x(6/9)^3=29.7) 입니다 (나중에 좀 더 자세히 설명할 것이다.)

지금까지 글루의 개념에 대해서 알아보았다. 글루는 간격을 나타낼 때 사용하고, 줄어들거나 늘어들 수 있는 것이다. 하지만 이러한 글루의 성질을 알고 있는 사람은 글루라는 단어가 잘못 선택된 것이라는 것을 알아 차릴 수 있을 것이다. 왜냐하면 글루는 늘어나거나 줄어들 수 없는 것이기 때문이다. 글루의 사전적 의미를 알아보자.
glue〔OF 「끈끈이」의 뜻에서〕 n.  아교;접착제
   ¶ quick-drying glue 순간접착제
stick like glue to a person …에게 귀찮게 붙어 다니다, 추근추근 달라붙다
━ vt.
1  …을 아교[접착제]로 붙이다, …에 아교[접착제, 풀]를 바르다;[종종 수동형으로] 달라붙어서 떨어지지 않다
   ¶ 《glue+목+전+명》 glue a label on a package 소포에 꼬리표를 붙이다
   ¶ He glued the wings onto the model airplane. 그는 모형 비행기에 날개를 붙였다.
2  …에서 <눈[귀]을> 떼지 않다, 주의를 집중하다 《to, on》
   ¶ glue one’s eyes to the TV screen 텔레비전에 시선을 집중하다
glue up 봉하다(seal up), 밀폐하다
with one's eyes glued on[to] …을 뚫어지게 보며, 응시하며
━ vi. 접착하다, 아교로 붙다
   ¶ 《glue+부》 The wood glues well. 목재는 아교로 잘 붙는다.
위의 사전적 의미에서 볼 수 있듯이 글루는 아교같은 접착제이다. 늘거나 줄어들 수 있는 성질의 것이 아니다. 아마도 글루보다는 늘거나 줄어들 수 있는 "스프링"이 더 어울릴지 모르겠다. 그럼에도 불구하고 이름이 글루가 된 이유는 저자가 말하는 바에 따르면 다음과 같다. :)

But whenever the author has suggested changing TeX's terminology, numerous people have said that they like the word "glue" in spite of its inappropriateness; so the original name has stuck.

올리고, 내리고...
Submitted by 작은나무 @ 06-09 [07:33 pm]
66쪽: 텍은 hbox 내에 있는 개별 박스들을 올리고 내릴 수 있다. 그렇게 함으로써 수학에서 윗첨자, 아랫첨자들을 조판할 수 있는것이다. 텍의 이러한 능력에 대한 대표적인 예가 바로 텍로고이다. 텍로고는 내부 레지스터인 \box0 에 다음과 같이 저장되어 있다.
\setbox0=\hbox{T\kern-.1667em\lower.5ex\hbox{E}\kern-.125em X}
여기서 '\kern-.1667em'이 의미하는 바는 현재 사용되고 있는 글꼴에 해당하는 -.1667ems 만큼의 간격을 두라는 소리인데, 이 간격이 음수 이므로 두 박스가 보통의 간격보다 약간 붙은 느낌을 준다. 그리고 \lower.5ex의 뜻은 \hbox{E} 박스를 아래로 현재 글꼴의 알파벳 소문자 'x' 높이의 절반에 해당하는 간격만큼 내리라는 뜻이다. 로고를 보면 알수있듯이 'E' 좀 내려온 것을 확인 할 수 있다. 네거티브한 사람은 \lower.5ex 대신 \raise-.5ex라고 해도 된다. (raise 하는 것이 네거티브한 것인지 lower 하는 것이 네거티브한 것인지는 모르겠다. :) ) 텍북 12장과 21장은 이러한 것들에 대해서 더욱 자세히 다루고 있다.

앞에서 텍의 로고는 \box0에 저장되어 있다고 했다. 우리가 맘만 먹으면 그 박스의 내용을 알 수 있다. 텍을 취조하면 된다. 즉 조사하면 다나온다. 어떻게? \showbox0 라고하면 \box0의 내용을 자세히 살펴볼 수 있다. 그리고 그 내용은 로그 파일에 기록된다.
\hbox(6.83331+2.15277)x18.6108
.\tenrm T
.\kern -1.66702
.\hbox(6.83331+0.0)x6.80557, shifted 2.15277
..\tenrm E
.\kern -1.25
.\tenrm X
첫번째 줄이 의미하는 바는 \box0는 hbox 이고 그의 높이, 깊이, 폭이 각각 6.83331 pt, 2.15277 pt, 18.6108 pt 라는 뜻이다. 그 다음 줄부터는 모두 . 으로 시작하는 것을 확인 할 수 있는데, 이 뜻은 박스 안에 있는 내용물이라는 뜻이다. 몇 줄만 더 살펴보자 이 박스에 가장 먼저 나오는 것은 글자 T 이고 이 글자의 글꼴은 \tenrm이다. 그리고 그다음에 kern 이 오고, 그 다음에 글자 E를 담고 있는 hbox 이고, 이 박스의 높이, 깊이, 폭은 글자 E 의 그것들이다. 이 박스는 아래로 2.15277 pt 만큼 내려가 있다.

연습문제 11.1: '..\tenrm E'는 왜 점이 두개 붙어있을까?
박스 안의 내용물에는 점을 하나 찍는데, E는 박스 안의 박스이기 때문이다. :)

Jun 08, 2006
TeX이 페이지를 만드는 원리
Submitted by 작은나무 @ 06-08 [10:28 pm]
64~65쪽: 지금까지 텍의 가장 간단한 박스인 문자 박스ruled 박스에 대해서 알아보았다. 사실 텍에 있어서 페이지란 문자박스와 ruled 박스의 조합에 지나지 않는다. 즉 페이지는 문자 박스와 ruled 박스들을 잘 어울리게 붙여서 만든다는 것이다. 텍은 박스들을 붙일 때 두가지 원칙으로 붙인다. 가로로 붙이거나 세로로 붙인다는 원칙이다. 텍은 박스들을 가로로 붙일 때, 일단 그 박스들을 가로로 배열한다. 이때 보기 좋게 줄을 맞추어야 하는데, 이때 사용되는 것이 바로 reference points 이다. 즉 문자박스를 설명할 때, 각 박스들은 reference point를 가지고 있다고 했다. 즉 그 포인트들이 서로 같은 위치에 있도록 가로로 박스들을 배치하는 것이다. 그렇게 함으로써 서로 이웃한 박스들의 baseline이 서로 일치하는 것이다. 비슷한 방법으로 박스들을 세로로 배치할 때 역시, 세로로 배치할 박스들의 reference point들이 세로로 같은 줄에 있도록 배치한다.

박스들을 가로로 붙이려면 어떻게 하면 될까? \hbox (horizontal box)를 사용한다. 예를 들어보자
\hbox{A line of type.}
텍은 위 명령을 어떻게 인식할까? 앞서 설명에서 텍에게 있어서 문자들은 박스에 지나지 않는다고 설명하였다. 따라서 위에 예로든 hbox는 각 글자를 하나의 박스로 보고 그 박스들을 앞서 설명한 대로 reference point들을 맞추어 붙이면 다음과 같다.

hbox.jpg


위 그림은 텍이 문자들을 어떻게 배치하는지를 아주 잘 보여주고 있다. 그렇다면 텍은 박스들을 어떻게 세로로 붙일까? 역시 예를 들어보자.
\vbox{\hbox{Two lines}\hbox{of type.}}
일단 hbox 두 개를 만든다. 그리고 그 두개의 hbox의 reference point들을 세로로 맞추어 vbox를 만들면 아래와 같다.

vbox.jpg


이제 hbox와 vbox에 대해서 감이 잡힐 듯하다. 페이지도 알고보면 하나의 vbox이다. 그렇다면 줄들은 무엇일까? 그렇다. 문자 박스들이 가로로 나열된 hbox이다. 따라서 그 줄(hbox)들을 페이지라는 vbox에 세로로 배열하는 것이다!!!

그런데 우리는 페이지를 만들때 hbox 나 vbox를 신경쓰지 않아도 된다. 텍이 알아서 우리가 입력한 파일에서 줄바꿈 알고리즘을 이용해서 줄을 만들고 그 줄을 hbox에 담아서 쪽나눔 알고리즘으로 그 hbox들을 적절히 vbox에 담는 것이다.

Jun 06, 2006
Ruled 박스
Submitted by 작은나무 @ 06-06 [06:32 pm]
64쪽: 지난 시간에는 텍의 박스 중 가장 간단한 박스인 문자박스에 대해서 알아 보았다. 텍에는 문자박스 외에도 아주 단순한 형태로 블랙박스라고 불리는 박스가 있다. 이 블랙박스가 어떻게 생겼는고 하니, 사각형으로 꽉찬 ' '의 모양을 하고 있다. 이 블랙박스 역시, 문자박스와 마찬가지로, 높이, 깊이, 폭을 자유자재로 줄 수 있다. 자유자재로 줄 수 있다고 해서 너무 많은 영역을 차지하도록 높이, 깊이, 폭을 주지는 말자. 왜냐하면 프리터가 미쳐버린다.

앞서 설명했듯이, 이 블랙박스의 영역을 많이 차지하게 하면, 프린터가 그 많은 영역을 잉크로 다 채우려고 미쳐버릴 것이므로, 이 블랙박스는 주로 높이와 깊이를 아주 작게 하여 마친 '선'같이 해서 사용한다. 따라서 수평선(horizontal rules), 수직선(vertical rules)들을 나타낼 때 이 블랙박스를 사용한다. 예로부터 프린터는 그러한 줄들을 "horizontal rules" 과 "vertical rules"라고 부르기 때문에 텍도 이러한 줄들은 \hrule와 \vrule 라고 부른다. 심지어 이 블랙박스가 ' ' 모양의 정사각형이라고 하더라도 우리는 이 박스를 \hrule 또는 \vrule 이라고 불러야 한다. 이러한 rule box의 사용에 대해서는 텍북의 21장에 자세히 나와 있지만, 그 장을 다룰지는 미지수다. :)

Jun 01, 2006
문자 박스(Box)
Submitted by 작은나무 @ 06-01 [11:14 pm]
63쪽: 텍은 페이지를 어떻게 만들까? 먼저 한 페이지에는 여러개의 문단으로 구성된다. 그리고 그 문단은? 여러개의 줄(line)들과 그 줄 사이의 간격으로 만들어지고, 각 줄은 여러개의 단어와 단어 사이의 간격으로, 마지막으로 단어는 여러개의 문자로 만들어진다. 즉 아무리 복잡한 페이지라 할 지라도 간단한 문자와 그 문자들을 잘 붙이고 그 들사이에 간격을 두어 페이지가 만들어지게 된다. 재미있는 것은 텍의 입장에서 보면 하나의 문자는 하나의 박스에 지나지 않는다. 텍은 문자를 박스로 취급할 뿐, 그 문자가 어떻게 생겼는지는 모른다. 텍이 그 문자에 해당하는 박스를 만들어 놓으면, 그 박스에 문자를 채워넣는 일은 텍이 아닌 출력 장치가 알아서 할 일이다. 이렇듯 텍은 박스와 그 박스들을 서로 붙일 수 있는 풀만 있으면 아무리 복잡한 페이지도 만들어 낼 수 가 있고, 이를 텍의 용어로 나타내면 페이지는 박스(Box)글루(Glue)로 만들어 진다고 할 수 있다.

박스에 대해서 좀 더 자세히 알아보자. 텍에서의 박스는 직사각형 모양의 2차원 물건이다. 특히 박스는 높이(height), 폭(width), 깊이(depth)의 세 가지 값을 가지고 있다. 박스는 이 세 가지 값 말고도 여러개의 박스를 잘 배치하기 위해서 reference point와 baseline을 가지고 있다. 그림으로 확인하자.

boxdefault.jpg


앞에서 언급했듯이, 텍의 관점에서 보면 하나의 문자는 하나의 박스이다. 글꼴 설계자(font designer)들이 박스의 높이, 폭, 깊이를 정의 했고, 텍은 박스들을 서로 붙일 때 그 값들을 사용한다. 궁극적으로는 한 페이지의 모든 글자들의 reference point들의 위치를 구하기 위해서 그 값들을 사용한다. 텍에서의 문자 박스를 예를 들어보자. 플레인텍의 \rm 글꼴 (cmr10)에서 'h'의 높이는 6.9444 points이고, 폭은 5.5555 points 그리고 깊이는 0이다; 'g'는 4.3055 points의 높이와 5 points 만큼의 폭, 1.9444 points의 깊이를 가지고 있다. 두 문자 모두 10-point 크기의 문자임에도 높이와 깊이의 합이 10 points 가 되지 못한다. 단지 괄호와 같은 특수 문자들 만이 높이와 깊이의 합이 10 points가 될 뿐이다.

그리고 문자가 반드시 박스안에 들어가 있어야 하는 것은 아니다. 경우에 따라서는 문자가 박스를 조금 벗어나는 경우가 있을 수도 있다. 예를들어 \sl 글꼴은 \rm 글꼴을 기울인 것인데, 이때 \sl 글꼴은 상자에서 약간 벗어나기도 한다. 하지만, 텍은 \rm 이든지 \sl 이든지 글꼴을 상관하지 않는다고 했으므로 두 개의 서로 다른 모양의 글꼴도 텍의 입장에서는 박스로 취급되기 때문에 같은 것이다.

6월의 학습목표
Submitted by 작은나무 @ 06-01 [09:53 am]
6월에는 11~12장을 공부할 계획입니다. 박스와 글루는 텍이 페이지를 만들때 사용하는 기본적인 도구들 이라고 할 수 있는데, 그동안 이것들을 빼놓고 하려니 종종 막히는 것이 있었습니다. (대충 얼버무려서 넘어갔지만)

그리고 시간이 된다면 내친김에 13장 Modes도 해볼 계획입니다.