1. 简介

流程图是一种非常有效的工具,可以以图形化方式清晰表达流程和算法逻辑,例如条件判断、循环结构等。LaTeX 是一种基于标记和标签的文档排版系统,它不仅仅用于写论文,还可以通过各种扩展包实现图表绘制。

在众多 LaTeX 图形扩展包中,TikZ 是一个功能强大且通用的矢量绘图包,特别适合绘制流程图。它提供了丰富的图形元素和连接线样式,可以让我们从零开始构建专业的流程图。

在本文中,我们将学习如何使用 LaTeX 和 TikZ 绘制流程图:

  • 如何搭建 TikZ 绘图环境
  • 常见流程图元素的定义和使用
  • 如何使用绝对坐标或相对定位绘制完整流程图

2. LaTeX/TikZ 图形环境

要在 LaTeX 中使用 TikZ 绘图,需要引入相关包并设置好绘图环境。以下是我们后续示例中会用到的基础模板:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes, arrows}
\begin{document}
\begin{tikzpicture}
% 绘图内容写在这里
\end{tikzpicture}
\end{document}

说明:

  • \documentclass{standalone}:表示我们只绘制一张图,LaTeX 会自动生成一个仅包含这张图的 PDF。
  • \usepackage{tikz}:引入 TikZ 包。
  • \usetikzlibrary{shapes, arrows}:使用 TikZ 的图形形状和箭头样式库。
  • \begin{tikzpicture} ... \end{tikzpicture}:这是 TikZ 图形的主环境,我们将在其中定义图形元素。

2.1. TikZ 坐标系统

TikZ 使用一个二维笛卡尔坐标系来定位图形元素,默认坐标原点 (0,0) 在图的中心。

  • 正 X 向右,正 Y 向上
  • 负 X 向左,负 Y 向下

比如:

  • (2,3) 表示向右 2 个单位、向上 3 个单位的位置
  • (-1,-2) 表示向左 1 个单位、向下 2 个单位的位置

下图展示了 TikZ 坐标系统中不同象限的位置关系:

teste baeldung


3. TikZ 中的流程图元素

流程图通常由多个基本图形元素组成。TikZ 提供了多种图形样式,我们可以自定义这些样式来表示流程图中的不同逻辑节点。

⚠️ 这些样式定义通常放在 \begin{document} 之前

3.1. Terminator(开始/结束)

表示流程的开始或结束,通常用圆角矩形表示。

\tikzstyle{terminator} = [rectangle, draw, text centered, rounded corners, minimum height=2em]

使用方式:

\node [terminator] at (0,0) (start) {Start};

效果:

terminator


3.2. Process(处理)

表示流程中的一个处理步骤,通常用矩形表示。

\tikzstyle{process} = [rectangle, draw, text centered, minimum height=2em]

使用方式:

\node [process] at (0,0) (process) {Process};

效果:

process


3.3. Decision(判断)

表示条件判断,通常用菱形表示。

\tikzstyle{decision} = [diamond, draw, text centered, minimum height=2em]

使用方式:

\node [decision] at (0,0) (decision) {Decision};

效果:

decision


3.4. Data(数据输入/输出)

表示输入或输出操作,通常用梯形表示。

\tikzstyle{data} = [trapezium, draw, text centered, trapezium left angle=60, trapezium right angle=120, minimum height=2em]

使用方式:

\node [data] at (0,0) (data) {Data\\In/Out};

效果:

data


3.5. Connector(连接线)

连接线用于连接流程图中的各个节点,箭头表示流程方向。

\tikzstyle{connector} = [draw, -latex']

使用方式:

\path [connector] (start) -- (process);

也可以使用折线连接:

\path [connector] (decision) |- (process);

效果:

connector2


4. 流程图绘制示例

接下来我们通过两个示例来展示如何使用 TikZ 绘制完整的流程图:

4.1. 使用绝对坐标绘制流程图

通过指定每个节点的具体坐标,可以更灵活地控制流程图布局。

\begin{tikzpicture}
\node [terminator, fill=blue!20] at (0,0) (start) {\textbf{Start}};
\node [data, fill=blue!20] at (0,-2) (data) {Provide data};
\node [decision, fill=blue!20] at (0,-5) (decision) {Valid data?};
\node [process, fill=red!20] at (3.5,-5) (error) {Error};
\node [process, fill=green!20] at (0,-8) (success) {Success};
\node [terminator, fill=blue!20] at (0,-10) (end) {\textbf{End}};
\node[draw=none] at (1.85, -4.75) (no) {No};
\node[draw=none] at (0.35, -6.75) (yes) {Yes};
\path [connector] (start) -- (data);
\path [connector] (data) -- (decision);
\path [connector] (decision) -- (error);
\path [connector] (decision) -- (success);
\path [connector] (error) |- (end);
\path [connector] (success) -- (end);
\end{tikzpicture}

效果如下:

flowchart01


4.2. 使用相对定位绘制流程图

使用相对定位可以让流程图结构更清晰,减少手动调整坐标的繁琐。

\begin{tikzpicture}[node distance = 3cm]
\node [terminator, fill=blue!20] (start) {\textbf{Start}};
\node [data, fill=blue!20, below of=start] (data) {Provide data};
\node [decision, fill=blue!20, below of=data] (decision) {Valid data?};
\node [process, fill=red!20, right of=decision] (error) {Error};
\node [process, fill=green!20, below of=decision] (success) {Success};
\node [terminator, fill=blue!20, below of=success] (end) {\textbf{End}};
\node[draw=none] at (1.60, -5.75) (no) {No};
\node[draw=none] at (0.35, -7.80) (yes) {Yes};
\path [connector] (start) -- (data);
\path [connector] (data) -- (decision);
\path [connector] (decision) -- (error);
\path [connector] (decision) -- (success);
\path [connector] (error) |- (end);
\path [connector] (success) -- (end);
\end{tikzpicture}

效果如下:

flowchart02


5. 总结

通过本文我们学习了如何使用 LaTeX 和 TikZ 绘制流程图:

✅ TikZ 提供了丰富的图形元素和灵活的定位方式
✅ 使用相对定位可以提高流程图的可读性和可维护性
✅ TikZ 支持多种输出格式(如 PDF、PNG)便于集成到文档中

虽然学习曲线略陡,但一旦掌握,TikZ 是一个非常强大且专业的绘图工具。对于需要频繁绘制技术图表的技术人员来说,值得花时间掌握。


原始标题:How to Draw Flowcharts With LaTeX

» 下一篇: 二分插入排序