禁用算法密钥

禁用算法密钥

我想这是一个相当简单的问题:是否可以禁用或取消选择图形绘制库中的算法?


原因是我正在定义一个命令,该命令使用\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}

在此处输入图片描述

相关内容