TikZ:如何在 TikZ 图片中获取“Visio 连接器工具”功能?

TikZ:如何在 TikZ 图片中获取“Visio 连接器工具”功能?

假设 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}

在此处输入图片描述

相关内容