第 9 章 L A TEX の応用 151
9.9 箱の操作
まずは
L
ATEX
で用意されている箱について説明します.これらはltboxes.dtx
で定義 されています.L
ATEX
における箱というのは文章や段落,数式や図表などの要素を格納す る領域のようなものです.L
ATEX
の箱には高さと幅と深さの3
種類の長さを持っていま す.さらに箱のどの点を基準にするかという基準点という座標も持ち合わせています.9.9.1 枠のない箱
L
ATEX
ではなんとも簡単に複数の要素を一つの箱に収めることができます.\makebox[
h幅i][
h位置i]{
h要素i}
\makebox
では箱の幅と箱の中の要素の位置を指定できます.箱の幅よりも要素の幅が狭いときに箱の左側に配置
‘l’
,中央に配置する‘c’
,右側に配置する‘r’
,最後に要素を均 一に配置する‘s’
の四つを使うことができます.\makebox[3zw][l]{ほげ}と
\makebox[3zw][c]{げほ}と
\makebox[5zw][r]{あれ}と
\makebox[5zw][s]{G o o d !}です.
ほげ と げほ と あれとG o o d !です.
要素の幅分の箱を作りたければ
\mbox
を使います.\mbox{
h要素i}
引数を省略すると要素分の幅を確保し
\makebox
を使うよりも効率が良いです.\hspace*{\fill} 単なる予想ですが,この箱の 中では恐らく\mbox{改行が起こりません.}
単なる予想ですが,この箱の中では恐らく 改行が起こりません.
9.9.2 枠のある箱
複数の要素を一つの塊として扱うようにするのが
L
ATEX
における箱の役割のようなも のです.箱には枠を付けることもできます.\framebox[
h幅i][
h位置i]{
h要素i}
\framebox
も\makebox
とほぼ同じですが罫線の太さ\fboxrule
と罫線と要素の間 隔\fboxsep
の二つの長さを設定できます.\fboxrule
は罫線の太さを,\fboxsep
は枠 と要素との距離を長さで指定します.\framebox[3zw][l]{ほげ}と
{\fboxrule=3pt\framebox[3zw][c]{げほ}}と
\framebox[5zw][r]{あれ}と
\framebox[5zw][s]{G o o d !}です.
ほげ と げほ と あれ とG o o d !です.
好き好き
L
ATEX 2
ε初級編9.9
箱の操作9
\makebox
と同じように引数を省略すると要素分の幅を確保する\fbox
が使えます.\fbox{
h要素i}
{\fboxsep=0pt\fbox{ぴったりだね}}.でも
{\fboxrule=.8pt\fbox{ちょっと太い}} ぴったりだね.でも ちょっと太い
9.9.3 広範囲な箱
指定した箱の大きさで段落を組む
\parbox
命令もあります.標準では字下げがされま せんので必要があれば\parindent
に長さを代入してください.\parbox[
h位置i][
h高さi][
h要素の位置i]{
h幅i}{
h文字列i}
\parbox
で作成された箱の基準をどこにするのかをh位置iで指定します.位置には上部‘t’
,中央‘c’
,下部‘b’
の三つが使えます.標準では中央になります.\parbox{13zw}{段落が終わる命令\par を使っても改行されますが\par
標準では字下げされません.}
段落が終わる命令
を使っても改行されますが 標準では字下げされません.
\parbox[c]{4zw}{箱が中央に.}\ldots
\parbox[t][3zw][c]{4zw}{文字が中央,
上が基準}\ldots
\parbox[b][3zw][t]{4zw}{文字が下に,
下が基準}\ldots
\parbox{3zw}{文字が上で下を基準}
箱が中央
に. . . .文字が中 央,上が 基準
. . .
文字が下 に,下が 基準 . . .
文字が 上で下 を基準
ページのような箱を組む
minipage
環境もあります.\begin{minipage}[
h位置i]{
h幅i}
ページ内容\end{minipage}
minipage
環境では段落が組まれますし,脚注の出力も可能です.この環境は~
\begin{minipage}[t]{7zw}
ページを組みあげるので脚注\footnote{脚注です.} もページの中に出力されます.
\end{minipage}
~のようになります.
この環境は ページを組みあ げ る の で 脚 注a もページの中に 出力されます.
a脚注です.
のようになります.
9.9.4 箱の保存と使用
ある要素を箱の中に保存し,それを再利用できればエネルギー消費を減らすことができ ます.
\newsavebox{
h綴りi}
箱を保存するためには保存する場所の確保を
\newsavebox
で行います.L
ATEX
が使っ ても良い箱は数が限られているのであらかじめいくつくらい使うのかを宣言してあげま す.宣言するときはバックスラッシュを先頭に付けます.箱の中に要素を保存するときは\savebox
か\sbox
命令を使います.\savebox{
h綴りi}[
h幅i][
h要素の位置i]{
h要素i}
\sbox{
h綴りi}{
h要素i}
箱の幅や要素の位置を指定するときは
\savebox
を使います.もちろん幅を指定しないと 要素の位置は指定できません.上記の命令のほかにもlrbox
環境があります.行に収ま るくらいの要素をlrbox
環境の中に記述するとh綴りiの箱に代入します.\begin{lrbox}{
h綴りi}
要素\end{lrbox}
これまでの命令では箱を用意してその中に要素を保存するだけですので,保存した箱 を
\usebox
命令で使います.\usebox{
h綴りi}
\usebox
命令を使うとh綴りiの箱に保存されている要素を複数回再利用できます.\newsavebox{\hoge}
\savebox{\hoge}{\LaTeXe から\LaTeX3 へ}
\usebox{\hoge}, \usebox{\hoge}.\par
\usebox{\hoge}, \usebox{\hoge}.\par
\sbox{\hoge}{} \usebox{\hoge}
LATEX 2εからLATEX3へ, LATEX 2εからLATEX3へ. LATEX 2εからLATEX3へ, LATEX 2εからLATEX3へ.
L
ATEX
の作業領域は限られていますので\setbox
命令でh綴りiの箱を使い終わったら 空にします.9.9.5 箱の上げ下げ
ある要素を箱の中に入れて,さらに上げ下げを同時に行う
\raisebox
命令もあります.\raisebox{
h上げ下げi}[
h高さi][
h深さi]{
h要素i}
\raisebox
命令の中には文字列や他の箱も挿入できます.好き好き
L
ATEX 2
ε初級編9.9
箱の操作9
ありゃま,\raisebox{1zw}{ほげほげ}は
\raisebox{-1zw}{どれどれ}で,
\raisebox{1.5zw}{\fbox{枠付きの箱}}だよ.
ありゃま,
ほげほげ は
どれどれで,
枠付きの箱 だよ.
この命令でこんな悪ふざけもできます.
\fbox{ほげ,\raisebox{1zw}{ほげ} ほげ,\raisebox{-1zw}{ほげ} ほげ,\raisebox{1zw}{ほげ} ほげ,\raisebox{-1zw}{ほげ.}}
ほげ,
ほげ ほげ,
ほげ ほげ,
ほげ ほげ,
ほげ.
9.9.6 罫線と下線
箱とは違うのですが罫線をここで紹介しておきます.
\rule[
h上げ率i]{
h幅i}{
h高さi}
\rule
命令は使いものになります.見えない罫線を引くこともできます.例えば幅が0 pt
でも高さのある罫線,高さが0 pt
でも幅のある罫線が使えますから,こんな使い方もでき るわけです.枠の見える状態での例を見てください.ほげ\fbox{\rule{0pt}{3zw}\rule{4zw}{0pt}}
ほげ\fbox{\rule{0pt}{3zw}\rule{2zw}{0pt}} ほげ ほげ
箱とは違うのですが下線も紹介しておきます.下線は
\underline
を使います.\underline{
h要素i}
\underline
の中に箱を入れることもできますし,何を入れても構いません.\underline{\fbox{枠付きの箱}の下線}の調 子はどうですか?そりゃぁ,\underline{下 線}ですよ.
枠付きの箱 の下線 の調子はどうですか?そりゃぁ,
下線 ですよ.
9.9.7 枠付きの箱その 2
L
ATEX
の標準では\fbox
と\framebox
命令が使えます.\fbox{これは枠付きの箱} \\
\framebox[10zw][c]{ほげほげ}\\
\fbox{\fbox{2重枠の箱}} \\
{\fboxrule=1pt\fbox{枠の太い箱}}\\
{\fboxsep=0pt\fbox{文字と枠がぴったりな箱}}
これは枠付きの箱 ほげほげ
2重枠の箱
枠の太い箱
文字と枠がぴったりな箱
Timothy Zandt
氏によるfancyboxを使ってみると枠付きの箱を出しやすいでしょう.枠付きの箱に文字列を入れるための命令として
\shadowbox
,\doublebox
,\ovalbox
,\Ovalbox
の四つがあります.\shadowbox{影付きの箱} \\
\doublebox{2重の枠付きの箱 \\
\ovalbox{辺が丸い箱} \\
\Ovalbox{太くて辺が丸い箱}}
影付きの箱
2重の枠付きの箱
¨
§
¥
辺が丸い箱¦
¨
§
¥
太くて辺が丸い箱¦
fancyboxを使うと
Sbox
環境というものが使えて,これは環境内のものを箱(レジスタ)である
\TheSbox
に保存します.このようにして保存した箱を\fbox
などで囲みま す.例えばminipage
を枠で囲むfminipage
環境を作成するのであれば\newenvironment{fminipage}%
{\begin{Sbox}\begin{minipage}}%
{\end{minipage}\end{Sbox}\fbox{\TheSbox}}
とします.
\newenvironment{fminipage}%
{\begin{Sbox}\begin{minipage}}%
{\end{minipage}\end{Sbox}\fbox{\TheSbox}}
\begin{fminipage}{.8\linewidth}
この環境は枠で囲まれます.というか,
囲んでくれないと困ります.
\end{fminipage}
この環境は枠で囲まれます.というか,囲 んでくれないと困ります.
数式環境などを枠で囲もうと思うとき,数式番号も含めて枠の中に入れるのはちょっと 面倒かもしれません.
\fbox
などの命令を使うとそこから数式を組み立てるモードではな く文章を組み立てるモードになりますので,もう1
度数式環境を書きます.\( y=f(x)+\fbox{\(C\)}\)
\begin{equation}
\fbox{\(y=f(x)\)}
\end{equation}
y= f (x)+ C
y= f (x) (9.1)
番号付きの数式を文章幅いっぱいに枠で囲むには
(\linewidth (
文章幅)
−2\fboxrule−2\fboxsep) を計算します.これにはcalcパッケージが使えます.%\usepackage{calc,fancybox}
\fbox{\parbox{%
(\linewidth-2\fboxrule-2\fboxsep)}{
\begin{equation} y=f(x) \end{equation}}}
y= f (x) (9.2)
eqnarray
環境は枠で囲もうと思うとfancyboxの場合はBeqnarray
が用意されていま すので,こちらの環境を\fbox
などで囲みます.好き好き
L
ATEX 2
ε初級編9.9
箱の操作9
\fbox{\begin{Beqnarray}
y&=&f(x)\\
&=&1/x
\end{Beqnarray}}
y = f (x) (9.3)
= 1/x (9.4)
table
環境やfigure
環境などで見出しも含まれる要素は\Sbox
で一度保存したもの を枠で囲むようにします.こうすると%\usepackage{calc,fancybox}
\newenvironment{ftable}[1][htbp]%
{\begin{table}[#1]
\begin{Sbox}\begin{minipage}{%
(\linewidth-2\fboxrule-2\fboxsep)}}%
{\end{minipage}\end{Sbox}\fbox{\TheSbox}\end{table}}
のように
ftable
やffigure
のような環境が定義できます.この出力例が表9.5
となり ます.L
ATEX2.09 L
ATEX 2
εL
ATEX3
表9.5 LATEXの歴史
fancyboxでは
center
環境のように行揃えを行う環境があります.これを枠で囲むには
Bcenter
,Bflushleft
,Bflushright
環境を使います.\fbox{\begin{Bcenter}
ここは \\ 中央揃えで \\ 枠付きなのだぁ.
\end{Bcenter}}
ここは 中央揃えで 枠付きなのだぁ.
\fbox{\begin{Bflushleft}
ここは \\ 左揃えでぇ〜 \\ 枠付き.
\end{Bflushleft}}
ここは 左揃えでぇ〜
枠付き.
\fbox{\begin{Bflushright}
ここはですねぇ \\ 右揃えで \\ 枠付き.
\end{Bflushright}}
ここはですねぇ 右揃えで 枠付き.
minipage
環境の中で行揃えの命令を使うことも考えられますが,その場合は横幅を指定しないといけないので,これらの環境は便利でしょう.箇条書き環境も同様に
minipage
の中に入れて\fbox
で囲むことも考えられますが,fancyboxではBitemize
,Benumerate
,Bdescription
の三つがすでに定義されているので,これらの環境を枠で 囲みます.\fbox{\begin{Benumerate}
\item ほげほげ.
\item あれあれあれあれ?.
\item どれどれ.\end{Benumerate}}
1. ほげほげ.
2. あれあれあれあれ?.
3. どれどれ.
\verb
命令を枠で囲むときは\VerbBox
命令を使います.\VerbBox{\fbox}{%
\verb|\VerbBox{\fbox}{\verb+文章+}|} \VerbBox{\fbox}{\verb+文章+}
verbatim
環境を枠で囲む場合はやはり先にSbox
環境で囲んで\TheSbox
を枠で囲む ようにします.この場合fverbatim
環境を定義したほうが便利でしょう.ただし,こ の場合\VerbatimEnvironment
命令とVerbatim
環境を併せて使わないとエラーになり ます.\newenvironment{fverbatim}[1]%
{\VerbatimEnvironment \begin{Sbox}%
\begin{minipage}{#1} \begin{Verbatim}}%
{\end{Verbatim}\end{minipage}\end{Sbox}%
\fbox{\TheSbox}}
\begin{fverbatim}{.8\linewidth}
このべた書き環境は枠で囲まれて 出力されます.
\end{fverbatim}
このべた書き環境は枠で囲まれて 出力されます.
このほかにもfancyboxにはファイルから読み込んだ行をべた書き環境に出力する命令 なども用意されています.