无论多么复杂的路径,都是由一系列线段或曲线段构成的。在tikz中你可以用 下列命令
\path{路径规范}来构造一条路径。其中“路径规范”是一系列路径操作,也叫做路径元素。 而且你可以在路径上“任一点”插入选项。你还可以用大括号把一段路径 围起来,表示一个“范围”,使选项只作用于这个范围。比如
\tikz \draw (0,0) -- (1,1)
{[rounded corners] -- (2,0) -- (3,1)}
-- (3,0) -- (2,1);
every path风格会影响其范围内的每一条路径。
insert path=路径会在当前路径中插入指定路径。
最简单的路径元素就是“移动到”
... 坐标 ...;它表示开始一段路径,比如
\begin{tikzpicture}画了两条线段。
\draw (0,0) --(2,0) (0,1) --(2,1);
\end{tikzpicture}
画一条直线段到指定点可以用
... --坐标 ...;在上面的例子中先是从点(0,0)画一条直线段到(2,0),又从(0,1)画一条直线段到(2,1)。
如果你想先用一条水平线段,然后再用一条垂线段连接两点,可以用
... -|坐标 ...;反之则是
... |-坐标 ...;比如
\begin{tikzpicture}
\draw (0,0) node(a) [draw] {A} (1,1) node(b) [draw] {B};
\draw (a.north) |- (b.west);
\draw[color=red] (a.east) -| (2,1.5) -| (b.north);
\end{tikzpicture}
从当前点开始画一条贝泽尔曲线段可以用
... ..controls 控制点1 and 控制点2 ..终点 ...;“控制点1”、“控制点2”、“终点”是三个坐标。如果省略“and 控制点2” 则两个控制点都是“控制点1”。比如
\begin{tikzpicture}
\draw[line width=10pt] (0,0) .. controls (1,1) .. (4,0)
.. controls (5,0) and (5,1) .. (4,1);
\draw[color=gray] (0,0) -- (1,1) -- (4,0) -- (5,0) -- (5,1) -- (4,1);
\end{tikzpicture}
如果想用一条直线段把当前点和之前的那个“移动到”元素指定的点连接起来,可以用
... --cycle ...;比如
\begin{tikzpicture}[line width=10pt]
\draw (0,0) -- (1,1) -- (1,0) -- (0,0) (2,0) -- (3,1) -- (3,0) -- (2,0);
\draw (5,0) -- (6,1) -- (6,0) -- cycle (7,0) -- (8,1) -- (8,0) -- cycle;
\useasboundingbox (0,1.5);
\end{tikzpicture}
如果想以当前点和指定点为对角线,画一个矩形,可以用
... rectangle当前点的对角 ...;比如
\begin{tikzpicture}
\draw (0,0) rectangle (1,1);
\draw (.5,1) rectangle (2,0.5) (3,0) rectangle (3.5,1.5) -- (2,0);
\end{tikzpicture}
线段与线段的连接角受选项
rounded corners=内嵌长度影响,也就是圆角有多圆。“=内嵌长度”如果省略,缺省值是4pt。比如
\tikz \draw[rounded corners=1ex] (0,0) rectangle (20pt,2ex);当然你可以用选项
sharp corners将其设置为尖角。
如果打算以当前点为圆心画一个圆,可以用
... circle[选项] ...;选项中可以设置下列属性
x radius=x轴方向的半径比如
y radius=y轴方向的半径
radius=x轴方向和y轴方向的半径
at=圆心坐标
\begin{tikzpicture}
\draw (1,0) circle [radius=1.5];
\fill (1,0) circle [x radius=1cm, y radius=5mm, rotate=30];
\end{tikzpicture}
圆可以使用风格“every circle”
椭圆的语法是
... ellipse[选项] ...;其实就是圆的另一种形式。
如果想从当前点开始画一段弧,可以用
... arc[选项] ...;选项中可以设置如下属性
start angle=起始角度比如
end angle=结束角度
delta angle=角度增量
\begin{tikzpicture}[radius=1cm]
\draw (0,0) arc[start angle=180, end angle=90]
-- (2,.5) arc[start angle=90, delta angle=-90];
\end{tikzpicture}
以前一个点和给定的点为对角,画一个矩形网格,可以用
... grid[选项]给定点 ...;选项中可以设置如下属性
step=x轴方向和y轴方向的增量,可以是一个数字,一个长度。如果是一个坐标,则分别给出了两个方向的增量比如
xstep=x轴方向的增量,可以是一个数字,一个长度
ystep=y轴方向的增量,可以是一个数字,一个长度
\tikz \draw (0,0) grid [xstep=.5,ystep=.75] (3,2);
“help lines”风格会绘制一个网格辅助线。
绘制一条通过当前点和指定点的抛物线可以用
... parabola[选项] bend 弯曲点坐标 指定点 ...;如果不要“bend 弯曲点坐标”,当前点就是弯曲点。选项中可以设置下列属性
bend=弯曲点坐标也可以用下列风格改变弯曲点
bend pos=比例,指的是如果把旧的当前点和新的当前点连接起来,前一个点分割这条连接线段的比例
parabola height=抛物线高度,效果等于选项[bend pos=0.5,bend={+(0pt,长度)}]
bend at start比如
bend at end
\begin{tikzpicture}
\draw (0,0) rectangle (1,1.5) (0,0) parabola (1,1.5);
\draw[xshift=1.5cm] (0,0) rectangle (1,1.5) (0,0) parabola[bend at end] (1,1.5);
\draw[xshift=3cm] (0,0) rectangle (0,0) parabola bend (.75,1.75) (1,1.5);
\end{tikzpicture}
如果想把四分之一正周期内正弦片段缩放并平移到前一个点和指定点为对角的矩形区域,可以用
... sin 指定点 ...;如果是余弦片段,可以用
... cos 指定点 ...;比如
\begin{tikzpicture}[xscale=1.57]
\draw (0,0) sin (1,1) cos (2,0) sin (3,-1) cos (4,0) sin (5,1);
\draw[color=red] (0,1.5) cos (1,0) sin (2,-1.5) cos (3,0) sin (4,1.5) cos (5,0);
\end{tikzpicture}
如果你想用SVG绘制一段路径,可以用
... svg[选项] "路径" ...;也就是将svg路径用一对引号括起来。比如
\begin{tikzpicture}
\filldraw [fill=red!20] (0,1) svg[scale=2] "h 10 v 10 h -10"
node [above left] {upper left} -- cycle;
\draw svg "M 0 0 L 20 20 h 10 a 10 10 0 0 0 -20 0";
\end{tikzpicture}
如果你想在前一个坐标和指定坐标之间添加一条路径,可能是直线段,也可能是其它, 可以用
... to[选项] 节点 指定点 ...;“选项可以用来修改路径属性”,“节点”是可选的。比如
\begin{tikzpicture}
\draw (0,0) to node [sloped,above] {x} (3,2);
\draw (0,0) to[out=90,in=180] node [sloped,above] {x} (3,2);
\end{tikzpicture}
every to风格会影响每一条to路径,比如
\tikz[every to/.style={bend left}] \draw (0,0) to (3,2);下列选项可以影响to路径的效果
to path={路径}
execute at begin to={代码}
execute at end to={代码}
let不会扩展路径,而是先完成一系列赋值,它的语法是
... let 赋值1,赋值2,... in ...;其中赋值的形式有多种
\n数字=长度表达式比如
\p数字=坐标
\x数字=x坐标
\y数字=y坐标
\begin{tikzpicture}
\draw [help lines] (0,0) grid (3,2);
\draw let \p{foo} = (1,1), \p2 = (2,0) in (0,0) -- (\p2) -- (\p{foo});
\end{tikzpicture}