假设 MWE 如下所列。
这将产生以下图片。如您所见,垂直线不是 100% 垂直的。
问题 1:我该如何表达“从点 x 垂直向上并连接到节点 y,其中节点 y 处的确切锚点未知。”?
问题2:更一般的问题:见下面的截图。基于垂直线或水平线建立“高级”连接的最简单方法是什么?见蓝线。
\documentclass{minimal}
\usepackage{tikz}
\begin{document}
\usetikzlibrary{positioning}
\tikzstyle{st1}=[rectangle, fill=white,draw=black,text centered, anchor=north, text=black, text width=4cm]
\begin{center}
\begin{tikzpicture}[node distance=1cm]
\node (Parent) [st1] { \textbf{Parent} };
\node (hidden1) [text width=0.5cm, below=of Parent] {};
\node (Child) [st1, right=of hidden1,xshift=-2cm] {\textbf{Child}};
\draw (Child.west) -- ++(-0.2,0) -- ([ xshift=-0.8cm] Parent.south);
\end{tikzpicture}
\end{center}
\end{document}
答案1
如果您加载calc
库进行某些计算并使用 Tikz 运算符,则可以绘制具有所需距离的正交路径(2mm
如您的问题所示)。
顺便一提:
draw=black
通常没有必要,因为它默认为黑色,除非有其他东西造成冲突。在这种情况下,draw=black
将有助于解决异常。- 不需要设置隐藏节点进行定位,只需使用
positioning
库工具,例如below right
。 - 更喜欢这个
standalone
班级。 - 用于
tikzset
设置选项,请参阅应该使用 \tikzset 还是 \tikzstyle 来定义 TikZ 样式?
输出
代码
\documentclass[margin=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,positioning}
\tikzset{
st1/.style={draw,rectangle, fill=white, text centered, anchor=north, text width=4cm, font=\bfseries}
}
\begin{document}
\begin{tikzpicture}%[node distance=1cm]
\node (parent) [st1] {Parent};
\node (child) [st1, below right=1cm and -2.5cm of parent] {Child};
\draw[red, ultra thick] (child.west) -| ($(child.west|-parent.south)+(-2mm,0)$);
\draw[blue!50!black, ultra thick] (child.east) -|
($(parent.north-|child.east)+(2mm,2mm)$) -|
($(parent.west)+(-2mm,0)$) |-
(parent.west);
\end{tikzpicture}
\end{document}
答案2
\documentclass{article}
\usepackage{tikz}
\begin{document}
\usetikzlibrary{positioning}
\tikzstyle{st1}=[rectangle, fill=white,draw=black,text centered, anchor=north, text=black, text width=4cm]
\begin{center}
\begin{tikzpicture}[node distance=1cm]
\node (Parent) [st1] { \textbf{Parent} };
\node (hidden1) [text width=0.5cm, below=of Parent] {};
\node (Child) [st1, right=of hidden1,xshift=-2cm] {\textbf{Child}};
\draw (Child.west) -| ([xshift=-.8cm]Parent.south); %Question 1
\draw (Parent.west) -| ++(-.5cm,1cm) -| ([xshift=.5cm] Child.east) -- (Child.east); %Question 2
\end{tikzpicture}
\end{center}
\end{document}