Bisher habe ich keinen Weg gefunden, die Verbindung der Noden schon beim Setzen von diesen anzugeben, wenn ich die vorgegebene Anordnung erhalten will.
Da aber ohnehin LuaLaTeX verwendet wird, lässt sich mit `luacode` das Verbinden der Noden vereinfachen.
% arara: lualatex
\documentclass[tikz,margin=5mm]{standalone}
\usetikzlibrary{graphs,graphdrawing,shapes.geometric}
\usepackage{ifthen}
\usepackage{luacode}
\begin{luacode}
function enthalten(s,z)
zeichnen="true"
for i=1,#s do
local t=string.find(z,s:sub(i,i))
if t==nil then zeichnen="false" break end
end
return(zeichnen)
end
\end{luacode}
\newcommand\verbinden[2]{%
\foreach \i in {#1}\foreach \j in {#2}
{\ifthenelse{\equal
{\directlua{tex.print(
enthalten("\luatexluaescapestring{\i}","\luatexluaescapestring{\j}")
)}}
{true}}
{\graph[left anchor=south,right anchor=north]{(\i)--(\j)};}{}
}
}
\begin{document}
\begin{tikzpicture}[
graphs/nodes={
draw, ellipse,
minimum width = 2em, minimum height = 2.5ex,
inner sep = 0pt,
font = \footnotesize
},
graphs/horizontal/.style={no layout,component direction=right},
graphs/vertikal/.style={no layout,component sep=#1}
]
\graph[no layout,componentwise,components go down center aligned,component sep=3em]
{
//[vertikal=2em]{null,//[horizontal]{a,b,c,d,e},};
//[horizontal,component sep=1em]{ab,ac,ad,ae,bc,bd,be,cd,ce,de};
//[horizontal,component sep=1em]{abc,abd,abe,acd,ace,ade,bcd,bce,bde,cde};
//[vertikal=2em]{//[horizontal]{abcd,abce,abde,acde,bcde},abcde};
};
\graph[left anchor=south,right anchor=north]{(null)--{(a),(b),(c),(d),(e)}};
\verbinden{a,b,c,d,e}{ab,ac,ad,ae,bc,bd,be,cd,ce,de}
\verbinden{ab,ac,ad,ae,bc,bd,be,cd,ce,de}{abc,abd,abe,acd,ace,ade,bcd,bce,bde,cde}
\verbinden{abc,abd,abe,acd,ace,ade,bcd,bce,bde,cde}{abcd,abce,abde,acde,bcde}
\verbinden{abcd,abce,abde,acde,bcde}{abcde}
\end{tikzpicture}
\end{document}
![alt text][1]
----------
Ursprüngliche Antwort
Auch für mich ist das der erste Versuch mit der *Graph Drawing Library*. Um die vorgegebene Anordnung der Noden einzuhalten, platziere ich sie erst und verbinde sie dann. Damit der Code übersichtlich bleibt, erfolgt die Verbindung von `null` bis zu der Ebene mit drei Buchstaben von oben während die restlichen Verbindungen von unten, also von `abcde` aus, gezeichnet werden.
% arara: lualatex
\documentclass[tikz,margin=5mm]{standalone}
\usetikzlibrary{graphs,graphdrawing,shapes.geometric}
\usegdlibrary{layered}
\begin{document}
\begin{tikzpicture}[
graphs/knoten/.style={
layered layout,
grow right,
nodes={
draw, ellipse,
minimum width = 8mm, minimum height = 5mm,
inner sep = 0pt,
font = \footnotesize
}
}
]
\graph[knoten] {null[desired at={(0,8)}]};
\graph[knoten]{a,b,c[desired at={(0,7)}],d,e};
\graph[knoten]
{ab,ac,ad,ae,bc[desired at={(-0.5,5)}],bd,be,cd,ce,de};
\graph[knoten]
{abc,abd,abe,acd,ace[desired at={(-0.5,3)}],ade,bcd,bce,bde,cde};
\graph[knoten]
{abcd,abce,abde[desired at={(0,1)}],acde,bcde};
\graph[knoten] {abcde[desired at ={(0,0)}]};
\graph[knoten]{null};
\graph[knoten]{a,b,c[y=-1],d,e};
\graph[knoten]{ab,ac,ad,ae,bc[x=-0.5,y=-3],bd,be,cd,ce,de};
\graph[knoten]{abc,abd,abe,acd,ace[x=-0.5,y=-5],ade,bcd,bce,bde,cde};
\graph[knoten]{abcd,abce,abde[y=-7],acde,bcde};
\graph[knoten]{abcde[y=-8]};
%
\graph[left anchor=south,right anchor=north]{
(null)--{
(a)--{
(ab)--{(abc),(abd),(abe)},
(ac)--{(abc),(acd),(ace)},
(ad)--{(abd),(acd),(ade)},
(ae)--{(abe),(ace),(ade)}
},
(b)--{(ab),
(bc)--{(abc),(bcd),(bce)},
(bd)--{(abd),(bcd),(bde)},
(be)--{(abe),(bce),(cde)}
},
(c)--{(ac),(bc),
(cd)--{(acd),(bcd),(cde)},
(ce)--{(ace),(bce),(cde)}
},
(d)--{(ad),(bd),(cd),
(de)--{(ade),(bde),(cde)}
},
(e)--{(ae),(be),(ce),(de)}
};
};
\graph[left anchor=north,right anchor=south]{
(abcde)--{
(abcd)--{(abc),(abd),(acd),(bcd)},
(abce)--{(abc),(abe),(ace),(bce)},
(abde)--{(abd),(abe),(ade),(bde)},
(acde)--{(acd),(ace),(ade),(cde)},
(bcde)--{(bcd),(bce),(bde),(cde)},
};
};
\end{tikzpicture}
\end{document}
![alt text][2]
[1]: http://texwelt.de/wissen/upfiles/graph_komp1.png
[2]: http://texwelt.de/wissen/upfiles/graph_komp.png