基本図形とパス制御
TikZはLaTeX環境内で宣言的に図形を記述するためのパッケージです。座標系を定義し、直線・直角経路・基本形状を組み合わせることで複雑な構造を描けます。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[thick, ->] (-1,0) -- (6,0) node[right] {$x$};
\draw[thick, ->] (0,-1) -- (0,6) node[above] {$y$};
\draw[red, line width=1.2pt] (1,1) |- (3,2); % 垂直→水平
\draw[blue, line width=1.2pt] (1,1) -| (3,2); % 水平→垂直
\draw[green!60!black] (4,2) circle [radius=0.8];
\draw[orange, thick] (2,4) ellipse [x radius=1.5, y radius=0.6];
\draw[purple] (0.5,3) rectangle (2.5,5);
\draw[cyan] (0,0) -- (1,1 |- 3,2); % 座標交点の自動計算
\draw[brown, dashed] (4,4) -- (5,4.5) -- (5.5,3.5) -- cycle; % 閉じた多角形
\end{tikzpicture}
\end{document}曲線表現と関数プロット
円弧・三角関数・ベジェ曲線は、パラメータ指定や制御点(control points)を用いて柔軟に描画できます。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[magenta, thick] (0,0) arc [start angle=30, end angle=150, radius=2];
\draw[blue, domain=0:3.1415] plot ({\x}, {sin(\x r)}) node[right] {sin};
\draw[red, domain=0:3.1415] plot ({\x+2}, {cos(\x r)}) node[right] {cos};
\draw[green!50!black, ultra thick]
(0,0) .. controls (1.5,3) and (3,3) .. (4,0);
\end{tikzpicture}
\end{document}グリッド・塗りつぶし・パラメトリック描画
背景グリッドの生成、形状の内部塗りつぶし、および数学関数のグラフ化は、描画オプションと `plot` コマンドで実装します。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[step=0.5, gray!30] (-4,-4) grid (4,4);
\draw[->, >=stealth] (-4.5,0) -- (4.5,0);
\draw[->, >=stealth] (0,-4.5) -- (0,4.5);
\draw[thick, cyan, samples=120, domain=-180:180]
plot ({2*cos(\x)}, {1.2*sin(\x)});
\filldraw[fill=yellow!70!orange, draw=blue, line width=1.5pt]
(-1.2,-1.2) rectangle (1.2,1.2);
\end{tikzpicture}
\end{document}座標変換・スタイル・矢印制御
拡大・回転・平行移動・せん断変形はオプションキーワードで適用できます。矢印先端の形状は `arrows.meta` ライブラリで統一設定が可能です。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[>=Latex]
\draw[->] (0,0) -- (2.5,0);
\draw[->>] (3,0.2) -- (5.5,0.2);
\draw[help lines] (0,0) rectangle (1,1);
\draw[rotate=45, scale=0.75] (0,0) rectangle (1,1);
\draw[shift={(3,0)}] (0,0) rectangle (1,1);
\draw[xslant=0.6, shift={(5,0)}] (0,0) rectangle (1,1);
\draw[thick, rounded corners=4mm]
(-1,2) -- (1,2.4) -- (1.8,0.8) -- (0.3,0.4) -- cycle;
\end{tikzpicture}
\end{document}ノード配置とアンカー指定
テキストや形状を囲むノードは、相対位置・アンカー・カスタムスタイルを組み合わせて配置できます。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\node[circle, fill=teal, text=white] (N1) at (0,2) {Node A};
\node[rectangle, draw, minimum width=1.2cm, minimum height=0.8cm]
(N2) [right=1cm of N1] {Box};
\draw (N1.east) -- (N2.north west);
\node[draw, below right=6pt of N2] (N3) {Offset};
\draw[dashed] (0,0) -- (N3.south);
\node[ellipse, draw=gray, fill=lime!30, font=\bfseries] at (4,0) {Styled};
\end{tikzpicture}
\end{document}セグメントと頂点のラベル付け
パスの途中に座標を定義し、その位置にノードを配置することで、図形の幾何学的注釈を付与できます。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw[thick]
(0,0) coordinate (P1) node[left] {$P_1$}
-- node[sloped, above] {Edge $\alpha$}
(3,2) coordinate (P2) node[above right] {$P_2$}
-- node[sloped, below] {Edge $\beta$}
(4,0) coordinate (P3) node[right] {$P_3$}
-- node[left] {Edge $\gamma$} cycle;
\end{tikzpicture}
\end{document}反復処理と条件分岐による描画
`\foreach` ループと TeX の条件分岐を組み合わせることで、アルゴリズム的な図形生成が可能になります。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \r in {1,2,3,4}{
\foreach \c in {1,...,\r}{
\pgfmathparse{Mod(\r+\c,2)==0 ? "green!20" : "red!20"}
\fill[\pgfmathresult, rounded corners=2pt]
(\c, -\r) rectangle ++(0.9,0.9);
\node at (\c+0.45, -\r+0.45) {\tiny $(\r,\c)$};
}
}
\end{tikzpicture}
\end{document}tikzmathによる数値演算と変数管理
`tikzmath` ライブラリを導入すると、内部で変数宣言・関数定義・制御構造を実行し、その結果を外部の描画コマンドに渡せます。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}
\tikzmath{
real \baseVal;
\baseVal = 8;
for \idx in {1,...,5}{
\baseVal = \baseVal * 1.15;
{
\node[circle, draw, fill=blue!15, minimum size=0.7cm]
at (\idx, \baseVal/4) {\idx};
\draw[dotted] (\idx,0) -- (\idx, \baseVal/4);
};
};
}
\draw[->] (-0.5,0) -- (6,0);
\draw[->] (0,-0.5) -- (0,4);
\end{tikzpicture}
\end{document}応用事例:多層ネットワークの自動配置
計算ロジックを `tikzmath` 内に閉じ込め、層ごとのノード数・間隔・接続線を一括生成します。
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}
\tikzmath{
function placeNode(\px,\py,\rcol){
\node[circle, draw=\rcol, fill=white, minimum size=0.6cm] at (\px,\py) {};
};
function linkNodes(\x1,\y1,\x2,\y2){
\draw[gray!60, thick] (\x1,\y1) -- (\x2,\y2);
};
\nInput = 3;
\nHidden1 = 5;
\nHidden2 = 4;
\nOutput = 2;
\xGap = 2.2;
\yStep = 0.75;
for \i in {0,...,\nInput-1}{
\yp = (\i - (\nInput-1)/2) * \yStep;
placeNode(0, \yp, black);
};
for \j in {0,...,\nHidden1-1}{
\yp = (\j - (\nHidden1-1)/2) * \yStep;
placeNode(\xGap, \yp, teal);
for \i in {0,...,\nInput-1}{
\ya = (\i - (\nInput-1)/2) * \yStep;
linkNodes(0, \ya, \xGap, \yp);
};
};
for \k in {0,...,\nHidden2-1}{
\yp = (\k - (\nHidden2-1)/2) * \yStep;
placeNode(2*\xGap, \yp, orange);
for \j in {0,...,\nHidden1-1}{
\yb = (\j - (\nHidden1-1)/2) * \yStep;
linkNodes(\xGap, \yb, 2*\xGap, \yp);
};
};
for \m in {0,...,\nOutput-1}{
\yp = (\m - (\nOutput-1)/2) * \yStep;
placeNode(3*\xGap, \yp, red);
for \k in {0,...,\nHidden2-1}{
\yc = (\k - (\nHidden2-1)/2) * \yStep;
linkNodes(2*\xGap, \yc, 3*\xGap, \yp);
};
};
}
\node[below=0.6cm] at (0, -2.8) {入力層};
\node[below=0.6cm] at (2.2, -2.8) {隠れ層1};
\node[below=0.6cm] at (4.4, -2.8) {隠れ層2};
\node[below=0.6cm] at (6.6, -2.8) {出力層};
\end{tikzpicture}
\end{document}