5

I managed to make this big diagram in Inkscape adding the codes in LaTeX using the plugin textext. See this question for more.

big diagram about dual linear spaces (algebric and topology), Inkscape version

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?

5
  • 1
    See here for some inspiration: tex.stackexchange.com/questions/42611/… Dec 16, 2012 at 15:16
  • Can you provide larger version of image?
    – m0nhawk
    Dec 16, 2012 at 15:18
  • 1
    Hi Elias. In its current form, your question might not receive many answers. Please take a look at the How to Ask-page and try to improve your question according to the guidance found there. This may require you to show some effort on your part in terms of attempting a solution. If you have questions about what to do or if you don't quite understand what this means, please ask for clarification using the add comment function. Dec 16, 2012 at 15:18
  • 1
    Take a look into this.
    – m0nhawk
    Dec 16, 2012 at 15:28
  • 2
    @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, 2012 at 16:24

2 Answers 2

9

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

enter image description here

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}
1
  • An alternative to tabular would be align=center. Dec 16, 2012 at 19:05
6

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}

dual linear space positioning example

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .