[latex]使用tikz画流程图

本文详细介绍了如何使用LaTeX中的tikz宏包绘制流程图,包括定义控件样式、放置控件以及连线的步骤。通过提供具体的代码示例和流程图展示,旨在帮助读者轻松掌握流程图绘制技巧。
部署运行你感兴趣的模型镜像

本文讲述使用tikz宏包画流程图的方法。

\usepackage{tikz}
\usetikzlibrary{arrows,shapes,chains}

与图片相同,也是包含在\begin{figure}…\end{figure}中。

绘制流程图一共分为两个步骤,步骤一是定义控件样式。

给一个例子,定义一个矩形框:

\tikzstyle{ process } = [rectangle, minimum width = 3cm, minimum height = 1cm, text centered, draw = black]

ID为process,类型为rectangle,最小宽度3cm,最小高度1cm,文字居中,颜色为black。此处定义最小宽高是因为,该控件定义后实际运用中,宽高是可变的。

再给一个定义箭头的例子,意义相似,其中->表示箭头,–表示直线:

\tikzstyle{ arrow2 } = [thick, ->, >= stealth]

所有的控件都需要先定义再使用,包括矩形、平行四边形等形状以及直线、箭头等连接符都要预先定义。

在定义控件结束后,在\begin{ tikzpicture }[node distance = 1.5cm] … \end{ tikzpicture }中放置控件。其中node distance = 1.5cm表示流程图中每个框的间距默认为1.5cm。给一个放置控件的例子。

\node (in1) [io]{};
\node (pro1) [startstop, below of=in1] {\small 线性滤波};
\node(in2)[io, left of = in1, xshift = -2.5cm]{ \small 亮度 };
\coordinate [label=left:{\small 输入图像}] (A) at (-1.5,0);

第一行表示放置控件,控件名为in1,控件类型为io,在前面定义。此为第一个控件,无需指明放置位置。后面大括号中为空,表示其中没有文字。

第二行放置第二个控件,控件名为pro1,控件类型为startstop,放置位置为在in1的下方。前面指明默认间距为1.5cm,则实际位置为pro1放置在in1下方1.5cm处。其中文字为线性滤波,\small表示字号为small。

第三行放置第三个控件,控件名为in2,在in1左边,默认间距为1.5cm,但有xshift=-2.5cm,这样in2就放置在in1的左边4cm处。其中文字为亮度。

第四行表示放置文字,在(-1.5,0)位置,文字是输入图像。
在放置完成控件以后,开始放置连线。

\draw[arrow](pro1) -- (in1);

表示连线,线条样式为arrow,在前面定义,连接pro1和in1。

最后给一个流程图的例子。流程图的原图来自于Itti的显著性论文。里面基本包含了常用流程图画法中的所有要点。

Itti流程图

Latex代码

\begin{ figure }[htb]
\centering
%定义形状样式
\tikzstyle{ startstop } = [rectangle, rounded corners, minimum width = 3cm, minimum height = 0.7cm, text centered, draw = black]
\tikzstyle{ startstop2 } = [rectangle, rounded corners, minimum width = 13cm, minimum height = 0.7cm, text centered, draw = black]
\tikzstyle{ io } = [trapezium, trapezium left angle = 30, trapezium right angle = 150, minimum width = 3cm, text centered, draw = black, fill = white]
\tikzstyle{ io2 } = [trapezium, trapezium left angle = 30, trapezium right angle = 150, minimum width = 2.5cm, draw = black, fill = white]
\tikzstyle{ io3 } = [trapezium, trapezium left angle = 30, trapezium right angle = 150, minimum width = 2cm, draw = black, fill = white]
\tikzstyle{ process } = [rectangle, minimum width = 3cm, minimum height = 1cm, text centered, draw = black]
\tikzstyle{ decision } = [diamond, minimum width = 3cm, minimum height = 1cm, text centered, draw = black]
\tikzstyle{ arrow } = [thick, -, >= stealth]
\tikzstyle{ arrow2 } = [thick, ->, >= stealth]

\begin{ tikzpicture }[node distance = 1.5cm]
% 定义流程图具体形状
\coordinate[label = left:{\small 输入图像}](A) at(-1.5, 0);
\node(in1) [io] {};
\node(pro1) [startstop, below of = in1] {\small 线性滤波};

\node(in2 - 2)[io3, below of = pro1, yshift = -0.6cm]{};
\node(in3 - 2)[io3, left of = in2 - 2, xshift = -2.5cm]{};
\node(in4 - 2)[io3, right of = in2 - 2, xshift = 2.5cm]{};

\node(in2 - 1)[io2, below of = pro1, yshift = -0.3cm]{};
\node(in3 - 1)[io2, left of = in2 - 1, xshift = -2.5cm]{};
\node(in4 - 1)[io2, right of = in2 - 1, xshift = 2.5cm]{};

\node(in2) [io, below of = pro1] {\small 颜色};
\node(in3)[io, left of = in2, xshift = -2.5cm]{ \small 亮度 };
\node(in4)[io, right of = in2, xshift = 2.5cm]{ \small 方向 };

\node(in5)[startstop2, below of = in2 - 2]{ \small Center - Surround差异计算及归一化 };

\node(in6 - 2)[io3, below of = in5, yshift = -0.6cm]{};
\node(in7 - 2)[io3, left of = in6 - 2, xshift = -2.5cm]{};
\node(in8 - 2)[io3, right of = in6 - 2, xshift = 2.5cm]{};

\node(in6 - 1)[io2, below of = in5, yshift = -0.3cm]{};
\node(in7 - 1)[io2, left of = in6 - 1, xshift = -2.5cm]{};
\node(in8 - 1)[io2, right of = in6 - 1, xshift = 2.5cm]{};

\node(in6) [io, below of = in5] {};
\node(in7)[io, left of = in6, xshift = -2.5cm]{};
\node(in8)[io, right of = in6, xshift = 2.5cm]{};

\coordinate[label = left:{\small 特征图}](B) at(-1, -6.2);
\coordinate[label = left:{\small (12张)}](C) at(-1.5, -7.5);
\coordinate[label = left:{\small (6张)}](D) at(2.7, -7.5);
\coordinate[label = left:{\small (24张)}](E) at(6.7, -7.5);

\node(in9)[startstop2, below of = in6 - 2]{ \small 跨尺度合并及归一化 };

\node(in10) [io, below of = in9] {};
\node(in11)[io, left of = in10, xshift = -2.5cm]{};
\node(in12)[io, right of = in10, xshift = 2.5cm]{};

\coordinate[label = left:{\small 醒目图}](F) at(-1, -9.5);
\node(in13) [startstop, below of = in10] {\small 线性组合};
\node(in14) [io, below of = in13] {};
\coordinate[label = left:{\small 显著图}](G) at(-1, -13);

\node(in15) [startstop, below of = in14] {\small 赢者取全};
\coordinate[label = left:{\small 显著位置}]() at(1, -16.1);
\coordinate[label = left:{\small 反馈抑制}]() at(4.5, -14.7);

%连线
\draw[arrow](pro1) -- (in1);
\draw[arrow](pro1) -- (in2);
\draw[arrow](pro1) -- (in3);
\draw[arrow](pro1) -- (in4);
\draw[arrow](0, -4.75) -- (in2 - 2);
\draw[arrow](-4, -4.75) -- (in3 - 2);
\draw[arrow](4, -4.75) -- (in4 - 2);
\draw[arrow](0, -5.45) -- (in6);
\draw[arrow](-4, -5.45) -- (in7);
\draw[arrow](4, -5.45) -- (in8);
\draw[arrow](0, -8.35) -- (in6 - 2);
\draw[arrow](-4, -8.35) -- (in7 - 2);
\draw[arrow](4, -8.35) -- (in8 - 2);
\draw[arrow](0, -9.05) -- (in10);
\draw[arrow](-4, -9.05) -- (in11);
\draw[arrow](4, -9.05) -- (in12);
\draw[arrow](in13) -- (in10);
\draw[arrow](in13) -- (in11);
\draw[arrow](in13) -- (in12);
\draw[arrow](in13) -- (in14);
\draw[arrow](in14) -- (in15);
\draw[arrow](in15) -- (0, -15.8);
\draw[arrow](0, -15.4) -- (2.5, -15.4);
\draw[arrow](2.5, -14) -- (2.5, -15.4);
\draw[arrow2](2.5, -14) -- (0, -14);
\end{ tikzpicture }
\caption{ IT算法流程\cite{ Itti } }
\end{ figure }

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

