如何在系谱树中设置高度顺序以避免边缘交叉?

如何在系谱树中设置高度顺序以避免边缘交叉?

在族谱中,“妻子”与“丈夫 1”育有四个孩子,后来又与“丈夫 2”育有四个孩子,但没有孩子。

\documentclass{standalone}
\usepackage[all]{genealogytree}

\begin{document}
\begin{genealogypicture}[
  template=signpost,
  ]
  child{
    p{Husband1}
    g{Wife}
    c{Child1} c{Child2} c{Child3} c{Child4}
    union{
      p{Husband2}
    }
  }
\end{genealogypicture}
\end{document}

显示为 在此处输入图片描述

边缘被放置在不同的高度以避免冲突。我更希望将通往丈夫 2 的边缘置于另一边缘之上,以避免边缘交叉。我可以明确地将边缘向上移动,

    union[subtree={edges={yshift=+5mm}}]{
      p{Husband2}

屈服在此处输入图片描述

为了获得良好的结果,我还需要降低另一条边。这似乎是一种笨拙的解决方法,可以撤消已经完成的移动工作,所以我想知道我如何才能告诉 genealogytree 我想要的边的顺序。

如果我把丈夫2作为“主要”伴侣,并为丈夫1和四个孩子建立一个联盟节点

\documentclass{standalone}
\usepackage[all]{genealogytree}

\begin{document}
\begin{genealogypicture}[template=signpost]
  child{
    union{
      p{Husband1}
      c{Child1} c{Child2} c{Child3} c{Child4}
    }
    g{Wife}
    p{Husband2}
  }
\end{genealogypicture}
\end{document}

我按照我想要的高度顺序获得了边缘,但是其他不必要的交叉:在此处输入图片描述

(我正在使用 texlive 2015 中的 genealogytree 0.91。)

答案1

更新:genealogytree1.30 (2017-12-08) 版本中,选项edges shiftedges upedges down可在包内使用,并且实现方式更加通用。用户无需再自行定义它们。

如果七个节点要保持原样(我想您希望如此),则必须手动更改垂直边缘锚点的位置。基本上,您已经尝试了各种可能性。我可以补充的是一些如何移动边缘的缓解方法。

您可以添加自己的样式来快捷执行本地移位操作。

edges shift/.style={family edges={yshift=#1}},

允许edges shift=5mm直接写类似的内容。

模板signpost将水平距离设置为1cm。要切换双户型结构的垂直高度,您可以使用快捷键

edges up/.style={edges shift=3.3333mm},
edges down/.style={edges shift=-3.3333mm},

让事情变得更简单。

完整代码如下:

\documentclass{standalone}
\usepackage[all]{genealogytree}

% --- only needed before version 1.30 of genealogytree
%\gtrset{
%  edges shift/.style={family edges={yshift=#1}},
%  edges up/.style={edges shift=3.3333mm},
%  edges down/.style={edges shift=-3.3333mm},
%}

\begin{document}

\begin{genealogypicture}[
  template=signpost,
  ]
  child[edges down]{
    p{Husband1}
    g{Wife}
    c{Child1} c{Child2} c{Child3} c{Child4}
    union[edges up]{
      p{Husband2}
    }
  }
\end{genealogypicture}

\end{document}

得出:

在此处输入图片描述

相关内容