我想这是一个相当简单的问题:是否可以禁用或取消选择图形绘制库中的算法?
原因是我正在定义一个命令,该命令使用\graph
设置了许多默认值的命令,这些默认值中包括算法spring layout
。但在极少数情况下,我想禁用此算法,因为不允许spring layout
使用在图表之外指定的节点。
由于绝大多数情况下都使用,spring layout
并且只有在非常特殊的情况下才需要禁用它,因此最好在spring layout
我不需要它时禁用它(而不是几乎所有时间都必须启用它),以避免不必要的冗余。
如果这不可能,我总是可以通过定义命令的带星号/无星号版本来解决这个问题。
下面是一个最小(且有点不自然)的例子。是否可以先spring layout
指定键,然后将其删除,使其看起来好像从未指定过?这no layout
几乎满足了我的要求,但 Lua 仍然抱怨它无法在图中未指定的节点之间创建边。
\documentclass[tikz]{standalone}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{force,trees}
\begin{document}
% What doesn't work
\begin{tikzpicture}
\node at (0, 0) (a) {a};
\node [above of=a] (b) {b};
\node [left of=b] (c) {c};
\graph [spring layout, no layout] { (a) -- (b) -- (c) };
\end{tikzpicture}
% What it should (ideally) revert back to (as if I never specified spring layout)
\begin{tikzpicture}
\node at (0, 0) (a) {a};
\node [above of=a] (b) {b};
\node [left of=b] (c) {c};
\graph { (a) -- (b) -- (c) };
\end{tikzpicture}
\end{document}
答案1
指定另一个布局将覆盖任何现有布局。或者no layout
可以使用:
\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{force,trees}
\begin{document}
\tikz\path
(0,0) [text=red] graph [spring layout] {A -> {B -> {C, D}, E}}
(2,0) [text=green] graph [spring layout, no layout] {A -> {B -> {C, D}, E}}
(4,0) [text=blue] graph [spring layout, tree layout] {A -> {B -> {C, D}, E}};
\end{document}