Tikz学习笔记(二) 发表于 2019-03-02 | | 字数统计: 1,151 | 阅读时长 ≈ 6 绘制流程图 例子123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134\documentclass[tikz,border=4pt]{standalone} % 图片的边界是4pt\usepackage{tikz}\usetikzlibrary{arrows,shapes,snakes,automata,backgrounds,petri,fit}\begin{document} \begin{tikzpicture}[node distance=1.3cm,>=stealth',bend angle=45, auto] % node distance表示节点之间的距离 %当环境带有 on grid 选项时,该值指的是 node 的中心之间的距离;当环境无 on grid 选项时,该值指的是 node 边界之间的距离,初始值为 1cm % >=stealth’指示箭头样式 % bend angle=45 指示路径的转弯角度 % auto 指示路径标签与路径的相对位置,auto=*,其中*可以是 left,right,false \tikzstyle{place}=[circle,thick,draw=blue!75,fill=blue!20,minimum size=6mm] % minimum size是最小尺寸 ,draw是边框的颜色,fill是背景填充的颜色 \tikzstyle{red place}=[place,draw=red!75,fill=red!20] %在place的基础上重新定义,draw和fill取代了之前的定义 \tikzstyle{transition}=[rectangle,thick,draw=black!75,fill=black!20, minimum size=4mm] %同上 \tikzstyle{every label}=[red] %定义了所有标签的样式 %定义了箭头的形式 \begin{scope} % First net \node [place, tokens = 1] (w1) {}; %样式为place,tokens=1指示标记数目为 1,节点的名称为w1,花括号无内容,表示标签无文字(但不能省略花括号) \node [place] (c1) [below of = w1] {}; %c1是节点的名字, below of = w1表示c1位置在w1的下面 \node [place] (s) [below of = c1,label = above:$s\le 3$] {}; % s在在c1的下面,标签位置above表示上面,内容为s<3,注意中间的冒号“:” \node [place] (c2) [below of = s] {}; % c2在s的下面 \node [place, tokens=1] (w2) [below of=c2] {}; \node [transition] (e1) [left of=c1] {} edge [post,bend left] (w1) edge [post,bend right] (s) edge [post] (c1); % 从w2向3个节点连线,pre和post是线的样式 % 起点指向终点的线作为参考线,逆时针方向为正 % bend right和bend left代表线的弯曲模式 % bend right=45表示,起点处向左弯曲45度并且终点进入的方向是-45度 \node [transition] (e2) [left of=c2] {} edge [pre,bend right] (w2) edge [post,bend left] (s) edge [post] (c2); \node [transition] (l1) [right of=c1] {} edge [pre] (c1) edge [pre,bend left] (s) edge [post,bend right] node[swap] {2} (w1); \node [transition] (l2) [right of=c2] {} edge [pre] (c2) edge [pre,bend right] (s) edge [post,bend left] node {2} (w2); \end{scope} %开启 scope 环境,选项 xshift=6cm 使得环境生成的图右移 6cm \begin{scope}[xshift=6cm] % Second net \node [place,tokens=1](w1') {}; \node [place] (c1') [below of=w1'] {}; \node [red place] (s1') [below of=c1',xshift=-5mm,label=left:$s$] {}; \node [red place,tokens=3](s2') [below of=c1',xshift=5mm,label=right:$\bar s$] {};%tokens=3表示中间有3个点 \node [place] (c2') [below of=s1',xshift=5mm] {}; \node [place,tokens=1] (w2') [below of=c2'] {}; \node [transition] (e1') [left of=c1'] {} edge [pre,bend left] (w1') edge [post] (s1') edge [pre] (s2') edge [post] (c1'); \node [transition] (e2') [left of=c2'] {} edge [pre,bend right] (w2') edge [post] (s1') edge [pre] (s2') edge [post] (c2'); \node [transition] (l1') [right of=c1'] {} edge [pre] (c1') edge [pre] (s1') edge [post] (s2') edge [post,bend right] node[swap] {2} (w1'); \node [transition] (l2') [right of=c2'] {} edge [pre] (c2') edge [pre] (s1') edge [post] (s2') edge [post,bend left] node {2} (w2'); \end{scope} %需要用到库backgrounds ,指示开启的 scope 环境所在的层属于主层(即 tikzpicture 环境所在层)之下的层\begin{scope}[on background layer] \node (r1) [fill=black!10, rounded corners, fit=(w1)(w2)(e1)(e2)(l1)(l2)] {}; \node (r2) [fill=green!10, rounded corners, fit=(w1')(w2')(e1')(e2')(l1')(l2')] {}; %定义了两个节点 %选项 fit 生成一个盒子(fit=(w1)(w2)(e1)(e2)(l1)(l2),等号右侧各项是坐标或 node, 各项之间不能加逗号),生成的盒子将等号右侧各项包围在内。各项与盒子边界的距离用选项 inner sep= 设置 \end{scope} % draw命令可以跟上可选项 -> ,这样直线的右端就有一个箭头了。此外还有: ->> , ->| , -to , -latex , -stealth % shorten >和shorten <分别表示的意思就是结尾和开头分别缩短的长度,例如shorten >= 1mm % thick 线的宽度 % decoration线的形式, % decorate打开线的装饰,decoration定义线的形式snakes,需要加snakes选项) % node [above=1mm, midway, text width=3cm, align=center] 连线上方,中间位置,文本框宽,中心方式 \draw [shorten >= 1mm, -to, thick,decorate, decoration={snake, amplitude=.4mm, segment length=2mm, pre = moveto, pre length=1mm,post length=2mm}] (r1) -- (r2) node [above=1mm, midway, text width=3cm, align=center] {replacement of the \textcolor{red}{capacity} by \textcolor{red}{two places}}; \end{tikzpicture}\end{document} A Petri-Net