LaTeXで図を直接描けるTikZの使い方1|基本的な描線

TikZ
TikZ

$\LaTeX$で図を扱いたいとき,もともと作っておいた画像ファイルをgraphicxなどのパッケージで挿入する方法があります.

しかし,図と$\LaTeX$の文字のバランスの調整が難しかったり,図の挿入が綺麗に挿入できないことも少なくありません.

そこで本稿では.texファイルに直接記述することで直線・曲線・グラフなどの図を描くことができるパッケージ“TikZ”の使い方を紹介します.

TikZが便利な点はいくつかありますが,

  • 図を美しく描ける
  • .texファイルを書き換えれば図を編集できる

という2つは大きなメリットです.

この記事では

  • TikZの準備
  • TikZのコマンドの基本
  • まっすぐな線を描く方法
  • 曲線を描く方法
  • 図に文字を書き込む方法

を順に解説します.


$\LaTeX$の参考文献

以下は$\LaTeX$に関するオススメの参考書です.

LaTeX美文書作成入門 改訂第9版

[奥村晴彦 著/技術評論社]

$\TeX$はDonald E. Knuth氏が開発した数式処理に特化した組版処理システム(ざっくり言えば文書ソフト)です.

現在ではほとんどの数学の論文雑誌では$\LaTeX$により書かれた論文が標準となっています.

そのため,ほとんどの数学の研究者が論文作成の際に$\LaTeX$を使っていると言ってよいでしょう.

著者の奥村氏は日本における$\TeX$の第一人者で,本書は$\LaTeX$初心者から中級者まで幅広い層に役立つ$\LaTeX$の教科書です.

数式処理だけでなく$\LaTeX$を扱う際に便利な多くの機能の解説が載っており,しっかり理解して$\LaTeX$を習得することができます.

TikZの準備

TikZはパッケージなので

  1. TikZパッケージをインストールする
  2. プリアンブルにTikZパッケージを使う宣言をする

という準備が必要です.

TikZパッケージは$\LaTeX$の環境を整えた時点で元から準備されていることが多いので,実際に簡単なコードでTikZを動かしてみて動かないときにインストールされてない可能性を疑えばよいでしょう.

そのため,TikZパッケージのインストールはこの記事では省略します.

もしTikZが準備されていなさそうであれば,「TikZ ダウンロード」などと検索してTikZパッケージをダウンロードし,適切な場所に配置してください.

TikZパッケージの宣言

他のパッケージと同様に,TikZパッケージを利用する場合は$\LaTeX$でパッケージを使用するためにはプリアンブル( \begin{documentclass}\begin{document}の間)でTikZパッケージを使う宣言が必要です.

あえて何も説明せず使える状態にしたければ,.texファイルに

と記述してください.これだけで既にTikZを使える状態になっています.

プリアンブルの簡単な説明

ここでは,いま記述した

の部分の説明をします.「とりあえず使いたいんや!」という方は飛ばしても構いません.

ドライバの宣言

冒頭の

ですが,これは「 dvipdfmxのというドライバを使い,和文( jsarticle)で作成する」という宣言です.

ドライバは.texファイルをコンパイルしたときにTikZの図を表示するために必要なものですが,詳しい説明はここではしません.ひとまずはTikZの図を表示させるために,なんらかのドライバが必要だという認識で構いません.

パッケージの宣言

核となるのは

で,これは「tikzパッケージを使う」という宣言です.

正確にはtikz.styというスタイルファイルではなく,いくつかのスタイルファイルの集合体をTikZと呼んでいます.

そして,これらTikZにまつわるいくつかのスタイルファイルを \usepackage{tikz}で一斉に呼び出しているというわけです.

詳しい説明は省略しますが,このパッケージにTikZを使うための基本的な道具が詰まっているわけですね.

ライブラリの宣言

ライブラリはTikZの機能を拡張させるものです.

「3つのライブラリ \intersectionscalcarrows.metaを使う」という宣言になっています.

TikZ単体では,線の交点を求めたり,内分点を求めるなどの座標の計算ができません.そこで

  • \intersectionsを使えば,線の交点を求められるようになる
  • calcを使えば,座標計算ができるようになる
  • arrows.metaをを使えば,様々な矢印のスタイルを使えるようになる

というように,ライブラリにより機能を拡張することができます.

他にもいくつかライブラリは存在しますが,ひとまずこれら3つのライブラリだけでもTikZの利便性が大きく向上します.





TikZのコマンドの基本

準備が終わったので,ここからは具体的にTikZを使っていきましょう.

なお,以下は全て \begin{document}\end{document}の間に記述します.

単一の命令は\tikzで描ける

命令の意味はあとで説明するとして,例えば

と記述すれば,

2点(0,0),(2,0)を結ぶ線分
\tikzの後に命令を書く

