Tikz:图表:在树形布局中水平和垂直移动子层/级别?

Tikz:图表:在树形布局中水平和垂直移动子层/级别?

这与目录列表略有不同,截至示例使用 TikZ 中的 tree 命令绘制目录列表因为我想注释显示文件之间链接的最终结构。我需要一些方法来引用树中的节点,以下似乎是我的选择

  1. 使用tabbing环境,利用tikzmark注释节点来布局树结构。
  2. 在环境中使用graphs或库。treestikzpicture
  3. dirtree将和forest包与之前的设置(1 或 2)结合使用。

方法1给了我想要的输出,但如果树扩展到超过一页,注释就会变得混乱,使用multicols和并minipage没有改善这一点。我目前正在考虑方法2如果失败了,将尝试3

我希望使用 TikZ graphdrawings 绘制的以下树中的子图层tree layout

当前布局

可以嵌套在它们的父级之间,如在第二个布局中使用 TikZ 库trees环空间 dirtree钥匙,

首选布局

,而不是以扇形对称地分布在它们周围。

我的假设(可能是错误的)是,图形绘制库允许将子图操纵到首选位置。然而,与其他 TikZ 库不同,graphs和的界面graphdrawing似乎相当隔离。我遇到的示例如下

  • tries密钥可以使部分布局正确,但如果使用子图则会中断。
  • 设置grow down sep给出了正确的结构,但我不知道如何进一步调整它,并且它会被子图布局忽略。
  • 使用tree layout允许子图但不能很好地控制它们的位置。

下面的代码生成了第一幅图像。在其中,我为第一个子层指定了一个微调值,该值按预期偏移下一个子层,但不会偏移其节点(右上角的浮动矩形)。尝试提供幻影值也会失败,如最低层中的错误箭头所示。

\documentclass[tikz]{standalone}%
\usepackage{tikz}%
%
\usepackage{luatex85}%
\usepackage{menukeys}%
\usetikzlibrary{graphs}%
\usetikzlibrary{graphdrawing}%
\usegdlibrary{trees}%
\usegdlibrary{layered}%
\usegdlibrary{circular}%
%
\makeatletter
\newcount\dirtree@lvl
\newcount\dirtree@plvl
\newcount\dirtree@clvl
\def\dirtree@growth{%
  \ifnum\tikznumberofcurrentchild=1\relax
  \global\advance\dirtree@plvl by 1
  \expandafter\xdef\csname dirtree@p@\the\dirtree@plvl\endcsname{\the\dirtree@lvl}
  \fi
  \global\advance\dirtree@lvl by 1\relax
  \dirtree@clvl=\dirtree@lvl
  \advance\dirtree@clvl by -\csname dirtree@p@\the\dirtree@plvl\endcsname
  \pgf@xa=\tikzleveldistance
  \pgf@ya=-\tikzsiblingdistance
  \pgf@ya=\dirtree@clvl\pgf@ya
  \pgftransformshift{\pgfqpoint{\the\pgf@xa}{\the\pgf@ya}}%
  \ifnum\tikznumberofcurrentchild=\tikznumberofchildren
  \global\advance\dirtree@plvl by -1
  \fi
}
%
\tikzset{
  dirtree/.style={
    growth function=\dirtree@growth,
    level distance =1.2em,
    sibling distance =1.2em,
    growth parent anchor=west,
%     every node/.style={anchor=west},
%     every parent node/.style={anchor=south west},
    every child node/.style={anchor=west},
    edge from parent path={(\tikzparentnode.south west) ++(0.5*\tikzleveldistance,0) |- (\tikzchildnode\tikzchildanchor)}
  }
}
\makeatother
%
\newmenumacro{\nixpath}[/]{hyphenatepathswithfolder}
\newmenumacro{\nixfile}[/]{hyphenatepaths}
\newmenumacro{\winpath}[bslash]{hyphenatepathswithfolder}
\newmenumacro{\winfile}[bslash]{hyphenatepaths}
%
\begin{document}%
\normalsize%
\begin{tikzpicture}%
\graph [tree layout, grow'=right]
 {"00"/"\winpath{E:\CheatSheets\Algorithms}" -> 
  {"01"/"\winpath{Genetic}";
   "02"/"\winpath{Linear_Programming}" -> 
   {"03"/"\winpath{build}";
    "04"/"\winfile{Affine_Scaling.pseudo.tex}"};
   "05"/"\winpath{build}";
   "06"/"\winfile{Algorithms.tex}";
   "07"/"\winfile{Genetic.tex}";
   "08"/"\winfile{input.tex}";
   "09"/"\winfile{input2.tex}";
   "10"/"\winfile{input3.tex}"}};%
\end{tikzpicture}%
\begin{tikzpicture}%
\node (00) {\winpath{E:\CheatSheets\Algorithms}}[dirtree]
 child {node (01) {\winpath{Genetic}}}
 child {node (02) {\winpath{Linear_Programming}}
 child {node (03) {\winpath{build}}}
  child {node (04) {\winfile{Affine_Scaling.pseudo.tex}}}}
 child {node (05) {\winpath{build}}}
 child {node (06) {\winfile{Algorithms.tex}}}
 child {node (07) {\winfile{Genetic.tex}}}
 child {node (08) {\winfile{input.tex}}}
 child {node (09) {\winfile{input2.tex}}}
 child {node (10) {\winfile{input3.tex}}} ;%
\graph [use existing nodes]
{06      ->[in=0, out=0, looseness=3] {04     }};%
\end{tikzpicture}%
\end{document}

我也想使用|-线条规范,但似乎无法在/tikz/graphs/edges键内设置它。我的理解是,边缘是用to[...]命令而不是--/ |-/-|命令绘制的。实际上,我想将绘图机制从 “降级”to[...]|-使用 Tikz 3.0 树形图进行分叉边缘样式提出了类似的问题。pgfmanual topath3.0.1a 版中的第 70 节库允许使用直线,to[line]但没有提及弯头。

目前我正在尝试将trees和两者graph结合起来,前者进行布局,后者进行注释。

我认为主要问题实际上是“除了轻推子图之外,如何控制子图的放置”。这真的可行吗?阅读手册会让人相信这一点,但我找不到一个很好的例子来说明如何做到这一点,而且我觉得我仔细阅读了layered layouttree layout和部分。graphdrawing

相关内容