我需要一个包含大量流程和子流程级别的 PDF。我的想法是用 tikz 制作,但我不知道如何简单而自动地构建它。像这样例子我首先想到的是 hyperref 包。但是这个例子似乎有点太复杂,而且对于大型流程来说容易出错。(我对 tikz 的专业知识不是最好的)
也许你们中的一些人有更好的解决方法。或者也许你知道比 tikz 更好的解决方案。关于一些支持我会很高兴 :)
这是一个我需要的例子。
在左上角你可以看到源。如果你点击源,你就会回到主进程。
双击其中一个进程将打开一个新级别。例如像这样。
答案1
这三个页面都相互链接如下:
- 第 1 页上的文本“大过程”链接到第 2 页。
- 第 2 页上的文本“大过程”链接到第 1 页。
- 第 2 页上的文本“流程 1”链接到第 3 页。
- 第 3 页的文本“大过程”链接到第 1 页。
- 第 3 页上的文本“流程 1”链接到第 2 页。
链接是通过hyperref
特定页码实现的。如果您
\hyperlink{page.1}{text}
然后文档中会出现“文本”一词,单击它会链接到第 1 页。既然我们可以建立链接,我们只需要绘制流程图。为此,我定义了一种样式:
\tikzset{box/.style={draw=borderColour, very thick, fill=#1, minimum width=4cm, minimum height=2cm, text=white}}
像这样使用时,\node[box=colour] at (x, y) {text}
会创建一个矩形节点,中心为,(x, y)
宽度为 4cm,高度为 2cm(除非文本超出此范围,否则它将是文本的大小)。此框填充了我们为 的任何颜色,colour
并且框的边框为 的颜色borderColour
。这将我们带到此流程图定义的颜色(需要xcolor
颜色html
模型):
\definecolor{borderColour}{HTML}{2f528f}
\definecolor{myBlue}{HTML}{4472c4}
\definecolor{myOrange}{HTML}{ed7d31}
\definecolor{myGreen}{HTML}{92d050}
这些是从提供的示例中获取的。最后,我为连接箭头定义了一种样式:
\tikzset{connect/.style={->, >=latex, ultra thick, borderColour}}
现在我们有了这些,我们只需要按照所需的方式将这些元素放在一起:
\documentclass{article}
\usepackage{tikz}
\usepackage{xcolor}
\usepackage[hidelinks]{hyperref}
\renewcommand{\familydefault}{\sfdefault}
% Define colours
\definecolor{borderColour}{HTML}{2f528f}
\definecolor{myBlue}{HTML}{4472c4}
\definecolor{myOrange}{HTML}{ed7d31}
\definecolor{myGreen}{HTML}{92d050}
% Define tikz styles
\tikzset{box/.style={draw=borderColour, very thick, fill=#1, minimum width=4cm, minimum height=2cm, text=white}}
\tikzset{connect/.style={->, >=latex, ultra thick, borderColour}}
\begin{document}
~ % Needed so \vfill doesn't get absorbed
\vfill
\begin{center}
\begin{tikzpicture}
\node[box=myBlue] at (0, 0) {\hyperlink{page.2}{Big Process}};
\end{tikzpicture}
\end{center}
\vfill
\newpage
Source: \hyperlink{page.1}{\textcolor{myBlue}{Big Process}}
\vfill
\begin{center}
\begin{tikzpicture}
\node[box=myOrange] (P1) at (0, 0) {\hyperlink{page.3}{Process 1}};
\node[box=myOrange] (P2) at (0, -5) {Process 2};
\node[box=myOrange] (P3) at (0, -10) {Process 3};
\draw[connect] (P1) -- (P2);
\draw[connect] (P2) -- (P3);
\draw[connect] (P3.east) -- ++(2, 0) -- ++(0, 10) -- (P1);
\end{tikzpicture}
\end{center}
\vfill
\newpage
Source: \hyperlink{page.1}{\textcolor{myBlue}{Big Process}} / \hyperlink{page.2}{\textcolor{myOrange}{Process 1}}
\vfill
\begin{center}
\begin{tikzpicture}
\node[box=myGreen] (SP1) at (0, 0) {Sub-Process 1};
\node[box=myGreen] (SP2) at (0, -5) {Sub-Process 2};
\node[box=myGreen] (SP3) at (0, -10) {Sub-Process 3};
\draw[connect] (SP1) -- (SP2);
\draw[connect] (SP2) -- (SP3);
\draw[connect] (SP3.east) -- ++(2, 0) -- ++(0, 5) -- (SP2);
\draw[connect] (SP2.west) -- ++(-2, 0) -- ++(0, 5) -- (SP1);
\end{tikzpicture}
\end{center}
\vfill
\end{document}
结果是