在写作论文时,流程图是一种最为直观和直接的方法来帮助我们表示思想方法或者算法。下面介绍一种使用 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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

编译出来的效果:

当然你也可以做得 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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

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

总结

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

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

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

```mermaid
flowchat
st=>start: 开始
e=>end: 结束
op=>operation: 操作
cond=>condition: 确认?st->op->cond
cond(yes)->e
cond(no)->op
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
Created with Raphaël 2.1.0开始操作确认?结束yesno

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

LaTex论文排版 | (16)绘制程序流程图(框图)相关推荐

  1. Latex论文排版——图片

    LaTex 论文排版: 1.一般图片插入 导言区 \usepackage{graphicx} % insert graphic 1 正文 \begin{figure*} \includegraphic ...

  2. LaTex 论文排版(4): 插入图片(Visio图转换成.eps图)

    目录 1 简要步骤 2 示例 使用LaTex 排版时,需要插入图片,格式可以为.png, .tif, .bmp, .eps等,其中.eps格式最好的,这样去生成pdf的图片是非常清晰的.我们一般使用V ...

  3. LaTex 论文排版(3): 插入参考文献

    使用LaTex 排版时,需要插入参考文献.如下图,使用IEEE Transactions 的模板,但是参考文献的设置实在是太麻烦,如下图所示,很多东西都要单独分出来,很不方便.也不便于修改,非常消耗时 ...

  4. (转载)LaTex 论文排版(1): Win10 下 LaTex所需软件安装 (Tex live 2018 + Tex studio)

    版权声明:本文为CSDN博主「TechXYM」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/zaishu ...

  5. latex 参考文献没有显示_甜甜的磕盐路 | LaTeX论文排版小贴士

    號 外 管院日报 甜甜的嗑盐路 经历了充实而又紧张的论文撰写后 童鞋们肯定都拥有了干货满满的论文初稿 接下来的难题将聚焦于-- "啊啊啊,我的页码怎么一直对不上啊" "为 ...

  6. latex论文排版个人向相关问题记录

    很久没更新了,小论文基本都见刊了,记录下之前写论文碰上的latex一些排版问题吧,比较琐碎. 伪代码跨页问题 最开始使用algorithms包来写的伪代码,左边会有大方括号,蛮好看的. 不过使用alg ...

  7. Latex论文排版技巧再总结

    1.Q:几个作者同时共享机构地址,怎么搞? A:拿ACM的模版为例, Yes, and we suggest you do the following... Insert this piece of ...

  8. LATEX论文排版学习资源汇总

    一.国内出版的LaTeX书籍 不管是ctex还是chinatex论坛,很多TeX前辈和使用者都给大家提供了很多咨询帮助,同时,也分享了很多很多学习上的方法与技巧.一般都推荐入门的用户先阅读一本入门书, ...

  9. latex论文排版初级应用

    最近在写小论文,真的踩了一堆的坑,现在来自我反省盘点一下.我追求的是快速入门,所以很多问题都省了,直接追求快速实现排版.如何下载latex和texstudio就不讲了. 1.前期准备 首先我建议是先把 ...

最新文章

  1. Activity的插件化(三)
  2. java 异常 理解_java中的异常理解
  3. 【C语言】数据结构C语言版 实验4 栈与字符串
  4. 【深度3】相机选择-精度和曝光需求计算 - 输入:1 被测试物体的最小体积 2 被测物体的移动相对速度
  5. 全网最全Python操作Excel教程,建议收藏!
  6. 【leetcode】25. Reverse Nodes in k-Group 链表按K分段逆序
  7. OCR基于深度学习下的CNN字符识别
  8. 作为一个职业达人,你需要水滴石出的专注
  9. BZOJ1064[NOI2008] 假面舞会
  10. nvidia控制面板点了没反应win7_win7 nvidia控制面板没反应打不开 解决办法
  11. C_北理工乐学_结构
  12. vba调JAVA并接收返回值_如何从VBA函数返回结果
  13. ArcGIS数据编码
  14. 人脸识别像素最低_一种低分辨率图像的人脸识别方法与流程
  15. 结构光三维重建(二)线结构光三维重建
  16. web网页设计实例作业 网页Dreamweaver设计
  17. 施耐德电气:“三步走”实现配电数字化,制胜可持续未来
  18. 证照之星2022个人版证件照编辑排版换背景软件
  19. 【MySQL】MacM1下的MySQL安装与配置
  20. html中如何做出生年月日,出生年月日怎么换成生辰八字

热门文章

  1. 每日一题:由棋盘放麦子引出Java的BigInteger
  2. java用代码实现星期菜谱,基于jsp的家庭食谱管理-JavaEE实现家庭食谱管理 - java项目源码...
  3. 修复xp打印服务器失败,xp打印机服务器设置方法
  4. hp M1005 激光打印机 通过usb接入路由器 变成网络打印机
  5. python 创业_如何在下午使用python和破折号创业
  6. 局部异常因子算法-Local Outlier Factor(LOF)
  7. Jenkins+Gitlab+Ansible自动化部署(四)
  8. 回归分析中的评价方法
  9. 7-1 递归实现逆序输出整数 (15 分)
  10. 采用超级电容设计的UPS不间断电源,用于掉电数据保存,可续航10-60秒