tikzくん

はじめに

tikzくんはtexの文章中におえかきすることができる機能を持っている。このおえかきはPowerPointのような直感的なものではなく、座標を使ったおえかきなのだ。読者の中にはInkscapeを使えばきれいで直感的に図を描けるじゃないか、と憤慨するInkscaperの方も多くいらっしゃるかもしれないが、ここではそれを無視してtikzくんの初歩的な使い方について、特に使いそうなものに限って紹介する。

tikzくんを使うには以下を書いておく必要がある。

\usepackage{tikz}
\usepackage{calc} % 多分なくても動くが、計算をしてほしいときは必要

図を入れたいところに以下を書く。

\begin{tikzpicture}
\end{tikzpicture}

これで挟んだものを図として描画してくれる。

\documentclass[a4j,dvipdfmx]{article}
\usepackage{tikz}
\usepackage{calc}

\begin{document}
~文章~
\begin{tikzpicture}
  \draw ~~;
\end{tikzpicture}
~文章~
\end{document}

以下では\beginと\endを省略する。
最後に重要な注意点として、描画部分は1つ線(点)を書くたびに” ; “を末尾に付ける必要がある

直線

\draw [オプション] (x1, y1) — (x2, y2);
(x1, y1)から(x2, y2)へ直線を引く。

\draw (0, 0) -- (1, 1);
\draw [line width = 3pt, red] (0, 0) -- (1, 0);
\draw [dashed] (1, 1) -- (1, 0);


色や破線の種類はそこそこ数があるので、お好みの色、破線をお見立てください。

 

矢印

\draw [->, 追加オプション] (x1, y1) — (x2, y2);
(x1, y1)から(x2, y2)への矢印。

\draw [->] (0, 0) -- (1, 1);
\draw [->, -{latex}] (0, 0) -- (1, 0);


当然ながら矢印にも種類があり、線の太さ、色、破線にも変更可能なので、お好みの矢印さんをお見立てください。種類は-{latex}がオヌヌメ。

 

楕円

\draw (x0, y0) [option] circle [x radius = a, y radius = b, rotate = θ];
$$\frac{\left(x – x_0\right)^2}{a^2} + \frac{\left(y – y_0\right)^2}{b^2} = 1$$の楕円。”rotate”でx軸から何度傾けるかを決める。
thetaの単位は度、ラジアンではないことに注意。
ちなみに、円を描きたいだけであれば、
\draw (x0, y0) [option] circle [radius = r];
とすれば、
$$\left(x – x_0\right)^2 + \left(y – y_0\right)^2 = r^2$$
を描くことができる。

\draw (0, 0) circle [x radius = 2, y radius = 1, rotate = 20];
\draw [red, line width = 2pt] (0, 0) circle [x radius = 2, y radius = 1, rotate = 110];

ちなみに弧を書きたいと怒髪衝天している方も多いだろうが、そういった場合
\draw (x0, y0) arc (θ0 : θ1 : r);
と書けば良い。しかしarcの挙動は少し奇妙で、(x0, y0)から始まる半径rの弧をθ0°からθ1°まで描く、というものだ。つまり半径r中心(x0 – r, y0)のθ0°からθ1°までの弧を描く、といった中心が半径に依存してしまうので使用する際は少々注意が必要。さらにちなむと、関数を使って書く方法もある。

 

点、文字

\node(coordinate) [オプション] (名前) at (x, y) {(\大きさ) 文字};
(x, y)に文字を書く。名前は付けなくても問題ないが、名前だけ付け、後でその点を使うという使い方もある。ただし指定した座標に文字を入れない場合は”\node”ではなく、”\coordinate”にしなければ指定した座標をちょうど始点(または終点)にすることはできない。

\draw [->, -{latex}] (-2, 0) -- (2, 0); % x軸
\draw [->, -{latex}] (0, -2) -- (0, 2); % y軸
\node [above left] at (0, 0) {原点}; % (0, 0)の左上に"原点"を表示
\coordinate (A) at (0, 0) {}; % (0, 0)に"A"と名前を付ける
\node [below, blue] at (1, 0) {\Large $(1, 0)$}; % (1, 0)の下に青色、標準より大きな文字で"(1, 0)"と表示
\node [anchor = east, red] at (0, 1) {\small $(0, 1)$};% (0, 1)の下に青色、標準より小さな文字で"(0, 1)"と表示
\coordinate (B) at (1, 1) {}; % (1, 1)に"B"と名前を付ける
\node (C) at (-1, -2) {$C$}; % (-1, -2)に"C"と名前を付け、その点に"C"と表示
\draw [->] (A) -- (B); % 点Aから点Bに矢印
\draw [->] (A) -- (C); % 点Aから点Cに矢印


文字の大きさは \scriptsize < \footnotesize < \small < なし < \large < \Large < \LARGE < \huge < \Huge の順。

 

塗りつぶし