と表示されます.このように,

の形で記述することにより,簡単に図を描くことができます.

最後のセミコロン ;がないと正しく動かないので,忘れないように注意してください.

複数の命令はtikzpicture環境を使う

1行で図の記述が終わる場合には \tikzを前に書くことで描画できますが,複数行の命令が必要な場合には \tikz を前に書く代わりに,

のように記述すればよく,この場合には

2点(0,0),(2,0)を結ぶ線分と2点(1,1),(3,1)を結ぶ線分
複数の命令を書きたいときは tikzpicture環境を使う

と表示されます.

このように,複数行の記述が必要な場合には,

の形で記述します.

なお, \drawの後に

と複数の命令を書いても問題なくコンパイルされます.





まっすぐな線を描く方法

まずは最も基本的な線分の描き方から説明します.

2点の座標を- -で結んで線分が描ける

まずは次のように記述します.

これをコンパイルすると以下のように表示されます.

2点(0,0),(2,1)を結ぶ線分
線分を描きたいときは2点を --で結ぶ

つまり,これは「直交座標上で点 (0,0)と点 (2,1)を結んで( --)描け( \draw)」という命令になっているわけですね.

このように,座標と座標を2個の半角ダッシュ -で結べば,この2点間を結ぶ線分が描画できます.

また,描画は相対位置で描画されるので,上のものの全ての第1成分に5を加えて

と記述しても,平行移動して表示されたりはせず,上と同じく

2点(5,0),(7,1)を結ぶ線分
全体を平行移動しても同じ位置に表示される

と表示されます.

座標を- -でどんどん繋げば折れ線が描ける

線分を順次つなげていくこともできます.

と記述し,コンパイルすると以下のように表示されます.

2点(0,0),(2,1),(3,-1)を結ぶ折れ線
点を --でどんどん繋いでいけば折れ線になる

線を閉じるときは- -cycleを使う

閉じた線を記述することもできます.

と最後に cycleを記述すれば,

3点(0,0),(2,1),(3,-1)を結ぶ三角形
cycleを使えば最初の点と繋がれる

と閉じた線となります.

ここで,「 cycleを使わなくても, \tikz \draw (0,0)--(2,1)--(3,-1)--(0,0); とすれば良いのではないか」と考えるかもしれませんが,この記述と上の cycleを使った閉じた線は異なった線を描きます.

違いを分かりやすくするため,両者を極太の線分

で描いてみると,それぞれ以下のようになります.

cycleを使った三角形と使わない三角形
cycleを使わないと綺麗に閉じない

両者の三角形の左の頂点に注目すると,前者はとんがっていますが後者はとんがっていません(図を拡大してみるとよく分かります).

このように, cycle を使わないと「2つの端点が集まっているだけ」の不恰好な頂点となってしまいます.

cycle を使わないと最初の点を変えると最後の点も変えないと閉じないので,この意味でも cycleは便利です.

長方形は2点の座標でrectangleを挟んで描ける

指定した2点を結ぶ線分を対角線とする長方形を描くことができます.

と2点で rectangleを挟んで記述すれば,

2点(0,0),(2,3)を結ぶ線分を対角線とする長方形
rectagnleを使えば長方形が描ける

と2点$(0,0)$, $(2,3)$を結んだ線分を対角線とする長方形が描かれます.

垂線の足は($(A)!(X)!(B)$)で描ける

点から線分に下ろした垂線を描くことができます.

と記述すれば,

2点(0,0),(2,3)を結ぶ直線に点(1,1)から下ろした垂線
($(A)!(X)!(B)$)で垂線の足となる

のように

  • 2点$(0,0)$, $(3,0)$を結んだ線分
  • 2点$(0,0)$, $(3,0)$を結んだ直線に点$(1,3)$から下ろした垂線

が描かれます.すなわち,

は2点$(A)$, $(B)$を結んだ直線に点$(X)$から下ろした「垂線の足」を意味します.





曲線を描く方法

次に,曲線の描き方を説明します.

円はcircleを使って描ける

曲線の中でも円を描く機会は多いでしょう.例えば,

と記述すれば,

中心(0,0)・半径1の円と,中心(1,1)・半径2の円
circleを使えば円が描ける

と表示されます.すなわち,点$(a,b)$中心,半径$r$の円は

と記述することにより描くことができます.

実は \draw (a,b) circle(r);のように書いても同じ円が描けますが,現在は古い構文とされています.

楕円もcircleを使って描ける

例えば,

と記述すれば,

中心(0,0)・x軸方向に長径2・y軸方向に短径1の楕円
circleのあとのオプションにより楕円になる

と表示されます.

すなわち,点$(a,b)$中心,第1成分の径の長さが$p$,第2成分の径の長さが$q$の楕円を$t^\circ$傾けた図形は