LaTeX使用 TikZ 包绘制流程图是一种强大且灵活的方式,适合需要高质量图形输出的学术和技术文档。TikZ 是一个基于 PGF 的前端宏包,提供了丰富的绘图功能,支持从基本图形到复杂流程图的绘制。以下是关于 TikZ 绘制流程图的教程、示例和相关说明。 ### TikZ 流程图的基本结构 TikZ 流程图通常在 `tikzpicture` 环境中定义。流程图的核心元素包括节点(`node`)和连接线(`edge` 或 `--`)。通过定义节点的位置和样式,并使用箭头连接这些节点,可以构建出结构清晰的流程图。 一个基本的 `tikzpicture` 环境如下: ```latex \begin{tikzpicture} [every node/.style={rectangle, draw, fill=blue!20}] \node (start) at (0,0) {Start}; \node (step1) at (2,0) {Step 1}; \draw[->] (start) -- (step1); \end{tikzpicture} ``` 在该示例中,定义了两个矩形节点(`rectangle`),并使用箭头(`->`)将它们连接起来[^2]。 --- ### TikZ 流程图的样式定义 为了简化流程图的绘制,通常会定义一些样式,以统一节点的外观和布局。例如,可以定义一个名为 `block` 的样式,用于表示流程图中的步骤节点: ```latex \tikzstyle{block} = [rectangle, draw, fill=blue!20, text width=5em, text centered, rounded corners, minimum height=4em] \tikzstyle{arrow} = [thick,->,>=stealth] ``` 然后在 `tikzpicture` 中使用这些样式: ```latex \begin{tikzpicture} \node [block] (start) {Start}; \node [block, below of=start] (step1) {Step 1}; \draw [arrow] (start) -- (step1); \end{tikzpicture} ``` 通过这种方式,可以提高代码的可读性和可维护性[^1]。 --- ### 简化箭头连接 TikZ 提供了简化箭头连接的语法,如使用 `-|` 和 `|-` 来绘制折线箭头。例如: ```latex \draw [->] (step1) -| (step2); ``` 这种语法可以避免手动计算坐标,使流程图更加直观。然而,这种简化方式在处理复杂的节点标签和非标准箭头时可能会带来一定的学习成本[^3]。 --- ### 示例:简单流程图 以下是一个完整的流程图示例,展示了从开始到结束的基本流程: ```latex \documentclass{article} \usepackage{tikz} \usetikzlibrary{arrows, positioning} \begin{document} \tikzstyle{startstop} = [rectangle, rounded corners, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=red!30] \tikzstyle{process} = [rectangle, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=orange!30] \tikzstyle{arrow} = [thick,->,>=stealth] \begin{tikzpicture}[node distance=2cm] \node (start) [startstop] {Start}; \node (step1) [process, below of=start] {Step 1}; \node (step2) [process, below of=step1] {Step 2}; \node (end) [startstop, below of=step2] {End}; \draw [arrow] (start) -- (step1); \draw [arrow] (step1) -- (step2); \draw [arrow] (step2) -- (end); \end{tikzpicture} \end{document} ``` 该示例定义了两种样式 `startstop` 和 `process`,分别用于表示流程的开始/结束和中间步骤。箭头连接这些节点,形成一个完整的流程图[^1]。 --- ### 示例:带分支的流程图 对于更复杂的流程图,例如包含条件判断的分支流程,可以使用 `if` 节点并连接不同的分支: ```latex \tikzstyle{decision} = [diamond, minimum width=3cm, minimum height=1cm, text centered, draw=black, fill=green!30] \begin{tikzpicture}[node distance=2cm] \node (start) [startstop] {Start}; \node (step1) [process, below of=start] {Step 1}; \node (dec1) [decision, below of=step1] {Condition?}; \node (step2) [process, below of=dec1, yshift=-1cm] {Step 2}; \node (end) [startstop, right of=dec1, xshift=3cm] {End}; \draw [arrow] (start) -- (step1); \draw [arrow] (step1) -- (dec1); \draw [arrow] (dec1) -- node[anchor=east] {Yes} (step2); \draw [arrow] (dec1.east) -- node[anchor=south] {No} (end.west); \end{tikzpicture} ``` 在这个示例中,`decision` 样式用于表示条件判断节点,并通过箭头连接不同的分支,标注了“是”和“否”的判断结果[^3]。 --- ### 总结 通过 TikZ,用户可以灵活地定义节点、样式和连接线,从而创建结构清晰、美观的流程图。结合适当的样式定义和简化语法,可以显著提高绘图效率。对于初学者,建议从简单的流程图开始,逐步掌握复杂功能,如条件分支、折线箭头等。 ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值