使用ConTeXt绘制程序流程图
流程图这种东西貌似已经过时了,《人月神话》中直陈“流程图是被吹捧得过分的一种程序文档……很多程序甚至不需要流程图,很少有程序需要一页纸以上的流图”,因为早期引入流程图的时代是机器语言/汇编语言编程时代,那时是将程序流程图作为描述程序结构的一种逻辑语言使用的,但现在使用高级编程语言(伪代码)可以取而代之,所以在“现实中,流程图被鼓吹的程度远大于它们的实际作用”。
如果只是针对编写程序而言,我赞同《人月神话》的观点。不过,对于程序之外的事务流程描述,在不具备相应的逻辑语言时,流程图依然是一种直观的事务流程描述方式。
用于绘制流程图的工具通常是一些交互式绘图工具,譬如在 Windows 平台下,有 MS Office 软件内含的流程图绘制工具,比较专业一点的是 Viso;Linux 下比较有名的是 Dia(也可在 Windows 下运行)。这些软件没什么好说的,鼠标拖拖拽拽制造一些图框,然后在其中填上一些文本即可。
有一些矢量图形描述语言也可用于流程图绘制,譬如 MetaPost、PGF/TikZ、Asymptote 等,LaTeX 也有一些绘图宏包。ConTeXt 提供了一个 chart 模块,它封装了一些 MetaPost 绘图语句,为流程图绘制提供了友好的支持,这也是本文所讲述的主要内容。
一份 ConTeXt 绘制的流程图示例
下面的框图用于描述 CAPP 系统元素及工作流程,本文以此为例讲述 ConTeXt 的 chart 模块的用法。
所用完整代码如下:
\usemodule[chinese]
\usemodule[chart]
\setuppagenumbering[state=no]
\starttext
\setupFLOWcharts[
% option=test, % 测试模式
nx=5,
ny=4,
dx=1.2\bodyfontsize,
dy=1.2\bodyfontsize,
width=8\bodyfontsize,
height=5\bodyfontsize,
maxwidth=\textwidth]
\startFLOWchart [capp]
\startFLOWcell
\name{partFiles}
\location{1,1}
\shape{34}
\text{零件族文件}
\connection[bt]{partSearch}
\stopFLOWcell
\startFLOWcell
\name{processFiles}
\location{3,1}
\shape{34}
\text{标准工艺文件}
\connection[bt]{processExtract}
\stopFLOWcell
\startFLOWcell
\name{ruleFiles}
\location{4,1}
\shape{34}
\text{操作规程文件}
\connection[bt]{ruleExtract}
\stopFLOWcell
\startFLOWcell
\name{applicationFiles}
\location{5,1}
\shape{34}
\text{应用文件}
\connection[bt]{workcellProcessor}
\stopFLOWcell
\startFLOWcell
\name{partSearch}
\location{1,2}
\shape{action}
\text{零件族检索}
\connection[rl]{titleInput}
\stopFLOWcell
\startFLOWcell
\name{titleInput}
\location{2,2}
\shape{action}
\text{文件标题输入}
\connection[rl]{processExtract}
\stopFLOWcell
\startFLOWcell
\name{processExtract}
\location{3,2}
\shape{action}
\text{标准文件工艺文件提取}
\connection[rl]{ruleExtract}
\stopFLOWcell
\startFLOWcell
\name{ruleExtract}
\location{4,2}
\shape{action}
\text{操作规程提取、编辑}
\connection[rl]{workcellProcessor}
\connection[bt]{processStorage}
\stopFLOWcell
\startFLOWcell
\name{workcellProcessor}
\location{5,2}
\shape{action}
\text{工作单元处理器}
\connection[br]{processStorage}
\stopFLOWcell
\startFLOWcell
\name{partCategoryCode}
\location{1,3}
\shape{procedure}
\text{零件分类编码}
\connection[tb]{partSearch}
\stopFLOWcell
\startFLOWcell
\name{processPlan}
\location{2,4}
\shape{multidocument}
\text{工艺规划}
\stopFLOWcell
\startFLOWcell
\name{processCreate}
\location{3,4}
\shape{action}
\text{工艺规划生成}
\connection[lr]{processPlan}
\stopFLOWcell
\startFLOWcell
\name{processStorage}
\location{4,4}
\shape{34}
\text{工艺规划存储}
\connection[lr]{processCreate}
\stopFLOWcell
\stopFLOWchart
\midaligned{\FLOWchart[capp]}
\stoptext
如何使用 ConTeXt 绘制流程图
结合上一小节提供的示例,阅读 CHARTS uncoverd 文档。在对 ConTeXt 流程图绘制过程有所了解后,可利用 http://www.im.ps.pl/context/?en 提供的在线创建流程图功能快速生成 ConTeXt 代码。