latex 中的简单流程图

latex 中的简单流程图

在此处输入图片描述

这是我想要绘制的流程图,存在一些问题:

  1. 图表未居中

  2. 如何在矩形内和箭头上方开始换行

  3. 如何让箭头的长度自动和文字的长度兼容

  4. 如果可以的话,图中的箭头应该怎样画。

这是我的代码,你能帮我修改我的代码以获得图中的流程图吗?

\documentclass[UTF8]{ctexart}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric, arrows}

\begin{document}
\pagestyle{empty}

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

\begin{tikzpicture}[node distance=2cm]

\node (p1) [process] {Default protection buyer};
\node (p2) [process, right of=p1, xshift=4cm] {Default protection seller};

\draw [arrow](p1) -- node[left, pos=1] {90 basis points per year}(p2);
\draw [arrow](p2) -- node[right, pos=1] {Payment if default by reference entity}(p1);

\end{tikzpicture}
\end{document}

答案1

一些忠告:

  1. \tikzstyle已被弃用,请改用\tikzset应该使用 \tikzset 还是 \tikzstyle 来定义 TikZ 样式?
  2. 对于库来说也是一样arrows,使用arrows.meta
  3. 对于 也同样如此right of=...,使用right=... ofPGF/TikZ 中“right of=”和“right=of”之间的区别

如果您设置了节点的文本宽度,则不需要 minipages,但您是否ctexart因为必须使用 documentclass 而使用它?问题是此类设置了双倍间距,这也会干扰tikzpicture。我已经解决了这个问题,\singlespacing为所有设置tikzpicture(感谢更改普通文本的行距,但不更改表格或诗句的行距)。

我还添加了样式参数myarrow,以便您可以将箭头放置在所需的任何位置。

\documentclass[UTF8]{ctexart}
\usepackage{mwe}% for testing purpose only

\usepackage{tikz}
\usetikzlibrary{arrows.meta, positioning}
\usetikzlibrary{decorations.markings}
\tikzset{
    process/.style={
        text width=2.5cm, draw,
        minimum height=1.6cm,
        text centered,
        },
    description/.style={
        text centered,
        text width=10cm,
    },
    myarrow/.style={
        postaction={
            decorate, decoration={
                markings,mark=at position #1 with {\arrow{Stealth};
                }
            }
        }
    },
}
\usepackage{setspace}
\usepackage{etoolbox}
\AtBeginEnvironment{tikzpicture}{\singlespacing}

\begin{document}
    \blindtext
    \pagestyle{empty}
\begin{center}
    \begin{tikzpicture}
    \node[process] (p1) {Default\\ protection\\ buyer};
    \node[process, right=16em of p1]  (p2) {Default\\ protection\\ seller};

    \draw[myarrow=.9] ([yshift=2ex]p1.east) -- node[description, above] {90 basis points per year} ([yshift=2ex]p2.west);
    \draw[myarrow=.9] ([yshift=-2ex]p2.west) -- node[description, below] {Payment if default by\\ reference entity} ([yshift=-2ex]p1.east);

    \end{tikzpicture}
\end{center}    
\blindtext
\end{document}

在此处输入图片描述

相关内容