如何创建允许折叠和展开节点的图表

如何创建允许折叠和展开节点的图表

我想用 LaTeX 创建一个交互式图表。

现在我正在使用 Microsoft PowerPoint 智能工具,但它缺少一些功能。

我想创建一个显示至设定深度的层次树。该树将具有显示其他节点集的方法。

我对 LaTeX 还很陌生,但我没有看到有关可能的库的任何信息,也没有看到它不起作用的原因。

我想到将图表制作到一定程度,然后创建幻灯片与图表下一部分的链接。

我正在寻找一个通用策略,例如哪些图书馆可以提供这种行为。

我打算编写一些软件来生成 LaTeX 代码,所以即使这个方法很繁琐也没关系。

编辑

我目前有一个系统及其组件的层次结构。

例如

Device Foo
- Object 1
  - SubObject 1-1
- Object 2
- Object 3
  - SubObject 3-1
  - SubObject 3-2
.
.
.
- Object  n
  - Object n-m
  - ...

我的梦想目标是拥有如下的东西:

答案1

可以使用 TikZ 和 OCG(又名 PDF 图层)制作此类交互式 PDF 文档。

以下代码可以作为起点。它近似于 Treemaps,如 OP 的第一个链接所示。

它需要最新版本的软件包ocgx2[2017/03/07]可通过tlmgrTeX-Live 和 Acrobat Reader 获得),以便正确控制放置在文档各个层上的链接区域的可见性。

在此处输入图片描述

打开分享LaTeX:

\documentclass[tikz, margin=2]{standalone}

\usepackage[tikz]{ocgx2}[2017/03/07]

\begin{document}\Huge

\begin{tikzpicture}[
    every scope/.style={ocg={opts={radiobtngrp=myTree}}},
    every node/.style={
      anchor=south west, thick, draw, minimum width=5cm, minimum height=5cm},
    upnode/.code={\draw (0,5) node[show ocg=#1, anchor=north west, thin,
                    minimum width=0, minimum height=0] {\small up};}
]

\begin{scope}[ocg={ref=Root, status=on}]
  \draw (0,0) node[show ocg=A] {A};
  \draw (5,0) node[show ocg=B] {B};
\end{scope}

\begin{scope}[ocg={ref=A, status=off}]
  \draw (0,0) node[show ocg=A.1] {A.1};
  \draw (5,0) node[show ocg=A.2] {A.2};
  \tikzset{upnode=Root}
\end{scope}

\begin{scope}[ocg={ref=A.1, status=off}]
  \draw (0,0) node[show ocg=A.1.1] {A.1.1};
  \draw (5,0) node {A.1.2};
  \tikzset{upnode=A}
\end{scope}

\begin{scope}[ocg={ref=A.1.1, status=off}]
  \draw (0,0) node {A.1.1.1};
  \draw (5,2.5) node[minimum height=2.5cm] {A.1.1.2};
  \draw (5,0) node[minimum height=2.5cm] {A.1.1.3};
  \tikzset{upnode=A.1}
\end{scope}

\begin{scope}[ocg={ref=A.2, status=off}]
  \draw (0,0) node {A.2.1};
  \draw (5,0) node {A.2.2};
  \tikzset{upnode=A}
\end{scope}

\begin{scope}[ocg={ref=B, status=off}]
  \draw (0,0) node[show ocg=B.1] {B.1};
  \draw (5,0) node[show ocg=B.2] {B.2};
  \tikzset{upnode=Root}
\end{scope}

\begin{scope}[ocg={ref=B.1, status=off}]
  \draw (0,0) node {B.1.1};
  \draw (5,0) node {B.1.2};
  \tikzset{upnode=B}
\end{scope}

\begin{scope}[ocg={ref=B.2, status=off}]
  \draw (0,0) node {B.2.1};
  \draw (5,0) node {B.2.2};
  \tikzset{upnode=B}
\end{scope}

\end{tikzpicture}

\end{document}

相关内容