Я не думаю, что вы можете взять произвольное генеалогическое дерево и автоматически сгенерировать файл точек, где он всегда хорошо выглядит в GraphViz.
Но я думаю, что вы можете всегда выглядеть хорошо, если вы:
- Используйте ранг = те же самые другие ответы, упомянутые, чтобы получить соединения 'T'
желаемый ОП
- Используйте трюк с упорядочением, который сделал Брайан Бланк, чтобы предотвратить странные строки
- Предположим, нет повторных браков и братьев и сестер
- Нарисуй только
подмножество дерева, которое подчиняется следующим правилам:
- Пусть S будет «центральным» человеком
- Если у S есть братья и сестры, убедитесь, что S справа от всех.
- Если у S есть супруг, а у супруга - братья и сестры, убедитесь, что супруг находится слева от всех своих братьев и сестер.
- Не показывать племянников, племянниц, тетей или дядей супруги S или S
- Не показывать супругам братьев и сестер
- Не показывать супругам супругов братьев и сестер
- Показать детей S, но не их супругов или детей
- Показ родителей S и родителей супруга
В результате будет отображаться не более 3 поколений одновременно, а S - в среднем поколении.
На рисунке ниже S = Гомер (слегка измененный по версии Брайана Бланка):
digraph G {
edge [dir=none];
node [shape=box];
graph [splines=ortho];
"Herb" [shape=box, regular=0, color="blue", style="filled" fillcolor="lightblue"] ;
"Homer" [shape=box, regular=0, color="blue", style="bold, filled" fillcolor="lightblue"] ;
"Marge" [shape=oval, regular=0, color="red", style="filled" fillcolor="pink"] ;
"Clancy" [shape=box, regular=0, color="blue", style="filled" fillcolor="lightblue"] ;
"Jackeline" [shape=oval, regular=0, color="red", style="filled" fillcolor="pink"] ;
"Abraham" [shape=box, regular=0, color="blue", style="filled" fillcolor="lightblue"] ;
"Mona" [shape=oval, regular=0, color="red", style="filled" fillcolor="pink"] ;
"Patty" [shape=oval, regular=0, color="red", style="filled" fillcolor="pink"] ;
"Selma" [shape=oval, regular=0, color="red", style="filled" fillcolor="pink"] ;
"Bart" [shape=box, regular=0, color="blue", style="filled" fillcolor="lightblue"] ;
"Lisa" [shape=oval, regular=0, color="red", style="filled" fillcolor="pink"] ;
"Maggie" [shape=oval, regular=0, color="red", style="filled" fillcolor="pink"] ;
a1 [shape=diamond,label="",height=0.25,width=0.25];
b1 [shape=circle,label="",height=0.01,width=0.01];
b2 [shape=circle,label="",height=0.01,width=0.01];
b3 [shape=circle,label="",height=0.01,width=0.01];
{rank=same; Abraham -> a1 -> Mona};
{rank=same; b1 -> b2 -> b3};
{rank=same; Herb; Homer};
a1 -> b2
b1 -> Herb
b3 -> Homer
p1 [shape=diamond,label="",height=0.25,width=0.25];
q1 [shape=circle,label="",height=0.01,width=0.01];
q2 [shape=circle,label="",height=0.01,width=0.01];
q3 [shape=circle,label="",height=0.01,width=0.01];
{rank=same; Homer -> p1 -> Marge};
{rank=same; q1 -> q2 -> q3};
{rank=same; Bart; Lisa; Maggie};
p1 -> q2;
q1 -> Bart;
q2 -> Lisa;
q3 -> Maggie;
x1 [shape=diamond,label="",height=0.25,width=0.25];
y1 [shape=circle,label="",height=0.01,width=0.01];
y2 [shape=circle,label="",height=0.01,width=0.01];
y3 [shape=circle,label="",height=0.01,width=0.01];
{rank=same; Clancy -> x1 -> Jackeline};
{rank=same; y1 -> y2 -> y3};
{rank=same; Patty; Selma; Marge};
x1 -> y2;
y1 -> Marge;
y2 -> Patty;
y3 -> Selma;
}
Это дает следующее дерево от GraphViz (с аннотациями, которые я добавил с помощью Power Point):