对于这个 TikZ 图形,这些shorten
语句阻止最顶部箭头的尾部与input
节点发生碰撞,同样阻止最底部节点的头部与output
节点发生碰撞。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}[>=stealth]
\node [draw] (compiler) {Compiler};
\node [coordinate, above of=compiler] (input) {};
\node [coordinate, below of=compiler] (output) {};
\draw [->, shorten <=0.5em] (input) node {source program} -- (compiler);
\draw [->, shorten >=0.5em] (compiler) -- (output) node {target program};
\end{tikzpicture}
\end{document}
上述代码的输出是,
是否有一种更合适的方法,不需要手动设置间距,而是可以自动解决此问题?
我一直没能找到任何与此图类似的示例。我发现的大多数图表都有水平方向的箭头,文本悬停在箭头上方。
答案1
我不明白为什么你要在同一个地方添加两个节点。在定义input
和节点时,在其中添加文本,然后删除该选项。然后从包含文本的节点形状的边缘绘制箭头。output
coordinate
还请注意,该of=
语法已被弃用,取而代之的是加载positioning
库并说=of
,请参阅PGF/TikZ 中“right of=”和“right=of”之间的区别
\documentclass[border=3mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric,positioning}
\begin{document}
\begin{tikzpicture}[>=stealth]
\node [draw] (compiler) {Compiler};
\node [above=of compiler] (input) {source program};
\node [below=of compiler] (output) {target program};
\draw [->] (input) -- (compiler);
\draw [->] (compiler) -- (output);
\end{tikzpicture}
\end{document}