我想要的是一个框图,其中有一个名为“API”的中心节点,左边有一个名为“用户”的节点,右边有一个名为“工作流”的节点。
但是,由于工作流节点的文本较长,因此它会与其他节点挤压在一起:
现在我知道我可以增加node distance
参数,但是有没有办法说“总是让节点间隔给定的距离”?这样它就不依赖于节点“矩形”的大小了?
以下是该图表的来源:
\begin{tikzpicture}[node distance=15mm]
\tikzstyle{block} = [inner sep=2mm, rectangle, draw, fill=blue!20]
\node [block] (api) {API};
\node [block, right of=api] (workflow) {Workflow};
\node [block, left of=api] (user) {User};
% Connect the blocks
\draw [->] (user) to (api);
\draw [->] (api) to (workflow);
\end{tikzpicture}
编辑:我应该能够使用可以双向移动的箭头,并在其上方和下方添加新节点。
答案1
图书馆chains
TikZ
专门针对此问题。以下是一个简单的示例:
\documentclass{article}
\usepackage{tikz}% http://ctan.org/pkg/pgf
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}[
start chain,
node distance=5mm,
every node/.style={draw,on chain,join,fill=blue!20,inner sep=2mm},
every join/.style={->}
]
\node {User};
\node {API};
\node {Workflow};
\end{tikzpicture}
\end{document}
编辑:
箭头可以通过join= by <->
规范传递给链节点。这是另一个带有随机单词的简单示例。手册中详细解释了用于分支和继续链的库命令。
\documentclass{article}
\usepackage{tikz}% http://ctan.org/pkg/pgf
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}[
start chain,
node distance=5mm,
mynode/.style={draw,fill=blue!20,inner sep=2mm,join=by #1},
mynode/.default=->
]
\node [mynode,on chain] {User};
\node [mynode,on chain] {API};
\node [mynode=<->,on chain] {Workflow};
\node [mynode=<->,on chain=going below] {Update};
\node [mynode=<-,on chain] {Bug Tracker};
\end{tikzpicture}
通常,我们需要保持链节点样式相对于图片的其余部分保持本地化,因此我们可以使用范围,而不是向一般 tikzpicture 环境提供选项。
答案2
这可能无法充分解决您的问题,但提供了一些解决方法。您可以anchor
对周围节点使用非中心节点:
\documentclass{article}
\usepackage{tikz}% http://ctan.org/pkg/pgf
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
\tikzstyle{block} = [inner sep=2mm, rectangle, draw, fill=blue!20]
\node [block] (api) {API};
\node [block, right=1cm of api] (workflow) {Workflow};
\node [block, left=1cm of api] (user) {User};
% Connect the blocks
\draw [->] (user) to (api);
\draw [->] (api) to (workflow);
\end{tikzpicture}
\end{document}
使用以下方法可以轻松在上方和下方绘制其他节点
\node [block, above=1cm of api] (aboveapi) {Above api};
\node [block, below=1cm of api] (belowapi) {Below api};
箭头方向可以使用以下方法修改
\draw [<->] (..) to (..);
表示双箭头。