<次頁><前頁><最下行へ><目次>   <戻る><ホーム>

2 画像貼り付けノウハウ

LaTexにおける、画像挿入の処方箋については、本格的な処方箋は”LaTeXグラフィックスコンパニオン; アスキー社刊”に

簡単な解説はhujinamiさんのサイトにあります。

2.1 画像貼りつけ基本形 

できあがった画像ファイル(*.eps)を LaTeX2e への組み込み方を記しておきます。次に示す様に、\includegraphics を利用します。画像ファイルをtexファイルと同じフォルダーに入れておきます。他のフォルダーに入れたときはパスを付けたファイル名を入れる必要があります。

なお、プリアンブルの usepackage[dvips]{graphicx} は{graphics}の拡張版で、指示の書き方が違います。

\documentclass[a4j]{jarticle}
\usepackage[dvips]{graphicx}

xxxxxxxxxxxxxxxxxxxxxxx. xxxxxxxxx

Here is an example (see Figure\ref{fig1})

\begin{figure}[htbp]
\begin{center}
   \includegraphics[width=10cm,angle=0,clip]{pix1.eps}
   \caption{picture of the opening remarks}
   \label{fig1}
\end{center}
\end{figure}

yyyyyyy. yyyyyyyyy. yyyyyyyyyyy

2.2 画像の変形・回転・トリミングなど 

(usepackage[dvips]{graphicx}を使用した場合)

<BB指定> [bb=llx lly urx ury] でEPSファイルの"%% BoundingBox "の値として" %%BoundingBox: llx lly urx ury" と指定したのと同じように扱う。BBはGhostviewでEPSファイルを開いたとき点線で囲まれる領域です。秀丸などのエディターでEPSファイルを開けば %%BoundingBox: 20 20 592 586 の様に書いてあります。

(llx, lly) は画像左下端の xy 座標、(urx, ury) は右上端の座標です。

単位は指定しなければポストスクリプトのビッグポイント(BP;1inch=72point)です。

<幅指定> [width=12cm] あるいは[width=0.4\linewidth]で画像の幅が指定できます。

相対的に縮小したいときは[scale=0.5]とします。

<高さ指定> [height=6cm]で高さ指定ができます。

<縦横比保持> 高さと幅を指定しても元の縦横比を保持したいときは[keepaspectratio]とします。幅と高さの両方が指定してあるときは画像が小さくなる方が採用されます。

<回転> [angle=n]で回転角nを指定します。angle は図の時計方向回りの回転角です。回転中心は origin=xx で指定します。xxは箱の 中心, 左上, 右上, 左下, 右下に対応して c, tl, tr, bl, br のいずれかの値を入れます。デフォルトは bl です。

なお同時に width=10cm を指定した場合、左から順に解釈されます。従って、例えば angle=45 指定の前に入れると幅10cmの四角を回転すると元の対角線14.1cmが新しい幅になります。後に入れた場合は回転した後の幅が10cmになります。

回転は dviout ではうまく表示できません。dvips(k) を使ってPSファイルにすれば ghostview で表示できます。

<トリムの方法>

<viewport> [viewport=llx lly urx ury] で指定された矩形領域を画像として扱います。ただし、原点はBB(バウンディングボックス)で指定した領域に相対的。つまり(llx lly=0 0)はBBの左下端を意味します。

<trim> [trim=left bottom right top] で左端から left, 下端から bottom, 右端から right, 上端から top だけのトリムした領域を画像として扱います。viewport と同じでカットする領域の指定法が違うだけです。

<clip> [clip]でviewportもしくはtrim領域を指定したとき、指定域外を切り取ります。clip指定ないときは画 clip 部分の画像も出力されるので、はみ出し部分が重複することがあります。

Bounding Box を指定してなおかつ図サイズなど指定したい場合の例

\includegraphics[height=5cm, clip, view=llx lly urx ury][figure.eps]

などのように指定します。

2.3 複数の画像張り込み、相互位置調整

\Includegraphics

を二つもしくはそれ以上並べればOKです。ただし、複数の画像が入るように画像の大きさ(幅)を小さく指定しておく必要があります。間に\hspace{15mm]等を入れて間隔を調整します。

\begin{figure}[htbp]
\begin{center}
\includegraphics[width=6cm,angle=0,clip]{pix1.eps}
\hspace{15mm}
\includegraphics[width=8cm,clip]{pix2.eps}
\caption{picture of the opening remarks}
\label{fig1}
\end{center}
\end{figure}

<相互配置の調整>: 横方向のバランスは個々の画像オプションと\hspaceで調節可能ですが

相互の高さ調整はraisebox を使います。次のようにします。mbox には入れなくても構いません。

\begin{figure}[htbp]
\begin{center}
\mbox{\raisebox{15mm}{\includegraphics[width=40mm,clip]{pix1.eps}}}
\hspace{15mm}
\mbox{\raisebox{-5mm}{\includegraphics[width=40mm,clip]{pix2.eps}}}
\caption{picture of the opening remarks}
\label{fig1}
\end{center}
\end{figure}

