2011/07/03

TeXで図表を横並びにする方法

レポートくそダルいです。
こんなん書いてなんの意味があるのかってぼやきながら毎回毎回慣れないTeXでレポート作成してます。実験のレポートなんだけども、実験を通して何かを身につける!というよりはレポート作らせたいがために実験させられてる感じがして、なんとも無駄に感じるヽ(`Д´#)ノ

さて、この土日に3本のレポートをTeXを使って殺した結果得られた知識として、「図表を横並びにする方法」ってのがあるのだけど、備忘録代わりに記しておく。

参考にしたのは以下のサイト。
図+図とか、図+表とか、2つ並べるだけの場合は参考リンクのようなサイトが色々見つかって一瞬でできるんだけど、3つ以上となるとなかなか見つからなかった。見つかったとしても、図だけ3つとか。どうするか色々とワケワカランかったのだけど、2つ挙げた参考リンクの内容を組み合わせるとうまくいった。以下その方法。

まず、プリアンブル(\begin{document}の前)に以下の記述をする。
\makeatletter
\newcommand{\figcaption}[1]{\def\@captype{figure}\caption{#1}}
\newcommand{\tblcaption}[1]{\def\@captype{table}\caption{#1}}
\makeatother
view raw gistfile1.tex hosted with ❤ by GitHub

そして、本文で以下のようにする。

図+図+図のとき
\begin{figure}[htbp]
\begin{tabular}{ccc}
\begin{minipage}{.33\textwidth}
\centering
\includegraphics[width=4cm]{foo.eps}
\caption{fooのキャプションだよ!}
\label{fig:foo}
\end{minipage}
\begin{minipage}{.33\textwidth}
\centering
\includegraphics[width=4cm]{bar.eps}
\caption{barのキャプションだよ!}
\label{fig:bar}
\end{minipage}
\begin{minipage}{.33\textwidth}
\centering
\includegraphics[width=4cm]{hoge.eps}
\caption{hogeのキャプションだよ!}
\label{fig:hoge}
\end{minipage}
\end{tabular}
\end{figure}
view raw gistfile1.tex hosted with ❤ by GitHub


さて....問題は次なんですよ

表+図+表のとき
\begin{figure}[h]
\begin{tabular}{ccc}
\begin{minipage}{.30\textwidth}
\begin{tabular}{lc}
論理演算 & AND \\
論理式 & $F=A\cdot B$\\
真理値表 & 表\ref{table:and}\\
図記号 & 図\ref{fig:and}
\end{tabular}
\end{minipage}
\begin{minipage}{.30\textwidth}
\centering
\includegraphics[width=3cm]{and.pdf}
\figcaption{ANDの図記号}
\label{fig:and}
\end{minipage}
\begin{minipage}{.30\textwidth}
\begin{center}
\tblcaption{ANDの真理値表}
\label{table:and}
\begin{tabular}{|c|c||c|}\hline
A & B & F \\ \hline\hline
0 & 0 & 0 \\ \hline
0 & 1 & 0 \\ \hline
1 & 0 & 0 \\ \hline
1 & 1 & 1 \\ \hline
\end{tabular}
\end{center}
\end{minipage}
\end{tabular}
\end{figure}
view raw gistfile1.tex hosted with ❤ by GitHub

うまくいった (゚∀゚)

説明しよう!
まず、プリアンブルに書いたやつのおかげで表のキャプションがうまく付きます。素晴らしい。何してるかっていうと、表のキャプションは「表n ほげほげ」とかじゃないとダメなんだけども、figure環境内で普通に\caption{ほげほげ}ってすると「図m ほげほげ」ってなるので、ちゃんと表のキャプションにする。こうすることで通し番号のカウントもちゃんとできるという具合です。

だからまとめとしては

  1. 全体をfigure環境にする
  2. そのすぐ内側にtabularで薄膜を張る。\begin{tabular}{★}←この★のところに並べたい数だけ列指定を入れる。たとえば3つ並べたくて全部中央そろえだったらcccとか。
  3. 並べたい奴らをminipageで包装する。\begin{minipage}{.33\textwidth}←たとえばこういう風に書けば、minipageの幅が全体の33%ってことになる(んだと思う。)ちなみに2つ並べたいときは.50じゃなくて.48とかにしといた方が良さげ。
  4. 図のキャプションは\figcaption{ほげほげ}ってする。(別に\caption{ほげほげ}でもノープロブレム)
  5. 表のキャプションは\tblcaption{ほげほげ}ってする。
赤文字の部分が自分では分からなかったことなので、これに注意すれば大丈夫。

おまけ:
TeXの表組について
TeXは数式とかすごい楽なんだけど、表組がこの上なくダルい。
TeXで&打ちながらチョビチョビ表つくっていくなんて狂気の沙汰ではないので、エクセルでパパッと作ってTeX形式に変換してくれるようなツールを(TeX Wikiにもあるけど、それらは自分的に機能不足だったので)だいぶ前に作った。良かったら使ってみてください。


あとエクセルとかだと「セルの結合」とかもう本当一瞬なんだけど、TeXだとすっごくめんどくさい。これはもうしょうがないので、\multicolumnとか\multirowとか使う。基本部分を上のツールで変換してから、微調整って感じでやれば効率的かも。

分からないこと:
「表の中で複数行の数式を入れる」←今回のレポートでちょっと必要な箇所があって、少しググっても出てこなかったので諦めてLaTeXiTでpdf出力してから図として貼付けたりした。イメージとしては、表のセル内に\begin{align*}数式A \\ 数式B \\数式C\end{align*}的なものを入れたかったのだけど、これだとこの中の改行\\が邪魔してコンパイル(?)を通らなかった。
さーどーしよー

ところで
LaTeXするには以下の本あればかなり重宝する。これでも分からなかったらググる。