web-dev-qa-db-ja.com

ランク属性は私を混乱させます

エッジのランク属性には、「同じ」、「最小」、「ソース」、「最大」、「シンク」の5つの値があります。 「同じ」を除いて、他の値をいつ使用するかわかりません。

min
\begin{dotpic}
  rankdir=LR;
  size="7,5";
  node[shape=circle];
  C->A;
  {rank=min;A;B}
  B->D
  A->B;
\end{dotpic}

max
\begin{dotpic}
  rankdir=LR;
  size="7,5";
  node[shape=circle];
  C->A;
  {rank=max;A;B}
  B->D
  A->B;
\end{dotpic}

source
\begin{dotpic}
  rankdir=LR;
  size="7,5";
  node[shape=circle];
  C->A;
  {rank=source;A;B}
  B->D
  A->B;
\end{dotpic}

sink
\begin{dotpic}
  rankdir=LR;
  size="7,5";
  node[shape=circle];
  C->A;
  {rank=sink;A;B}
  B->D
  A->B;
\end{dotpic}

私のvim環境でのテストにより、これらの値には多少の違いがあることがわかります。しかし、彼らが何のためにあるのか正確に知らない。

32
nirvana9235

ランクを空のままにするか、rank = sameを使用することは、はるかに頻繁に使用されます。これらの他の4つは通常、特別な状況でのみ使用されます。

単独で使用した場合、minとsourceは同じ機能を持っています。それらすべてのノードを最小ランク(TBグラフの最上行)に配置します。これらの違いは、minが他のサブグラフを許可することです。最小ランクにあります。ソースはそうではありません。ソースは、minまたはソースの他のサブグラフのみが最小ランクにあることを許可します。

次のグラフスニペットを考えてみます。

{ rank=source; a -> b; }
{ rank=same;   c -> d; }

最終的には2行になります。 a-> bはc-> dより上になります。

Source


ソースをminに変更すると、1行しか取得されません。 a-> bはすべてc-> dの左側にあり、すべてminランクです。

{ rank=min;    a -> b; }
{ rank=same;   c -> d; }

Min

Maxとsinkはグラフの下部に相当します。

40
Dan