*[[TikZ and PGF:http://sourceforge.net/projects/pgf/]] [#w315bc8f]

-[[PGF and TikZ -- Graphic systems for TeX:http://sourceforge.net/projects/pgf/]]
//-http://pgf.cvs.sourceforge.net/viewvc/pgf/?view=tar
-[[CTAN:help/Catalogue/entries/pgf.html]]
--2011/09/20 以降の [[W32TeX]] には標準で含まれています.
--[[e-TeX]] 拡張が必要です. ([[qa:53665]], [[qa:53666]], [[qa:53672]])

*はじめに [#aacc19e6]

PGF (Portable Graphics Format) は、Till Tantau(Beamerのオリジナルの開発者) および Mark Wibrow, Christian Feuersängerを中心として開発されているTeX用の描画パッケージで、そのフロントエンドとして一般的にはTikZ (TikZ ist kein Zeichenprogramm = "TikZ is not a drawing program") を使用します。Beamerが基礎としている描画エンジンもPGFです。

PGF/TikZが提供するtikzpicture環境は、LaTeX標準のpicture環境と同様にTeX文書中に描画コマンドを直接書き込むものですが、かなり高度な描画機能を持っています。(→図版の例は[[こちら:http://www.texample.net/tikz/]]を参照。)PGF/TikZ自身が持っているライブラリで機能が拡充されるほか、PGF/TikZを利用し、拡張するパッケージも数多く作られています。(PGFPlots, TikZ-dependency, tkz-euclideなど。)
同じく高度な描画機能を持っている[[PSTricks]]との大きな違いは、(psを経由せずに)PDFを作成できる点です。

PGF/TikZはLaTeXだけでなく、plain TeXとConTeXtにも対応していますが、以下は、LaTeXの場合について記述します。

**初期設定 [#e634a5d8]
dviwareの指定をしてから、tikzパッケージを読み込みます。graphicxパッケージのオプションがPGFに自動的に適用されます(pgf自身、graphicxを読み込みます)。下は、dvipdfmxを使用する場合の設定です。
 \usepackage[dvipdfmx]{graphicx}%
 %\def\pgfsysdriver{pgfsys-dvipdfmx.def}%(graphicxパッケージを使用しない場合はこの行を有効に)
 \usepackage{tikz}%(これで、pgfとpgfforが読み込まれます。)

PGFはデフォルトではdvipsを使用する設定になっていますが、dvipdfm(x)、pdftexなどもサポートされています。~
graphicxを使用しない場合は、以下のいずれかをtikz(またはpgf)パッケージを読み込む前に記述します。
 \def\pgfsysdriver{pgfsys-dvipdfmx.def}%dvipdfmの場合はxなし
 \def\pgfsysdriver{pgfsys-dvips.def}%デフォルト
 \def\pgfsysdriver{pgfsys-pdftex.def}%最も高機能
その他の出力形式については、付属のマニュアルを参照してください。


**マニュアルについて [#x910ebfe]

PGF/TikZには700ページ以上の長大なマニュアル(ver 2.10)が付属し、その前半には70ページにも及ぶチュートリアルがあるので、学習を始めるのは比較的容易です。

ところが、示されているコードには必要なライブラリの読み込み指示が徹底されていないなどの不備があり、マニュアルにある例をコピー&ペーストしてもエラーが出て動作しないことがあります。

たとえば、チュートリアルのp.32にある「パスの交錯」のセクションでは、説明の本文には「intersections ライブラリ」について言及されているものの、例にはその設定が記述されていないため、そのままではエラーが出ます。プリアンブルに~
 \usetikzlibrary{intersections}
と設定しておく必要があります。

また、初期設定ではexamplefillという色は定義されていません。マニュアルの例をそのまま写して試したい場合は、以下をプリアンブルにあらかじめ定義しておいた方がよいでしょう。~
 \colorlet{examplefill}{yellow!80!black}(プリアンブルでも本文の中でも環境中でもかまいません)

仕様の改訂とともにマニュアルはアップデートされていますが、前半のチュートリアルなどには以前の仕様の書式が用いられていることがあります。(たとえば円を描く書式。)

*基本的な用法 [#qa925ba8]

**基本的な使い方 [#oee3a550]
インライン形式で図を本文の一部に入れるときは
 \tikz 1行コマンド;
とします。
コマンドの終了は「;」(セミコロン)です。

独立した環境の中に複雑な(複数の)コマンドを記す場合は
 \begin{tikzpicture}[オプション]
   コマンド;
   コマンド;
	…;
 \end{tikzpicture}
とします。
各コマンドは「;」(セミコロン)で終了します。

-コマンドの書式
--コマンド中の空白(半角スペース)は無視される
--各コマンドのオプションは ''[オプション]'' で示し、複数のオプションはコンマで区切る
--オプションはコマンドのどこにおいてもよく、矛盾するオプションは最後のものが有効になる
--「%」以降はコメントと見なされる
-scopeの設定
--tikzpicture環境の中で、''\begin{scope}…\end{scope}''で挟むとlocalな環境を作る
--scopeの中で設定したオプションは、scopeの外の環境に影響を及ぼさない
-座標指定の基礎
--''(x,y)'' とすると、xy平面(デカルト平面)上の座標を表す(基本単位は1cm)
--''(θ:r)'' とすると極座標(円座標)形式の座標表示となり、θが偏角(右方向が0で、-360から720まで)で r が原点(基準点)からの距離を示す(基本単位は1cm)
- 線画の指定…\draw と \fill の基本
-- \draw は \path[draw] の短縮形で、線を描く(線の太さ ultra thin (0.1pt) 〜 ultra thick (1.6pt)、色指定も可能)
--- オプションに''[->]''とつけると「終点に矢印」、''[<-]''とつけると「始点に矢印」となる
-- \fillは \path[fill] の短縮形で、描かれた図形の内側を塗る(色・透明度の指定も可能)''例:[red, opacity=.5]''
-- \filldraw は \path[fill, draw] の短縮形で、パス自身の色と内側の色をそれぞれ別に指定できる ''例:[fill=cyan, draw=blue]''
-描画順
--記述された順番に描画される

**PGF/TikZの拡張 [#i2fd58ae]
***ライブラリの読み込み [#p4b035b0]
PGF/TIkZ は初期設定の段階でも高い描画力がありますが、付属のライブラリを読み込むことでさらに多彩な表現力を得ます。ライブラリには、たとえば交点を求める intersections、座標計算をする calc、矢印の種類を増やす arrows、パスを飾る decorations などがあります。
ライブラリを用いるときは、tikzパッケージを読み込んだ後で~
 \usetikzlibrary{intersections, calc}
などとします。

***色指定の方法 [#s90394a7]
pgfパッケージは内部で[[xcolor:http://www.ring.gr.jp/pub/text/CTAN/help/Catalogue/entries/xcolor.html]]パッケージを読み込みますので、以下の色名が使用可能です。

red、green、blue、cyan、magenta、yellow、black、gray、white、darkgray、lightgray、brown、lime、olive、orange、pink、purple、teal、violet

PGF/TikZでの色指定は基本的にxcolorの形式を踏襲しますので、色指定の際に複数の色をブレンドしたものを使用することができます。たとえば、red!30!gray は「30%の red+70%の gray」の意味します。単に red!30 とした場合は、white とのブレンドと解釈されます。3色以上のブレンドも可能です。

新しい色を新規に定義するときは、以下の書式で定義します。(pgfとは独立したxcolorパッケージに基づくので、tikzpicture環境以外でも使用可能です。)
 \colorlet{NewColor}{red!30!gray}

デフォルトで使える色名は19色ですが、dvipsnames オプションを用いると使える色名が68色増えます。(svgnamesオプションを用いると色名が151色、x11namesを用いると色名が317色増えます。詳細はxcolorのマニュアルを参照してください。)
このオプションを使用したい場合は、xcolorパッケージをオプションつきで読み込むか、あるいはプリアンブルに以下を記述します。~
 \PassOptionsToPackage{dvipsnames}{xcolor}%tikzパッケージよりも前に読み込みます。

**簡単な図形描画の例 [#c4bd1edb]
 \documentclass{jsarticle}
 \usepackage[dvipdfmx]{graphicx}
 % \def\pgfsysdriver{pgfsys-dvipdfmx.def}%(graphicxパッケージを使用しない場合)
 \usepackage{tikz}
 \begin{document}
 \begin{tikzpicture}
 \draw [help lines] (0,0) grid (10,4);%(0,0)から(10,4)までの"細線の方眼"
 
%%直線の例
 \draw (0,0) -- (2,1)  [rounded corners]--(2,2) -- (0,2) [sharp corners] --  (0,1)-- (1,1);
	%点(0,0), (2,1), (2,2), (0,2), (0,1), (1,1)を結ぶ"線分"で、(2,2)と(0,2)では"滑らか"
 \draw [orange, thick] (1,2.5) -- ++(35:2cm);
	%(1,2.5)を始点として35°の方向に2cmの"オレンジ色の太い線分"
 \draw [very thick] (0,3) rectangle (1.5,4);
	%(0,3)を左下、(1.5,4)を右上とする"極太の長方形"
 \draw (1.5,0) -| (2.5,1.5);
	%(2,0)と(3,1.5)をまっすぐ結ばずに"横線と縦線のみで結ぶ"

%%円、楕円、扇形
 \draw [red, thick] (3,3) circle (1);
	%(3,3)を中心とする半径1の"赤い太線の円"(古い書式で、現在は非推奨)
 \fill [green!80] (4,3) circle [x radius=1cm, y radius=5mm, rotate=30];
	%中心(4,3)、横1cm、縦5mmの"楕円を30°傾け緑80%で塗った図形"(推奨されている新しい円の書式)
 \filldraw [fill=blue, opacity=.5, draw=indigo] (5,0)  arc (0:45:2) --(3,0)--cycle;
	%(5,0)を出発点に半径2の弧を0°から45°まで描き、(3,0)を経由して出発点まで線分で戻って囲んだ"透明度50%の青で塗った扇形"

%%放物線、サインカーブ、曲線、ベジェ曲線
 \draw (5,4) parabola bend (7,2) (8,4);
	%(5,4)を始点とし(7,2)を頂点とする放物線と(7,2)を頂点とし(8,4)を終点とする"放物線"
 \draw [thick] (5,1) sin (6,2) cos (7,1) sin (8,0) cos (9,1);
	%(5,1)から始まり、(6,2)、(8,0)を頂点として(9,1)で終わる"太線のサインカーブ"
 \draw [purple, thick] (6,3) to [out=75, in=90] (8,2);
	%(6,3)から75°の角度で出発し、90°の角度で終点(8,3)に至る"紫の太い曲線"
 \draw [ultra thick] (8,1) .. controls (10,2) and (10,3.5) ..(9,4);
 	%始点(8,1)、終点(9,4)で方向点がそれぞれ(10,2)と(10,3)である"超極太の3次ベジェ曲線"
 \draw [->, very thin]	(8,1) -- (10,2); \draw[<-, very thin] (10,3.5) -- (9,4);
	%上のベジェ曲線の"→つき方向線を示した細線"
 \end{tikzpicture}
 \end{document}

なお、長さの基本単位はデフォルトでは「cm」と見なされます。

上の例の各図形の書式についての簡単な説明(( )とあるのは座標表示、[ ]とあるのはオプション)
+方眼の書式
-- ''方眼''は \draw (左下隅) grid (右上隅);
--- オプションの''[help lines]''によって、方眼がグレーの細線になる
--- さらに[step = 5mm]などとして方眼の間隔を設定できる(デフォルトでは1cm)
+直線の書式
-- ''線分''は \draw (始点) -- (中間点) … -- (終点);
--- 点と点のあいだの''--''は「ハイフン2個」
--- パスを閉じるときは最後に ''-- cycle'' をつける(このオプションで始点に戻ることになる)
--- 滑らかな角にするにはその手前で ''[rounded corners] --'' とする
--- 再び直線的な角にするにはその手前で ''[sharp corners] --'' とする
--- (終点) の座標を''極座標形式 (角度:長さ)''で表現することもでき、''++''をつければ始点からの相対座標となる(なければ絶対座標)
-- ''長方形''は \draw (左下隅) rectangle (右上隅);
-- ''タテ・ヨコだけで結ぶ線''は \draw (始点) ''|-'' (終点); または \draw (始点) ''-|'' (終点);
--- "--"が (始点) と (終点) をまっすぐに結ぶのに対し、''|-''は「始めにタテ、次にヨコ」で2点を結び、''-|''は「始めにヨコ、次にタテ」で2点を結ぶ
+円、楕円、弧(扇形)の書式
-- ''円''は \draw (中心) circle [radius=r];
---古い仕様では、半径を(r)とつけることになっていたが、可読性の観点から座標以外を( )で囲むことは現在は推奨されていない
---座標上の「点」を黒丸で示すときには旧形式の表記がよく用いられる(\fill (中心) circle (2pt);)
-- ''楕円''は \draw (中心) circle [x radius = x方向の径, y radius = y方向の径, rotate = 回転角];
---回転角はラジアン(弧度法)ではなく、''度数法''(1回転が360度となるもの)で表す
-- ''弧''は \draw (始点) arc [start angle = 始点の角度, end angle = 終点の角度, radius = 半径];
---角度はラジアン(弧度法)ではなく、''度数法''(1回転が360度となるもの)で表す
--- 略式では \draw (始点) arc (始点の角度:終点の角度:半径); とすることもできる
--- 始点の角度または終点の角度の一方の代わりに ''delta angle = 中心角'' を設定することもできる
--- ''radius'' の代わりに ''x radius'' と ''y radius'' に異なった長さを設定すれば楕円の弧の一部になる
+放物線、サインカーブ、曲線、ベジェ曲線の書式
-- ''放物線''は \draw (始点) parabola bend (頂点) (終点);
--- ただし、上の式は''「始点から頂点までの放物線」''と''「頂点から終点までの放物線」''を表し、必ずしも3点を通る1つの放物線になるとは限らない(同一放物線にするには、適切な座標を記述者自身が与えなくてはならない)
--- \draw (始点) parabola (終点); と2点のみを与えた場合は始点が頂点、\draw (始点) parabola [bend at end] (終点)とした場合は終点が頂点になる
--- \draw (始点) parabola [parabola height = 高さ] +(幅,0);
-- ''サインカーブ''は \draw (始点) sin (頂点); または \draw (頂点) cos (終点);
--- ''sin''を用いれば「原点から頂点まで」の1/4周期を描き、''cos''を用いれば「頂点から原点まで」の1/4周期を描く(いずれも[0, π/2]の範囲ということ)
--- 三角関数の1周期分を記述するには、sin と cos を適切に組み合わせる
--- sin および cos で描かれるのは三角関数の1/4周期分のみ
-- 曲線として \draw (始点) to [out = 始点から出る角度, in = 終点に入る角度] (終点);
--- 2点の「出」と「入り」の角度を指定し、滑らかな曲線でつなぐ
--- [out = ○, in = ○] というオプションがなければ、上式は \draw (始点) -- (終点); に等しい
-- ''ベジェ曲線''は \draw (始点) .. controls (方向点1) and (方向点2) .. (終点);
--- 3次のベジェ曲線になる
--- 方向点2を省略すると、方向点2と終点が一致していると見なされて描画される

**スタイルの設定 [#vc8500e0]
同じオプションを繰り返し用いたい場合、自分でスタイルを定義することができます。globalに用いたい場合は、プリアンブルでスタイル名を定義します。~
 \tikzset{ スタイル名/ .style={各種オプションの設定}}
環境の中でのみ用いる場合は、環境の冒頭で以下のように定義します。~
 [ スタイル名/ .style={各種オプションの設定}]
複数のスタイルを定義する場合は、1つの[  ]の中で、各スタイルを「,」(コンマ)で区切って定義します。

デフォルト値を設定した上で、パラメーターを用いてその都度変えられるようにも設定できます。~
 \begin{tikzpicture}
 [new grid/.style ={help lines,color=#1!50},%パラメーター#1を設定
 new grid/.default=blue]         %パラメーターのデフォルト値
 \draw[new grid] (0,0) grid (1.5,2);%青50%の方眼(デフォルト値)
 \draw[new grid=red] (2,0) grid (3.5,2);%赤50%の方眼
 \end{tikzpicture}

//every node/ .styleなど

**点、そして交点の設定 [#e28f8154]
***点や線の「設定」「命名」「ラベル」 [#m96085cf]
点(ノード)に名前を付け、ラベルを設定することができます。

coordinate は座標を設定するだけですが、node でそれにラベルを設定します。node が設定するラベルは、オプションで「少しずらす」ことができます。below, above, right, left が使用可能で、below=2mmなどと細かく指定することもできます。

なお、node はそれ自体に大きさがあり、形も指定できます。位置をずらすオプションをつけると、指定された座標には node の端点が置かれるので、\coordinate と \node は別の場所を指すことになります。~
 \begin{tikzpicture}
 \draw [help lines] (0,0) grid (3.5,2.5);%(0,0)から(3.5,2.5)までの"細線の方眼"
 \coordinate (O) at (0,0) node at (O) [left] {$O$}; %(0,0)に点Oを設定し、その左に$O$と記載する
 \coordinate (A) at (2,1) node at (A) [above left] {$A$}; %(2,1)に点Aを設定し、その右上に$A$と記載する
 \node (B) at (2,1) [below right] {$B$}; %(2,1) の右下にノードBを設定し、$B$と記載する
 \node (C) [rectangle, draw] at (2,2) {C}; %(2,2)に四角のノードCを設定する
 \draw (O) -- (A); %線分OAを描く
 \draw [->] (O)--(B); %矢印OBを描く(Bは(2,1)の右下にあることに注目)
 \draw (O)--(C); %OからCまで線を描く
 \fill (O) circle (2pt); \fill (A) circle (2pt); %点O,Aに黒丸をつける
 \end{tikzpicture}

//+, ++について

***直行する2つの直線の交点 [#o7fb6e19]
2点P、Qがあるとして、Pを通る垂直な線とQを通る水平な線との交点は~
 ((Pの座標) |- (Qの座標))
で示されます。~
同様に、Pを通る水平な線とQを通る垂直な線との交点は~
 ((Pの座標) -| (Qの座標))
となります。

 \begin{tikzpicture}
 \draw [help lines] (0,0) grid (4.5,3.5);%(0,0)から(4.5,3.5)までの"細線の方眼"
 \coordinate (O) at (0,0) node [below] at (O) {O};
 \coordinate (A) at (3,0) node [below]at (A) {A};
 \coordinate (B) at (1,2) node [above right] at (B) {B};

 \fill [red] (A -| B) circle (2pt) node [above] {A{\verb\-|\}Bの点};
 \fill [blue] (A |- B) circle (2pt) node [above] {A{\verb\|-\}Bの点};
 \fill (O) circle (2pt);
 \fill (A) circle (2pt);
 \fill (B) circle (2pt);
 \end{tikzpicture}

***任意のパスの交点 [#a5e018c3]
intersectionsライブラリを読み込んでおく必要があります。ライブラリの読み込みは、tikzパッケージを読み込んだ後で~
 \usetikzlibrary{intersections}
とします。

[name path=○○]で2つの図形に名前を付け、[name intersections={of=○○ and ○○}]で交点を設定します。
交点の名前は、デフォルトでは intersection-n(n は1,2,3,…)という名前が順に付けられますが、name intersections オプションに by={○,□,…} とリストを与えて設定することもできます。(交点の総数はオプションで得られるので、後述のforeachと組み合わせて全交点にそれぞれラベルを付けることもできます。マニュアル参照。)

以下の1つ目の例では、やや傾いた長方形(rectangle)と楕円(ellipse)の交点が半透明な赤い点で示されます。~
2つ目の例では、2曲線の交点を順に3つ a, b, c と名前を付けて、ラベルを付けてます。~
 \documentclass{jsarticle}
 \usepackage[dvipdfmx]{graphicx}
 \usepackage{tikz}
 \usetikzlibrary{intersections, calc}
 \begin{document}
 \begin{tikzpicture}[every node/.style={opacity=1, black}]
%1つ目の図
 \begin{scope}
 \draw [help lines] grid (3,2);
 \draw [name path=rectangle, rotate=10] (0.5,0.5) rectangle +(2,1);
 \draw [name path=ellipse] (2,0.5) ellipse (0.75cm and 1cm);
 \fill [red, opacity=0.5, name intersections={of=rectangle and ellipse}]
 (intersection-1) circle (2pt) node [above right] {1} %第1の交点
 (intersection-2) circle (2pt) node [below right] {2};%第2の交点
 \end{scope}
%ここから2つ目の図
 \begin{scope}[xshift=5cm]
 \clip (-2,-2) rectangle (2,2);
 \draw [name path=curve 1] (-2,-1) .. controls (8, -1) and (-8, 1) .. (2,1);
 \draw [name path=curve 2] (-1,-2) .. controls (-1,8) and (1, -8) .. (1,2);
 \fill [red, opacity=0.5, name intersections={of= curve 1 and curve 2, by={a, b, c}}]
 (a) circle (2pt) node [above left] at (a) {a}
 (b) circle (2pt) node [above right] at (b) {b}
 (c) circle (2pt) node [below left] at (c) {c};
 \end{scope}
 \end{tikzpicture}


***計算による座標設定 [#q72ed49f]
calcライブラリを読み込むことで、簡単な座標計算ができます。

+座標の四則演算~
座標をk倍したり、x座標、y座標に増減を加えることができます。~
 ($k*(座標) + (x,y)$)
+線分の内分~
線分ABを t:1-t (0<t<1) で内分した点の座標は以下のようになります。~
 ($(Aの座標)!t!(Bの座標)$)
tに負の数字または1より大きい数字を指定することも可能で、このときは外分点になります。
+線分を回転してから内分~
線分ABをα°回転させてから u:1-u で内分した点の座標は、以下で求められます。~
 ($(Aの座標)!u!α:(Bの座標)$) 
αに 90 を指定すれば、Aを通りABに垂直な線上の点を指定することになります。
+内分点を距離で指定~
線分AB上で、Aからの距離が 1cm の点の座標は以下の計算で求まります。~
 ($(Aの座標)!1cm!(Bの座標)$) 
回転させたときも同様で、線分ABをAの周りにα°回転させ、Aからの距離が1cmの点の座標は以下のようになります。~
 ($(Aの座標)!1cm!α:(Bの座標)$)
+線分に垂線を下ろす~
点Pから線分ABに垂線を下ろした足の座標は、以下のようになります。~
 ($(Aの座標)!(Pの座標)!(Bの座標)$)

三角形の重心と垂心を求める例。~
 \documentclass{jsarticle}
 \usepackage[dvipdfmx]{graphicx}
 \usepackage{tikz}
 \usetikzlibrary{intersections, calc}
 \begin{document}
 \begin{tikzpicture}
 \begin{scope}%△OABの重心を求める
 \draw [help lines] (0,0) grid (4.5,3.5);%(0,0)から(4.5,3.5)までの"細線の方眼"
%△OABの頂点を設定
 \coordinate (O) at (0,0) node [below] at (O) {O};
 \coordinate (A) at (4,0) node [below]at (A) {A};
 \coordinate (B) at (3,3) node [above right] at (B) {B};
%各辺の中点を計算
 \coordinate (C) at ($(O)!.5!(A)$) node at (C) [below]  {C};%OAの中点
 \coordinate (D) at ($(A)!.5!(B)$) node at (D) [above right]  {D};%ABの中点
 \coordinate (E) at ($(B)!.5!(O)$) node at (E) [above left]  {E};%BOの中点
%線分を引く
 \draw (O)--(A)--(B)--cycle;
 \draw [red] (O)--(D) [name path=line 1];
 \draw [blue] (A)--(E) [name path=line 2];
 \draw [green] (B)--(C);
%各点に黒丸をつける
 \fill (O) circle (2pt);
 \fill (A) circle (2pt);
 \fill (B) circle (2pt);
 \fill (C) circle (2pt);
 \fill (D) circle (2pt);
 \fill (E) circle (2pt);
 \fill [name intersections={of=line 1 and line 2}] (intersection-1) circle (2pt) node [above] {重心};
 \end{scope}
 %
 \begin{scope}[xshift=5cm]%△OABの垂心を求める
 \draw [help lines] (0,0) grid (4.5,3.5);%(0,0)から(4.5,3.5)までの"細線の方眼" 
%三角形の頂点を設定
 \coordinate (O) at (0,0) node [below] at (O) {O};
 \coordinate (A) at (4,0) node [below] at (A) {A};
 \coordinate (B) at (3,3) node [above right] at (B) {B};
%各頂点からの垂線の足を計算
 \coordinate (C) at ($(O)!(B)!(A)$) node at (C) [below] {C};%BからOAに下ろした垂線の足
 \coordinate (D) at ($(A)!(O)!(B)$) node at (D) [right] {D};%OからABに下ろした垂線の足
 \coordinate (E) at ($(O)!(A)!(B)$) node at (E) [above left] {E};%AからOBに下ろした垂線の足
%線分を引く
 \draw (O)--(A)--(B)--cycle;
 \draw [red] (O)--(D);
 \draw [name path=line 1, green] (B)--(C);
 \draw [name path=line 2, blue] (A)--(E);
%各点に黒丸をつける
 \fill (O) circle (2pt);
 \fill (A) circle (2pt);
 \fill (B) circle (2pt);
 \fill (C) circle (2pt);
 \fill (D) circle (2pt);
 \fill (E) circle (2pt);
 \fill [name intersections={of=line 1 and line 2}] (intersection-1) circle (2pt) node [below left] {垂心};
 \end{scope}
 \end{tikzpicture}
 \end{document}

**繰り返し処理、変数 [#a177336d]
繰り返し処理は、\foreachおよび\breakforeachで実行します。これは、tikzパッケージが読み込む pgffor パッケージの中で定義されているもので、pgfとは独立に用いることもできます。

*TikZ 対応エディタ [#ta16acba]

-[[KtikZ/QtikZ:http://www.hackenberger.at/blog/ktikz-editor-for-the-tikz-language/]]
-[[Texmaker]]
-[[GeoGebra:http://www.geogebra.org/cms/ja]]
-[[TikZiT:http://tikzit.sourceforge.net/]]
-[[Jpdgdraw:http://www.dickimaw-books.com/apps/jpgfdraw/]]
-[[Sketch -- A 3D Scene Description Translator:http://www.frontiernet.net/~eugene.ressler/]]
-[[ePiX:http://mathcs.holycross.edu/~ahwang/epix/ePiX.html]]

*関連リンク [#rdbc5335]
**PGF/TikZを利用・拡張するもの [#e2a3bdfe]
-[[Beamer]]
-[[PGFPlots:http://pgfplots.sourceforge.net/]]
--[[Pgfplot - ConTeXt wiki:http://wiki.contextgarden.net/Pgfplot]]
- [[Altermundus.com:http://altermundus.com/index.html]]
--PGF/TikZをベースにしたtkz-base、tkz-euclideパッケージなどの紹介
-[[tikzDevice: A Device for R Graphics Output in PGF/TikZ Format:http://cran.r-project.org/web/packages/tikzDevice/index.html]]
--マニュアルは[[こちら:http://cran.r-project.org/web/packages/tikzDevice/vignettes/tikzDevice.pdf]]

**使用例や解説 [#d081bd28]
-[[TeXample.net:http://www.texample.net/]]
--[[TikZ and PGF examples:http://www.texample.net/tikz/examples/]]
-[[TeX 言語以外でドラゴン曲線を描く件について:http://d.hatena.ne.jp/zrbabbler/20120106/1325853453]]
-[[TeX で花火を打ち上げる方法を教えてください。:http://d.hatena.ne.jp/zrbabbler/20120104/1325661695]]
-[[Newest &#39;tikz-pgf&#39; Questions - TeX - LaTeX - Stack Exchange:http://tex.stackexchange.com/questions/tagged/tikz-pgf]]
--[[How can we display fireworks?:http://tex.stackexchange.com/questions/39485/how-can-we-display-fireworks]]
--[[How to draw nanotubes with TeX?:http://tex.stackexchange.com/questions/54341/how-to-draw-nanotubes-with-tex]]
-[[TikZを使う:http://blogs.yahoo.co.jp/igproj_fusion/14008346.html]]
-[[いわにぃのブログ : TikZ:http://blog.livedoor.jp/ti5942/tag/TikZ]], [[いわにぃのブログ : PGF/TikZ:http://blog.livedoor.jp/ti5942/archives/cat_131138.html]]
-[[Software Design Laboratory &raquo; TeX macros:http://softcream.oka-pu.ac.jp/tex-macros/]]
--TikZ/PGFを利用して、構文解析器のXML出力から構文木を自動描画したり、2変数2次関数の等高線を描画するマクロなど。
- [[Fibonacci 数列で TikZ してみた:http://d.hatena.ne.jp/munepi/20120425/PGFandTikZ]]
-- [[TikZ(+expl3)を用いてフィボナッチ数列:http://d.hatena.ne.jp/abenori/20120425]]
- [[Graphics with PGF and TikZ:http://www.tug.org/pracjourn/2007-1/mertz/]]
--PracTeX journal(2007-1)の記事で、代表的な用法をシンプルに紹介