と記述することにより描くことができます.

円弧・楕円弧はarcを使って描ける

例えば,

と記述すれば,

中心(0,0)・半径3の円周の偏角30°から70°の部分の円弧
arcを使えば指定した偏角部分の円弧が描ける

と表示されます.

すなわち,点$(a,b)$から始まる半径$r$の円の偏角$s^\circ$から$t^\circ$の弧は

と記述することにより描くことができます.

また,点$(a,b)$から始まる$x$方向の径が$r$,$y$方向の径が$r’$の楕円の偏角$s^\circ$から$t^\circ$の弧は

と記述することにより描くことができます.

曲線が出る方向をto[out=a,in=b]で指定できる

例えば,

と記述すれば,

点(0,0)から偏角45°の方向に出て,点(4,0)に偏角135°の方向から入る曲線
toとオプション out, inを使えば点から曲線が出る方向を指定できる

と表示されます.

すなわち,点$(a,b)$から偏角$t$の方向へ出て,点$(p,q)$へ偏角$s$の方向から入る曲線は

と記述することにより描くことができます.

オプションrelativeで偏角の基準が線分になる

今の図の曲線を$45^\circ$回転させる場合には,

と曲線のオプションに”relative”を記述することで,この2点を基準の軸とした偏角で表すことができます.これにより,

2点(0,0),(2√2,2√2)を結ぶ線分を基準として,点(0,0)から偏角45°の方向に出て,点(2√2,2√2)に偏角135°の方向から入る曲線
toのオプションに relativeを使えば線分が基準の偏角になる

と表示されます.

すなわち,点$(a,b)$から点$(p,q)$の向きを基準として,点$(a,b)$から偏角$t^{\circ}$の方向へ出て,点$(p,q)$へ偏角$s^{\circ}$の方向から入る曲線は

と記述することにより描くことができます.

オプションrotateで図形が回転する

もっとも回転させるだけなら,

という回転のオプション [rotate=角度]\drawの直後に記述すれば,

点(0,0)から偏角45°の方向に出て,点(4,0)に偏角135°の方向から入る曲線を,45°回転させた曲線
drawのオプションに rotateを使えば図形が回転する

となります.

なお,終点$(4,0)$を単に$(3,3)$に移して

と記述した場合には,

点(0,0)から偏角45°の方向に出て,点(3,3)に偏角135°の方向から入る曲線
toのオプションに relativeを使わないと線分が基準にならないので注意

と表示されます.

これは to [out=45,in=135] で指定している$45^\circ$と$135^\circ$はあくまで$x$軸正方向からの偏角なので,単に終点の位置を移動させても図形自体が回転するわけではありません.





図に文字を書き込む方法

ここまでは単に図形を描く方法について説明してきましたが,文字を書き込むこともできます.

文字はnodeを使って書き込める

以下のように node を用いれば,図中に文字を書き込むことができます.

例えば,

と記述すれば,

4点(0,0),(2,1),(3,-1),(1,-1)を結ぶ四角形の頂点にA,B,C,Dを書いた図
nodeを使うと文字を書き込める

と表示されます.

nodeでオプションを使えば文字を動かせる

しかし,これでは図と文字が被って美しくありませんので,これを文字の位置をズラしましょう.例えば

とすれば,

4点(0,0),(2,1),(3,-1),(1,-1)を結ぶ四角形の頂点にA,B,C,Dを書いた図
nodeのオプションで文字を少しズラせる

と表示されます.すなわち,

と書くことによって,「点$(a,b)$の[上下左右]に{文字}を書け」という命令になります.

[上下左右]には

  • above(上)
  • below(下)
  • left(左)
  • right(右)

と,これらを組み合わせた

  • above right(右上)
  • above left(左上)
  • below right(右下)
  • below left(左下)

の全8方向を指定できます.

なお,実は node は

ように,折れ線の記述の中でも正しく機能し,上と同じ図が描けます.

管理人

プロフィール

山本やまもと 拓人たくと

元予備校講師.講師として駆け出しの頃から予備校の生徒アンケートで抜群の成績を残し,通常の8倍の報酬アップを提示されるなど頭角を表す.

飛び級・首席合格で大学院に入学しそのまま首席修了するなど数学の深い知識をもち,本質をふまえた分かりやすい授業に定評がある.

現在はオンライン家庭教師,社会人向け数学教室での講師としての教育活動とともに,京都大学で数学の研究も行っている.専門は非線形偏微分方程式論.大学数学系YouTuberとしても活動中.

趣味は数学,ピアノ,甘いもの食べ歩き.公式LINEを友達登録で【限定プレゼント】配布中.

Twitter・大学数学YouTube・公式LINEを見てみる

コメント