使用LaTeX的TikZ宏包绘制流程图

2021-05-21 14:29:30 浏览数 (1)

Preface

答辩PPT需要画流程图,遂学。

方法

注:本文大部分为Overleaf的翻译与总结 这个由五部分组成的系列文章结合了视频和文字说明,以教授使用TikZ创建LaTeX图形的基础。这些教程于2013年8月首次在原始ShareLateX博客网站上发布;因此,由于ShareLaTeX的发展以及ShareLaTeX和Overleaf的合并,今天的编辑器界面(Overleaf)发生了很大变化。但是,许多内容仍然有意义,并会教给您一些基本的LaTeX,这些技能和专业知识将适用于所有平台。 此外,多年来,用于定位节点的TikZ库和方法已经发生了变化。如果您今天正在学习TikZ,则最好使用该positioning库以below=of的语法放置节点。该positioning库语法是更灵活和强大。below of=以下视频和示例中使用的较旧样式的语法已正式弃用,但仍然可以使用。此外,arrows现在不建议使用该库,而希望使用较新的arrows.meta库。这里使用的其他TikZ命令和库可能具有更现代的等效项。在我们制作新的视频教程之前,我们将按原样保留代码示例,以便它们与视频内容相对应。

样例

宏包的引用:

代码语言:javascript复制
usepackage{tikz}
usetikzlibrary{shapes,arrows}
usetikzlibrary{shapes.geometric, arrows}

定义流程图的组件样式:

代码语言:javascript复制
tikzstyle{startstop} = [rectangle,rounded corners, minimum width=3cm,minimum height=1cm,text centered, draw=black,fill=red!30]
tikzstyle{io} = [trapezium, trapezium left angle = 70,trapezium right angle=110,minimum width=3cm,minimum height=1cm,text centered,draw=black,fill=blue!30]
tikzstyle{process} = [rectangle,minimum width=3cm,minimum height=1cm,text centered,text width =3cm,draw=black,fill=orange!30]
tikzstyle{decision} = [diamond,minimum width=3cm,minimum height=1cm,text centered,draw=black,fill=green!30]
tikzstyle{arrow} = [thick,->,>=stealth]

画流程图:

代码语言:javascript复制
begin{tikzpicture}[node distance=2cm]
node (start) [startstop] {Start};
node (input1) [io,below of=start] {Input};
node (process1) [process,below of=input1] {Process 1};
node (decision1) [decision,below of=process1,yshift=-0.5cm] {Decession 1};
node (process2a) [process,below of=decision1,yshift=-0.5cm] {Process 2aaaaaa aaaaaaa aaaa};
node (process2b) [process,right of =decision1,xshift=2cm] {Process 2b};
node (out1) [io,below of=process2a] {Output};
node (stop) [startstop,below of=out1] {Stop};

draw [arrow] (start) -- (input1);
draw [arrow] (input1) -- (process1);
draw [arrow] (process1) -- (decision1);
draw [arrow] (decision1) -- node[anchor=east] {yes} (process2a);
draw [arrow] (decision1) -- node[anchor=south] {no} (process2b);
draw [arrow] (process2b) |- (process1);
draw [arrow] (process2a) -- (out1);
draw [arrow] (out1) -- (stop);
end{tikzpicture}

结果:

某些可选参数

箭头样式

代码语言:javascript复制
tikzstyle{arrow} = [thick,->,>=stealth]

解析:

代码语言:javascript复制
# 线粗:
thick:粗
thin:细
# 箭头
-> : 正向箭头
<- : 反向箭头
<-> : 双向箭头
# 虚线
dashed
# 箭头形状
>=stealth

画箭头

代码语言:javascript复制
draw [arrow] (decision1) -- node[anchor=east] {yes} (process2a);

解析:

代码语言:javascript复制
# 属性
[arrow]: 需要调用的箭头的样式名称
(decision1):箭头的起始节点名称
(process2a):箭头的末端节点名称
# 线型
--:直线
|-:先竖线后横线
-|:向横线后竖线
# 文字:如果需要在箭头上添加文字
{yes}: 需要添加的文字
# 文字的位置,上南下北左东右西(与地图方位不一致)
[anchor=east]
[anchor=south]
[anchor=west]
[anchor=north]
[anchor=center]

节点样式

代码语言:javascript复制
tikzstyle{process} = [rectangle,minimum width=3cm,minimum height=1cm,text centered,text width =3cm,draw=black,fill=orange!30]

解析:

代码语言:javascript复制
# 节点形状
rectangle: 矩形,可加圆角(rounded corners)
trapezium: 平行四边形
diamond: 菱形
# 尺寸
minimum width
minimum height
# 文本
text centered: 文本居中
# 文本宽度
text width=3cm: 文本超过3cm时会自动换行
# 边框
draw
# 填充颜色
fill

画节点

代码语言:javascript复制
node (decision1) [decision,below of=process1,yshift=-0.5cm] {Decession 1};

解析:

代码语言:javascript复制
# name
(decision1):这个节点的name,后面需要用这个name调用这个节点。
# 属性
decision:需要调用的节点的样式名称
# 位置
below of=process1:定义节点的位置
left of:
right of:
# 偏移,对位置进行微调
yshift:
xshift:
# title
{Decession 1}: 结果显示的标题

总结

类似于css的思想,这个其实就是先定义一下样式然后调用,调用的时候也可以修改,大多数参数也能猜(确信

Reference

  • 1(https://www.jianshu.com/p/2d01d5eaaa77)
  • 2(https://blog.csdn.net/tuzixini/article/details/72957211)
  • 3(https://www.overleaf.com/learn/latex/LaTeXGraphics_using_TikZ:_A_Tutorial_for_Beginners(Part_3)—Creating_Flowcharts)

本文作者:博主: gyrojeff    文章标题:使用LaTeX的TikZ宏包绘制流程图

本文地址:https://cloud.tencent.com/developer/article/1827314

版权说明:若无注明,本文皆为“gyro永不抽风!”原创,转载请保留文章出处。

许可协议:署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 转载请保留原文链接及作者!

我的博客即将同步至腾讯云 社区,邀请大家一同入驻

0 人点赞