graphicx パッケージには、中身を「箱」に入れて回したり拡大縮小したり鏡映したりする命令が揃っています。対象は画像にかぎりません——一文でも、数式でも、tabular で組んだ表でも、箱に入るものなら何でも変形できます。このページでは \rotatebox(回転)・\scalebox(倍率での拡大縮小)・\reflectbox(左右反転)・\resizebox(目標寸法への拡大縮小)の四つを取り上げ、「倍率で指定するか、寸法で指定するか」という考え方の違いまで整理します。
graphicx の箱変形命令
これらの命令を使うには、プリアンブルで \usepackage{graphicx} を読み込みます。名前から画像専用に見えますが、そうではありません。graphicx が定義する変形命令——\rotatebox・\scalebox・\resizebox(と星付きの \resizebox*)・\reflectbox——は、いずれも 引数に与えた中身をいったん箱に組み、その箱ごと変形する 仕組みです。したがって変形できるのは画像 (\includegraphics) だけでなく、地の文の語句、数式、表組みなど 箱に収まるあらゆる素材 です。
考え方の軸になるのは、「倍率で指定する」命令と「目標寸法で指定する」命令の違いです。\scalebox は「元の 0.8 倍」「2 倍」のように 相対的な倍率 を与えます。一方 \resizebox は「幅 5cm に」「本文幅いっぱいに」のように 絶対的な仕上がり寸法 を与え、そこへ収まるよう倍率を逆算します。\rotatebox は角度、\reflectbox は左右反転と、それぞれ役割が決まっています。次の表に概観をまとめます。
| 命令 | 指定するもの | 効果 |
|---|---|---|
\rotatebox | 角度(度) | 中身を反時計回りに回転 |
\scalebox | 倍率(相対) | 中身を倍率で拡大・縮小 |
\reflectbox | (なし) | 中身を左右に鏡映 |
\resizebox | 目標の幅・高さ(絶対) | 中身をその寸法に合わせて拡大・縮小 |
回転する — \rotatebox
\rotatebox{角度}{中身} は、中身を箱に入れて指定した 角度(度単位)だけ反時計回りに 回します。正の角度で左回り、負の角度で右回りです。たとえば \rotatebox{90}{...} は中身を 90 度起こして縦組みのように立て、\rotatebox{-90}{...} は逆向きに倒します。
これは \rotatebox{45}{斜めの文字} です。
This is \rotatebox{45}{slanted text}.この例では「斜めの文字」「slanted text」の部分だけが、左下を軸に 45 度持ち上がって組まれ、周囲の本文は水平のままです。回転した箱は元より背が高くなるので、行の高さがその分広がる点に注意してください。
回転の軸(中心)は、省略可能な引数 [origin=...] で変えられます。origin には l(左)・r(右)・c(中央)・t(上)・b(下)・B(ベースライン)を一つか二つ組み合わせて与えます。たとえば \rotatebox[origin=c]{180}{...} は 箱の中心 を軸に 180 度回し、上下逆さまにします。既定の軸は lB(左・ベースライン)です。さらに細かく指定したい場合は、x=・y= で任意の点を、units= で角度の単位そのものを変更できます(units=-360 で時計回り、units=6.283185 でラジアン)。
\rotatebox[origin=c]{180}{さかさま}\quad\rotatebox{90}{タテ}倍率で拡大縮小・鏡映 — \scalebox と \reflectbox
\scalebox{倍率}{中身} は、中身を 倍率 で拡大・縮小します。\scalebox{2}{...} なら 2 倍、\scalebox{0.5}{...} なら半分です。倍率は縦横ともに同じだけ掛かるので、形(アスペクト比)は保たれます。
縦と横を別々に伸縮したいときは、第二引数(省略可能)に 縦方向の倍率 を与えます。書式は \scalebox{横倍率}[縦倍率]{中身} です。\scalebox{1}[2]{...} は横はそのまま縦だけ 2 倍に引き伸ばし、\scalebox{0.8}[1.2]{...} は横 0.8 倍・縦 1.2 倍に変形します。縦倍率を省略すると横倍率と同じ値 になり、結果として等倍拡大になります。
\scalebox{2}{大きく}\quad\scalebox{0.5}{小さく}\quad\scalebox{1}[2]{縦長}倍率には 負の値 も指定でき、その軸方向に反転します。\scalebox{-1}[1]{...} は横倍率 −1・縦倍率 1、つまり 左右反転(鏡文字) です。これは頻出なので、graphicx には専用の省略命令 \reflectbox{中身} が用意されています——\reflectbox{...} は \scalebox{-1}[1]{...} とまったく同じ意味です。同様に \scalebox{1}[-1]{...} は 上下反転 になります。
Able was I \reflectbox{Able was I}この例では「Able was I」の文字列のあとに、その鏡像(左右反転した同じ文字列)が続けて組まれます。
目標寸法に合わせる — \resizebox
\resizebox{幅}{高さ}{中身} は、中身を 指定した仕上がり寸法 に合わせて拡大・縮小します。\scalebox が「元の何倍」という相対指定だったのに対し、\resizebox は「幅 5cm に」「高さ 2cm に」という 絶対的な目標寸法 を与え、LaTeX がそこへ収まる倍率を計算します。\resizebox{3cm}{2cm}{...} なら、中身が幅 3cm・高さ 2cm ちょうどになるよう(縦横独立に)伸縮されます。
縦横の比を保ったまま片方の寸法だけ決めたいときは、もう片方に **感嘆符 !** を置きます。! を書いた方向は、もう一方から求めた倍率がそのまま使われます。これがこの命令でいちばんよく使う形で、たとえば \resizebox{\textwidth}{!}{...} は「横幅を本文幅ぴったりにし、縦はそれに比例」させます。\resizebox{!}{1cm}{...} なら「高さを 1cm にし、横はそれに比例」です。
寸法の引数のなかでは、中身の元の大きさを表す \width・\height・\totalheight・\depth を使えます。\resizebox{2\width}{!}{...} は「横を元の 2 倍に」という指定です。なお星付きの \resizebox*{幅}{高さ}{中身} は、第二引数の「高さ」を 高さ+深さ(ベースラインより下の出っぱりを含む全高) として解釈します(無印は深さを除いた高さのみ)。
% 元の幅の倍に
\resizebox{2\width}{!}{倍の幅}
% 高さ 1cm、横は比例
\resizebox{!}{1cm}{Tall}はみ出す表を縮める
\resizebox の実用例として最も多いのが、本文幅をはみ出す表を縮めて収める 用途です。tabular 環境ごと \resizebox{\textwidth}{!}{...} で包めば、表全体が本文幅ぴったりに縮小されます。箱変形命令は中身を選ばないので、表でもそのまま適用できるわけです。
\resizebox{\textwidth}{!}{%
\begin{tabular}{lrrr}
項目 & 第1四半期 & 第2四半期 & 第3四半期 \\
\hline
売上 & 120 & 138 & 151 \\
費用 & 80 & 84 & 90 \\
\end{tabular}%
}ただし、この手は 諸刃の剣 です。\resizebox は表のなかの 文字までまとめて拡大縮小 するため、強く縮めると本文より小さな——ときに判読しづらい——文字サイズになり、周囲の本文との字面もそろわなくなります。表のフォントサイズだけを後から指定し直しても効きません(最終的に箱ごと縮小されてしまうため)。そのため、まずは列幅の調整や \small 系の指定、列の取捨選択で 表そのものを幅に収める のが本筋で、\resizebox は最後の手段と考えるのが無難です。詳しくは表のレイアウトのページを参照してください。
より高水準な adjustbox
graphicx の命令は素朴で強力ですが、組み合わせると入れ子が深くなりがちです。\usepackage{adjustbox} で読み込む adjustbox パッケージは、これらを \includegraphics 流の キー=値インターフェース に一本化した高水準の代替です。\adjustbox{キー=値,...}{中身} の形で、angle=(回転)・scale=(倍率)・width=/height=(目標寸法)・reflect(鏡映)などを一度に指定でき、同名の adjustbox 環境も使えます。
\adjustbox{angle=45,scale=0.8}{まとめて変形}
\adjustbox{max width=\textwidth}{%
\begin{tabular}{lrr} ... \end{tabular}%
}とくに便利なのが max width=\textwidth(および max totalheight= など)です。前節の \resizebox{\textwidth}{!}{...} は表が本文幅より狭くても 拡大 してしまいますが、max width= は はみ出すときだけ縮め、収まっていれば手を付けません。そのため、収まる表は本文と同じ字面のまま、はみ出す表だけが縮小されます。回転・拡大縮小・鏡映を多用する文書や、はみ出し対策をきれいに済ませたい場面では、adjustbox が扱いやすい選択肢です。