我使用家谱树,想在两个节点之间创建自定义边。例如,我想重做我呈现的家庭关系这里。以下 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=D
和id=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}