PGF / TikZ 3.0を使用したLaTeXのチャートとグラフ





数か月前、LaTeX PGF / TikZ 3.0のグラフィックパッケージがリリースされ、多くの興味深いことが登場しました。 この記事では、単純なフローチャートを描くためにそれらを適用しようとします。 たとえば、よく知られている記述言語定義スキームの一部を描いてみましょう。 以前に公開された記事で既に説明したツールについては触れませんが、グラフエントリの簡易表記法とノードの配置とグラフ分岐の制御について説明します。







簡略化されたグラフ表記




TikZでノードとラインを描画するための標準コマンドは\node



\path



ですが、それらを含むコードはかなり冗長であり、 \node



コマンドからフェンスの背後にあるダイアグラム自体を失う可能性があります。 TikZ 3.0は、よく知られているGraphvizパッケージとそのDOT言語から借用した簡略化されたグラフ表記を導入しました。 DOT表記では、最も単純なグラフは、a- a -> b -> c



ような一連のテキストラベルと疑似矢印として記述できます。







前文から始めましょう:

 \usepackage{tikz} \usetikzlibrary{graphs}
      
      







そして、簡単なグラフを作成します。

  \begin{tikzpicture} \graph { ? -> ! ->  }; \end{tikzpicture}
      
      







引数の\graph



コマンドは、DOT表記のグラフの記述を受け入れ、3つの頂点のチェーンを取得すると仮定します。 実際には、それはそれほど単純ではありません。タグが紛失しました(写真「トップチェーン」のポイント1)



グラフノードは手動で配置できます。これについては次のパートで扱いますが、今のところは自動配置を試してください。 あなたができる最も簡単なことは、 \graph



が成長する場所と分岐する場所を\graph



コマンドオプションでTikZに伝えることです。 ノードの中心が3センチメートルのステップ(ポイント2)でグリッド上に配置されるように、グラフを右に成長させましょう。



  \begin{tikzpicture} \graph[grow right=3cm] { ? -> ! ->  }; \end{tikzpicture}
      
      







中心間ではなく、ノードの隣接するエッジ間の距離を指定できます(ポイント3)。



  \begin{tikzpicture} \graph[grow right sep=2em] { ? -> ! ->  }; \end{tikzpicture}
      
      







カウントは任意の方向に増やすことができます。 右、左、上、下の標準方向は座標軸に直交しますが、角度を付けて成長させることもできます(ポイント4)。



  \begin{tikzpicture} \graph[chain shift=(-45:1)] { ? -> ! ->  }; \end{tikzpicture}
      
      







タグ内のフリーテキスト






たとえば、ラベルにハイフン、または多少複雑なもの(数式?)がある場合、追加のヒントがなければ理解できませんが、引用すればすべて問題ありません。

  \begin{tikzpicture} \graph[grow right sep=1em] { ? ->   E:\\ \`{E}, \'{E}, \^{E}, \"{E} ->  }; \end{tikzpicture} \begin{tikzpicture} \graph[grow right sep=1em] { ? -> "  E:\\ \`{E}, \'{E}, \^{E}, \"{E}" ->  }; \end{tikzpicture}
      
      







グラフ分岐




スキームをより複雑にし、分岐を追加しましょう。 DOT表記では、中括弧を使用してノードをグループに結合し、各祖先ノードからグループの各ノードに弧を描くことができます。



  \begin{tikzpicture} %%  nodes     . align=center     \graph[nodes={align=center}, grow down sep, branch right sep] { ? -> { "  E:\\ \`{E}, \'{E}, \^{E}, \"{E}" -> ,  -> " - ?" -> { "\c{C}  \"{E}" ->   ? -> { "$\dots$" -> ,   ->  }, " \"{A}  \"{O} \\   \\ " ->  } } }; \end{tikzpicture}
      
      











ご覧のとおり、質問ノードからのアークは、対応する回答ノードに描かれています。 分岐パラメーターは、分岐中のノードの位置を担当します。この場合、 right sep



は、分岐がレイヤー間で同じ距離で右側に移動する必要があることを示します。 grow



パラメータと同様に、他の値を取ることができます。 ところで、ノード内のテキストの配置を指定する必要がありました。これがないと、ラベルの改行は機能しません。



しかし、問題があるようです。 ノード "Oh ... he"から結論 "French"までのアークが行われましたが、どこかへ行きました。 「フランス語」という結論を、それに先行するすべての質問と回答より低くすることは可能ですか? 「Diacritics?」という質問の後にグループ全体の背後に「French」という結論を出すのが単純な場合、グループのすべての葉から円弧が描画されます。




  \begin{tikzpicture} %%      \graph[nodes={align=center,rectangle,draw=black}, grow down sep, branch right sep] { ? -> { "  E:\\ \`{E}, \'{E}, \^{E}, \"{E}",  -> " - ?" -> { "\c{C}  \"{E}" ->   ? -> { "$\dots$",   ->  }, " \"{A}  \"{O} \\   \\ " ->  } } ->  }; \end{tikzpicture}
      
      









ただし、 not source



オプションとnot target



オプションを追加することにより、伝導アークの終了リストからリーフを明示的に除外できます。 それらの名前はやや矛盾しています。したがって、アークがアルバニア語ノードからフランス語ノードに移動してはならないことを示すために、 [not target]



オプションをアルバニア語ノードに割り当てる必要があります



  \begin{tikzpicture} \graph[nodes={align=center,rectangle,draw=black}, grow down sep, branch right sep] { ? -> { "  E:\\ \`{E}, \'{E}, \^{E}, \"{E}",  -> " - ?" -> { "\c{C}  \"{E}" ->   ? -> { "$\dots$",   -> [not target] }, " \"{A}  \"{O} \\   \\ " -> [not target] } } ->  }; \end{tikzpicture}
      
      







おそらく、最初の部分では十分であり、次の部分では、ノードを配置するための他の戦略とDOT表記を使用するためのオプションを検討することができます。



参照:

[1] 記事の記事のソーステキストとコンパイルされた結果

[2] PGF / TikZパッケージ



All Articles