我正在使用 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 值保留为
DEL2
和AKL2
。第二棵树是您的祖先树。在这里,您的第二个实例用于对齐
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
肮脏的解决方案:
继续添加新的家谱,并将它们与我们的孩子们对齐,当他们开始组建家庭时。我想这会起作用,我没有尝试过,但它在代码中不太漂亮。
基本上,这个解决方案需要:
- 我自己的家谱
- 我妻子的家谱
- 一棵家谱树将我们与父母 5 厘米的距离以及我们所有的孩子联系在一起
- 每个孩子额外获得一棵树,这样树就可以继续生长。
我确实自己想到了这一点,并且在某种程度上它确实回答了这个问题,所以也许我提出这个问题是愚蠢的,但我真的想要一个更简洁的解决方案,而不是像这样一棵树接一棵树地添加。