$\LaTeX$で図を扱いたいとき,もともと作っておいた画像ファイルをgraphicxなどのパッケージで挿入する方法があります.
しかし,図と$\LaTeX$の文字のバランスの調整が難しかったり,図の挿入が綺麗に挿入できないことも少なくありません.
そこで本稿では.texファイルに直接記述することで直線・曲線・グラフなどの図を描くことができるパッケージ“TikZ”の使い方を紹介します.
TikZが便利な点はいくつかありますが,
- 図を美しく描ける
- .texファイルを書き換えれば図を編集できる
という2つは大きなメリットです.
「TikZの使い方」の一連の記事
TikZの準備
TikZはパッケージなので
- TikZパッケージをインストールする
- プリアンブルにTikZパッケージを使う宣言をする
という準備が必要です.
TikZパッケージは$\LaTeX$の環境を整えた時点で元から準備されていることが多いので,実際に簡単なコードでTikZを動かしてみて動かないときにインストールされてない可能性を疑えばよいでしょう.
そのため,TikZパッケージのインストールはこの記事では省略します.
もしTikZが準備されていなさそうであれば,「TikZ ダウンロード」などと検索してTikZパッケージをダウンロードし,適切な場所に配置してください.
TikZパッケージの宣言
他のパッケージと同様に,TikZパッケージを利用する場合は$\LaTeX$でパッケージを使用するためにはプリアンブル( \begin{documentclass}と \begin{document}の間)でTikZパッケージを使う宣言が必要です.
あえて何も説明せず使える状態にしたければ,.texファイルに
1 2 3 4 5 6 7 |
\documentclass[dvipdfmx]{jsarticle} \usepackage{tikz} \usetikzlibrary{intersections, calc, arrows.meta} \begin{document} \end{document} |
と記述してください.これだけで既にTikZを使える状態になっています.
簡単な説明
ここでは,いま記述した
1 2 3 |
\documentclass[dvipdfmx]{jsarticle} \usepackage{tikz} \usetikzlibrary{intersections, calc, arrows.meta} |
の部分の説明をします.「とりあえず使いたいんや!」という方は飛ばしても構いません.
ドライバの宣言
冒頭の
1 |
\documentclass[dvipdfmx]{jsarticle} |
ですが,これは「“dvipdfmx”というドライバを使い,和文(jsarticle)で作成する」という宣言です.
ドライバは.texファイルをコンパイルしたときにTikZの図を表示するために必要なものですが,詳しい説明はここではしません.ひとまずはTikZの図を表示させるために,なんらかのドライバが必要だという認識で構いません.
パッケージの宣言
核となるのは
1 |
\usepackage{tikz} |
で,これは「tikzパッケージを使う」という宣言です.
正確にはtikz.styというスタイルファイルではなく,いくつかのスタイルファイルの集合体をTikZと呼んでいます.
そして,これらTikZにまつわるいくつかのスタイルファイルを”\usepackage{tikz}”で一斉に呼び出しているというわけです.
詳しい説明は省略しますが,このパッケージにTikZを使うための基本的な道具が詰まっているわけですね.
ライブラリの宣言
ライブラリはTikZの機能を拡張させるものです.
1 |
\usetikzlibrary{intersections, calc, arrows.meta} |
「intersectionsとcalcとarrows.metaのライブラリを使う」という宣言になっています.
TikZ単体では,線の交点を求めたり,内分点を求めるなどの座標の計算ができません.そこで
- intersectionsを使えば,線の交点を求められるようになる
- calcを使えば,座標計算ができるようになる
- arrows.metaを使えば,様々な矢印のスタイルを使えるようになる
というように,ライブラリにより機能を拡張することができます.
他にもいくつかライブラリは存在しますが,ひとまずこれら3つのライブラリだけでもTikZの利便性が大きく向上します.
TikZのコマンドの基本
準備が終わったので,ここからは具体的にTikZを使っていきましょう.
なお,以下は全て \begin{document}と \end{document}の間に記述します.
基本の描画
命令の意味はあとで説明するとして,例えば
1 |
\tikz \draw (0,0)--(2,0); |
と記述すれば,
と表示されます.このように,
1 |
\tikz 描画; |
の形で記述することにより,簡単に図を描くことができます.
最後のセミコロン ;がないと正しく動かないので,忘れないように注意してください.
複数の描画
1行で図の記述が終わる場合には \tikzを前に書くことで描画できますが,複数行の命令が必要な場合には \tikz を前に書く代わりに,
1 2 3 4 |
\begin{tikzpicture} \draw (0,0)--(2,0); \draw (1,1)--(3,1); \end{tikzpicture} |
のように記述すればよく,この場合には
と表示されます.
このように,複数行の記述が必要な場合には,
1 2 3 4 5 |
\begin{tikzpicture} 描画; 描画; …… \end{tikzpicture} |
の形で記述します.
なお, \drawの後に
1 |
\tikz \draw (0,0)--(2,0) (1,1)--(3,1); |
と複数の命令を書いても問題なくコンパイルされます.
線分を描く
まずは最も基本的な線分の描き方から説明します.
単純な線分,折れ線
まずは次のように記述します.
1 |
\tikz \draw (0,0)--(2,1); |
これをコンパイルすると以下のように表示されます.
つまり,これは「直交座標上で点 (0,0)と点 (2,1)を結んで( --)描け( \draw)」という命令になっているわけですね.
このように,座標と座標を2個の半角ダッシュ -で結べば,この2点間を結ぶ線分が描画できます.
また,描画は相対位置で描画されるので,上のものの全ての第1成分に5を加えて
1 |
\tikz \draw (0+5,0)--(2+5,1); |
と記述しても上と同じく
と表示されます.
線分を順次つなげていくこともできます.
1 |
\tikz \draw (0,0)--(2,1)--(3,-1); |
と記述し,コンパイルすると以下のように表示されます.
閉じた線
閉じた線を記述することもできます.
1 |
\tikz \draw (0,0)--(2,1)--(3,-1)--cycle; |
と最後に cycleを記述すれば,
と閉じた線となります.
ここで,「 cycleを使わなくても, \tikz \draw (0,0)--(2,1)--(3,-1)--(0,0); とすれば良いのではないか」という疑問が湧きますが,この記述と上の cycleを使った閉じた線は異なった線を描きます.
違いを分かりやすくするため,両者を極太の線分
1 2 3 4 |
\begin{tikzpicture} \draw[ultra thick] (0,0)--(2,1)--(3,-1)--cycle; \draw[ultra thick] (4,0)--(6,1)--(7,-1)--(4,0); \end{tikzpicture} |
で描いてみると,それぞれ以下のようになります.
両者の三角形の左の頂点に注目すると,前者はとんがっていますが後者はとんがっていません(図を拡大してみるとよく分かります).
このように, cycle を使わないと「2つの端点が集まっているだけ」の不恰好な頂点となってしまいます.
なお,線を太くしたりといった,線のスタイルの変更は次の記事を参照してください.
長方形
指定した2点を対角線とする長方形を描くことができます.
1 |
\tikz \draw (0,0) rectangle (2,3); |
と2点で rectangleを挟んで記述すれば,
と2点$(0,0)$, $(2,3)$を結んだ線分を対角線とする長方形が描かれます.
垂線
点から線分に下ろした垂線を描くことができます.
1 2 3 4 |
\begin{tikzpicture} \draw (0,0)--(3,0); \draw (1,1)--(\$(0,0)!(1,1)!(3,0)\$); \end{tikzpicture} |
と記述すれば,
のように
- 2点$(0,0)$, $(3,0)$を結んだ線分
- 2点$(0,0)$, $(3,0)$を結んだ直線に点$(1,3)$から下ろした垂線
が描かれます.すなわち,
1 |
(\$(a1,a2)!(x,y)!(b1,b2)\$) |
は2点$(a1,a2)$, $(b1,b2)$を結んだ直線に点$(x,y)$から下ろした「垂線の足」を意味します.
曲線の描き方
次に,曲線の描き方を説明します.
円の描き方
曲線の中でも円を描く機会は多いでしょう.例えば,
1 2 3 4 |
\begin{tikzpicture} \draw(0,0) circle (1); \draw(1,1) circle (2); \end{tikzpicture} |
と記述すれば,
と表示されます.すなわち,点$(a,b)$中心,半径$r$の円は
1 |
\tikz \draw (a,b) circle (r); |
と記述することにより描くことができます.
実はこの \draw (a,b) circle (r);はかっこ( )を座標以外で使いたくないという理由から「古い構文」とされています.
個人的には簡潔なこの「古い構文」を好んで用いていますが,公式には \draw (a,b) circle [radius=1];が推奨された書き方です.
楕円の描き方
例えば,
1 |
\tikz \draw (0,0) circle [x radius=2,y radius=1,rotate=30]; |
と記述すれば,
と表示されます.
すなわち,点$(a,b)$中心,第1成分の径の長さが$p$,第2成分の径の長さが$q$の楕円を$t^\circ$傾けた図形は
1 |
\tikz \draw (a,b) circle [x radius=p,y radius=q,rotate=t]; |
と記述することにより描くことができます.
円弧/楕円弧の描き方
例えば,
1 |
\tikz \draw (0,0) arc (30:70:3); |
と記述すれば,
と表示されます.
すなわち,点$(a,b)$から始まる半径$r$の円の偏角$s^\circ$から$t^\circ$の弧は
1 |
\tikz \draw (a,b) arc (s:t:r); |
と記述することにより描くことができます.
また,点$(a,b)$から始まる$x$方向の径が$r$,$y$方向の径が$r’$の楕円の偏角$s^\circ$から$t^\circ$の弧は
1 |
\tikz \draw (a,b) arc [start angle=s,end angle=t,x radius=r,y radius=r']; |
と記述することにより描くことができます.
始点と終点への向きを指定する方法1
例えば,
1 |
\tikz \draw (0,0) to [out=45,in=135] (4,0); |
と記述すれば,
と表示されます.
すなわち,点$(a,b)$から偏角$t$の方向へ出て,点$(p,q)$へ偏角$s$の方向から入る曲線は
1 |
\tikz \draw (a,b) to [out=t,in=s] (p,q); |
と記述することにより描くことができます.
始点と終点への向きを指定する方法2
今の図の曲線を$45^\circ$回転させる場合には,
1 |
\tikz \draw (0,0) to [out=45,in=135,relative] ({2*sqrt(2)},{2*sqrt(2)}); |
と曲線のオプションに”relative”を記述することで,この2点を基準の軸とした偏角で表すことができます.これにより,
と表示されます.
すなわち,点$(a,b)$から点$(p,q)$の向きを基準として,点$(a,b)$から偏角$t^{\circ}$の方向へ出て,点$(p,q)$へ偏角$s^{\circ}$の方向から入る曲線は
1 |
\tikz \draw (a,b) to [out=t,in=s,relative] (p,q); |
と記述することにより描くことができます.
もっとも回転させるだけなら,
1 |
\tikz \draw[rotate=45] (0,0) to [out=45,in=135] (4,0); |
という回転のオプション [rotate=角度]を \drawの直後に記述すれば,
となります.
なお,終点$(4,0)$を単に$(3,3)$に移して
1 |
\tikz \draw (0,0) to [out=45,in=135] (3,3); |
と記述した場合には,
と表示されます.
これは to [out=45,in=135] で指定している$45^\circ$と$135^\circ$はあくまで$x$軸正方向からの偏角なので,単に終点の位置を移動させても図形自体が回転するわけではありません.
図に文字を書き込む方法
以下のように node を用いれば,図中に文字を書き込むことができます.
例えば,
1 2 3 4 5 6 7 |
\begin{tikzpicture} \draw (0,0)--(2,1)--(3,-1)--(1,-1)--cycle; \draw (0,0)node{A}; \draw (2,1)node{B}; \draw (3,-1)node{C}; \draw (1,-1)node{D}; \end{tikzpicture} |
と記述すれば,
と表示されます.しかし,これでは図と文字が被って美しくありませんので,これを文字の位置をズラしましょう.
例えば
1 2 3 4 5 6 7 |
\begin{tikzpicture} \draw (0,0)--(2,1)--(3,-1)--(1,-1)--cycle; \draw (0,0)node[left]{A}; \draw (2,1)node[above]{B}; \draw (3,-1)node[right]{C}; \draw (1,-1)node[below]{D}; \end{tikzpicture} |
とすれば,
と表示されます.すなわち,
1 |
\tikz \draw (a,b) node[上下左右]{文字}; |
と書くことによって,「点$(a,b)$の[上下左右]に{文字}を書け」という命令になります.
[上下左右]には
- above(上)
- below(下)
- left(左)
- right(右)
と,これらを組み合わせた
- above right(右上)
- above left(左上)
- below right(右下)
- below left(左下)
の全8方向を指定できます.
なお,実は node は
1 |
\tikz \draw (0,0)node[left]{A}--(2,1)node[above]{B}--(3,-1)node[right]{C}--(1,-1)node[below]{D}--cycle; |
ように,折れ線の記述の中でも正しく機能し,上と同じ図が描けます.
コメント