由于工作需要,经常需要在各类文档中绘制传统程序流程图。流程图当然可以在 Visio、亿图等工具进行绘制,截图(位图,不推荐)或是导出为 PDF (矢量图,推荐)后,再通过graphicx 宏包的\includegraphics命令插入到 LaTeX 实现排版。这是一种简单直接的方法,但这种方法会存在如下问题

  • 需要额外的软件支持,降低了文档的独立性。

  • 字体、字号无法与正文匹配,整体效果不协调。

  • 缩放时字号会产生变化,无法满足字号比正文小1号的常规要求。

  • 不便后期修改、编辑和维护。

因此,在 LaTeX 中直接使用 TikZ 工具绘制流程图,是一个相对较好的选择。

直接绘制

流程图的基本形状有矩形、菱形、平行四边形、圆角矩形等。可以使用TikZ的\node命令布置这些形状结点,然后绘制对应流程线就可以实现流程图的绘制。

为绘制不同形状的结点,可以为\node命令的可选参数中设置rectanglediamondtrapeziumrounded corners等绘制属性。

显然,直接用 TikZ 代码进行流程图绘制是一个比较烦琐的过程,并且不符合 LaTeX 内容与格式分离的基本思想。同时,当有多个流程图需要绘制时,代码过于冗余,不便维护,代码的复用性也较差,不同流程图也容易产生不一致现象。

使用`flowchart`宏包绘制

为简化流程图的绘制代码,可以引入合适的 LaTeX 宏包进行流程图绘制。一个比较方便的宏包是flowchart宏包,它提供了如下基本的流程图形状:


显然,该宏包提供的基本流程图形状不能完全符合我国的绘制习惯。关于该宏包的使用细节,请在命令行用命令查阅其使用说明书。

设置node样式绘制

当然,可以将\node命令的可选参数中的rectanglediamondtrapeziumrounded corners等绘制属性用tikzset命令定义为绘图样式,以实现代码的简化和代码的复用。在 Brent Longborough [1] 中,给出了使用这一方式的绘制样例和实现代码。

自定义宏包绘制

根据LaTeX内容与格式分离的基本思想,显然将\tikzset样式定义及其它的设置封装为宏包,使用起来则更为方便。在完成这一封装之前,笔者刚好阅读了tikz-imagelabels 宏包的源代码,发现其key-value实现思路非常值得借鉴。因此,基于 Brent Longborough [1] 的代码,结合 tikz-imagelabels 宏包的key-value思路,笔者设计与制作了tikz-flowchart 宏包,以便在 LaTeX 中用 TikZ 实现流程图绘制,详见 [2]。

tikzpicture环境中,使用该宏包绘制流程图的基本过程是:

  1. \flowchartset命令设置全局(导言区)或局部绘制参数。

  2. 使用类似\node proc, join {$k -= 1$};命令采用proctestioterm各个node样式参数分别布置需要的流程框结点。

  3. 使用类似\node coord, right=0.8 of t1 {}; cmark{1}命令采用coord样式布置其它需要的坐标点(用于流程线的转接)。

  4. 使用类似\path (t1.south) to node [near start, xshift=1em] {$y$} (p2);命令进行流程线条件标注。

  5. 使用类似\draw norm -- (p2);命令绘制流程线。

个人建议在绘制流程前最好先用纸和笔绘制一个草图,然后再用tikz-flowchart宏包进行绘制,如下图是一个素数判断的流程图草图:


根据该草图可以使用 LaTeX 代码(见阅读原文)绘制如下流程图:


关于tikz-flowchart宏包的使用细节,请参阅中的相关文档说明及使用 LaTeX 样例代码。

Happy TikZing!

参考链接
[1] http://www.texample.net/tikz/examples/author/brent-longborough/
[2] https://github.com/registor/tikz-flowchart/


点击阅读原文,查看完整源代码


