我正在尝试使用graph
tikz 库来定位我的节点(above=of mynode
当您拥有要链接的大型节点链时,使用并不总是很实用...或者也许您有更好的解决方案?)。想法是:
- 我希望能够限制某些节点的大小,但某些节点可能比限制的节点更大
- 我希望有一棵树向下生长,树枝在两根“柱子”中间连接。理想情况下,树枝应该足够远,这样即使有些节点很大,它们也不会互相接触。
我尝试了以下代码,但首先,我找不到如何“在中间”分割分支,而且我也找不到如何改变节点的宽度(我无法使用text width
,它失败了TeX capacity exceeded
......)
谢谢你!
梅威瑟:
\documentclass{report}
\usepackage{graphicx}
\usepackage{tikz}
\usetikzlibrary{graphs}
\begin{document}
\begin{tikzpicture}[
mybox/.style={
draw,
rounded corners,
fill=blue!20,
},
mysmallbox/.style={
mybox,
% Fail
% text width=.5cm
}
]
\tikz \graph[trie, simple, grow down, branch right] {
{
a[mybox] -> b,
c -> My small split node[mysmallbox] -> My big node[mybox]
}
-> x2;
};
\end{tikzpicture}
\end{document}
我想要的:“我的小分割节点”应该有一个最大宽度(比如说 1 厘米),迫使它分成两行,这两列a -> b
不c -> ... -> My big node
应该重叠,并且x2
应该位于这两列的中间(branch right
把它放在左边,branch left
在右边......但branch middle
不存在!)
答案1
我认为你想要这样的东西
因为这是一棵真正的树,如果从下到上阅读,我会使用森林,因为它会自动为您划分空间。
\documentclass[border=10pt]{standalone}
\usepackage{forest}
\begin{document}
\begin{forest}
my box/.style={top color=blue!20, draw, rounded corners, bottom color=blue!30},
for tree={
grow'=90,
edge+={<-},
},
where n children=0{tier=terminus}{}
[x2
[b[a, my box]]
[my big node, my box
[my small split node, text width=10mm, text centered, my box [c]]
]
]
\end{forest}
\end{document}
如果你想继续使用 Ti 的图表钾Z,那么您可以使用align=center
并手动拆分节点。但是,我认为在这种情况下您需要一个单独的名称,因为节点名称中不能有换行符。此外,正如手册第 273 页所述
您甚至可以结合简单选项在路径上“重复”。但是,在这种情况下,默认放置策略将不起作用,您将需要图形绘制库中的分层布局等选项,而这些选项需要 LuaTeX。
我认为,如果没有 LuaTeX 和合适的布局算法,您就不能指望这种方法能够奏效。但是,如果您对此没有异议,那么这种方法就很好用。
\documentclass[border=10pt]{article}
\usepackage{tikz}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{layered}
\begin{document}
\begin{tikzpicture}[
mybox/.style={
draw,
rounded corners,
fill=blue!20,
},
mysmallbox/.style={
mybox, align=center,
}
]
\tikz \graph[trie, simple, layered layout] {
{
a[mybox] -> b,
c -> s/"My small\\split node"[mysmallbox] -> My big node[mybox]
}
-> x2;
};
\end{tikzpicture}
\end{document}