![如何创建允许折叠和展开节点的图表](https://linux22.com/image/350566/%E5%A6%82%E4%BD%95%E5%88%9B%E5%BB%BA%E5%85%81%E8%AE%B8%E6%8A%98%E5%8F%A0%E5%92%8C%E5%B1%95%E5%BC%80%E8%8A%82%E7%82%B9%E7%9A%84%E5%9B%BE%E8%A1%A8.png)
我想用 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]
可通过tlmgr
TeX-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}