1 / 10 基本的な用法 TeX Wiki から抜粋 ( 最後に LINK あり ) 基本的な使い方 インライン形式で図を本文の一部に入れるときは \tikz 1 行コマンド ; とします コマンドの終了は ; ( セミコロン ) です 独立した環境の中に複雑な ( 複数の ) コマンドを記す場合は [ 環境オプション ] コマンド ; コマンド ; ; とします 各コマンドは ; ( セミコロン ) で終了します コマンドの書式 コマンド中の空白 ( 半角スペース ) は無視される各コマンドのオプションは [ オプション ] で示し, 複数のオプションはコンマで区切るオプションはコマンドのどこにおいてもよく, 矛盾するオプションは最後のものが有効になる % 以降はコメントと見なされる scope の設定 tikzpicture 環境の中で,\begin{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), 色指定も可能 ) \draw[->] \path[draw, ->] 終点 / 始点 / 両端に矢印, 二重矢印,latex 風矢印, ステルス機風矢印 [->]/[<-]/[<->]/[->>]/[>=latex]/[>=stealth] \fill \path[fill] 描かれた図形の内側を塗る ( 色 透明度の指定も可能 ) 例 :[red, opacity=.5] \filldraw \path[fill, draw] パス自身の色と内側の色をそれぞれ別に指定する 例 :[fill=cyan, draw=blue] 描画順 記述された順番に描画される環境オプション座標系を p 倍に拡大縮小するときは [scale = p] とする 縦横の縮小率をそれぞれ指定するときは [xscale = p, yscale = q] とする このとき拡大縮小されるのは座標系だけで, 線の太さや文字の大きさは変化しない文字や線の太さも含めて拡大縮小したいときは transform shape を追加して [scale = p, transform shape] とすればよいが, すべての要素が適切に拡大縮小されるとは限らない (tikz の作者は画像の拡大縮小は推奨していない ) tikzpicture 環境全体を拡大縮小する別の方法として, 全体を \scalebox で囲うやり方もある ( 縦の倍率は省略可能 ) \scalebox{ 横の倍率 }[ 縦の倍率 ]{... } TikZ/PGF の拡張 ライブラリの読み込み TikZ/PGF は初期設定の段階でも高い描画力がありますが, 付属のライブラリを読み込むことでさらに多彩な表現力を得ます ライブラリには, たとえば背景パターンを塗る patterns, 交点を求める intersections, 座標計算をする calc, 矢印の種類を増やす arrows, パスを飾る decorations, 角度記号を描く angles などがあります ライブラリを用いるときは,tikz パッケージを読み込んだ後で \usetikzlibrary{intersections, calc} などとします 色指定の方法
2 / 10 pgf パッケージは内部で xcolor パッケージを読み込みますので, 以下の色名が使用可能です red,green,blue,cyan,magenta,yellow,black,gray,white,darkgray,lightgray,brown,lime,olive,orange,pink,purple,teal,violet TikZ/PGF での色指定は基本的に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 パッケージよりも前に読み込みます 簡単な図形描画の例 \documentclass{jsarticle} \usepackage[dvipdfmx]{graphicx} % \def\pgfsysdriver{pgfsys-dvipdfmx.def}%(graphicx パッケージを使用しない場合 ) \usepackage[dvipdfmx,svgnames]{xcolor}%tikz パッケージよりも前に読み込みます \usepackage{tikz} \begin{document} \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 [purple, thin, bend right = 30] (6,3) to (8,2); %2 点 (6,3) と (8,2) を結ぶ " 右に膨らんだ紫の細い曲線 "(30 の角度で始点を出発し,150 の角度で終点に至る ) \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); % 上のベジェ曲線の " つき方向線を示した細線 " %% 関数による描画 ( マニュアル p.329 の例 ) [domain=0:4]% グラフの描画領域は 0 x 4 \draw[very thin,color=gray] (-0.1,-1.1) grid (3.9,3.9); \draw[->] (-0.2,0) -- (4.2,0) node[right] {$x$};% 横軸 (x 軸 ) \draw[->] (0,-1.2) -- (0,4.2) node[above] {$f(x)$};% 縦軸 \draw[color=red] plot (\x,\x) node[right] {$f(x) =x$}; % 一次関数 y=x の赤線 % \x r means to convert '\x' from degrees to _r_adians: \draw[color=blue] plot (\x,{sin(\x r)}) node[right] {$f(x) = \sin x$}; % 三角関数 y=sin x の青線 ( 度数表記 ラジアンに変換 ) \draw[color=orange] plot (\x,{0.05*exp(\x)}) node[right] {$f(x) = \frac{1}{20} \mathrm e^x$};
3 / 10 % 指数関数 y=0.05e^x のオレンジの線 \end{document} なお, 長さの基本単位はデフォルトでは cm と見なされます 上の例の各図形の書式についての簡単な説明 (( ) とあるのは座標表示,[ ] とあるのはオプション ) 1. 方眼の書式方眼は \draw ( 左下隅 ) grid ( 右上隅 ); オプションの [help lines] によって, 方眼がグレーの細線になるさらに [step = 5mm] などとして方眼の間隔を設定できる ( デフォルトでは1cm) 2. 直線の書式線分は \draw ( 始点 ) -- ( 中間点 ) -- ( 終点 ); 点と点のあいだの--は ハイフン2 個 パスを閉じるときは最後に -- cycle をつける ( このオプションで始点に戻ることになる ) 滑らかな角にするにはその手前で [rounded corners] -- とする再び直線的な角にするにはその手前で [sharp corners] -- とする ( 終点 ) の座標を極座標形式 ( 角度 : 長さ ) で表現することもでき,++ をつければ始点からの相対座標となる ( なければ絶対座標 ) 長方形は \draw ( 左下隅 ) rectangle ( 右上隅 ); タテ ヨコだけで結ぶ線は \draw ( 始点 ) - ( 終点 ); または \draw ( 始点 ) - ( 終点 ); "--" が ( 始点 ) と ( 終点 ) をまっすぐに結ぶのに対し, -は 始めにタテ, 次にヨコ で2 点を結び,- は 始めにヨコ, 次にタテ で2 点を結ぶ 3. 円, 楕円, 弧 ( 扇形 ) の書式円は \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 に異なった長さを設定すれば楕円の弧の一部になる 4. 放物線, サインカーブ, 曲線, ベジェ曲線の書式放物線は \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 ( 始点 ) -- ( 終点 ); に等しい [bend 方向 (= 角度 ), distance = 距離 ] というオプションで2 点間を緩やかに膨らんだ曲線で結ぶ方向は ( 進行方向に対して ) left または right 角度を指定すると [out = 角度, in = 180 - 角度 ] を意味する角度を省略すると, 以前の数値が機械的に使われる distance で膨らみ具合を調整できる ( ベジェ曲線の controls の距離を調整している ) ベジェ曲線は \draw ( 始点 ).. controls ( 方向点 1) and ( 方向点 2).. ( 終点 ); 3 次のベジェ曲線になる方向点 2を省略すると, 方向点 2と終点が一致していると見なされて描画される 5. 関数による描画座標指定の y 座標が x 座標 (\x) の関数になるように記述するデフォルトの変数は \x だが, オプションで variable = \t などとすれば変えられる変域のデフォルトは [-5:5] だが, オプションで domain = <start>:<end> と指定できる必要に応じて中括弧 ({, }) を使用するここでは PGF (TikZ) の計算機能を利用している (gnuplot などの外部エンジンの利用も可能 ) 使用可能な PGF の計算機能についてはマニュアルの第 89 章 Mathematical Expressions を参照 スタイルの設定 同じオプションを繰り返し用いたい場合, 自分でスタイルを定義することができます global に用いたい場合は, プリアンブルでスタイル名を定義します
4 / 10 \tikzset{ スタイル名 /.style={ 各種オプションの設定 }} 環境の中でのみ用いる場合は, 環境の冒頭で以下のように定義します [ スタイル名 /.style={ 各種オプションの設定 }] 複数のスタイルを定義する場合は,1 つの [ ] の中で, 各スタイルを, ( コンマ ) で区切って定義します デフォルト値を設定した上で, パラメーターを用いてその都度変えられるようにも設定できます [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% の方眼 点, そして交点の設定 点や線の 設定 命名 ラベル 点 ( ノード ) に名前を付け, ラベルを設定することができます \coordinate は \path coordinate の短縮形で,\node は \path node の短縮形です 点を設定するだけのときは以下のように用います ( 点の名前 ) や ( 座標 ) の順番は問いません \coordinate ( 点の名前 ) at ( 座標 ); \node [ オプション ] ( 点の名前 ) at ( 座標 ) { ラベル }; % すでに設定された点の名前を ( 座標 ) の位置に置くことができます \draw や \fill など, パスを描いている途中で点やラベルを設定するときは, \ から ; までのあいだに coordinate または node を記述します ( このとき \ を改めてつける必要はありません ) ( 座標 ) は node が設定された時点での座標が自動的に適用され, at ( 座標 ) は省略できます coordinate は座標を設定するだけですが,node は設定した座標にラベルを設定します node が設定するラベルはデフォルトでは ( 座標 ) の真上に置かれますが, オプションで 少しずらす ことができます above, below, right, left が使用可能で,below=2mm などと細かく指定することもできます node はそれ自体に大きさがあり, 色や形も指定できます \node に位置をずらすオプションをつけると, 指定された座標には node の端点が置かれることになり,node 自体の座標は \coordinate で座標を指定した場合とは少しズレます なお,coordinate とは実際には 大きさゼロでラベルが空白の node のことです node の主なオプション [ オプション ] をつける位置は, パスの中では自由です 位置 (2 種類の指定方法 ) above, below, right, left および above left のように 上下 + 左右 を組み合わせたもの設定された ( 座標 ) に対して,node( ラベル ) がどの位置に置かれるかを示す [anchor=north] など東西南北および north westのように north/south + east/west を組み合わせたもの [anchor= 東西南北 ] で指定された方向の node の端点が指定された ( 座標 ) に置かれる 形状 circle, rectangle, coordinate の3 種が設定可能 ( デフォルトは rectangle, ライブラリで拡張可能 ) [draw] をつけると輪郭が描かれる [inner sep= ] で node 内のラベルと外枠とのあいだの距離を設定 ( デフォルトは.3333em) node 自体に大きさがあるため,node を端点とした線は node の輪郭までとなる 色指定 [(color=) 色指定 ] でノード全体の色を設定 ( デフォルトでは先に指定された色指定を引き継ぐ ) [text= 色指定 ] でテキストの色だけを指定することができる [fill= 色指定 ] で node 内を塗ることができるラベル [label= 位置 : ラベル ] はラベル専用のノードを指定の位置 ( 上下左右, 東西南北, 角度のいずれか ) に設定する \usetikzlibrary{quotes} を用いると簡略化して [" ラベル "] と指定できる (3.0.0からの新機能) このオプションを用いることで, ノードを指定座標に置きつつラベルをずらして配置できる [pin= 位置 : ラベル ] は, ノードとラベルのあいだを線で結ぶ ( 線の太さはデフォルトではhelp line) パス上に位置指定 [pos= ] ( は0 1までの数字 ) を指定するとパスの端点ではなく, パス上の相対的な位置にノードを設定する [midway] とすると [pos=0.5] と同じ意味になる その他のオプションとして,at start/end, near start/end, very near start/end を指定することもできる ( それぞれ pos=0/1, 0.25/0.75, 0.125/0.875 を表す ) ラベルの向き [sloped] とすると, パスにそって文字が配置される \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$ と記載する
5 / 10 \coordinate (A) at (1,2); %(1,2) に点 A を設定する \node (B) at (2,2) [above] {$B$} ; %(2,2) の上方にノード B を設定し,$B$ と記載する \node (C) [fill=white, draw, text=red, circle] at (3,2) {C}; %(2,2) に白塗りした円形のノード C を設定する \coordinate (D) at (3,1) node at (D) [label=right:d の右横 ] {}; %(D) には 大きさ がなく, その位置に無名のノードが置かれ, 右にラベルがある %\node (D) at (3,1) [label=right:d の右横 ] {}; %(D) には 大きさ をもった無名のノードがおかれ, その右にラベルがある \fill (O) circle (2pt) (A) circle (2pt) (D) circle (2pt); % 点 O,A, D に黒丸をつける (1 つの \fill で複数の点を対象にで \draw (O) -- (A) node [above] {$A$}; % 線分 OA を描き, その上方にノードを設定して $A$ と記載する ( ノード自体は無名 ) \draw [->] (O)--(B); % 矢印 OB を描く (B が (2,2) の上方にあること, ノード B に大きさがあることに注目 ) \draw [->] (O)--(C); % 矢印 OC を描く ( 矢印はノード C の輪郭まで ) \draw (O)--(D);%(D) の設定を \coordinate でしたか \node でしているかで線の長さが異なる 直交する 2 つの直線の交点 2 点 P,Q があるとして,P を通る垂直な線と Q を通る水平な線との交点は ((P の座標 ) - (Q の座標 )) で示されます 同様に,P を通る水平な線と Q を通る垂直な線との交点は ((P の座標 ) - (Q の座標 )) となります \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); 任意のパスの交点 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} [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 の交点 % ここから 2 つ目の図 \begin{scope}[xshift=5cm]
6 / 10 \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{document} 計算による座標設定 ( 例 : 三角形の重心と垂心を求めてみる ) calc ライブラリを読み込むことで, 簡単な座標計算ができます 1. 座標の四則演算座標をk 倍したり,x 座標,y 座標に増減を加えることができます ($k*( 座標 ) + (x,y)$) 2. 線分の内分線分 ABを t:1-t (0<t<1) で内分した点の座標は以下のようになります ($(A の座標 )!t!(b の座標 )$) t に負の数字または 1 より大きい数字を指定することも可能で, このときは外分点になります 3. 線分を回転してから内分線分 ABをα 回転させてから u:1-u で内分した点の座標は, 以下で求められます ($(A の座標 )!u!α:(b の座標 )$) αに 90 を指定すれば,Aを通りABに垂直な線上の点を指定することになります 4. 内分点を距離で指定線分 AB 上で,Aからの距離が 1cm の点の座標は以下の計算で求まります ($(A の座標 )!1cm!(B の座標 )$) 回転させたときも同様で, 線分 AB を A の周りに α 回転させ,A からの距離が 1cm の点の座標は以下のようになります ($(A の座標 )!1cm!α:(B の座標 )$) 5. 線分に垂線を下ろす点 Pから線分 ABに垂線を下ろした足の座標は, 以下のようになります ($(A の座標 )!(P の座標 )!(B の座標 )$) 6. 計算で求めた座標に, さらに計算を続けることができます たとえば, 線分 ABの中点から垂直に1cm 離れた点は以下の計算で求まります ($(A の座標 )!.5!(B の座標 )!1cm!90:(B)$) 三角形の重心と垂心を求める例 \documentclass{jsarticle} \usepackage[dvipdfmx]{graphicx} \usepackage{tikz} \usetikzlibrary{intersections, calc} \begin{document} \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 の中点 % 中点であることを示す \node [circle, draw, inner sep=2pt] at ($(O)!.5!(E)$) {}; \node [circle, draw, inner sep=2pt] at ($(B)!.5!(E)$) {}; \node at ($(A)!.5!(D)$) { }; \node at ($(B)!.5!(D)$) { }; \draw (O) to [out=-20, in=200] (C); \draw (C) to [out=-20, in=200] (A); % 線分を引く \draw (O)--(A)--(B)--cycle;
7 / 10 \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] { 重心 }; % \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); %C,D,E に直角記号をつける \draw ($(C)!5pt!(B)$) - ($(C)!5pt!(A)$); \draw ($(D)!5pt!(O)$)--($(D)!5pt!(O)!5pt!90:(D)$)--($(D)!5pt!(B)$); \draw ($(E)!5pt!(A)$)--($(E)!5pt!(A)!5pt!90:(E)$)--($(E)!5pt!(O)$); % 各点に黒丸をつける \foreach \P in {A,...,E,O} \fill (\P) circle (2pt); \fill [name intersections={of=line 1 and line 2}] (intersection-1) circle (2pt) node [below left] { 垂心 }; \end{document} 角度記号をつける例 \documentclass[dvipdfmx]{jsarticle} \usepackage{graphicx} \usepackage{tikz} \usetikzlibrary{calc, quotes, angles}%quotes は角度のラベルオプション内に記述するために使用 \begin{document} % 直角記号の付け方の例 1(calc ライブラリ必須 ) \draw (20:3cm) coordinate (A) node[right] {A} -- (0,0) coordinate (O) node[below left] {O} -- (110:2cm) coordinate (C) node[above left] {C}; \coordinate (P) at ($(O)!.3cm!(A)!.3cm!90:(A)$);% 直角記号の頂点の設定 \draw[thick, red] ($(O)!(P)!(A)$)--(P); \draw[thick, red] ($(O)!(P)!(C)$)--(P); % 直角記号の付け方の例 2(calc ライブラリ必須 ) \draw (20:3cm) coordinate (A) node[right] {A} -- (0,0) coordinate (O) node[below left] {O} -- (110:2cm) coordinate (C) node[above left] {C}; \draw[thick, red] ($(O)!8pt!(A)$)--($(O)!8pt!(A)!8pt!90:(A)$)--($(O)!8pt!(C)$); % 一般の角度記号の付け方 (3.0.0 以降,angles ライブラリ必須 ) \draw (3,-1) coordinate (A) -- (0,0) coordinate (B) -- (2,2) coordinate (C) pic["$\alpha$",draw=orange, <->, very thick, angle eccentricity=1.2, angle radius=1cm] {angle=a--b--c}; % 線分の長さを示す例 \draw (B).. controls ($(B)!.2!(C)!10pt!90:(C)$) and ($(B)!.8!(C)!10pt!90:(C)$).. (C) node [midway, sloped, fi \draw (A).. controls ($(A)!.2!(B)!10pt!90:(B)$) and ($(A)!.8!(B)!10pt!90:(B)$).. (B) node [midway, sloped, fi \end{document}
8 / 10 2 点間の距離を計算する ( 例 : 三角形の外心と内心を求めてみる ) veclen(x,y) によってベクトル (x,y) の大きさが求められます パスの記述の途中で let を用いると, 数字レジスタ \n, ポイントレジスタ \p, \x, \y が使用可能となります = の左側に置くとそのレジスタに数値または座標が代入されます = の右側に置かれたレジスタは, その中身が展開されます \x, \y はそれぞれ \p の x 成分,y 成分です \path let \p1 =, \n1 = in ( レジスタを含んだ ) コマンド これらを利用すると, 点 A を中心として点 B を通る円は, 以下のように書けます \draw let \p1 = ($(B の座標 ) - (A の座標 )$), % \n1 = {veclen(\x1,\y1)} % ベクトル \p1 の大きさを \n1 に代入 in circle [at=(a の座標 ), radius=\n1]; through ライブラリを \usetikzlibrary{through} で読み込んであれば, 上のような円はもっと簡単に書けます ( 円形のノードの半径を拡大して望む点の座標を通るように設定します ) \node [draw, circle through=(b の座標 )] at (A の座標 ) {}; 三角形の外心と内心を求める例 \documentclass{jsarticle} \usepackage[dvipdfmx]{graphicx} \usepackage{tikz} \usetikzlibrary{intersections, calc, through} \begin{document} \begin{scope}% 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}; \draw (O)--(A)--(B)--cycle; % 各辺の垂直二等分線およびその交点 (= 外心 ) \draw ($(O)!.5!(A)!1cm!90:(O)$)--($(O)!.5!(A)!4cm!90:(A)$) [name path=line 1, red]; \draw ($(A)!.5!(B)!1cm!90:(A)$)--($(A)!.5!(B)!4cm!90:(B)$) [name path=line 2, green]; \draw ($(B)!.5!(O)!1cm!90:(B)$)--($(B)!.5!(O)!4cm!90:(O)$) [name path=line 3, blue]; \fill [name intersections={of=line 1 and line 2}] (intersection-1) circle (2pt) node (P) [label=left: 外心 ] {}; \draw ($(O)!.5!(A)!5pt!(A)$) - ($(O)!.5!(A)!5pt!90:(A)$);% 直角記号 % 各点に黒丸をつける \foreach \P in {O,A,B} \fill (\P) circle (2pt); % 外心円 ( 半径は OP の距離 ) \node [draw, circle through=(o)] at (P) {}; % \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}; \draw (O)--(A)--(B)--cycle; % 各辺上で一定の長さの点を設定する \coordinate (s) at ($(O)!1cm!(A)$); \coordinate (t) at ($(O)!1cm!(B)$); \coordinate (u) at ($(A)!1cm!(O)$); \coordinate (v) at ($(A)!1cm!(B)$); \coordinate (w) at ($(B)!1cm!(O)$); \coordinate (z) at ($(B)!1cm!(A)$); % 内角の二等分線 \draw (O)--($5*(s)!.5!(t)$) [name path=line O, red]; \draw (A)--($(u)!.5!(v)!-4!(A)$) [name path=line A, green]; \draw (B)--($(z)!.5!(w)!-4!(B)$) [name path=line B, blue]; % 角の二等分線の交点 (= 内心 ) \fill [name intersections={of=line O and line B}] (intersection-1) circle (2pt) node (P) [label=left: 内心 ] {}; % 各点に黒丸をつける \foreach \P in {O,A,B} \fill (\P) circle (2pt); % 内心円 ( 半径は P から OA に下ろした垂線の長さ ) \draw let \p1=($(o)!(p)!(a)-(p)$), \n1={veclen(\x1,\y1)} in circle [at=(p), radius=\n1]; \end{document} 繰り返し処理, 変数
9 / 10 繰り返し処理は,\foreachおよび\breakforeachで実行します これは,tikz パッケージが読み込む pgffor パッケージの中で定義されているもので,pgfとは独立に用いることもできます ( つまり tikzpicture 環境以外でも使用可能です ) 繰り返し処理の書式は, 以下のようになります \foreach \ 変数 [ オプション ] in { 変域リスト } {(\ 変数を含む ) コマンド } この式によって,{ 変域リスト } に含まれる要素の数だけ { コマンド } が繰り返され, その度に \ 変数 に { 変域リスト } の各要素が順繰りに代入されたコマンドが実行されます \ 変数 は \x や \y という単独文字だけでなく,\angle のような文字列を使用することもできます ( 日本語も使用可能 ) 変域リスト はコンマ区切りの数字または文字列です ( 日本語も使用可能 ) 変域リスト に名付けられた点列を与えれば, \ 変数 は座標を示します / で区切ることで, 複数の \ 変数 を指定できます 変域リスト 内も同様に区切ります たとえば, 左の式は, それぞれ右のような結果となります \foreach \x in {1, 2, 3, 4} {A-\x, } ( 出力 )A-1, A-2, A-3, A-4, \foreach \angle in {0, 90, 180, 270} {$\cos\angle^\circ$ } ( 出力 )cos 0 cos 90 cos 180 cos 270 \foreach \ 名前 in { 太郎, 次郎, 花子, 桜子 } {\ 名前 { さん },} ( 出力 ) 太郎さん, 次郎さん, 花子さん, 桜子さん, 変数リスト 中の規則的な数字列やアルファベット列は, リストの途中を,, とすることで 良きに計らって 埋めてもらうこともできます {1, 2,, 10} {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} と解釈 {1, 3,, 10} {1, 3, 5, 7, 9} と解釈 {a, b, c, 1, 2,, 6, d, e,..., h} {a, b, c, 1, 2, 3, 4, 5, 6, d, e, f, g, h} と解釈 {a,, e} {a, b, c, d, e} と解釈 {Z, X,, M} {Z, X, V, T, R, P, N} と解釈 基本的な描画例 % 目盛り付き座標軸 \draw[thick, ->] (-1,0) -- (5,0) node [below] {$x$};%x 軸 \draw[thick, ->] (0,-1) -- (0,5) node [left] {$y$};%y 軸 \node at (0,0) [anchor=north east] {O}; \foreach \x in {1,2,3,4} \draw (\x cm,.2) -- (\x cm,0) node[anchor=north] {$\x$}; \foreach \y in {1,2,3,4} \draw (.2,\y cm) -- (0,\y cm) node[anchor=east] {$\y$}; % 時計の例 (2 変数指定の例 ) \draw[very thick] (0,0) circle (2cm);% 時計の外周 \foreach \angle / \label in {0/3, 30/2, 60/1, 90/12, 120/11, 150/10, 180/9, 210/8, 240/7, 270/6, 300/5, 330/4} { \draw (\angle:1.8cm) -- (\angle:2cm); \node at (\angle:1.5cm) {\textsf{\label}}; } \foreach \angle in {0,90,180,270} \draw[thick] (\angle:1.7cm) -- (\angle:2cm); \draw[line width=3pt, cap=round] (0,0) -- (145:0.8cm);% 短針 \draw[line width=3pt, cap=round] (0,0) -- (30:1.2cm);% 長針 % 図画のみの出力 TikZ/PGF で作成した図画を含んだソースファイルから, 図画のみを別ファイルに抽出できます dvips または LuaTeX または pdftex を用いると, ちょうどその画像の大きさの ps ファイルまたは pdf ファイルが得られます dvipdfmx を用いた場合は, コマンドラインから pdfcrop を最後に適用することで画像の大きさちょうどの pdf を得られます ソースコードに追加記述 1. プリアンブルに追加 2. 画像部分に追加オプションをつけてコンパイルする 1. uplatex dvipdfmx pdfcrop 2. uplatex dvips 3. lualatex
10 / 10 ソースコードへの追加記述 1. プリアンプルへの追加プリアンプルに以下のコードを追加します filename は,tex ファイル自体の名前です ( 拡張子の.tex などは含めません ) \pgfrealjobname{filename} 2. 図画部分への追加 tikz 環境の前後に pgf のコマンドを以下のように書き足します filename-fig1 は, それぞれの図画につける任意の名前です \beginpgfgraphicnamed{filename-fig1}... \endpgfgraphicnamed コンパイル ソースコード (tex ファイル ) をコンパイルするときに, 以下のオプションをつけて実行します それぞれの図画に対し,--jobname オプションをつけてコンパイルします なお, 以下の例では拡張子 (.tex など ) をつけてますが, 省略しても各コマンドは よきにはからって くれます $ uplatex --jobname=filename-fig1 filename.tex これで, 図画だけを含んだ filename-fig1.dvi が作成されます 1. dvipdfmx を使用する場合 $ dvipdfmx filename-fig1.dvi $ pdfcrop filename-fig1.pdf これで, 図画の大きさちょうどの pdf ファイルが作成されます 余白を入れるには pdfcrop に --margins オプションを用います 以下の例では, 周囲に 3bp の余白を入れています $ pdfcrop --margins 3 filename-fig1.pdf (4 方向の余白を指定するには < 左 > < 上 > < 右 > < 下 > と指定します 数字を 2 つ指定した場合は < 右 >< 下 > の余白になります ) 2. dvips を使用する場合 $ dvips filename-fig1.dvi これで, 図画の大きさちょうどの ps ファイルが作成されます 3. LuaLaTeX を使用する場合 $ lualatex --jobname=filename-fig1 filename.tex これだけで, 図画の大きさちょうどの pdf ファイル (filename-fig1.pdf) が作成されます トラブルシューティング dvipdfmx での TikZ の patterns ライブラリサポートの不具合とその対処法 forum:1710 [tikz] 破線に添えた分数式の横棒が forum:1020 縦書き (tarticle) で tikz を使おうとするとエラーが出る (qa:56760, qa:56761), A package to make everyshi compatible with tate-mode of ptex. dvipdfmx を使用することによる制約が以前はいくつかありましたが,3.0.0 ではほぼ解消されています LuaTeX, pdftex を使用すれば可能です ( マニュアル p.116 (ver 3.0.0) 以下同) dvipdfmx でパターンは使用可であることをマニュアルのサンプルで確認 (\usetikzlibrary{patterns} は有効 )( マニュアル p.172) dvipdfmx でシェーディングは使用可であることをマニュアルのサンプルで確認 (\usetikzlibrary{shadings,fadings} も有効 )( マニュアル p.175) dvipdfmx で path picture は使用可であることをマニュアルのサンプルで確認 ( マニュアル p.174) dvipdfmx でマスクは使用可であることをマニュアルのサンプルで確認 ( マニュアル p.1068) [remember picture] を dvipdfmx で使用するためには pxpgfmark を読み込む必要があります (TikZ は dvipdfmx をどこまでサポートするか? (2), 数学雑談 LaTeX (TikZ)) dvipdfmx の制約の検証について ( 旧版のTikZ/pgf)TikZ は dvipdfmx をどこまでサポートするか?(1), あなたが知らない ( かもしれない )PGF/TikZの世界 dvipsを使用することによる制約 パスで画像をマスクできない / シェーディングは使用可能だが, 品質は落ちる / 透明度は最近のGhostscriptを必要とする TITLE:TikZ - TeX Wiki DATE:2016 年 3 月 8 日 ( 火 ) URL:https://texwiki.texjp.org/?TikZ