KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
You have a strong desire for a home and your family interests come first.
FrontPage › Box

목차

1 박스
1.1 hbox to와 hbox spread
1.2 hbox와 vbox
1.3 vbox와 vtop
2 PlainTeX에서 Box 처리
2.1 Box Register
2.2 사용자 박스 만들기
2.3 \lastbox
2.4 박스 상태 체크
2.5 box 배치
2.6 \copy, \unhbox, \unhcopy etc.
2.7 box 위치
2.7.1 moveleft, moveright
2.7.2 lower, raise
3 특별한 박스들
3.1 strut
3.2 mathstrut
3.3 phantom
3.4 hphantom, vphantom
3.5 smash
3.6 null
4 Rule
4.1 hrule
4.2 leaders
4.3 dotfill, hrulefill
4.4 leftarrowfill, rightarrowfill
5 LaTeX의 박스 관련 명령과 환경

1 박스

TeX은 모든 것을 박스로 처리한다. 박스의 기본적인 모양은 다음과 같다.
boxdefault.jpg

  • 그림박스는 depth=0이다. 즉 baseline과 bottom line이 동일하다.
  • 영문자의 경우 p, g, y 등은 baseline 아래로 내려간다. 그리고 소문자 a의 경우 글자의 높이가 topline에 미치지 않는데, 이 높이는 폰트의 디자인에 따라 달라지며 xheight라고 부른다. 글자 x의 높이라는 뜻이다.
  • 한글 글꼴은 bottom line을 기준으로 디자인된 글꼴과 영문자 baseline을 기준으로 디자인된 글꼴이 있다. bottom line을 기준으로 디자인된 글꼴을 영문자와 함께 쓰면 글자의 바닥이 영문자 바닥보다 아래로 내려간다. 대부분의 한글 글꼴은 영문의 baseline보다는 아래쪽에 디자인상의 baseline을 잡았지만 bottom line까지는 내려가지 않는 것이 많다.
  • reference point는 여러 가지 면에서 중요하지만 특히 박스를 회전시킬 때 중요하다. 하나의 박스가 회전할 때의 각도는 reference point(참조점)를 기준으로 회전한다.

  • TeX은 폰트의 이 디자인 설계에 관한 정보를 이용해서 각각의 문자를 모두 box로 생각하여 이것을 붙여 단어를 만들고 단어 박스를 다시 붙여 행을 만들고 행 박스를 붙여 페이지를 만드는 방식으로 식자된다. 박스와 박스를 붙일 때는 풀(glue)을 사용하는데 :) 이 풀 자체도 길이가 있는(문자박스 사이에서는 대부분 0, 단어박스 사이에서는 가변길이를 가지는 rubber glue. vertical mode에서는 glue라고 하지 않고 lineskip 등 skip이라고 한다.) 하나의 박스이다. 문자 박스를 붙여 단어와 행을 만드는 과정을 horizontal mode라고 하고, 행을 모아서 단락과 페이지를 만드는 과정을 vertical mode라고 한다. 하나의 페이지에는 text body vertical mode box 이외에 header 박스와 footer 박스가 더 있고, 경우에 따라서 MarginalNote 박스를 덧붙이기도 한다.

    1.1 hbox to와 hbox spread

    \hbox에 to 또는 spread 지시자를 쓸 수 있다. 그 다음에는 적절한 길이가 와야 한다.

    \hbox{Find out what it means to spread the box.}
    
    \hbox to .5\hsize{Find out what it means to spread the box.}
    
    \hbox spread 20pt{Make your days.}
    

    \noindent\hbox{Find out what it means to spread the box.}

\noindent\hbox to \hsize{Find out what it means to spread the box.}

