这是我想要绘制的流程图,存在一些问题:
图表未居中
如何在矩形内和箭头上方开始换行
如何让箭头的长度自动和文字的长度兼容
如果可以的话,图中的箭头应该怎样画。
这是我的代码,你能帮我修改我的代码以获得图中的流程图吗?
\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
一些忠告:
\tikzstyle
已被弃用,请改用\tikzset
:应该使用 \tikzset 还是 \tikzstyle 来定义 TikZ 样式?- 对于库来说也是一样
arrows
,使用arrows.meta
- 对于 也同样如此
right of=...
,使用right=... of
:PGF/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}