在写作论文时,流程图是一种最为直观和直接的方法来帮助我们表示思想方法或者算法。下面介绍一种使用 LaTeX 宏包 TikZ 来绘制矢量流程图的方法,主要参考了这篇博客 Ethan Deng。

基本步骤

下面给出一个基本框图的代码,请注意注释:

% texlive2015, pdflatex
\documentclass{article}
\usepackage{palatino}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}
\begin{document}
\thispagestyle{empty}
% 流程图定义基本形状
\tikzstyle{startstop} = [rectangle, rounded corners, minimum width = 2cm, minimum height=1cm,text centered, draw = black]
\tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=2cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black]
\tikzstyle{decision} = [diamond, aspect = 3, text centered, draw=black]
% 箭头形式
\tikzstyle{arrow} = [->,>=stealth]
\begin{tikzpicture}[node distance=2cm]
%定义流程图具体形状
\node[startstop](start){Start};
\node[io, below of = start, yshift = -1cm](in1){Input};
\node[process, below of = in1, yshift = -1cm](pro1){Process 1};
\node[decision, below of = pro1, yshift = -1cm](dec1){Decision 1 ?};
\node[process, below of = dec1, yshift = -1cm](pro2){Process 2};
\node[io, below of = pro2, yshift = -1cm](out1){Output};
\node[startstop, below of = out1, yshift = -1cm](stop){Stop};
\coordinate (point1) at (-3cm, -6cm);
%连接具体形状
\draw [arrow] (start) -- (in1);
\draw [arrow] (in1) -- (pro1);
\draw [arrow] (pro1) -- (dec1);
\draw (dec1) -- node [above] {Y} (point1);
\draw [arrow] (point1) |- (pro1);
\draw [arrow] (dec1) -- node [right] {N} (pro2);
\draw [arrow] (pro2) -- (out1);
\draw [arrow] (out1) -- (stop);
\end{tikzpicture}
\end{document}

编译出来的效果:

当然你也可以做得 Fancy 一点,比如下面这个模拟退火算法的框图:

其代码如下:

% texlive2015, pdflatex
\documentclass{standalone}
\usepackage{newtxmath}
\usepackage{palatino}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}
\begin{document}
\thispagestyle{empty}
% 流程图定义基本形状
\tikzstyle{startstop} = [rectangle, rounded corners, minimum width = 2cm, minimum height=1cm,text centered, draw = black, fill = red!40]
\tikzstyle{io} = [trapezium, trapezium left angle=70, trapezium right angle=110, minimum width=2cm, minimum height=1cm, text centered, draw=black, fill = blue!40]
\tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill = yellow!50]
\tikzstyle{decision} = [diamond, aspect = 3, text centered, draw=black, fill = green!30]
% 箭头形式
\tikzstyle{arrow} = [->,>=stealth]
\begin{tikzpicture}[node distance=2cm]
%定义流程图具体形状
\node (start) [startstop]
{Start};
\node (in1) [io, below of = start]
{Initial $x_0=(x_{01},x_{02},\cdots)$};
\node (pro1) [process, right of = in1, xshift = 5cm]
{Calculation $u_0=f(x_0)$};
\node (pro4) [process, below of = in1]
{New result $u^*=f(x_0^*)$};
\node (pro3) [process, below of=pro1]
{New solution $x_0^*=(\cdots,x_{0i},\cdots$)};
\node (pro2) [process, right of=pro3, xshift = 4cm]
{Randomly change $x_0$ into $x_0^*$};
\node (dec1) [decision, below of=pro4]
{Optimized?};
\node (pro5) [process, below of=pro3]
{Accept new solution probobly};
\node (pro6) [process, below of=dec1]
{Accept new solution};
\node (dec2) [decision, below of=pro5]
{Enough iterations?};
\node (pro7) [process, below of=dec2]
{Accept new solution as optimized solution};
\node (out1) [io, below of=pro6]
{Output $x_0^*$};
\node (stop) [startstop, below of=out1]
{stop};
%连接具体形状
\draw [arrow] (start) -- (in1);
\draw [arrow] (in1) -- (pro1);
\draw [arrow] (pro1) -| (pro2);
\draw [arrow] (pro2) -- (pro3);
\draw [arrow] (pro3) -- (pro4);
\draw [arrow] (pro4) -- (dec1);
\draw [arrow] (dec1) --node [above] {N} (pro5);
\draw [arrow] (dec1) --node [right] {Y} (pro6);
\draw [arrow] (pro6) -- (dec2);
\draw [arrow] (pro5) -- (dec2);
\draw [arrow] (dec2) -|node [right] {N} (pro2);
\draw [arrow] (dec2) --node [right] {Y} (pro7);
\draw [arrow] (pro7) -- (out1);
\draw [arrow] (out1) -- (stop);
\end{tikzpicture}

当然 LaTeX 是支持自定义颜色的,如果你有一套非常优秀的颜色配比,相信你可以画出非常好看的流程图。

总结

用 LaTeX 可以画出矢量的流程图,重点是在变成之前先安排好各个流程的位置。
如果你用 LaTeX 写论文的话会发现,这是一种使用其他软件生成的 jpg 格式图片所不能比拟的优势。另外,在PowerPoint 中使用“插入形状”并选择保存为 pdf 格式也可以得到矢量的 pdf 文件来插入到 LaTeX 的写作当中,不过这里不讨论这种所见即所得的方法。

