在 tikz/genealogytree 包中对齐节点

在 tikz/genealogytree 包中对齐节点

我正在使用 genealogytree 包(反过来又使用 TikZ)绘制我们的家谱。它非常漂亮,输出效果也很好,但我在对齐方面遇到了一些问题。

我想要做的是添加我自己的家谱,祖先向左排列,然后添加我妻子的家谱,祖先向右排列。最后,我想添加第三棵家谱,我们的孩子向下排列。

制作单个树很容易。添加第二棵树也很容易,我只需指定我的妻子应该与我对齐,偏移 5 厘米。问题出现在第三棵树中,也就是我们(再次)和我们的孩子。

我设想的方式是,我将设置自己的第二个副本,与第一棵树上的条目重叠,使用“set position=DEL2 at DEL”。然后,我将设置我妻子的第二个副本,与她的树重叠,使用“set position=AKL2 at AKL”。我首先尝试在调用 \genealogytree 之后立即在顶层设置这些选项,但没有成功。所以我尝试为单个节点设置选项,但也没有成功。

问题似乎是父节点距离会覆盖我为节点指定的任何偏移量。由于父节点距离偏移了 0.1 厘米,但两棵树相隔 5 厘米,这意味着第三棵树只会与我们中的一棵对齐,而另一棵则锁定在 0.1 厘米的偏移量。

简单的解决方案:将前两棵树的间距设置为 0.1 厘米。是的,从技术上讲,这解决了问题,但它也使我们的兄弟姐妹靠得太近,看起来很奇怪。我不喜欢这样。第二个简单的解决方案:将父母之间的距离设置为 2.5 厘米(总共 5 厘米)。是的,从技术上讲,这解决了问题,但如果这棵树继续随着我们的孩子的孩子而成长,那么我想让他们的父母之间的距离保持在 0.1 厘米。我想让我们两人在第三棵树上保持 5 厘米的距离,但我想让树的其余部分的父母之间的距离保持在 0.1 厘米。

这是我现在得到的代码(由于父母距离为 2.5 厘米而有效,但如果我们的孩子成为父母则无效):

\documentclass[9pt]{report} 
\usepackage[a3paper,landscape,layoutoffset={0pt,0pt},hscale=0.85, vscale=0.9, inner=15mm, top=20mm]{geometry} 
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
%\usepackage[swedish]{babel}
\usepackage{multicol}
\usepackage{graphicx} 
\usepackage[space]{grffile}
\usepackage{xcolor}
\usepackage{epstopdf}
\usepackage[all]{genealogytree}
    \tcbset{male/.style={colframe=black, colback=blue!06, watermark text=\gtrSymbolsSetDraw{blue!16}\gtrsymMale}}
    \tcbset{female/.style={colframe=black, colback=red!07, watermark text=\gtrSymbolsSetDraw{red!17}\gtrsymFemale}}

    \gtrset{
            box={colback=white},
            edges={swing,no background,foreground=black!50},
            level size=5 cm,
            node  size=3 cm,
            level distance=1.75 cm,
            child distance=1.25 cm,
            parent distance=0.1 cm,
            further distance = 3 cm
            }

    \begin{tikzpicture}
        \genealogytree[timeflow=right, adjust position=DEL left of {0,0} distance 1cm]
        {
            sandclock
            {
                child
                {
                    g[male]{Olle Lars Olof Evert Lindberg}
                }
                child
                {
                    g[male]{Holger Nils Åke Lindberg}
                }
                child
                {
                    g[female]{Hedvig Emma-Lena Liljenberg}
                }
                child
                {
                    g[male, pivot, id=DEL]{Dan-Erik Sigurd Lindberg}
                }
                parent
                {
                    c[female]{Kerstin Eriksson}
                    c[male]{Bengt Nilsson}
                    g[female, pivot]{Ingrid Birgitta Lindberg}
                    parent
                    {
                        g[male, pivot]{Axel Nilsson}
                    }
                    parent
                    {
                        g[female, pivot]{Anna Nilsson}
                        parent
                        {
                            g[male, pivot]{Lars Petter Hansander}
                        }
                        parent
                        {
                            g[female, pivot]{Emma Katarina Lindén}
                        }
                    }
                }
                parent
                {
                    g[male, pivot]{Rolf Sigurd Lindberg}
                    c[female]{Margareta Eman}
                    c[female]{Monica Björklund}
                    parent
                    {
                        g[male, pivot]{Curt Sigurd Lindberg}
                        parent
                        {
                            g[male, pivot]{Sigurd Lindberg}
                        }
                        parent
                        {
                            g[female]{Elin Lindberg}
                        }
                    }
                    parent
                    {
                        g[female]{Hedvig Lindberg}
                    }
                }
            }
        }

        \genealogytree[timeflow=left, adjust position=AKL right of DEL distance 5 cm]
        {
            sandclock
            {
                child
                {
                    g[male]{Attachai Keeratijarut}
                }
                child
                {
                    g[female, pivot, id=AKL]{Angsana Keeratijarut Lindberg}
                }
                parent
                {
                    g[male, pivot]{Anop Keeratijarut}
                }
                parent
                {
                    g[female, pivot]{Renu Keeratijarut}
                }
            }
        }

        \genealogytree[timeflow=down, 
        %tree offset=0.4 cm,
        level size=3 cm,
        node  size=5 cm,
        level distance=1.25 cm,
        child distance=1.75 cm,
        parent distance=2.5 cm,
        further distance = 3 cm
        ]
        {
            sandclock
            {
                parent
                {
                    g[male, pivot, id=DEL2, set position=DEL2 at DEL]{Dan-Erik Sigurd Lindberg}
                }
                parent
                {
                    g[female, pivot, id=AKL2, set position=AKL2 at AKL]{Angsana Keeratijarut Lindberg}
                }
                c[male]{test}
            }
        }
    \end{tikzpicture}