代码流程图_LaTeX 中传统流程图的绘制方法相关推荐

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

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

  2. python输入10个数输出最大值流程图_用传统流程图表示该算法:依次将10个数输入,要求将其中最大的数输出...

    展开全部 1.传统流程图: 2.思路:比大小,10个数,标上标签,依次为1,2,3....10.然后第1个跟第e68a84e8a2ad323131333532363134313032313635333 ...

  3. 计算机语言中流程图,编程中的流程图入门教学【经典讲解】.ppt

    编程中的流程图入门教学[经典讲解]解读 算法的描述 自然语言 流程图 伪代码 程序设计语言 -- 程序框图 程序框图(流程图)是一种用程序框.流程线及文字说明来表示算法的图. 构成流程图的图形符号及其 ...

  4. 你知道CAD中的样条曲线的绘制方法吗?

    样条曲线是通过或接近一系列离散点而生成的光滑曲线,它既不像圆呢么规整,也不想直线那么笔直,样条曲线的特点就是多样化,可以在两个以上的点之间,自行创建一条任意的样条曲线,可开放可闭合.本文将给大家介绍C ...

  5. android代码 IMEI,Android_Android中获取IMEI码的方法,核心代码:Imei = ((TelephonyManager) - phpStudy...

    Android中获取IMEI码的方法 核心代码:Imei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)) .getDeviceId ...

  6. 【eoe教程】Android中自定义视图的绘制方法

    原文链接 :http://android.eoe.cn/topic/ui 自定义视图最重要的部分是它的外观.你可以根据应用的需求简单或复杂的实现它. 这个教程包含了最常见的操作. 重写onDraw() ...

  7. Android中贝塞尔曲线的绘制方法

    贝塞尔曲线,很多人可能不太了解,什么叫做贝塞尔曲线呢?这里先做一下简单介绍:贝塞尔曲线也可以叫做贝济埃曲线或者贝兹曲线,它由线段与节点组成,节点是可拖动的支点,线段像可伸缩的皮筋.一般的矢量图形软件常 ...

  8. latex中表格怎么加标题_Latex中表格添加注释的方法

    latex中表格添加注释,网上方法较多,然而很多注释添加之后并不美观,最好的注释肯定是,注释和表格同宽,注释左对齐.要做到这点,有一组代码可以实现,如何操作需要在这里详细说明. 就像上图的注释. st ...

  9. 矢量在全球规则格网地形上的叠加绘制方法

    矢量在全球规则格网地形上的叠加绘制方法 为了精确.高效地将传统的且对地形有约束作用的二维矢量数据叠加绘制到多分辨率全球地形上,提出了一种基于矢量高程纹理矢量叠加绘制方法.首先将矢量高程渲染到矢量高程纹 ...

最新文章

  1. linux 两个虚拟机 socket本地,两台虚拟机Linux系统socket通信
  2. 业界丨一文详解腾讯布局AI生态的四大战略
  3. java maven mvn clean package 打包执行流程
  4. 5.1 代价函数-机器学习笔记-斯坦福吴恩达教授
  5. 磁盘上重复的贴图在内存中也会重复存在
  6. 三十四、Scrapy中的CrawlSpider
  7. LeetCode Algorithm 101. Symmetric Tree
  8. Javascript如何判断对象是否相等
  9. AcWing 1087. 修剪草坪28
  10. 数据挖掘的相关知识例子
  11. TinyFrame升级之五:全局缓存的设计及实现
  12. Matlab添加BNT工具箱
  13. React 16 Jest ES6 Class Mocks(使用ES6语法类的模拟) 实例三、四
  14. 智能优化算法应用:基于GWO优化的Renyi熵图像多阈值分割 - 附代码
  15. wifi 性能 测试 android,WiFi性能测试
  16. Radius 协议介绍
  17. 2018年大数据趋势 :人工智能... 数据分析将包含可视化模型...
  18. Storage System
  19. 使用环信sdk做一个简单的聊天APP
  20. android电视原理图,电视机的基本工作原理及结构组成

热门文章

  1. 调用门、堆栈切换与调用过程返回
  2. Tensorflow卷积神经网络
  3. static关键字-1
  4. c/c++处理命令行参数int argc, char **argv的方法
  5. android sqlcipher 加密,Android 数据库加密 SQLCipher使用方法
  6. 依赖注入的三种方式_Spring IoC是如何进行依赖注入的
  7. 服务器按ctrl alt delete没有用_用完这些快捷键,我再也回不去了(Win系统篇)
  8. nodejs异步流程控制
  9. Android、Java泛型扫盲
  10. 引入jQuery的src设置