Big diagram in LaTeX with the help of PGF/TikZ

I managed to make this big diagram in Inkscape adding the codes in LaTeX using the plugin textext. See this question for more. I wish I knew how to draw the big diagram about dual linear spaces with the help of PGF/TikZ.

Update.

Like I said I could make this figure in Inkscape. But as you can see when I post the StackExchange she gets off with low resolution. In this figure is docoument PDF with a satisfactory resolution. But on the websites of the StackExchange resolution is not good.

I believe that with a package Tikz I can solve the problem. So I posted this question here.

On the coments below: Soon my problem is:

If I use Inkscape I can control the position of the starting and end point of the arcs in each node. But to lose in resolution.

If you use commands TikZ as usual I lose control over the position of the end point and initial arcs in each node. For the package TikZ endpoints and initials of each arc in a position pre-defined package TikZ.

Question: How to solve this problem?

• See here for some inspiration: tex.stackexchange.com/questions/42611/… – Marco Daniel Dec 16 '12 at 15:16
• Can you provide larger version of image? – m0nhawk Dec 16 '12 at 15:18
• Take a look into this. – m0nhawk Dec 16 '12 at 15:28
• @Elias on your updated comments, if you post a small document with an example of what you've tried with TikZ, then people can likely help to solve that problem, but without some code to see what you've done it's hard to help. – Alan Munn Dec 16 '12 at 16:24

Here's something to get you started using the positioning library from tikz Explanation

• I started by setting up a node at the center of the picture

\node(atcenter) at (0,0) {Center};

everything else is specified in relative position to this node

• Once the nodes are set up, you can connect them using a \foreach loop; this will allow easier changes later- perhaps you want the connections to be all blue, or thick, or something else.
• The only 'tricky' node was the one with more than one row; you'll notice that I used a tabular for this, although it might not be strictly necessary
• The connection between atsouthwest and west isn't exactly as in your picture, but I had to leave something for you to research :)

Complete code

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{tikzpicture}
% set up the nodes
\node(atcenter) at (0,0) {Center};
\node(atnorth) [above=of atcenter]{North};
\node(ateast) [right=of atcenter]{East};
\node(atnortheast) [above=of ateast]{North East};
\node(atsoutheast) [below=of ateast]{South East};
\node(atwest) [left=of atcenter]{West};
\node(atsouth) [below=2cm of atcenter]{South};
\node(atsouthwest) [left=4cm of atsoutheast,draw=black,rounded corners=2ex]{\begin{tabular}{@{}c}South West\\Second row\end{tabular}};
% connect the nodes, which is a perfect job
% for a loop
\foreach \first/\second in {atcenter/atnorth,
atcenter/ateast,
ateast/atnortheast,
atsoutheast/ateast,
atcenter/atsoutheast,
atnorth/atnortheast,
atwest/atnorth,
atcenter/atsouth,
atsouthwest/atsoutheast,
atwest/atcenter}{%
\draw[->] (\first) -- (\second);
\draw (atsouthwest) to[out=90,in=180] (atwest);
}
\end{tikzpicture}
\end{document}
• An alternative to tabular would be align=center. – Qrrbrbirlbel Dec 16 '12 at 19:05

I think part of the problem, as the OP mentions, is the required positioning of the start and endpoints of the arrows, which, while pretty versatile by default, require (as far I can see) a bit of extra work to get things going in this case.

For the node positioning, I would have gone for a matrix. The line drawing I hide (somewhat crudely) in some styles. A bit like this:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{matrix}
\usetikzlibrary{shapes.misc}
\begin{document}

\tikzset{
up/.style args={from (#1) to (#2)}{
insert path={
([xshift=2ex]#1.north west) -- ([xshift=2ex]#2.south west)
}
},
down/.style args={from (#1) to (#2)}{
insert path={
([xshift=2ex]#1.south west) -- ([xshift=2ex]#2.north west)
}
},
along right/.style args={from (#1) to (#2)}{
insert path={
(#1.east) -- (#2.west)
}
},
down right/.style args={from (#1) to (#2)}{
insert path={
([xshift=3ex]#1.south west) -- (#2.north west)
}
},
up right/.style args={from (#1) to (#2)}{
insert path={
([xshift=3ex]#1.north west) -- (#2.south west)
}
}
}

\begin{tikzpicture}[>=stealth]
\matrix
[
name=matrix,
matrix of math nodes,
row sep=0.5in,
column sep=0.5in,
ampersand replacement=\&,
nodes={anchor=west},
row 3 column 1/.style={
every node/.append style={%
shape=rounded rectangle,
draw,
xshift=-0.5in,
anchor=center,
inner xsep=-1ex,
name=f,
}
}]{
\& |(a)| AAAA \& |(b)| BBBB \\
|(c)| CCCC \& |(d)| DDDD \& |(e)| EEEE \\
\node{
\begin{array}{l}
F_{1,1}F_{1,2}F_{1,3} \\
\hskip2ex F_{2,1}F_{2,2}F_{2,3} \\
\hskip4ex F_{3,1}F_{3,2}F_{3,3} \\
\end{array}
};
\&            \& |(g)| GGGG \\
\& |(h)| HHHH
\\};

\draw [->, up=from (d) to (a)];
\draw [->, up=from (e) to (b)];
\draw [->, up=from (g) to (e)];
\draw [->, down=from (d) to (h)];
\draw [->, along right=from (a) to (b)];
\draw [->, along right=from (c) to (d)];
\draw [->, along right=from (d) to (e)];
\draw [->, along right=from (f) to (g)];
\draw [->, down right=from (d) to (g)];
\draw [->, up right=from (c) to (a)];
\draw  (f) |- (c);

\end{tikzpicture}

\end{document} 