具有多条婚姻关系的家谱

具有多条婚姻关系的家谱

我正在尝试建立一个家谱,在网上找到的众多例子中,这个是最有用的:

我怎样才能改进 TikZ 中的这棵家谱?

然而,在这张家谱中,有两件事我无法做到。我想:

1)在家族树中进一步添加婚姻关系,并让姻亲配偶拥有自己的家族谱系,并且

2)我想为一个人添加多个配偶(我是为一个前现代中国家庭做的,一家之主同时有一个主要妻子和一个次要妻子)

任何帮助将不胜感激!

更新

这是我想画的树的近似图。我用三角形和圆圈表示男性和女性,但我也可以用灰色阴影(如上面链接的问题中的树一样),因为家庭成员的名字可能不适合放在三角形和圆圈内。或者名字可以放在它们下面。无论如何,方框的形状并不重要。

拟议的家谱

答案1

这是我的尝试。不过代码有点笨拙。

在此处输入图片描述

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{trees,calc}

\begin{document}

\centering

\begin{tikzpicture}[font=\footnotesize]
\tikzset{
  % edge styles
  level distance=15mm,
  married/.style={edge from parent/.style={draw,double distance=3pt}},
  mleft/.style={grow=left,edge from parent path={(\tikzparentnode.west)--(\tikzchildnode.east)}},
  mright/.style={grow=right,edge from parent path={(\tikzparentnode.east)--(\tikzchildnode.west)}},
  % node styles
  man/.style={rectangle,fill=blue!20},
  wife1/.style={rectangle,fill=red!40,rounded corners},
  wife2/.style={rectangle,fill=red!15,rounded corners},
}

% Generation 0
% \node(<gen_label>)[<options>]{<name>}
%   % add children and coordinate labels as in the other generations
% ;

% 1st Generation
\node[man]{Gen1 M1} 
  child[mleft,married,level distance=20mm]{coordinate(G1C1) child{node[wife1]{Gen1 F1}}}
  child[mright,married,level distance=20mm]{coordinate(G1C2) child{node[wife2]{Gen1 F2}}}
;

% 2nd Generation
\node at(G1C1){}
  [edge from parent fork down]
  child[sibling distance=30mm]{node[man]{Gen2 M1}
    child[married,mleft]{coordinate(G2C1) child{node[wife1]{Gen2 F1}}}
  }
  child[missing]
;
\node at(G1C2){}
  [edge from parent fork down,sibling distance=15mm]
  child{node[wife1]{Gen2 F1}
    child[married,mleft]{child[level distance=10mm]{node[man]{Gen2 M2}}}
  }
  child{node[man]{Gen2 M3}
    child[married,mright]{coordinate(G2C3) child{node(G2F3)[wife1]{Gen2 F3}}}
  }
;

% 1st Generation Loner
\node[man]at($(G2F3)+(0,\tikzleveldistance)$){Gen1 M2} edge (G2F3);

% 3rd Generation
\node at(G2C1){}
  child{node[man]{Gen3 M1}}
;
\node at(G2C3){}
  [edge from parent fork down]
  child{node[man]{Gen3 M2}}
  child{node[man]{Gen3 M3}}
  child{node[man]{Gen3 M4}}
;

\end{tikzpicture}

\end{document}

编辑

在代码中,我使用coordinate(<label>)node(<label>)来标记下一代(子)树开始的特定坐标。s<label>是稍后绘制树时可以参考的那些点的名称。例如,标签(G1C1)是“第 1 代夫妇 1”的简写。

请注意,除第一代外,每一代都以 开始\node at(<label>)...;。因此,我所做的本质上是将新一代附加到上一代标记的特定坐标上。例如,Gen2 M1是第一代夫妇 1 的后代G1C1。因此,要添加上一代,比如Gen0,只需将其绘制为任何其他代,标记开始的点Gen1(比如(G0C1)),并通过添加 来修改第一代的开头at(G0C1)

\node[man] at(G0C1) {Gen1 M1}...;

答案2

这是使用新genealogytree包的另一种可能性。

为了使次要的妻子关系可视化,我添加了两种样式secondary wife,并secondary family更改节点颜色并将边缘绘制为虚线。这些可以单独使用。

该图由两个结构构建而成\genealogytree。第一个结构用于主图。第二个结构用于添加父级Gen1 M2,但不能直接添加。

