TeXに直接作図しよう!1
TeXを好んで使うのは,主に「物理・数学な人」と「プログラマーな人」ですね。前者は言うまでも無くTeXの独壇場ともいえる高度な数式の扱いによるものですが,後者は一体なぜなんでしょう。
世の中には妄信的に,MS Wordを使いこなせる人が偉い,と考える人が少なからずいて,そういう人たちに言わせれば
- 「いまどきWordが主流なんだよ(笑)」
- 「かっこつけてTeXを使ってるだけだろ」
- 「つーかTeXとか聞いたことねーし」
みたいな答えが返ってきてしまいますが,プログラマーがTeXを好むのは,別に「使えたらかっこいいから」などといった安っぽい話ではなく,ただ,便利だから,それ以上でもそれ以下でもありません。
プログラマーな人はテキストファイルが好き
一般人はファイルの種類を区別するのに「.docx」や「.jpg」のような,いわゆる拡張子で分類するかもしれません。しかしプログラマーはそうではないのです。プログラマーの目には,ファイルの種類は二個にしか映りません。「テキストファイル」と「バイナリファイル」の二種類です。
ざっくりした説明をしましょう。「テキストファイル」とは,メモ帳のようなテキストエディタで開いたときに文字の列として人間が読めるものです。一方,「バイナリファイル」は文字の列ではなくプログラムを制御するためのコードの列であるため,無理やりテキストエディタで開くと文字化けしたような感じになります(下図を参照)。
多くのワープロソフトでは保存形式にバイナリファイルが用いられています。これはソフトウェアメーカーが「専用形式にすることでソフトのシェアを独占できる」と考えたから,というのも多少はあったかもしれませんが,それ以上に複雑な機能を持つソフトを制御するのにはバイナリファイルを使うほうが効率がよかったのでしょう。
繰り返しますが,バイナリファイルは人間の目で内容を確認することが出来ません。プログラマーは得体の知れないファイルを扱うのが好きではないのです。ファイルが破損して開けなくなったり,そのバイナリファイルを読み書きするソフトが市場から消えたときに,対処できないからです。何より,テキストファイルであれば,自分でファイルを検索したり管理したりするためのツールが簡単に作れるのです。そういう訳でプログラマーはTeXを好む傾向にあります。
でもWord方が優れている点もある
数学者なら知りませんけど(笑),普通の文書には図が挿入されることが多いですね。もちろんTeXでも画像の挿入は行えます。以下はdvipdfmx
でコンパイルすると仮定したときのLaTeXで画像を挿入するためのコードのサンプルです。
1 2 3 4 5 6 7 |
\documentclass{jsarticle} \usepackage[dvipdfmx]{graphicx} \begin{document} …… \includegraphics{graph1.png} …… \end{document} |
このように記述して,TeXファイルと同じディレクトリ(フォルダー)に「graph1.png」を置いておけば文書中に挿入されます。
もちろんこのまま印刷したりPDFに出力するのであれば問題ないのですが,TeXファイルのまま他人に送らなければならないとき,トラブルが発生する可能性があります。
急いでいると人間はミスを犯します。「早く送れ!!」といわれたら,あせってTeXファイルだけ送って,挿入している画像ファイルは送り忘れてしまうかもしれません。こんなミスはWordでは起きるはずがないですよね。文書に挿入した画像は通常「.doc(x)」ファイル内に格納され,文書が「.doc(x)」ファイルひとつで完結しているからです。
ていうか,画像ファイルってバイナリファイルだよね
バイナリファイル怖い!それはともかく,出来ればひとつの文書はひとつのファイルで完結させたい!
そんなわがままな人のためにか,一応TeXには簡単な作図を行うための機能が用意されています。picture環境です。これを使えば直線・楕円・文字(数式)・ベジェ曲線を用いて自由に作図が出来るよ!やったね!
ベジェ曲線が使えるんだからなんでも描ける!!!……,はずはない。そりゃがんばればy=e–xsinxのグラフを近似したものが描けるかもしれない。しかしそれは人間の手で保守できるコードではありません。実はy=e–2xsinx
のグラフが欲しかったんだ~~!!,となったときに一から描き直さなければなりません。もうTeXなんてオワコンじゃん!!!と,思いきや,TeXには便利なパッケージが用意されているのです。
↓ここからが本題です↓
TeXで図を描くためのパッケージはいくつかありますが,ここでは最近(個人的に)熱いTikZを使うことにします。というのも,TikZはW32TeXやTeX Liveといった主要なTeXディストリビューションと一緒に標準でインストールされているので,TikZを使っても十分な可搬性が確保できるからです。同様のパッケージにはPSTricksがありますが,これはdvipdfmxでコンパイルできないので,さよなら(⌒ー⌒)ノ~~~。
PGFとTikZの関係は,PGF(Portable Graphics Format)が描画のための基本となるコマンドを用意し,TikZ(TikZ ist kein Zeichenprogramm)がそのラッパーとして,複雑な図を簡単に表現するための構文を用意しています。TikZはMetafontやPSTricksに少なからず影響を受けていますが,よく言われるのは,TikZは「どう描くか」ではなく「何を描くか」に焦点が当てられているため,TeXの組版機能との親和性が非常に高い,ということです。
とりあえずTikZが使えるか確認しよう
おそらくあなたのTeX環境にはすでにTikZがインストールされているはずです。取りあえずTikZのサンプルを示すので,意味は考えずにコンパイルしてみてください。ただし,dvipdfmxを使うことを想定しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
\documentclass{jsarticle} \usepackage[dvipdfmx]{graphicx} \usepackage{tikz} \begin{document} \begin{tikzpicture} % 座標軸 \draw [thick, -stealth](-0.5,0)--(5,0) node [anchor=north]{$x$}; \draw [thick, -stealth](0,-0.5)--(0,2) node [anchor=east]{$y$}; \node [anchor=north west] at (0,0) {O}; % y=log(x) \draw [very thick, domain=0.7:4.5, samples=200] plot(\x, {ln(\x)}); \node [anchor=north] at (4.5,1.4){$y=\log x$}; % y=x/e \draw [domain=-0.4:4.5] plot(\x,\x/e); \node [anchor=east] at(4,1.8){$y=\frac{x}{e}$}; % y=(x-1)/(e-1) \draw [domain=0.4:4] plot(\x, {(\x-1)/(e-1)}); \node [anchor=south, font=\scriptsize, fill=white, inner sep=0pt] at(0,0.4){$y=\frac{1}{e-1}(x-1)$}; % 補助線 \draw [dashed](0,1) node [anchor=east]{$1$}--(e,1)--(e,0) node[anchor=north]{$e$}; \draw [dashed](1,0) node [anchor=north]{$1$}--(1,1); \end{tikzpicture} \end{document} |
以下のようになれば正しくTikZがインストールされているはずだ。
コンパイルエラーになる場合は,残念ながらTikZがインストールされていないようです。その場合は手動でTikZをインストールするか,あるいは最新のW32TeXかTeX Liveをインストールしなおせば良いでしょう。
それでは次回から,TikZを使った作図の方法を説明していきます。