Tikz:图形,分支位置和节点宽度

Tikz:图形,分支位置和节点宽度

我正在尝试使用graphtikz 库来定位我的节点(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 -> bc -> ... -> 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}

手动分割节点

相关内容