<図毎のキャプション>: 上のやり方では複数の図で一つのキャプションしか作れません。図毎にキャプションを付ける方法については、キャプションの裏技 2.7.1 を参照してください。

2.4 画像変形配置の使用例

例1: 画像ファイル"figtest1.eps" はバウンダリーボックス"BB=llx lly urx ury =20 20 592 504"を持っています。(llx lly urx ury) は左下と右上の角隅の座標です。includegraphics で特に指定しないときはこのBBを元に表示する画像が決められます。第1例(Figure1(1))のように、幅を3cmを指定すれば、縦横比は自動的にBBを参照して決めてくれます。(2)は縦横共指定した場合です。fbox に入れてどれだけのスペースを占めるか分かり易いようにしました。

(3)は、scale を使って10%に縮小した例です。また raisebox を使って画像の位置を10mm持ち上げています。数字はマイナス指定もできます。枠を付けたくないときは fbox の代わりに mbox (またはmakebox)を使います。横方向への移動は \hspace が使えます。(1)と(2)の間に10mmのスペースが入っています。縦横比を独立に変えたいときは scalebox{横縮尺}[縦縮尺] を使います。Figure1を作った際のtexコマンドをここに書きます。

\documentclass[]{article}
\usepackage[dvips]{graphicx}
\usepackage{wrapfloat}
\usepackage{subfigure}
\begin{document}

・・・・・・・・・

\begin{figure}
 \begin{center}
  \includegraphics[width=3cm,clip]{fig-test1.eps}
  \hspace{10mm}
  \fbox{\includegraphics[width=2cm,height=4cm,clip]{fig-test1.eps}}
  \fbox{\raisebox{10mm}{\includegraphics[scale=0.1,clip]{fig-test1.eps}}}
  \fbox{\scalebox{.1}[.2]{\includegraphics{fig-test1.eps}}}

  \caption{左から(1)幅指定3cm 水平空白10mmを置いて(2)幅2cm高さ4cm指定 
    (3)縮尺x0.1かつ上へ移動10mm (4)縮尺縦x0.1横x0.2}
  \label{fig:kite1}
 \end{center}
\end{figure}

・・・・・・・・・・

