我正在尝试将 tikz 图形环境嵌套到 tikz 图形环境的节点中:
\begin{tikzpicture}
\graph [layered layout]{
ABABAB -> {
AB -> {A, B},
BA -> {A, B}
};
};
\end{tikzpicture}
到目前为止我已经了解了这一点,我需要使每个节点都具有类似的布局自己的图表。
我还希望能够将内图的节点与外图的节点连接起来。
我可以单独创建所有节点并连接它们,使用嵌套节点如下:
\node [draw] at (0,0) (container1) {
\begin{tikzpicture}
\node at (0,0) (container1label) {Node 1};
\node [draw,below=0.4 of container1label] (child1) {Node 1's Child};
\end{tikzpicture}
};
但我希望能够自动处理布局。
理想情况下,我会创建具有不可见边的外部图,以便布局合适,然后手动将图的内部节点相互连接。
有没有办法将嵌套在环境tikzpicture
中创建的节点中\graph
?
编辑:
为了更清楚地说明,这就是我试图建模的。由规则组成的形式语法。我需要为规则的每个左侧创建一个外部节点,在这些外部节点内,我希望能够为每个符号创建新节点并将它们与相应的外部节点连接起来。
例如,我希望的外部节点abcdef
包含ab
、、、和cde
的节点(最好像图中所示f
那样以两行轻松布局),然后我需要从每个内部节点到它们对应的外部节点的边,而外部节点又包含其规则的符号。a
bc
def
更简单的解决方案可能是仅当外部节点具有指向彼此的规则时才将它们相互连接,但我甚至不知道如何为环境中的每个节点定义数学文本内容graph
。不过,我更希望将每个内部符号节点与每个外部规则节点连接起来。
与此非常相似:
答案1
这子布局当然可以为此提供一个解决方案。
代码
% !TeX TS-program = lualatex
\documentclass[tikz]{standalone}
\usetikzlibrary{graphs, graphdrawing}
\usegdlibrary{layered}
\begin{document}
\tikz[
text depth=+0pt, text height=+.7em, inner sep=+.2em,
subgraph text none, anchor=base,
subgraph nodes={
draw=lightgray, rectangle, rounded corners, inner sep=+.333em,
text depth=, text height=}]
\graph [layered layout, fresh nodes, nodes behind edges] {
XYABCDEFXY//[layered layout]{ xyabcdefxy -- { xy, abcdef, xy } },
XY//[layered layout]{ xy -- {x, y} },
ABCDEF//[layered layout]{
abcdef -- {
ab -- { a, bc },
cde -- { (bc), def }, % (bc) to connect to the previous bc node
f -- (def) % and not create a new one
}
},
AB //[layered layout]{ ab -- { a, b }},
CDE//[layered layout]{ cde -- { c, de }},
BC //[layered layout]{ bc -- { b, c }},
DEF//[layered layout]{ def -- { de, f }},
DE //[layered layout]{ de -- { d, e }},
% all nodes in () because we want to use the existing ones
{(xy), (xy')} -- (XY),
(abcdef) -- (ABCDEF),
(ab) -- (AB),
(cde) --[bend left=15] (CDE),
(bc) -- (BC),
(def) -- (DEF),
(de) -- (DE)
};
\end{document}