\noindent\hbox spread 10pt{Make your days.}

    1.2 hbox와 vbox

    KTUGOperate:12284 \hbox는 줄나눔이 일어나지 않습니다. 높이는 한 줄로 고정되고 horizontal 쪽으로 길어지지요.

    \vbox는 가로를 고정시켜놓고(\hsize를 줄 수 있습니다.) 세로로 길어지는 것인데, 그 안에 오는 텍스트는 줄나눔이 됩니다. 페이지나눔은 일어나지 않습니다. TeX에서 "페이지"라는 것은 \hsize가 \textwidth인 \vbox를 가리킵니다.

    1.3 vbox와 vtop

    \vtop
    \vtop to
    \vtop spread
    \vbox
    \vbox to
    \vbox spread
    

    • 단순히 \vbox만을 지시하면 natural height를 갖는다.
    • \vbox to <dimen>을 지시하면 vbox의 height가 <dimen>이 된다.
    • \vbox spread <dimen>을 지시하면 vbox의 height는 natural height + <dimen>이 된다.

    \vbox와 \vtop의 차이는 한 줄 이상의 텍스트가 vbox에 올 때, \vbox는 height가 길어지는 데 반해 \vtop은 depth가 길어진다는 것이다. 그 결과, \vtop은 baseline을 기준으로 아래쪽으로 박스가 길어지고(baseline 고정, depth 증가) \vbox는 위쪽으로 텍스트 박스가 길어진다(baseline 고정, height 증가).

    \TeX\ assembles boxes
    %
    \vtop{\hsize=70pt\noindent\it
    of different sizes and shapes}
    %
    \vbox{\hsize=78pt\noindent\bf
    having as many words as you wish}
    %
    \newline into paragraphs and pages---as this example clearly
    shows.
    

    \TeX\ assembles boxes
%
\vtop{\hsize=70pt\noindent\it
of different sizes and shapes}
%
\vbox{\hsize=78pt\noindent\bf
having as many words as you wish}
%
\newline into paragraphs and pages---as this example clearly
shows.

    2 PlainTeX에서 Box 처리

    2.1 Box Register

    PlainTeX에서는 Box Register가 \box0 에서 \box255까지 256개가 준비되어 있다.
    사용자는 \box0부터 \box9까지 열 개만 사용할 것을 권장한다.(scratch boxes) 다른 box register들은 대부분 PlainTeX 시스템에 의하여 사용되는 것들이다. \box255는 특별한 용도로 사용되는 것이므로 참조되지 않는다.

    \setbox0\hbox{This is My New Box.}
    
    이제부터 이 박스는 \box0이라는 register 번호로 참조된다.

    2.2 사용자 박스 만들기

    box register를 직접 제어하는 것은 쉽지 않은 일이므로, PlainTeX은 박스를 register number가 아니라 unique name으로 참조할 수 있도록 하고 있다.

    새로운 박스를 이름으로 선언한다.
    \newbox\mynewbox
    

    이제부터 이 박스는 \mynewbox라는 명칭으로 참조된다. box register는 자동 할당된다.

    이 박스의 내용을 채워주어야 한다. 그렇지 않으면 void box로 다루어질 것이다.
    \setbox\mynewbox\hbox{This is My Newly Defined Box.}
    

    여기까지를 박스 할당이라 한다.

    2.3 \lastbox

    직전 아이템이 박스이면 그 박스는 지워지고 \lastbox가 이를 받는다. 직전 아이템이 박스가 아니면 \lastbox는 void가 된다. 따라서 {\setbox0=\lastbox}는 직전 박스를 리스트에서 지우는 명령으로 사용할 수 있다. 이것을 이용한 예: KTUGOperate:11742

    2.4 박스 상태 체크

    \mynewbox의 width, depth, height는 다음과 같이 하여 얻을 수 있다.
    \wd\mynewbox
    \dp\mynewbox
    \ht\mynewbox
    

    새로운 dimension \MyTestDimen을 하나 정의해서 이 각각의 값을 디스플레이해보자.
    \newdimen\MyTestDimen
    \MyTestDimen=\wd\mynewbox
    the width of mynewbox : \the\MyTestDimen \\
    \MyTestDimen=\dp\mynewbox
    the width of mynewbox : \the\MyTestDimen \\
    \MyTestDimen=\ht\mynewbox
    the width of mynewbox : \the\MyTestDimen 
    

    \newbox\mynewbox
