答案1
这是掌握图形绘制库的好机会(参见 PGF 手册第 IV 部分以及第 III 部分的第 19 章),特别是“子图节点”的概念(参见手册中的 27.10“使用几种不同的布局绘制单个图形” 3.0.1a
)。
不幸的是,尽管有各种花哨的布局算法,但通常当需要特定布局时,仍然需要手动定位节点。层之间的调整也有点麻烦。不过,这比没有图库要省事一些。
使用以下方式编译LuaLaTeX
\RequirePackage{luatex85}
\documentclass[tikz]{standalone}
\usetikzlibrary{graphs,graphdrawing,arrows.meta}
\usegdlibrary{trees,circular}
\begin{document}
\begin{tikzpicture}[every loop/.style={}, >=Triangle]
\graph [dots/.style={
empty nodes,
nodes={
circle, fill, inner sep=0, minimum size=0.75ex
}},
binary tree layout]{
% Root
root/ // [simple necklace layout, dots] {
a -- b -- c -- d -- a, b -- d;
};
% First layer
child1/ // [simple necklace layout, dots] {
a1 -- b1 -- c1 -- d1 -- a1
};
child2/[minimum height=1cm] // [no layout, dots] {
a2[at=(180:1)], b2[at=(0:0)], c2[at=(0:1)];
a2 --[bend left] b2 -- [bend left] c2; c2 --[bend left] b2 --[bend left] a2;
};
% Second layer
child11/ // [no layout, dots, /tikz/.cd, x=0.707cm, y=0.707cm] {
a11[at=(0:1)], b11[at=(90:1)], c11[at=(180:1)], d11[at=(270:1)];
a11 -- b11 -- c11 -- d11;
};
child12/ // [no layout, dots, /tikz/.cd, x=0.75cm, y=0.75cm] {
a12[at=(90:1)], b12[at=(210:1)], c12[at=(330:1)];
a12 -- b12 -- c12 -- a12;
};
child21/[minimum height=1cm] // [no layout, dots] {
a21[at=(180:1)], b21[at=(0:0)], c21[at=(0:1)];
a21 -- b21 --[bend left] c21 --[bend left] b21;
};
child22/[minimum height=1cm] // [no layout, dots] {
a22[at=(0:0)] --[bend left] b22[at=(0:1)] --[bend left] a22 --[loop left] a22;
};
% Third layer
child121/ // [no layout, dots, /tikz/.cd, x=0.707cm, y=0.707cm] {
a121[at=(180:1)], b121[at=(90:1)], c121[at=(0:1)];
a121 -- b121 -- c121;
};
child122/[minimum height=1cm] // [no layout, dots] {
a122[at=(0:0)], b122[at=(0:1)];
a122 --[bend left] b122 --[bend left] a122;
};
child211/ // [no layout, dots] {
a211[at=(270:1)], b211[at=(0:0)], c211[at=(0:1)];
a211 -- b211 -- c211;
};
child212/ // [no layout, dots] {
a212[at=(270:1)], b212[at=(0:0)];
a212 --[loop below] a212 -- b212;
};
child221/ // [no layout, dots] {
a221[at=(270:1)], b221[at=(0:0)];
a221 -- b221 --[loop above] b221;
};
child222/[minimum height=1.5cm] // [no layout, dots]{
a222 --[loop below] a222 --[loop above] a222;
};
% Fourth layer
child1221/ // [no layout, dots] {
a1221[at=(0:0)], b1221[at=(0:1)];
a1221 -- b1221;
};
child1222/ // [no layout, dots] {
a1222 --[loop left] a1222;
};
% Tree of subgraph nodes
root -> {
child1 -> {
child11 [label=below:$x^3$],
child12 -> {
child121 [label=below:$x^2$],
child122 -> {
child1221 [label=below:$x$],
child1222 [label=below:$y$]
}
}
},
child2 -> {
child21 -> {
child211 [label=below:$x^2$],
child212 [label={[shift=(270:0.5)]below:$xy$}]
},
child22 -> {
child221 [label=below:$xy$],
child222 [label=below:$y^2$]
}
}
};
};
\end{tikzpicture}
\end{document}