\end{document

例2: 画像の切り取り例です。Figure2 画像 (1) では bb = 20 20 592 504 は元々のfigtest1.epsファイルの持つbbです。(2)では

bbで切り取る枠の左下隅と右上隅の座標を指定しています。(3)では viewport を使って指定しています。元々のbb座標の左下隅を(20 20)を原点とした相対座標ですので切り取る位置が少しずれます。(4)はclipを使用したものです。数字は左側、下端、右側、上端からどれだけ切り取るかの数字です。raisebox を使って10mm持ち上げています。

・・・・・・・・・

\begin{figure}
  \begin{center}
   \fbox{\includegraphics[bb=20 20 592 504,width=3cm,clip]{fig-test1.eps}}
   \fbox{\includegraphics[bb=100 50 300 350, scale=0.3,clip]{fig-test1.eps}}
   \includegraphics[viewport=100 50 300 350, scale=0.3,clip]{fig-test1.eps}
   \mbox{\raisebox{10mm}{%
   \includegraphics[trim=100 50 300 350, scale=0.3,clip]{fig-test1.eps}}}
   \caption{表示領域指定 左から(1)原図幅3cm (2)bbで絶対座標指定 
   (3)viewportで相対座標指定 (4)clipで切り取り}
   \label{fig:kite1}
  \end{center}
\end{figure

・・・・・・・・・

例3 clip の作用です。clip は includegraphics のオプションで指定した画像のサイズや形からはみ出した部分

(fbox に入れたとき表示される枠の外) をクリップします。 clip を入れておかないと全画像が表示されます。これは枠外に出るので、キャプションや本文の領域にはみ出します。なお clip してもファイルサイズが小さくなるわけではなく、表示領域を変えているだけです。

・・・・・・・・・

\clearpage

文字を入れました。文字を入れました。文字を入れました。文字を入れました。文字を入れました。
文字を入れました。文字を入れました。文字を入れました。文字を入れました。文字を入れました。
文字を入れました。文字を入れました。文字を入れました。文字を入れました。文字を入れました。
文字を入れました。文字を入れました。文字を入れました。文字を入れました。文字を入れました。
文字を入れました。文字を入れました。文字を入れました。文字を入れました。文字を入れました。
文字を入れました。文字を入れました。文字を入れました。文字を入れました。文字を入れました。

\begin{figure}[htbp]
\begin{center}
\fbox{\includegraphics[bb=100 150 400 350,width=3cm]{fig-test1.eps}}
\hspace{30mm}
\fbox{\includegraphics[bb=100 150 400 350,width=3cm,clip]{fig-test1.eps}}
\caption{clipの効果: 左clipなし、右clipあり}
\label{fig:kite2}
\end{center}
\end{figure}

・・・・・・・・・

例4 angle オプションを使って画像を回転した場合の注意です。オプションは左から順に実行されるので、幅を先に指定するとその幅を保ったまま回転します。幅を後で指定すると回転後の幅を指定しますので同じ width=20mm を指定しても下図の(1)(2)の様に結果が異なります。切り取りオプションは順序に作用されません(3)。また、回転をするときはデフォルトでは左下隅を中心に回転するので左回転(1)と右回転(2)では回転後の下端位置がずれます。

またここでは"subfigure" 環境を使って主キャプションの他に副キャプションを付けた例を示しました。

・・・・・・・・・

\begin{figure}[htbp] \begin{center}
\caption{いろいろな回転作業}
\subfigure[左 幅指定は左回転前、回転中心は左下隅]{\fbox{\includegraphics[bb=100 50 300 350,width=20mm,angle=45,clip]{fig-test1.eps}}}
\subfigure[中 幅指定は右回転後、回転中心は左下隅]{\fbox{\includegraphics[bb=100 50 300 350,angle=-45,width=20mm,clip]{fig-test1.eps}}}
\hspace{5mm}
\subfigure[右 トリムは回転と独立]{\fbox{\includegraphics[angle=45,trim=100 50 300 350,scale=0.3,clip]{fig-test1.eps}}}
   \label{fig:kite2}
\end{center}
\end{figure}

・・・・・・・・・

2.5 画像に回り込み文を入れたい

 minipage 環境を使えば、ページの片側に画像、向かい側に文章と分けられるので、一応回り込み文を作ることは可能ですが、回り込み文章の終わりを指定しなければならないのが難です。その点wrapfigもしくはwrapfloat 環境はそれを自動的にやってくれるので便利です。

wrapfig もしくは wrapfloat スタイルシートを読み込み、wrapfigure 環境を使えば、\begin{wrapfigure}・・・\end{wrapfigure} の後の文章はwrapfigure で確保したスぺースの外に回り込みで配置されます。

wrapfloat を使えば表の回り込みの wraptable 環境も使えるようになります。wrapfloat.sty は角藤版ウインドウズ用TeXをフルインストールしても入っていませんので(wrapfig は入っています)、スタイルファイルを例えばここからダウンロードして、

D:/usr/local/share/texmf/tex/latex/misc/

に入れ、コマンドプロンプト窓から

D:\>mktexlsr

を実行すれば使えるようになります。

使い方:

プリアンブルで \usepackage{wrapfig}もしくは\usepackage{wrapfloat} を宣言して、本文中で以下の wrapfigure 環境を記述します。図の代わりに表を入れる場合は wraptable と記述します。使い方は同じ。

\begin{wrapfigure}[12]{r}[32pt]{70mm}...\end{wrapfigure}

[12]:   確保する行数。省略可。自動的に確保してくれる。
{ r } :   位置(l:左、r:右)省略不可
[32pt]: 周りの余白。通常は0にセット。省略可
{70mm} :確保する幅。省略不可

回り込む文章は、\end{wrapfigure} の後に書かれた文章です。

記述例:  

\begin{wrapfigure}[12]{l}{.3\linewidth}
\begin{center}
\includegraphics[width=3cm,clip]{kite1.eps}
\caption{奴凧}
\label{fig:kite1}
\end{center}
\end{wrapfigure}

wrapfig 環境の上の記述例を実際に使用して得た結果を ここに 掲示します。

2.6 図配置の強制指定

★ 図は、通常上のように figure 環境の中で使います。そうすれば図の位置は、TeXソフトの方で最善の場所を見つけてくれますが、特に位置を指定したいときには [htbp] を使います。h はその場 (here)、t はページ上端 (top)、b はページ下端(bottom)、p は単独のページ (p) に出力します。しかし、これもそう望むと希望を伝えるだけであってそうしてくれるとは限りません。 figure 環境(\begin{figure}・・・\end{figure})を外せばその場に出せます。ただし、この場合は通常のキャプションコマンド \caption{・・} はつかえません。このような場合にもキャプションを付けるには次のようにします(参考)方法は、キャプションの裏技 2.7.1 を参照してください。

<次の章もしくは節が始まる前に図を出力する。> 図や表の位置を浮動環境に任せた場合、図や表の数が多くなって混んでくると、しばしば次のページに送り込まれます。結果的に次の章や節に入り込みます。これを防ぐには "clearpage" を使います。浮動体(figure 環境と table 環境)で出力されずに残っている図や表をその場に出力します。しかし、clearpage コマンドはコマンドの位置で改ページします。これを防ぐには afterpage パッケージを読み込み afterpage 命令を使用します。これは

\afterpage{command}

でこの命令が埋め込まれたページの処理をした後引数のコマンドを実行します。従って \afterpage{clearpage} と記述すれば出力を全て済ませてから改ページとなります。

2.7 キャプションに関する裏技

2.7.1 図毎にキャプションを付けたい

figure 環境の中に複数の図があっても、キャプションを付ける \caption{・・} コマンドは、一つしか付けられません。

○図毎にキャプションを付けたいときはminipageを使います。

\begin{figure}[htbp]

\begin{minipage}{80mm}
\mbox{\raisebox{1mm}{\includegraphics[width=\linewidth,clip]{pix1.eps}}}
\caption{{\footnotesize picture of lecture1 }}
\label{fig:clausius2thomson}
\end{minipage}
\hspace{5mm}

\mbox{\raisebox{1mm}{
\begin{minipage}{80mm}
\begin{center}
\mbox{\raisebox{1mm}{\includegraphics[width=\linewidth,clip]{pix2.eps}}}
\caption{{\footnotesize picture of lecture2 }}
\label{fig:thomson2clausius}
\end{center}
\end{minipage}}}

\end{figure}

○<副キャプション> subfigure パッケージを使えば、figure環境の中で、複数の図を入れ、各図に副番号が付けられ、キャプションも入れられます。上でやったようにいちいち minipage 環境に入れる必要はありません。下の例では主キャプションの他に副キャプションを入れています。

\usepackage{subfigure}

・・・・・・・・・・

\begin{figure}[htbp]
\subfigure[左の図]{\mbox{\raisebox{1mm}{\includegraphics[width=\linewidth,clip]{pix1.eps}}}}
\hspace{5mm}
\subfigure[右の図]{\includegraphics[width=\linewidth,clip]{pix2.eps}}
\caption{{\footnotesize picture of lecture2 }}
\label{fig:thomson2clausius}
\end{figure}

○ figure 環境を使わずに、キャプションを出す方法

figure 環境に煩わされず、任意の場所にキャプションを出力する方法もあります。

"figcaption"、"tbcaption" というマクロコマンドを、次のようにプリアンブルで定義します。

\makeatletter
\def\tbcaption{\def\@captype{table}\caption}
\def\figcaption{\def\@captype{figure}\caption}
\makeatother

上の様に定義した後、図表の上または下で \tbcaption または \figcaption 命令を実行します。 \makeatletter と \makeatother は、この文で挟んだ中では、"@"を文字として扱うという意味です。システム変数が"@"を含む文字を含む場合の措置です。

\figcaptionを使用した例
\documentclass[a4j]{jarticle}
\begin{document}
\includegraphics{hoge.eps}
\nobreak
\figcaption{hogecaption} \label{hogelabel}

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
\end{document}

\nobreak を使用する理由は、\label 命令を併用した場合 \caption と図表の間で改項が生じる可能性を防ぐためということのようです。全体を minipage 環境内に置くことも考えられます。

2.7.2 キャプションのスタイルを変更したい

スタイルファイル

D:\usr\local\share\texmf\tex\latex\base\article.cls
D:\usr\local\share\texmf\ptex\platex\base\jarticle.cls

の中から次の記述を探し書き換えます。

\makeatletter % プリアンブルで定義する場合は必要です。\\

\long\def\@makecaption#1#2{% #1=図表番号、#2=キャプション本文\\
\vskip\abovecaptionskip % キャプションの上側余白量。\\
\sbox\@tempboxa{#1: #2}% 図番号の次に":" を挿入する。\\
\ifdim \wd\@tempboxa >\hsize
#1: #2\par % ここにも図番号の次に":" を挿入するコマンドがある。\\ \else
\global \@minipagefalse
\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% デフォルトは中央配置\\
\fi
\vskip\belowcaptionskip}  % キャプションの下側余白量。\\

\makeatother % プリアンブルで定義する場合は必要です。\\

以下、下の例のようにいろいろと変えられます。なお、article.cls を書き変えるのではなく、プリアンブルに入れてローカルに変更したいときは、この命令の前後を、\makeatletter ・・・・ \makeatother で挟んでおかないと働きません。こうしないと "@" が文字として認識されないからです。

★ キャプションの文字サイズ変更 

\long\def\@makecaption#1#2{%

の部分を、例えば

\long\def\@makecaption#1#2{\footnotesize%

に変えます。

★ {図番号 : キャプション} を  {図番号 = キャプション} に変えるには、上の2カ所で ":" を "=" に変える。

★ 図説明文はデフォルトでは中央配置であるが、左寄せにしたいときは

\hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% を
\hb@xt@\hsize{\box\@tempboxa\hfil}% または、 
\hbox to\hsize{\hfil\box\@tempboxa\hfil}%  に変える。

  右寄せにしたいときは

\hb@xt@\hsize{\hfil\box\@tempboxa}% または、 
\hbox to\hsize{\hfil\box\@tempboxa\hfil}% に変える。

2.7.3  キャプションの中に強制改行を入れたい

◎1 簡単な方法としては、\protect\\ を使うことができます。

◎2 \usebox を使います(参照)。例えば、

\makeatletter
\newsavebox{\@parc@ption}
\def\parcaption#1{%
\sbox{\@parc@ption}{\shortstack[l]{#1}}%
>\setbox\@tempboxa\hbox{\csname fnum@\@captype\endcsname}%
\@tempdima\columnwidth \advance\@tempdima-\wd\@tempboxa
\@tempdimb.8\@tempdima %<-- maximum length is set here
\ifdim\wd\@parc@ption>\@tempdimb \@tempdima\@tempdimb
\else\@tempdima\wd\@parc@ption\fi
\sbox{\@tempboxa}{\parbox[t]{\@tempdima}{#1}}%
\caption{\usebox{\@tempboxa}}}
\makeatother

というマクロを定義しておいて,

\begin{figure}
\vspace{?cm}
\parcaption{This is a long caption\\ with line-break.}
\end{figure}

という使い方をすれば\parcaption{...} の中では改行が可能となります。

2.7.4 キャプション上下の余白をトリミングしたい

デフォルト(jarticle.cls)では, \abovecaptionskip=10p@, \belowcaptionskip=0p@ と設定されています.プリアンブル内で例えば次のようにします。

\abovecaptionskip=-5pt
\belowcaptionskip=-10pt

2.8 図番号を変えたい。

図番号の表示を「(section番号).(図番号)」とする場合。親(section番号)が変わると、子(図番号)がリセットされるようにします。

プリアンブルに次の文を加えます。

\makeatletter
\addtoreset{figure}{section}
\renewcommand{\thefigure}{\thesection.\arabic{figure}}
\makeatother

2.9 jpeg 画像を使いたい

  TeXは基本的にPSもしくはEPS画像しか受け付けません。TeX出力を最終的にポストスクリプト (PS) ファイルにする場合は、何らかの形で JPEG ファイルを (E)PSファイルに変換するのが最善ですが、PSを通さずにPDFファイルに出力する場合(つまり dvipdfmx を使うこと)、もしくは dviout 出力を使う場合は、JPEG 画像を直接取り込めます。

(a) dvipdfm(x) を使ってPDFファイルを作る場合:

  (1) プリアンブルに

\usepackage[dvipdfm]{graphicx}

を入れます。

 注: dvipdfmx を使う時でもオプションとしては dvipdfm を指定します。

  (2) 挿入したい画像の名前が、foo.jpg の時、画像ファイルのあるディレクトリーで

ebb foo.jpg

を実行してfoo.bb ファイルを作ります。

  (2) TeX本文の画像取り込みのところで、通常のEPSファイルを入れるのと同じ形式、例えば

\includegraphics[width=5cm,clip]{foo.jpg}

のように入れます。

 


☆ dvipdfmx は jpeg ファイルの他に、PNG、PDFファイルも取り込めます。


(b) dviout を使う場合。

  (1) Susie Plug-in (後述)が必要です。

  たけちん氏のホームページより ifjpg.lzh をダウンロードして Lhaca などの解凍ツールで解凍しできた ifjpg.spi を適当なフォルダー例えば D:\susie347bに収納します。 次に dviout を起動してメニューバーから「Option」「Setup Parameters」「Graphic」を選択して現れた画面の spi 欄に D:\susie347b を入力します。

  (2) プリアンブルに

\usepackage[dviout]{graphicx}

を入れます。

  (3) bmc -b foo.jpg (あるいは ebb foo.jpg でも良い) を実行して、foo.bb ファイルを作ります。

  (4) TeX本文の画像取り込みのところで、通常のEPSファイルを入れるのと同じ形式、例えば

\includegraphics[width=5cm,clip]{foo.jpg}

のように入れます。

 


☆ dviout では、縦と横両方のサイズを指定すれば、bbファイルを必要としません。

例: \includegraphics[width=5cm,height=4cm,clip]{foo.jpg}

☆ dviout はデフォルトで (susie plug-in を必要としない) でウィンドウズの bmp、wmf、emf ファイルに対応しています。またたけちん氏のホームページからたどれば種々の画像ファイルに対応した Plug-in を得ることができます。いずれも bb ファイルを作る必要があります。


  ○ bbファイルについて (dvipdfm、dviout共通)

  (1) 画像入力のところで Bounding Box の値を指定すれば bb ファイルを必要としません。

  例: \includegraphics[bb=0 0 4000 3000,width=5cm,clip]{foo.jpg}

  bbファイルの内容で必要なのは

%%BoundingBox: 0 0 4000 3000

という1行の文のみです。 ebb (dvipdfm に付属のコマンド) や bmc -b (dviout に付属のコマンド) は、この文に加えてファイル名など他の(使わない)情報を余分に入れているだけです。ですから、メモ帳などのエディターを使って、上記の一文を入力し、画像ファイル と同じ名前で拡張子がbb の foo.bb というファイル名で保存しても同じです。これらのコマンドは適切なBounding Box の値を自動的に設定してくれるので便利なのです。

  (2) CreateBB.exe を使うとGUI 操作で bb ファイルが作れます。

(1) \dviout フォルダーの中にある CreateBB.exe ダブルクリックします。次のようなダイアログ画面が現れるので

(2) 「FileType」ボタンを押して現れる画面で

ファイル型を指定します。今の場合JPGにチェックマークを入れます( Plug-in はあらかじめ入れてあるものとします)。

(3) 「Browse」ボタンを押して bbファイルを収納するフォルダーを指定します。画像ファイルの入っているフォルダーを指定します。

(4) 次に「Selected File(s) Only」にチェックマークを入れ、「Select Files」で Boundary Box を設定したいファイル(今の場合foo.jpg)を選べば、bbファイルを作ってくれます。

 「Selected File(s) Only」をチェックしておかないと、当該フォルダーにある関連づけされた拡張子(BMP、WMF、EMFファイルを含めて)全ての画像ファイルに対して、bbファイルが作られます。沢山の画像のbbファイルをまとめて作る場合にはこの方が便利でしょう。

2.10 画像を数式や見出しの中に入れたい

 (ボックスの使い方) (参考文献9)

ボックスとは複数の文字や段落などをあたかも一つの文字のように扱う機能です。文章の代わりに \includegraphics{xxx.eps} を入れておけば、図も扱えます。

\mbox{文章}
\makebox[ボックスの幅][ボックスの相対位置指定]{文章}

\mbox は文章に合わせたサイズのボックスを作ります。\makebox は、ボックスの幅を指定し、かつベースラインに対する位置をも指定できます。相対位置指定は、ベースラインに対し、c =中央揃え=デフォルト、t は上端揃え、b は下端揃えです。ボックスに入れると全体があたかも一つの単語のように扱え、また数式の中でも使えます。

ボックスの内容は、ボックス変数に代入して使えます。

\usebox コマンドを使えば、ボックス変数の内容を任意の場所に出力できます。

ボックス内容をボックス変数に代入しておけば、何度でも取り出せます。

方法と手順: 

1) 新規のボックス変数を定義します。

\newsavebox{\boxa} :"\boxa"というボックス名を定義しました。

(注: 変数には数字や記号は使えません。)

2) "\boxa"という名を持つボックスを作り、内容(文章)を代入します。

\sbox{\boxa}{<XXX>}  : <XXX> は任意の文章です。

\savebox{\<ボックス変数名>}[ボックスの幅][ボックス内の位置]{文章}

"\savebox"はオプション[ ][ ]が付く以外は、\sbox と同じです。ボックスの幅は例えば [6zw](漢字6文字分の幅)、 [20pt]等を使います。 ボックス内の位置は、[l][r][s]で指定します。決めた幅の中で左揃え、右揃え、均等割付となります。

3) あとは適宜、tex文の欲しいところに\usebox{\boxa}を挿入すれば、<XXX>が出力されます。

使用例: 次のようなtex 文を作ると

\newsavebox{\boxa}
\newsavebox{\boxb}
\newsavebox{\boxc}
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
\sbox{\boxa}{中身にあわせたボックス}
\savebox{\boxb}[16zw]{ボックスのサイズを変えた例}
\sbox{\boxc}{\includegraphics[width=4zw]{einst_8.eps}}
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
\verb|\sbox|は\fbox{\usebox{\boxa}}を作ります。
\verb|\savebox|で、\fbox{\usebox{\boxb}}です。
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

出力はこのようになります。(\fbox を使ってボックスの枠を描き見やすくしました。)

次は、数式の中で使った例です。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
\begin{equation}
\int_0\{\infty}=\usebox{\boxc}
\end{equation}
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

配置は、数式と図のベースラインが揃うので、このままでは見づらい配置となります(下図参照)。

◆\parbox の使いかた

そこで、さらに"\parbox"の中に入れることにより、ボックスの配置およびボックス内の文章の配置を共に制御できるようになります。また、通常はボックスの中では改行は許されませんが、\parbox の中では可能です。

コマンド:

\parbox[ボックス自体の行揃え][ボックスの高さ][ボックス内の文章の配置]{ボックスの幅}{文章}
ボックス自体の行揃え: ベースラインに対し c (中央) = デフォルト、t (上揃え)、b (下揃え)
ボックス内の配置: c (ボックス内で中央の高さに配置;文章がボックスの幅を超えるときは折り返しが生じます。) t (ボックスの上に揃える)、 b (ボックスの下に揃える。)

\parbox のオプション指定による差

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

\subsubsection*{\texttt{\char`\\parbox}自体の行揃えの例}

\fbox{\parbox{4zw}{デフォルト}}---
\fbox{\parbox[c]{4zw}{\texttt{c}を指定した場合}}---
\fbox{\parbox[t]{4zw}{\texttt{t}を指定した場合}}---
\fbox{\parbox[b]{4zw}{\texttt{b}を指定した場合}}---\\

\subsubsection*{\texttt{\char`\\parbox}内の行揃えの例}
\fbox{\parbox[c][4zw]{5zw}{高さのみを指定}}---
\fbox{\parbox[c][4zw][c]{5zw}{高さと\texttt{c}を指定}}---
\fbox{\parbox[c][4zw][t]{5zw}{高さと\texttt{t}を指定}}---
\fbox{\parbox[c][4zw][b]{5zw}{高さと\texttt{b}を指定}}---
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

の出力は次のようになります。

それでは、\parbox を使って数式中の図の高さを調整してみましょう。

\parbox を使うときは、幅を指定する必要があるので、図のサイズ指定に使った[width=4zw] をそのまま持ってきて入れるか、あるいはまず \boxc を出力した時の幅を測定してその値を入れます。。 幅に合わせた"\parbox"を作り、デフォルト指定で箱の高さが数式に揃うようにするわけです。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
\newsavebox{\boxc}
\sbox{\boxc}{\includegraphicx[width=4zw]{box-3.eps}}
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

\newlength{\bw} %  \bw という長さ変数を定義します。
\settowidth{\bw}{\usebox{\boxc}} % \boxc 出力の幅を測り、\bw に代入します。

・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・
\begin{equation}
\int_0\{\infty}=\parbox{\bw}{\usebox{\boxc}}

\end{equation}
・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・・

次のように図の配置が改善されたことが判ります。

なお、ボックスの寸法を測るコマンドは下の3通りあります。

\settowidth{\幅変数}{文章}   
\settoheight{\高さ変数}{文章}  
\settodepth{\高さ変数}{文章}  

幅、高さ、深さなどの長さ変数は、\newlength{\幅変数} のようにあらかじめ定義しておく必要があります。

を使って、文章の幅、高さ、深さを知ることができます。

2.11 画像を欄外に出したい。

本文中に入れる注釈は、通常、\footnote{脚注}を使い、ページ下部に脚注として出します。

本文横に傍注として出力することもできます。ただし、プリアンブルで例えば

\setlength{\textwidth}{36zw}
\setlength{\marginparsep}{2zw}
\setlength{\marginparwidth}{8zw}

を宣言して、欄外余白を確保して置かねばなりません。本文の出力幅(\textwidth)を通常より狭くし、テキスト本文と欄外の間の空白長(\marginparsep})と、欄外の幅(\marginparwidth}) を指定します。

