TeX において最も重要な概念が「箱(box)」です。 通常の文字ひとつひとつも小さな「箱」ですし、 最終的に出力されるおのおのの行も小さな「箱」を並べて作った横長な「箱」です。 ひとつのページはその横長な「箱」を縦に並べてできる大きな「箱」です。 さまざまな箱を垂直方向に並べたり、水平方向に並べたりして、 複雑なレイアウトを作ることができます。 この節では「箱」の取扱い方を学びます。
これは垂直箱の例です: \vbox{\hbox{アイウエオ}\hbox{柿}}。いかがですか? \bye |
「これは〜」で水平モードになり、 通常のテキストと2つの hbox が縦にならべられてできるひとつの box が横に 並んでいます。vbox の中は内部垂直モードが支配しています。
今度は tex002a.tex(S-JIS) -- tex002a.dviを見て下さい。
これは垂直箱の例です: \vbox{A\hbox{アイウエオ}\hbox{柿}}。いかがですか? \bye |
前との違いは vbox の中にある「A」という文字のため水平モードに移行し、 ふたつあるhboxは単にふたつの箱として水平方向にならべられひとつの行の 一部となります。次にその横長のvboxが他の文字や句読点などと一緒に 水平モードの中で横にならびます。実際には、vbox の幅が \hsize だけ あるので、それ以降は改行されて次の行の先頭に出力されています。 わかりにくいので、vbox の中で局所的に \hsize を変えてみます:
tex002b.tex(S-JIS) -- tex002b.dviを見て下さい。
これは垂直箱の例です: \vbox{\hsize=5cm A\hbox{アイウエオ}\hbox{柿}}。いかがですか? \bye |
hbox, vbox など にもその高さ(height), 深さ(depth), 幅(width) があります。
hbox, vbox は中身の自然な大きさが box の大きさになりますが、 明示的にhboxの幅やvbox の高さを指定することができます。 \hfil, \hfill や \vfil, \vfill などの伸び縮みする空白を入れておかない場合の 挙動は欧文・和文・拗音の存在などで変わります。 次の例では hbox の幅を 3cm に指定しています。
例: tex009a.tex(S-JIS) -- tex009a.dvi
あいうえお\hbox to 3cm{ち ょ っ と}さしすせそ\par あいうえお\hbox to 3cm{\hfil ちょっと}さしすせそ\par あいうえお\hbox to 3cm{ちょっと\hfil}さしすせそ\par \bye |
vbox の幅は中に積み重なっている box たちから自然にきまります。 もし、vbox の中で水平モードを用いる(つまり段落を用いる)ときは、 その時点で \hsize を適切に設定することで、幅の調整ができます (上の tex002b.tex で試しました)。
hbox で並べられるとき、箱たちは baseline が揃うように並べられ、 その共通の baseline が外の箱の baseline となります。
vbox においては一番下の箱の baseline が外の箱の baseline となります。 \vboxに類似の\vtopというコマンドがありますが、 こちらを用いると 一番上の箱のbaselineが外の箱の baseline となります。
例: tex009b.tex(S-JIS) -- tex009b.dvi
12345 \vbox{\hsize=2cm \noindent あいうえおかきくけこさしすせそたちy} \vtop{\hsize=2cm \noindent 亜唖娃阿哀愛挨姶葵逢茜穐悪握渥旭葦} 67890 \bye |
vbox の本当の一番下や vtop の本当の一番上を baseline にするには 次の例のように厚さ 0pt の hrule をそこにひいておきます。
例: tex009c.tex(S-JIS) -- tex009c.dvi
12345 \def\myrule{\hrule height 0pt depth 0pt} \vbox{\hsize=2cm \noindent あいうえおかきくけこさしすせそたちy\myrule} \vtop{\hsize=2cm \myrule \noindent 亜唖娃阿哀愛挨姶葵逢茜穐悪握渥旭葦} 67890 \bye |
box の baseline については上で説明しました。 これが自分の希望するものでない場合上下に移動する必要があります。 また、左右に動かしたい場合もあるでしょう。 これらは以下のコマンドを用いて実行します。 いずれも次の書式を用います:
コマンド 移動距離 箱 (例:\raise 3pt \vbox{ ... } )
それではA Gentle Introduction to TeXの p.89 にある \boxtext マクロを少し変更してみましょう:
\def\boxtext#1{% \lower 3.5pt \vbox{% \hrule \hbox{\strut\vrule {} #1 \vrule}% \hrule }% } \noindent \boxtext{This} is a \boxtext{sample usage}. \bye |