![具有多个输入的节点在预定义侧对齐](https://linux22.com/image/372001/%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AA%E8%BE%93%E5%85%A5%E7%9A%84%E8%8A%82%E7%82%B9%E5%9C%A8%E9%A2%84%E5%AE%9A%E4%B9%89%E4%BE%A7%E5%AF%B9%E9%BD%90.png)
我目前正在尝试使用 tikz 创建以下图(很好):
这是我的第一次尝试,但并没有按我想要的方式进行:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\tikzstyle{block} = [draw, rectangle]
\begin{tikzpicture}[auto, node distance=2cm]
\node [block] (A) {A};
\node [block, below right=of A] (B) {B};
\node [block, right= of B] (C) {C};
\draw [draw,->] (A)-|(B);
\draw [draw,->] (B)--(C);
\draw [draw,->] (C)--(B);
\end{tikzpicture}
\end{document}
我的第一个问题是,我不知道如何告诉 tikz,例如对于 C->B 路径,不要使用最短路径,而是“从左侧”将 C 与 B 连接起来。此外,箭头似乎总是连接到块的中间,我如何指定中间上方或下方的位置(对于 B 或 C 块)?
最后,我怎样才能将一条线直接连接到一个块(B 的第三个输入),并在那里用黑点标记该线?
我查看了一些关于节点放置的教程,但不幸的是上述主题没有得到解决......
答案1
我相信肯定有更短的版本。但这个代码可能更容易理解。策略是添加几个辅助坐标 H1、H2 等,并将它们用于路径构建。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\tikzset{block/.style = {draw, rectangle},
Connect/.style={-latex,thick}}
\begin{tikzpicture}[auto, node distance=2cm]
\node [block] (A) {A};
\node [block, below right=of A] (B) {B};
\node [block, right= of B] (C) {C};
\path (A)--(B) coordinate[midway](H1) coordinate[pos=0.75](H2);
\coordinate[right=0.5cm of C](H3);
\coordinate[left=0.5cm of A](H4);
\coordinate[below=0.5cm of B](H5);
\path (B)--(C) coordinate[midway](H6);
\draw [Connect] (A)--(A-|H1)--(B-|H1)--(B);
\draw [Connect] (B)--(C);
\draw [Connect] (C.east)--(C-|H3)--(H1-|H3)--(H1-|H2)|-(B.140);
\draw [Connect] (H4)--(A);
\draw [Connect] (H5-|H4)--(H5-|H6)|-(C.220);
\draw[fill] (H5-|H1) circle(0.1);
\draw[Connect] (H5-|H1)|-(B.220);
\end{tikzpicture}
\end{document}
顺便说一句,\tikzstyle
据说已被弃用,我用它替换了它\tikzset
。