tikz 和家谱树中两个节点之间的自定义边

tikz 和家谱树中两个节点之间的自定义边

我使用家谱树,想在两个节点之间创建自定义边。例如,我想重做我呈现的家庭关系这里。以下 MWE 包含上述示例树的修改版本。不过,这一次,我不想在系谱树包中绘制线条,而是通过在两个节点之间添加自定义边作为 tikz 命令来绘制线条。

\documentclass{article} 
\usepackage[all]{genealogytree}              
\usepackage{tikz}

\gtrset{Pattern/.style={ 
        template=signpost, 
        box={colback=black!20!white, no shadow, fontupper=\tiny,
        size=small,halign=center,valign=center},
        processing = fit, 
        edges={swing, no background, foreground=black},
        level distance=40mm, level 1/.style={further distance=1mm}, 
        level 2/.style={further distance=1mm} 
    }
}

    \begin{document} 
        \begin{tikzpicture} 
        \genealogytree[Pattern]{ 

        child{
            g[male]{A}
        p[female]{B} 
        child{
         g[female]{C}
         p[male]{D}   
         c[male]{E}    
    }
    child{
    g[female]{F}
    c[male]{G}
    }
    }
    }
    \end{tikzpicture} 
    \end{document}

该文件如下所示。

在此处输入图片描述

为了说明这棵树最终应该是什么样子:

在此处输入图片描述

genealogytree 包中的 pst 解决方案效果很好。不过,我还是想用纯 tikz 来实现它。有办法吗?

答案1

如果你使用id选项,您可以使用名称来引用节点,并在树完成后对它们执行您想要的操作。

例如,使用id=Did=G,我们可以添加以下行

\draw [magenta, line width=1pt] (D) [out=-60,in=135] to (G);

生产

结果

请注意,以这种方式绘制的边将绘制在现有树上,因此您需要确保避开任何节点或使用层将边添加到树后面。这与您不想要的解决方案形成对比,在解决方案中,所有边都在节点之前绘制,因此您不必担心将它们放在后面。

完整代码:

\documentclass[border=9pt]{standalone} 
\usepackage[all]{genealogytree}              

\gtrset{Pattern/.style={ 
    template=signpost, 
    box={colback=black!20!white, no shadow, fontupper=\tiny,
      size=small,halign=center,valign=center},
    processing = fit, 
    edges={swing, no background, foreground=black},
    level distance=40mm, level 1/.style={further distance=1mm}, 
    level 2/.style={further distance=1mm} 
  }
}

\begin{document} 
\begin{tikzpicture} 
  \genealogytree[Pattern]{ 

    child{
      g[male]{A}
      p[female]{B} 
      child{
        g[female]{C}
        p[male,id=D]{D}   
        c[male]{E}    
      }
      child{
        g[female]{F}
        c[male,id=G]{G}
      }
    }
  }
  \draw [magenta, line width=1pt] (D) [out=-60,in=135] to (G);
\end{tikzpicture} 
\end{document}

相关内容