TiKZ 坐标和节点的链接(或是路径path)

这是一篇非常精炼讲解 TiKZ 坐标与节点互联的小文,有对这方面疑惑的用户,可以反复阅读演练一下,自然得其要旨,很快就可以得心应手了。Happy TiKZing!~

坐标坐标、节点坐标、节点节点的连结,基本上有三种:直线,曲线,直横(或横直)线。如

\coordinate [label=left:{$a$}](a) at (0,0);
\draw (a) circle (0.5);
\node[inner color=white, outer color=orange,inner sep=0.5cm] (b) at (5,2){$b$};
\draw (a)--(b);
\draw (a) controls (1,3) and (5,5)--(b);
\draw (a) -| (b);
\draw (a)|- (b);

可以看到坐标和节点的不同,连到结点的边缘时,线条就会停止。(a) -| (b),指从a 出发,延水平线走到b的垂直投影位罝,再走垂直线到b。而 (a) |- (b),是a 出发,往垂直方向走到b的水平投影位置,再走水平线到b。

f_12111823_1.png

这些连线可以加上箭头的控制指令,变成不同的效果:

f_12111784_1.png

如果想要有不同的箭头,可以使用arrows.meta library,在里面定义了许多不同的箭头。

线的连法也可以使用to指令如:

\cooridnate [label=left:a](a) at (0,0);
\node[draw,circle,label=right:b] (b) at (6,4);
(a)to(b),(a)到(b)的直線;
(a)to [out=90, in=90]b,(a)到(b)的曲線,出發方向90度,進入b方向90度。
(a) to [bend right=60]b,(a)到(b)的曲線,出發方向是(a)(b)線段右方60度,進入方向是(a)(b)線段右方60度。

f_12111785_1.png

另外还有一个指令edge,用法和to很像:

\path ... edge (node or coordinate)...; 
其本身的意义就是一个路径。

用法也差不多:如果(a)(b)(c)(d)已经有了坐标或结点的定义,

\path (a) edge (b)
(b) edge[->,red] (c)
(c) edge [-,dotted,black](d)
(d) edge [<-,bend left=""30,blue](a);

就能画出不同种类的连结线,这些线段也可以进行标识,主要是使用node指令(如果前面定义了every node/.style,就会受到影响,要注意)一条线段的标识,主要是位置,上下,倾斜等等参数的控制,使用直线和曲线都是一样的。如:

\draw (0,0)--(5,3);

如这这条线要做标示,可以这样:

\draw (0,0)--node{a}(5,3);

这样会在线段中间的地方会有字母a画在上面。如果想要在不同的位置,一些参数可以控制:at start, very near start, near start, midway, near end, very near end, at end,等等位位置的参数,可以控制:

f_12111787_1.png

\draw (0,0)-- node[near start]{b} node[midway]{a} (5,3);

另外,也可以pos参数来控制位置,pos 的参数值是0到1之间的数值,表示该线段的比例处:

\draw (0,0)-- node[pos=0.2]{a} (5,3);
\draw (2,0) to[bend left=30] (5,2);

确定了位罝后,还可以决定在该位置的哪一边,用上(above)下(below)左(left)右(right)来控制:

-- node [pos=0.2, left] .. 在0.2位置的右方。

如果全部都在固定在某一方,如左方,可以用[auto=left],使每个标示都在左方。

如果同一个位罝可需要不同的标示,可以用swep 或其缩写指令"'"。在在该处(左右)一方有标示时,会自动转换到另一边标示。

sloped会让文字旋转,配合线段该处的斜率。

接下来就用实例来画出二整数辗转相除法求最大公因子的程序演算流程图,这个图定义了三程不同的node:

 io: 是表示输出输入的node,用梯形。

 op: 是表示演算过程的node,用方形。

 cn: 是表示判断过程的node,用菱形。

 要使用梯形和菱形,要使用geometric library。设定好后,要使用梯型的node,就用node[io](a){};即可:

\begin{tikzpicture}[
io/.style={trapezium, trapezium left angle=70, trapezium right angle=110, fill=magenta!10, draw=magenta}
op/.style={rectangle, fill=orange!10, draw=orange},
cn/.style={diamond, aspect=2, inner sep=2pt, fill=red!10, draw=red},
node distance=5mm, thick]
\node[io] (in) {求$a,b$之最大公因數};
\node[op, below=of in] (div) {$r=a \mod b$};
\node[op, below=of div] (set) {$a=b, \ b=r$};
\node[cn, below=of set] (cond) {$b=0?$};
\node[io, below=of cond] (out) {$a$值是解答};
\path[->]
(in) edge (div)
(div) edge (set)
(set) edge (cond)
(cond) edge node[right]{Yes} (out);
\draw (cond)--node[below]{No} ++(1.5,0) |- (div);
\end{tikzpicture}

f_12092072_1.png

选自:http://blog.udn.com/paraquat/22113130 

分享到:
未经允许不得转载:TiKZ 坐标和节点的链接(或是路径path)
已有 条意见

    最新文章

    加载中...
      本站提供专业LaTeX排版、咨询、定制服务,请点击下图咨询详情


      全国首个精品的LaTeX视频教程,大牛带着你入门,让LaTeX学习不再纠结,请点击下图咨询详情

      热门评论

        联系我们

        交流QQ群:91940767
        本站QQ号:343083553
        邮箱联系latexstudio@qq.com
        淘宝店铺https://shop240512713.taobao.com/ 提供排版,模板定制,培训,图片处理,视频教程等LaTeX服务。

        关注我们微信公众号

        如果您投稿或者希望加入我们团队,请发送您的简历到latexstudio@qq.com。

        科技艺术的完美融合,专业精致的排版体验

        联系我们联系我们