在此处输入图片描述

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

\begin{document}

\begin{tikzpicture}
\gtrset{
  timeflow=down,               % time flows down
  processing=tcbox*,           % draw nodes with tcolorbox
  node size from=8mm to 5cm,   % width of nodes
  level size=6mm,              % height of nodes
  level distance=10mm,         % generation distance
                               % redefine default setting for female,male,neuter:
  tcbset={
    female/.style={colback=red!40,colframe=red!40!black,arc=2mm},
    male/.style={colback=blue!20,colframe=blue!40!black,sharp corners},
  },
  secondary wife/.style={box={colback=red!15,colframe=red!50,arc=2mm}},
  secondary family/.style={family edges={foreground={black,line width=0.25mm,dashed}}},
  %
  box={size=fbox,drop fuzzy shadow},    % node settings
  %
  edges={foreground={black,line width=0.25mm},    % edge settings
         background={white,line width=0.5mm}}
}

\genealogytree
{
  child{
    p[female]{Gen1 F1}
    g[male]{Gen1 M1}
    child{
      p[female]{Gen2 F1}
      g[male]{Gen2 M1}
      c[male]{Gen3 M1}
    }
    union[secondary family]{
      p[secondary wife]{Gen1 F2}
      child{
        p[male]{Gen2 M2}
        g[female]{Gen2 F2}
        c[phantom]- % reserve space (for safety)
      }
      child{
        g[male]{Gen2 M3}
        p[female,id=Gen2-F3@1]{Gen2 F3}% remember node
        c[male]{Gen3 M2}
        c[male]{Gen3 M3}
        c[male]{Gen3 M4}
      }
    }
  }
}

\genealogytree[set position=Gen2-F3@2 at Gen2-F3@1]% place at remembered position
{
  child{
    g[male]{Gen1 M2}
    c[phantom*,id=Gen2-F3@2]-
  }
}
\end{tikzpicture}

\end{document}

答案3

forest并不是专门为这种图设计的,但只要有一点耐心,它还是可以做得很好的。然而,指定树的最佳方式在语义上并不具有表现力:绘制树时指定的关系并不代表图表所示的关系。

这使用了一个实验性的软件包justtrees。在某个地方有一个副本,但是如果你想尝试它,请向我索要 0.03 版本。justtrees可以更轻松地指定 OP 绘图右侧显示的代标签,但在提供的其他答案中省略了这些标签。

我使用粉色代表女性(叹气),蓝色代表男性(再次叹气),紫色代表“二房”(尖叫)。等号用于指定婚姻关系。

\PassOptionsToPackage{rgb,x11names,svgnames,dvipsnames}{xcolor}
\documentclass[tikz,border=5pt,multi]{standalone}
\usepackage{justtrees}% version 0.03
\usetikzlibrary{shadows}
\begin{document}
  \forestset{
      reln/.style={
        content={$=$},
        really no edge,
        inner xsep=0pt,
      },
      really no edge/.style={
        edge={draw=none}
      },
  }
  \begin{justtree}
    {% tree preamble goes here
      person/.style={draw=#1, inner color=#1!10, outer color=#1!15, text=#1, thick, rounded corners, drop shadow},
      fe/.style={person=WildStrawberry},
      fe2/.style={person=WildStrawberry!50!DeepSkyBlue4},
      ma/.style={person=DeepSkyBlue4},
      just format/.style={font=\itshape},
      for tree={
        edge path={
          \noexpand\path [draw, \forestoption{edge}] (!u.parent anchor) -- +(0,-5pt) -| (.child anchor)\forestoption{edge label};
        },
        edge={thick},
      }
    }
    [female, fe, right just={first generation}]
    [, reln
      [female, fe, really no edge, right just={second generation}]
      [, reln
        [male, ma, calign with current, right just={third generation}]
      ]
      [male, ma]
      [male, ma, really no edge]
      [, reln, calign with current]
    ]
    [male, ma]
    [, reln
      [female, fe]
      [, phantom, calign with current]
      [male, ma]
    ]
    [female, fe2]
    [,phantom
      [, reln
        [male, ma]
        [male, ma]
        [male, ma]
      ]
    ]
    [male, ma
      [female, fe]
    ]
  \end{justtree}

\end{document}

家谱右侧对齐世代描述

相关内容