请查看复杂的章节依赖关系图例子在给定的图像中。它解释了每个章节如何依赖于前一个章节。我相信这种类型的图表可以在以下代码中完成(我会说是硬编码)Tikz
。我不需要帮助来在 TIKZ 中实现它。我一直在寻找一种更像包的开箱即用的解决方案,您可以提及依赖项,包会自动为您生成图表。有这样的解决方案吗?我在 TeX.SX 中搜索了类似的问题,发现在所有情况下,这TikZ
都是推荐的选项。如果实现此功能或包,将对我这样的人来说很有用,因为我们需要包含章节阅读顺序或依赖关系图。
更新:上图的理想解决方案应该是这样的
\chapter{Chapter 1}
bla bla bla
\chapter{Chapter 2}
\RequiredDependency{chapter1_label}
\chapter{Chapter 3}
\chapter{Chapter 4}
\RequiredDependency{chapter1_label}
\RecommendedDependency{chapter2_label,chapter3_label}
等等。一旦我这样做了,上面的图表就应该生成了。
答案1
prerex
软件包旨在绘制先决条件图表,例如这些它基于以下内容TikZ
并且其README
文件以此内容开头:
prerex,版本 6.5.3:先决条件图表的宏,以及相关的编辑器和查看器应用程序。
此套餐包含
prerex.sty
:一个 LaTeX 包,用于生成由箭头链接的课程节点图表,这些箭头代表先决条件和共同要求,
prerex
:用于创建和编辑图表描述的交互式程序,以及
vprerex
:(“visual prerex”)prerex 的 GUI 和预览器。
我以前从未使用过,但(没有使用它的交互式程序)我编写了下一个代码来生成与您的示例类似的内容。
\documentclass{article}
\usepackage{geometry}
\geometry{noheadfoot, vmargin=1.0in, hmargin=0.5in}
\usepackage{prerex}
\usetikzlibrary{fit}
\begin{document}
\thispagestyle{empty}
\setcounter{diagheight}{50}
\begin{chart}%\grid
\reqhalfcourse 45,45:{}{Chapter 1}{}
\reqhalfcourse 35,36:{}{Chapter 2}{}
\reqhalfcourse 55,36:{}{Chapter 3}{}
\reqhalfcourse 35,27:{}{Chapter 4}{}
\reqhalfcourse 55,27:{}{Chapter 5}{}
\reqhalfcourse 68,27:{}{Chapter 6}{}
\reqhalfcourse 68,18:{}{Chapter 7}{}
\reqhalfcourse 45,9:{}{Chapter 8}{}
\prereq 45,45,35,36:
\prereq 68,27,68,18:
\prereqc 45,45,35,27;-30:
\prereqc 45,45,55,27;-30:
\prereqc 35,27,45,9;0:
\prereqc 68,18,45,9;0:
\prereqc 68,27,45,9;0:
\coreq 55,27,68,27:
\coreq 35,36,35,27:
\coreq 35,36,55,27:
\coreq 55,36,55,27:
\coreq 55,36,35,27:
\begin{pgfonlayer}{courses}
\draw[dashed] ([shift={(-1mm,-1mm)}]x55y27.south west) rectangle ([shift={(1mm,1mm)}]x68y27.north east);
\end{pgfonlayer}
\end{chart}
\end{document}
答案2
TikZ 的 CVS 版本包含一个图形绘制库,可以自动布置图形的组成部分。
以下是它自动生成的结果:
\tikz \graph [layered layout]
{
C1 -> {C2, C4, C5},
C2 ->[densely dashed] {C4, C5},
C3 ->[densely dashed] {C4, C5},
C5 -> {C7, C8},
C4 -> C8,
C7 -> C8
};
所以你必须做很多调整才能让它看起来不错。我认为在这种情况下,手动方法效果更好:网络并没有复杂到需要自动化方法的程度,而且如果布局是由人完成的,那么得到令人赏心悦目的东西要容易得多。
\documentclass[border=5mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{graphs, graphdrawing}
\usegdlibrary{layered}
\begin{document}
\tikz \graph [layered layout]
{
C1 -> {C2, C4, C5},
C2 ->[densely dashed] {C4, C5},
C3 ->[densely dashed] {C4, C5},
C5 -> {C7, C8},
C4 -> C8,
C7 -> C8
};
\end{document}