コマンドは

\marginpar{\footnotesize 傍注}

と入れると、傍注を挿入した所の本文と同じ高さで、欄外に"傍注"と出力されます。脚注と違い番号が振られることは無く、また字の大きさも本文と同じなので、例えば \footnotesze を指定します。

図も出力できます。

2.12 大きな画像を横にしてページ一杯に使いたい

方法1: "rotatebox[オプション]{回転角(度)}{テキスト}"を使います。オプションは回転中心でデフォルトは箱の左下です。

オプション:origin=c, tl, tr, bl, br (=中心、左上、右上、左下、右下のどれか)

下の例は2枚の図を並べて、横向けに配置した例です。

\begin{figure}
  \centering
\rotatebox{90}{
  \begin{minipage}{10cm}
    \includegraphics[width=0.9\textwidth]{atmk2kA.eps}
    \caption{Ranges of the parameters }
    \label{fig:atmk2kA.eps}
  \end{minipage}
  \hspace{10mm}
  \begin{minipage}{10cm}
    \raisebox{0mm}{\includegraphics[width=0.9\textwidth]{atmk2kB.eps}}
    \caption{Same as figure \ref{fig:atmk2kA.eps} for normal mass hierarchy.}
    \label{fig:atmk2kB.eps}
  \end{minipage}
}
\end{figure}