彩蛋:使用 markdown 编辑器作流程图

第一次在 CSDN 上写博客时,我知道了可以使用 markdown 编辑器作流程图,效果也是不错的。代码如下:

```flow
st=>start: 开始
e=>end: 结束
op=>operation: 操作
cond=>condition: 确认?st->op->cond
cond(yes)->e
cond(no)->op
Created with Raphaël 2.1.0开始操作确认?结束yesno

可以看到,markdown 语法可以直接画出否认和操作的有两个直角的连线,比 LaTeX 要方便一些。
更多关于 markdown 流程图 的语法,可以参考这里。

使用 LaTeX 绘制流程图相关推荐

  1. Latex 绘制流程图

    使用latex的tikz包绘制流程图 首先需要使用tikz包 \usepackage{xcolor} \usepackage{tikz} \usetikzlibrary{arrows,shapes,c ...

  2. latex画流程图例子详解,如何画转折线,运行不出来?

    先说如何画转折线? 思路:定义点,用点作为过渡.具体详见下面的例子 运行不出来? 可能是没有加分号; 比如:\node (stop) [startstop, below of=n3] {结束}; 例子 ...

  3. 教程:科研论文绘制流程图并导入Latex

    涉及软件:PowerPoint,Adore Acrobat pro, overleaf 在ppt上绘制流程图,通过设计组件调整页面大小,使之页面大小合适. 在PPT上另存为,将页面保存为pdf格式. ...

  4. vscode配置drawio绘制流程图

    目录 vscode配置drwaio drawio使用 添加元素 调整元素 连接元素 添加公式 图像与表格 组合元素 保存以及导出 最近课程设计需要画流程框图,所以在网上找找绘制流程图的软件.然后我选择 ...

  5. [ 高效能系列 ] 之绘制流程图基本技巧

    本文将按照黄金圈法则介绍绘制流程图的技巧,即从以下 4 个方面展开介绍: 什么是流程图?( what ) 为什么要使用流程图? ( why ) 怎样绘制流程图? ( how ) 使用流程图能干什么?( ...

  6. python流程图-使用Graphviz快速绘制流程图

    简介 自己在绘制流程图的时候一般用到的是Visio,但是感觉连线以及框图位置调整起来很烦-经过一番了解之后发现了Graphviz可以使用Python代码来绘制流程图的软件,使用这个工具我们可以更专注于 ...

  7. java.awt.Graphics2D绘制流程图基本元素

    java.lang.Object ----java.awt.Graphics ----java.awt.Graphics2D 由于项目需要,要求对用户流程进行图形化展示:用户对自己的操作通过查看流程图 ...

  8. 1过程流程图 3 apqp_如何绘制流程图?这里有3种绘制方法,既简单又高效!1分钟可学会...

    工作中,很多小伙伴需要绘制流程图,那么如何绘制流程图呢?其实并不难,今天小编就来给大家分享流程图的3种绘制方法,大家可以根据自己的想法选择最适合自己的那一种哦~ 一.Word制作 1.借助SmartA ...

  9. VSCode来绘制流程图真是得心应手

    场景 在分析某业务时常常需要绘制流程图等一些图.通常会使用一些专门的绘图软件比如Viso.亿图图示. 但是如果只是想简单的绘制一下流程或者其他图.又或者不想打开其他IDE,如果能在开发的同时也能 实现 ...

最新文章

  1. web socket 心跳包的实现方案
  2. 【Web安全】中国蚁剑+DVWA(本地文件上传漏洞Upload)
  3. 厦门one_“断轴”频发,李想承认理想ONE存缺陷!曾声明悬架非常安全
  4. DevExpress GridControl功能总结
  5. .net中调用esb_大型ESB服务总线平台服务运行分析和监控预警实践
  6. 网申倒计时4天 | DJI大疆秋招独家笔试攻略
  7. mysql 主主切换_mysql 主-主配置中进行切换
  8. c#目录以及子目录下图片批量缩放,像素不变,图像大小改变
  9. 机器学习的基本概念和相关术语
  10. rust石头墙几个c4_从安顺自驾石头寨一日游
  11. iOS中Navigation中添加自定义Button等UIView
  12. spring-第十五篇之AOP面向切面编程之AspectJ框架简单应用
  13. CentOS系统介绍
  14. android 坐标度分秒转换工具,android 经纬度度分秒与十进制之间的相互转换
  15. 物联网通信-期末复习
  16. 蓝桥杯训练系统 分解质因数
  17. android系统解锁,android 调用系统解锁方法
  18. matlab脉宽调制pwm,脉宽调制matlab仿真
  19. Minecraft 我的世界 .minecraft下的各个文件夹的用处
  20. php生成数字订单号,php生成订单号函数

热门文章

  1. sicily 4379 bicoloring
  2. 任务分配算法c语言程序,程序员算法基础——贪心算法
  3. 微信小程序--picke选择器(省市区城市)-- 使用taro开发
  4. Oracle11g pl-sql developer安装包及教程
  5. 使用Python rembg库进行抠图:一行命令就搞定
  6. 攻防世界--Confusion2
  7. MacOS 系统 文件夹解析
  8. keil设置c语言字体大小,Keil uVision4怎么放大字体?放大字体和关键字标注颜色方法介绍...
  9. 想玩 NAS? 群晖NAS 的选购 配件搭配以及硬盘 RAID指南
  10. 全球与中国汽车检测设备市场现状及未来发展趋势