LaTeXで図を扱うには主に2つの方法があります。
本節では2番目の方法について解説していくことにします。
LaTeXで図を扱うには、まず出力したい図を用意する必要があります。png、jpeg、pdfどんな形式でも良いので、適当な図を用意してください。この際、図の名前に日本語を入れてしまうとエラーを吐くことがありますので、英語名を採用しておいた方が無難です。用意した図は編集しているtexファイルのあるフォルダ(プロジェクト)に格納しておきましょう[注1]。これで準備は完了です。
図を出力する第1段階としてプリアンブルでgraphicxパッケージを読み込む必要があります。その上で、本文中の出力したい場所で\includegraphics{hogehoge}と書き、コンパイルすれば図が表示されます。
例えば、次のコードをコンパイルしてみましょう。
\documentclass[dvipdfmx]{jsarticle} \usepackage{graphicx} %省略 \begin{document} %省略 \includegraphics[width=100mm]{fusenuo.png} \end{document}
出力結果は次のようになります。
図22. \includegraphicsをそのまま用いた図の挿入
可愛いフウセンウオの画像が左揃えで出力されました。察しの良い方はdocumentclassとincludegraphicsに付随した妙なオプションにお気づきかと思います。dvipdfmxは「ドライバ」と呼ばれるものの一種で、文書をフォーマット変換するのに必要とされます。このドライバを指定しておかないと、コンパイルした際に図が出力されず空白となってしまいます。特にdvipdfmxはPDF、PNG、JPEG形式の図を扱えるため、最も使用する機会の多いドライバです。他のdviドライバとしてはdvipsもあります。こちらはEPS形式の図しか扱えません。
widthはincludegraphicsにおいて使用できるオプションの1つで、画像の幅を指定する命令です。上のコード例では図の幅を 100 mmにスケールしています。有名なオプションとしては以下のようなものがあります。
命令 | 内容 | 使用例 |
width | 幅を指定する。 | width=5cm (幅を5 cmに) |
height | 高さを指定する。 | height=80mm (高さを80 mmに) |
scale | 画像のサイズを縦横比はそのままにスケールする。 | scale=0.8 (画像のサイズを0.8倍) |
angle | 画像を回転する。 | angle=45 (画像を45°回転) |
本稿ではクラスオプションでドライバを指定する方法を紹介しています。元来、dviドライバはgraphicxやxcolor、tikzなど特定のパッケージを使用するためのパッケージオプションでした。しかし、近年ではLaTeX本体もdviドライバを明示する必要が出てきたため、クラスオプションとして指定する方法が推奨されています。クラスオプションの内容はグローバルオプションとして文書全体に反映されますので、改めてパッケージオプションでdviドライバを明示する必要はありません。(参考:"日本語 LaTeX の新常識 2021," (2023/08/01 閲覧), URL: https://qiita.com/wtsnjp/items/76557b1598445a1fc9da)
[注1] 同じファイルでなくてもファイルの存在する場所(ファイルパス)を指定してあげれば画像を挿入することは可能です。例えば別のフォルダに画像を全て格納しておけば一元管理しやすくなりますし、ツリー構造(ファイル同士の親子関係)もスッキリとします。本ガイドでは説明を割愛するので、適宜奥村・黒木(2023)などを参照してください。
図の読み込み自体はincludegraphics単体が担いますが、文書としての体裁を意識するのであればやはり図表を自動配置したいものです。figure環境を使うと図を自動配置することが可能となります。例えば次のコードをコンパイルしてみましょう(プリアンブルやdocument環境の記述は省略してあります)。
figure環境を用いると図\ref{fugafuga}のように図表の自動配置が可能となる。 \begin{figure} \centering \includegraphics[width=100mm]{fusenuo.png} \caption{hogehoge} \label{fugafuga} \end{figure} この図は申請者が自作した。
結果は次のようになります。
図23. figure環境
少し観察してみましょう。まず、figure環境の部分が無視され、文章のみが先に出力されていることがわかります。加えて、文中\ref{}の部分では、図の番号が正しく参照されていることも見てとれます。また、\includegraphics単体の時と異なり、画像が中央揃え、かつキャプション付きで出力されました。
図の位置の調整については後述するとして、まずはfigure環境内のコマンドについて簡単に紹介します(下表参照)。
命令 | 内容 |
\centering | 図を中央揃えで出力します。類似の働きをするものとしてcenter環境があります。 |
\caption{hogehoge} | 引数に入力された内容を図のキャプションとして出力します。 |
\label{fugafuga} |
図に参照名を割り当てます。他図の参照名と重複しないように注意しましょう。 |
LaTeXの大きな魅力は図の参照が非常にシンプルに設計されていることです。\labelで設定した参照名を\ref{}の引数に入力しておけば、執筆中に位置や内容に変更があったとしても、参照番号は自動的に調整されます。次頁「数式の入力と数式環境」でも後述する通り、これは式番号の参照についてもほぼ同様です。
さて、先ほどの出力例では文章の後ろの少し変な位置に画像が出力されてしまっていました。これはfigure環境に適当なオプションをつけることによって調整することができます。最もオーソドックスなのは次の赤字のように指定するやり方です。
\begin{figure}[htbp]
\centering
\includegraphics[width=100mm]{fusenuo.png}
\caption{hogehoge}
\label{fugafuga}
\end{figure}
これは4つの同類のオプションを並べて書いており、「h」が無理なら「t」を、「t」が無理なら「b」を、という具合に順番にオプションを適用していきます。それぞれのオプションの意味は次の通りです。
オプション | 内容 |
h | できればその位置に |
t | ページ上端 |
b | ページ下端 |
p | 単独ページ |
このほかにも「H」:必ずそこに、というオプションも存在します。これは文章の多寡に関わらずfigure環境を入力したその位置に必ず出力させるものです。割と便利なので僕もよく使うオプションですが、使用の際にはfloatパッケージを読み込んでおく必要があります。
centeringとcenter環境はほとんど同じ働きをします。上述のfigure環境の例ではcenteringを用いていましたが、center環境を用いて
\begin{figure} \begin{center} \includegraphics[width=100mm]{fusenuo.png} \caption{hogehoge} \label{fugafuga} \end{center} \end{figure}
としても、同様に中央揃えで出力されます。しかしcenter環境の場合、上下に余分なスペースが自動的に挿入されるので注意が必要です。ほとんど好みの問題ですが、これが嫌な場合はcenteringを使うようにしましょう。もしくはプリアンブルで以下のようなおまじないを唱えることでも、スペースの挿入を回避することができます。
\def\center{\topsep=\z@\trivlist \centering\item\relax}
これはスペースがゼロになるようにcenter環境を再定義しています。
[1] "center vs. centering," URL: https://texblog.net/latex-archive/floats/center-centering/
[2] プログラミングと海外移動の情報マガジン, "TeXの記憶(90) — center環境と\centerline," URL: https://oversleptabit.com/archives/753
figure環境を用いて、幅が100mmの図を中央揃えで出力してみよう。
\documentclass[dvipdfmx]{jsarticle} %クラスオプションでドライバを指定 \usepackage{graphicx} %省略 \begin{document} \begin{figure}[htbp] \centering %中央揃え、center環境を用いても可 \includegraphics[width=100mm]{fusenuo.png} %図の名前は適当 \caption{フウセンウオ} \label{fusenuo} \end{figure} \end{document}
前ページの内容も組み合わせれば、章立てされた文章中で画像を出力することも可能です。余力のある人は挑戦してみましょう。