方法2: "figure"環境の代わりに"rotating" パッケージの"sidewaysfigure"環境を使います。プリアンブルであらかじめ、"\usepackage{rotating}"を宣言しておく必要があります。下の例は方法1とほぼ同じ出力を与えます。

なお、この方法は"sidewaystable"環境で表にも使えます。

\begin{sidewaysfigure}
 \centering
   \begin{minipage}{10cm}
     \includegraphics[width=0.9\textwidth]{atmk2kA.eps}
     \caption{Ranges of the parameters }
     \label{fig:atmk2kA.eps}
    \end{minipage}
  \hspace{10mm}
    \begin{minipage}{10cm}
      \raisebox{0mm}{\includegraphics[width=0.9\textwidth]{atmk2kB.eps}}
      \caption{Same as figure \ref{fig:atmk2kA.eps} for normal mass hierarchy.}
      \label{fig:atmk2kB.eps}
    \end{minipage}
\end{sidewaysfigure}

2.13 簡単画像を作る(ヤング図の例)

(1) picture 環境の解説。(参考:奥村晴彦:LateX2e美文書作製入門)

"picture"環境を使って簡単な図を作ります。(下は作図例)。

私の場合\usepackage{pict2e} を入れたら働かず、下の例は\usepackage{pict2e}無しで描けました。