\draw [fill, 追加オプション] (x0, y0) — (x1, y1) — (x2, y2) — …;
(x0, y0)、(x1, y1)、(x2, y2)、…で囲まれる図形の内部を塗りつぶす。閉じていなくても、自動で最初と最後の点を結んで塗りつぶしてくれる。
当然書いた順に描画されるので重なりがあるのなら、配置には気をつけよう。

\draw [fill] (0, 0) -- (1, 1) -- (1, 0);
\draw [fill, magenta] (0, 0) -- (-1, 0) -- (-1, -1) -- (0, -1);
\draw [fill, opacity = 0.4, green] (0, 0) circle [radius = 1];


opacityは不透明度を表し、0から1までの数値を持つ。0に近いほど透明になる。

 

関数

\draw [domain = t0 : t1, variable = \t, 追加オプション] plot({f(\t)}, {g(\t)});
t0からt1まで(x, y) = (f(t), g(t))という媒介変数表示で線を描く。

\draw [domain = -1 : 2, smooth, variable = \t] plot({\t}, {(\t)^2});
\draw [fill, opacity = 0.3, domain = 0 : pi, smooth, variable = \x] plot({\x}, {sin(180 * \x / pi)});
\draw [domain = -2 * pi : pi, smooth, variable = \x] plot({\x - sin(180 * \x / pi)}, {1 - cos(180 * \x / pi)});
\draw [domain = -pi : pi, smooth, variable = \t] plot(\t r:{(cos(180 * \t / pi))^2}); % 極座標


sinや極座標の時はラジアンではないので注意されたし。楕円の時もそうだったが、基本的にtikzくんは度数法がお好き。

 

最後に

図を描くうえで特に使いそうなものを紹介した。tikzくんはレベルの高い合格点を超える図オールウェイズ出してくれる。ここまで読んだ方ならなんとなくわかると思うが、このページのスタンスとしては、すべてを紹介するのはとってもたいへんなので、さわりだけ紹介して後は自己の熱量に任せる、という他力本願寺派の影響を強く受けているのである。尚、このページの加筆・修正はガンガン行っていただいてかまわない。
また、tikzくんを酷使すれば繰り返し処理などをしたり、様々なお絵描きをしたりする猛者たちも存在する。wikiヲ参照サレタシ。
以下はおまけとしてtikzくんでおえかきしたものを入れておく、是非ともご自身の力作を投稿してほしい。

 

おえかき

\draw (1, 1) -- (-1, 1) -- (-1, -1) -- (1, -1) -- (1, 1);
\draw (0, 0) circle [radius = 1];
\draw (0, 1) -- (1.73 / 2, -1 / 2) -- (-1.73 / 2, -1 / 2) -- (0, 1);

 

% 1行目
\draw [rounded corners] (0, -0.5) rectangle (1.5, 0.5);
\draw [line width = 1pt] (1.5, 0) -- (2, 0);
\draw (2.5, 0) circle [radius = 0.5];
\draw [line width = 1pt] (3, 0) -- (3.5, 0);
\draw [rounded corners] (3.5, -0.5) rectangle (5, 0.5);
\draw [line width = 1pt] (5, 0) -- (5.5, 0);
\draw (6, 0) circle [radius = 0.5];
\draw [line width = 1pt] (6.5, 0) -- (7, 0);
\draw [rounded corners] (7, -0.5) rectangle (8.5, 0.5);

% 1-2行目
\draw [line width = 1pt] (0.75, -0.5) -- (0.75, -1.5);
\draw [line width = 1pt] (4.25, -0.5) -- (4.25, -1.5);
\draw [line width = 1pt] (7.75, -0.5) -- (7.75, -3.5);

% 2行目
\draw [rounded corners] (0, -2.5) rectangle (5, -1.5);
\draw [line width = 1pt] (0.75, -2.5) -- (0.75, -3.5);
\draw [line width = 1pt] (4.25, -2.5) -- (4.25, -3.5);

 

\draw [cyan, ultra thick] (0, 0) circle [x radius = 2, y radius = 1, rotate = 22.5];
\draw [red, ultra thick] (0, 0) circle [x radius = 2, y radius = 1, rotate = 112.5];

\draw [->, -{latex}] (-3, 0) -- (3, 0);
\draw [->, -{latex}] (0, -3) -- (0, 3);
\node (B1) at (3.3, 0) {\Large $k_x$};
\node (B2) at (0, 3.3) {\Large $k_y$};

\draw [->, -{latex}, dashed] (-2.77163859753386, -1.1480502970952693) -- (2.77163859753386, 1.1480502970952693);
\draw [->, -{latex}, dashed] (1.148050297095269, -2.77163859753386) -- (-1.1480502970952688, 2.77163859753386);
\draw [domain = 0 : 22.5, smooth, variable = \t] plot({2.3 * cos(\t)}, {2.3 * sin(\t)});
\draw [domain = 90 : 112.5, smooth, variable = \t] plot({2.3 * cos(\t)}, {2.3 * sin(\t)});
\node (C1) at (2.451963201008076, 0.4877258050403206) [right] {\Large $\phi$};
\node (C2) at (-0.5267438694435462, 2.6481202570887223) {\Large $\phi$};