\end{document}

答案1

我不确定我是否完全理解了所有要求,但我会重新排序这三棵部分树以获得更好的结果。在您的 MWE 中,该set position选项对同一棵树使用了两次。但是,第二次调用会覆盖第一次调用。

我提出的解决方案对树进行了重新排序,如下所示:

  • 第一棵树由您、您的妻子和您的孩子(以及他们的孩子等)组成。我将 id 值保留为DEL2AKL2

  • 第二棵树是您的祖先树。在这里,您的第二个实例用于对齐set position=DEL at DEL2

  • 第三棵树是你妻子的祖先树。在这里,她的第二个实例用于对齐set position=AKL at AKL2

我保留了所有其他值。通过这种构造,我希望您的要求能够得到满足。当然,如果添加更多子代,三棵树可能会重叠,但通过调整距离可以修复这个问题。

在此处输入图片描述

代码如下:

\documentclass[9pt]{report}
\usepackage[a3paper,landscape,layoutoffset={0pt,0pt},hscale=0.85, vscale=0.9, inner=15mm, top=20mm]{geometry}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
%\usepackage[swedish]{babel}
\usepackage{multicol}
\usepackage{graphicx}
\usepackage[space]{grffile}
\usepackage{xcolor}
\usepackage{epstopdf}
\usepackage[all]{genealogytree}

\begin{document}

    \tcbset{male/.style={colframe=black, colback=blue!06, watermark text=\gtrSymbolsSetDraw{blue!16}\gtrsymMale}}
    \tcbset{female/.style={colframe=black, colback=red!07, watermark text=\gtrSymbolsSetDraw{red!17}\gtrsymFemale}}

    \gtrset{
            box={colback=white},
            edges={swing,no background,foreground=black!50},
            }


\begin{tikzpicture}
        \genealogytree[timeflow=down,
        %tree offset=0.4 cm,
        level size=3 cm,
        node  size=5 cm,
        level distance=1.25 cm,
        child distance=1.75 cm,
        parent distance=2.5 cm,
        further distance = 3 cm
        ]
        {
            sandclock
            {
                parent
                {
                    g[male, id=DEL2]{Dan-Erik Sigurd Lindberg}
                }
                parent
                {
                    g[female, id=AKL2]{Angsana Keeratijarut Lindberg}
                }
                c[male]{test}
            }
        }

        \genealogytree[timeflow=right, set position=DEL at DEL2,
            box={colback=white},
            edges={swing,no background,foreground=black!50},
            level size=5 cm,
            node  size=3 cm,
            level distance=1.75 cm,
            child distance=1.25 cm,
            parent distance=0.1 cm,
            further distance = 3 cm
        ]
        {
            sandclock
            {
                child
                {
                    g[male]{Olle Lars Olof Evert Lindberg}
                }
                child
                {
                    g[male]{Holger Nils Åke Lindberg}
                }
                child
                {
                    g[female]{Hedvig Emma-Lena Liljenberg}
                }
                child
                {
                    g[male, pivot, id=DEL]{Dan-Erik Sigurd Lindberg}
                }
                parent
                {
                    c[female]{Kerstin Eriksson}
                    c[male]{Bengt Nilsson}
                    g[female, pivot]{Ingrid Birgitta Lindberg}
                    parent
                    {
                        g[male, pivot]{Axel Nilsson}
                    }
                    parent
                    {
                        g[female, pivot]{Anna Nilsson}
                        parent
                        {
                            g[male, pivot]{Lars Petter Hansander}
                        }
                        parent
                        {
                            g[female, pivot]{Emma Katarina Lindén}
                        }
                    }
                }
                parent
                {
                    g[male, pivot]{Rolf Sigurd Lindberg}
                    c[female]{Margareta Eman}
                    c[female]{Monica Björklund}
                    parent
                    {
                        g[male, pivot]{Curt Sigurd Lindberg}
                        parent
                        {
                            g[male, pivot]{Sigurd Lindberg}
                        }
                        parent
                        {
                            g[female]{Elin Lindberg}
                        }
                    }
                    parent
                    {
                        g[female]{Hedvig Lindberg}
                    }
                }
            }
        }

        \genealogytree[timeflow=left, set position=AKL at AKL2,
            box={colback=white},
            edges={swing,no background,foreground=black!50},
            level size=5 cm,
            node  size=3 cm,
            level distance=1.75 cm,
            child distance=1.25 cm,
            parent distance=0.1 cm,
            further distance = 3 cm
            ]
        {
            sandclock
            {
                child
                {
                    g[male]{Attachai Keeratijarut}
                }
                child
                {
                    g[female, pivot, id=AKL]{Angsana Keeratijarut Lindberg}
                }
                parent
                {
                    g[male, pivot]{Anop Keeratijarut}
                }
                parent
                {
                    g[female, pivot]{Renu Keeratijarut}
                }
            }
        }

\end{tikzpicture}


\end{document}

答案2

肮脏的解决方案:

继续添加新的家谱,并将它们与我们的孩子们对齐,当他们开始组建家庭时。我想这会起作用,我没有尝试过,但它在代码中不太漂亮。

基本上,这个解决方案需要:

  1. 我自己的家谱
  2. 我妻子的家谱
  3. 一棵家谱树将我们与父母 5 厘米的距离以及我们所有的孩子联系在一起
  4. 每个孩子额外获得一棵树,这样树就可以继续生长。

我确实自己想到了这一点,并且在某种程度上它确实回答了这个问题,所以也许我提出这个问题是愚蠢的,但我真的想要一个更简洁的解决方案,而不是像这样一棵树接一棵树地添加。

相关内容