1) 領域を確保します。\begin{picture}(A,B)(0_x,0_y) % A=横幅、B=高さ 上図の点線領域。(0_x,0_y) はオプションのオフセット(左下端の座標設定)。何も書かないときはデフォルトで(0,0) となります。

なお領域はtexの中で確保する領域であり、領域をはみ出しても図は書けます(上図では(0_x,0_y)は領域外に書いてあります)。これを利用して図と外の文章を重ねることもできます。

picture環境は本文中に出力されるので、別行立てにするにはfigure環境などに入れます。あるいは箱の中に入れれば、単一の文字のように扱えます(上記§2.10 箱の使い方参照)。出力には\usebox{<箱の名前>}を使います。

箱を使って出力する例

*******************
\newsavebox{\PictureDescription}
\savebox{\PictureDescription}{%
\begin{picture}(A,B)
\setlength{\unitlength}{0.3mm} % 長さ(座標)の基本単位を決めます。以下10と置けば 10x\unitlength を意味します。
\linethickness{0.8pt} % 線の太さを決めます。デフォルトは0.4pt(=25.4/72.27mm~約0.3mm)

  %% \thicklines %% 0.8pt  も随時挿入できます。
  %%\thinlines %% 0.4pt も随時挿入できます。

  ・・・・ (絵を描く)

\end{picture}%
}
\usebox{\PictureDescription} % 出力
・・・・・・・・・・・・・・・・
*******************

