I'm a TikZ newbie, what is the best package (and technique) that can be used to quickly (and easily) build a drawing of a directed graph like this one (picture from M. Sipser's book)?
In particular what is the best way to draw the (aligned) dots in the middle of the drawing (add "..." text and place it at absolute position)? And what about the halved arcs?
And does there exist a graphical Tikz GUI tool powerful enough to achieve the same result?
-
2There is also an italian guide to quickly learn the basis of TikZ: L'Arte di disegnare con LaTeX. In another italian guide, Introduzione all’uso di TikZ in Ingegneria, I was reporting examples of drawings with very basic code; you can be interested in chapter 5.– Claudio FiandrinoFeb 26, 2014 at 13:35
-
@ClaudioFiandrino: thanks, it seems a good resource that can be used also as a quick reference! If there is an English version you can convert your comment into an answer and I'll upvote it :) What about the GUI tool? Are TikzIt or TikzEd powerful enough for such a (simple) task?– Marzio De BiasiFeb 26, 2014 at 13:39
-
@MarzioDeBiasi it's relatively easy to achieve this result with Tikz only with basic commands– Alain MatthesFeb 26, 2014 at 13:56
-
@AlainMatthes: thank you! BTW, yesterday it has been released the new version of L'Arte di disegnare con LaTeX which is also showing some of the new features of TikZ 3.0.0. The authors made a great work!– Claudio FiandrinoFeb 28, 2014 at 7:58
1 Answer
There are some packages to do this but if it's perhaps interesting to learn something simple about Tikz and how use some basic commands
1) You load the package tikz
2) Then you load a library arrows to get some special styles about arrows
3) We can define some styles for vertex and edge but you can look at this after
4) We place some nodes. My method here is simple but it's not a good one because it's not easy to modify the values.
5) We draw the edges
6) The dots are between (a3) and (c) \path
is useful because we don't draw anything but we can place a node. By default, the node are placed at the middle of each extremities.
7) I created nodes empty without drawing
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}
\tikzset{vertex/.style = {shape=circle,draw,minimum size=1.5em}}
\tikzset{edge/.style = {->,> = latex'}}
% vertices
\node[vertex] (a) at (0,0) {};
\node[vertex] (b) at (4,3) {};
\node[vertex] (c) at (8,0) {};
\node[vertex] (d) at (4,-3) {$t$};
\node[vertex] (a1) at (1.5,0) {};
\node[vertex] (a2) at (3,0) {};
%edges
\draw[edge] (b) to (a);
\draw[edge] (b) to (c);
\draw[edge] (a) to (d);
\draw[edge] (c) to (d);
\draw[edge] (a) to[bend left] (a1);
\draw[edge] (a1) to[bend left] (a);
\draw[edge] (a1) to[bend left] (a2);
\draw[edge] (a2) to[bend left] (a1);
\path (a2) to node {\dots} (c);
\node [shape=circle,minimum size=1.5em] (a3) at (4.5,0) {};
\draw[edge] (a2) to[bend left] (a3);
\draw[edge] (a3) to[bend left] (a2);
\node [shape=circle,minimum size=1.5em] (c1) at (6.5,0) {};
\draw[edge] (c) to[bend left] (c1);
\draw[edge] (c1) to[bend left] (c);
\end{tikzpicture}
\end{document}
Remarks : It's possible to define constant to define the distance between the nodes. Tikz also gives the possibilities to use some option like node distance
. There are other options to place the nodes but it's a more complex for a first approach.
-
Great! And for what regards the dots, can I use a node as a hidden "hook" and place it at absolute position? Feb 26, 2014 at 14:04
-
I complete my answer but I think some users give you answers based on powerful package or based on more complex commands of tikz ... Feb 26, 2014 at 14:17
-
Another small question, if I want to add a simple label "$e_1,e_2$" to the diagonal edges (in the middle of the edge just above it); how can I modify the "\draw[edge] (b) to (a);" command ? I tried "\draw[edge] (y1) to (d1_1) node [midway, below] {Text};" but it doesn't work. Feb 27, 2014 at 11:00
-
Don't worry I found that: "\draw[edge] (y1) to node[label= above:$e_1$] {}(d1_1);" works well. Feb 27, 2014 at 11:05