\setbox\mynewbox\hbox{This is My Newly Defined Box.}
\newdimen\MyTestDimen
\noindent\MyTestDimen=\wd\mynewbox
\the\MyTestDimen \\
\MyTestDimen=\dp\mynewbox
\the\MyTestDimen \\
\MyTestDimen=\ht\mynewbox
\the\MyTestDimen

    2.5 box 배치

    이제, \mynewbox를 배치한다. 만약 register number로 참조되는 박스가 있다면 이것은 \box<register number>를 호출하면 된다.

    \setbox0\hbox{this is My Box.}
    \box0
    

    \setbox0\hbox{this is My Box.}
\box0
    이름으로 참조되는 박스는 register number 대신 이름을 쓴다.

    \newbox\mynewbox
    \setbox\mynewbox\hbox{This is My Newly Defined Box.}
    \box\mynewbox
    

    \newbox\mynewbox
\setbox\mynewbox\hbox{This is My Newly Defined Box.}
\box\mynewbox

    2.6 \copy, \unhbox, \unhcopy etc.

    \boxn 형태의 호출이 이루어지고 나면 그 박스 register는 비워진다. 그러므로 박스의 내용을 유지하면서 박스를 배치하려면 \copy 명령을 써야 한다.
    \setbox0= \hbox{good }
    Have a \copy0 \box0 \box0 day!
    

    \unhbox는 주어진 hbox register의 내용을 list하고 박스 register를 비운다. \unvbox는 vbox에 대해서 같다. \unhcopy는 주어진 hbox register의 내용을 list하고 박스 register를 그대로 유지한다. \unvcopy는 vbox에 대해서 같다.

    2.7 box 위치

    2.7.1 moveleft, moveright

    이 명령들은 박스를 주어진 길이(dimen)만큼 왼쪽 또는 오른쪽으로 이동시켜 식자한다.
    \vbox{\vbox{Phoebe}\vbox{walked}
    \moveleft 20pt\vbox{a}\moveright 20pt\vbox{crooked}%
    \vbox{mile.}}
    

    \vbox{\vbox{Phoebe}\vbox{walked}
\moveleft 20pt\vbox{a}\moveright 20pt\vbox{crooked}%
\vbox{mile.}}

    2.7.2 lower, raise

    \raise와 \lower 명령 다음에는 box가 온다. 지시된 길이만큼 박스를 수직으로 올리거나 내린다. 예컨대 TeX의 로고는 다음과 같이 정의된다.

    \def\TeX{%
       T\kern-0.1667em
        \lower0.7ex\hbox{E}\kern-0.125emX}
    

    \TeX
    \lower.7ex\raise-.7ex와 같다.

    3 특별한 박스들

    3.1 strut

    strut란 폭이 0이고 높이와 깊이만을 갖는 특별한 박스이다.

    3.2 mathstrut

    \mathstrut는 폭이 0인 눈에 보이지 않는 박스입니다. \mathstrut의 높이와 깊이는 괄호 `('의 높이와 깊이와 같습니다. 따라서 \mathstrut를 포함하는 수식들은 언제나 같은 높이와 깊이를 가지게 됩니다.

    \mathstrut를 사용하는 한가지 예는
    ${\sqrt{a}+\sqrt{d}+\sqrt{y}$
    
    ${\sqrt{a}+\sqrt{d}+\sqrt{y}$ 처럼 루트기호가 위아래로 들쑥날쑥하는데, 이러한 경우에 \sqrt안에 \mathstrut를 사용해서,
    ${\sqrt{\mathstrut a}+\sqrt{\mathstrut d}+\sqrt{\mathstrut y}$
    
    ${\sqrt{\mathstrut a}+\sqrt{\mathstrut d}+\sqrt{\mathstrut y}$ 처럼 루트기호의 크기를 균일하게 할 수 있습니다.

    3.3 phantom

    이 명령은 인수로 주어지는 박스만큼의 빈 박스를 배치한다.

    3.4 hphantom, vphantom

    phantom과 같으나, 인수만큼의 가로길이와 세로길이만을 갖는 박스를 배치한다는 점이 다르다. 예를 들어 \hphantom{a}는 현재 기본 폰트의 a자의 \wd만큼의 \wd를 갖지만 height와 depth가 0인 박스를 만들어서 식자한다.

    3.5 smash

    인수로 주어진 문자를 typeset하지만 그 문자가 들어간 박스의 height와 depth를 0으로 만든다.
    $${\smash{r_m \brace r_n}\vphantom{r}} \Longrightarrow r$$
    

    $${\smash{r_m \brace r_n}\vphantom{r}} \Longrightarrow r$$

    3.6 null

    \null이란, width=0, height=0, depth=0인 hbox이다.

    4 Rule

    rule은 채워진 box이다.

    4.1 hrule

    \hrule
    \hrule height <dimen> width <dimen> depth <dimen>
    \vrule
    \vrule width <dimen> height <dimen> depth <dimen>
    

    \hrule의 기본값은 height 0.4pt, depth 0.0pt이다. width를 별도로 지정하지 않으면 현재 rule이 들어 있는 박스의 경계까지이다. \vrule의 기본값은 width 0.4pt이다. height와 depth를 별도로 지정하지 않으면 현재 rule이 들어 있는 박스의 아랫쪽 경계까지 연장된다.

    다음 코드를 실행해보라.

    \hrule\smallskip
    \hrule width 2in \smallskip
    \hrule width 3in height 2pt \smallskip
    \hrule width 3in depth 2pt
    

    \hbox{( {\vrule} {\vrule width 8pt} )}
    \hbox {(\vrule height 13pt depth 0pt}
      {\vrule height 13pt depth 7pt} x)}
    

    4.2 leaders

    \leaders는 수평모드(hofizontal mode)내에서 `\leaders<box or rule>\hskip<glue>'와 같은 형식으로 사용되는데, 이는 주어진 box 또는 rule을 주어진 공간(간격) 안에 가능한한 많이 반복해서 채워넣는 것입니다. 여기서 box 또는 rule을 임의의 패턴이라고 생각하면 됩니다. 즉 주어진 간격 안에 일정한 패턴이 계속해서 반복되는 것을 의미합니다. \learders는 아래의 예와 같은 "목차"에서 주로 사용됩니다. (아래의 예제는 TeXbook의 223쪽에서 발췌하였습니다.)
    \def\leaderfill{\leaders\hbox to 1em{\hss.\hss}\hfill}
    \line{Alpha\leaderfill Omega}
    \line{The Beginning\leaderfill The Ending}
    

    \def\leaderfill{\leaders\hbox to 1em{\hss.\hss}\hfill}
\line{Alpha\leaderfill Omega}

\line{The Beginning\leaderfill The Ending}

    4.3 dotfill, hrulefill

    \hbox to 3in{Start {\dotfill} Finish}
    \hbox to 3in{Swedish {\hrulefill} Finnish}
    

    \hbox to 3in{Start {\dotfill} Finish}
\hbox to 3in{Swedish {\hrulefill} Finnish}

    4.4 leftarrowfill, rightarrowfill

    \hbox to 3in{\vrule \rightarrowfill \ 3in
      \leftarrowfill\vrule}
    

    \hbox to 3in{\vrule \rightarrowfill \ 3in
  \leftarrowfill\vrule}

    5 LaTeX의 박스 관련 명령과 환경


    ^
    Valid XHTML 1.0! Valid CSS! powered by MoniWiki
    last modified 2006-02-25 23:19:56
    Processing time 0.1430 sec