2) 図を書く    : \put(x,y){・・・} % ・・・は、mboxの中に入れられるものなら何でも可。(x,y)は参照点。参照点は書く図により変わる(次の3) 以降参照)。

3) 線を引く    : \put(x,y){\line(dx,dy){D}}:%(x,y)地点から、勾配(dx,dy)でx方向の長さがDの線を引きます。dx=0の時はy方向の長さです。

   矢印線を書く : \put(x,y){\vector(dx,dy){D}}% \lineに同じ。矢印を付けます。

4) 文字を入れる。: \put(x,y){A}% Aを出力します。 

            : \put(x,y){\makebox(w,h)[位置]{文字など}}%幅w、高さhの箱に"文字など"を位置(=r,l,t,b)に置きます。(x,y)=左下端座標。

            : \put(x,y){\framebox(w,h)[位置]{文字など}}% 同上、枠付き。

上図の例には \put(180,35){\framebox(100,80)[b]{\parbox[c]{4zw}{横組みの中の縦組の例}}}

で10文字を横4列にして、箱の下側に配置する例を示しました。

5) 円、長方形を描く:

\put(x,y){\framebox(w,h){・・・}}% (x,y)=左下端。幅=w、高さ=hの長方形を描き、中に・・・を入れます。空白だと長方形になります。
\put(x,y){\rule[oh]{w pt}{h pt}}% 同上。幅=w、高さ=h の黒い長方形を書きます。単位を指定できます。oh を入れるとその分上に移動します。rule 命令はpicture 環境に入れなくも直接本文に出せます。
\put(x,y){\circle{r}} % (x,y) を中心に半径 r の円を描きます。

\put(x,y){\circle*{r}} % 同上、黒円。

6) 曲線を描く: \qbezier(x_1,y_1)(x_2,y_2)(x_3,y_3)% (x_1,y_1)(x_3,y_3) を通り、接線が(x_2,y_2) で交わる曲線を描きます。\cbezier(x_1,y_1)(x_2,y_2)(x_3,y_3)(x_4,y_4) を使えば、(x_1,y_1)(x_4,y_4) を通り、接線がX\2,y_2)(x_3,y_3) を通曲線が書けます。

7) 積み重ね: \put(70,55){\fbox{\shortstack[r]{aaa\\bbbbb\\$\cdots$}}}%{・・・}の内容を右側に(l,t,bでも可)に寄せて積み重ねます。%

8) だ円およびその上/下半分: \put(x,y){\oval(w, h)[t]}% (x,y) を中心に幅=w、高さ=h の角の丸い長方形を出します。[t]オプションで上半分だけになります。[b]で下半分だけを書きます。

9) くり返し図を描く:   線の場合 : \multiput(x,y) (Dx,Dy){n}{\line(dx,dy){D}}% (x,y) を始点とし、x,y方向にDx,Dy間隔でn本の{線を引く}。{・・・}は別の指令でも可。

(2) ヤング図を描く

*picture環境使用例

・・・・・・・・・・・・・・・・・・・・・・

\newsavebox{\YTOneByTwo}
\newsavebox{\YTTwoToOneToOneDashOneTwo}
\newlength{\wdYTTwoToOneToOneDashOneTwo}

\setlength{\unitlength}{0.3mm}

\savebox{\YTOneByTwo}{%
\begin{picture}(28,28)(-5,-5)% Secure space (width,height), Origin(0,0)
%\thicklines % 0.8pt
\multiput(0,12)(0,12){2}{\line(1,0){24}}
\multiput(0,12)(12,0){3}{\line(0,1){12}}
\end{picture}%
}


\savebox{\YTTwoToOneToOneDashOneTwo}{%
\begin{picture}(40,28)(-5,-5)% Secure space (width,height), Origin(0,0)
%\thicklines % 0.8pt
\multiput(0,0)(0,12){1}{\line(1,0){12}}
\multiput(0,12)(0,12){2}{\line(1,0){36}}
\multiput(0,0)(12,0){2}{\line(0,1){24}}
\multiput(24,12)(12,0){2}{\line(0,1){12}}
\put(0,0){\makebox(12,12){2}}
\put(24,12){\makebox(12,12){1}}
\put(6,28){\vector(0,-1){35}}
\end{picture}}%
 

\settowidth{\wdYTTwoToOneToOneDashOneTwo}{
\usebox{\YTTwoToOneToOneDashOneTwo}} % \settowidth{\wd}{・・・}は (・・・)の横幅を確保するためです。
\bigskip{\mbox{}}

\begin{tabular}{cl}
\usebox{\YTOneByTwo}
&= \parbox[t]{\wdYTTwoToOneToOneDashOneTwo}{\raisebox{1mm}{
\usebox{\YTTwoToOneToOneDashOneTwo}}}
\end{tabular}

・・・・・・・・・・・・・・・・・・・・・・

<次頁><前頁><節頭><目次>   <戻る><ホーム>