2

I want to draw a graph. I use tikz matrix to draw the vertices, and then would like to add edges from an array. I tried the following code:

\documentclass{article}
\usepackage{tikz,pgfmath}
\usetikzlibrary{matrix}
\begin{document}
  \begin{tikzpicture}
    \matrix (w) [nodes={circle,draw,scale=0.66}, matrix of nodes, row sep=2em, column sep=0.5em]{    
      1&2&3\\
      &4&5\\
      &6\\
    };
    \def\V{{"w-1-1","w-1-2","w-1-3","w-2-2","w-2-3","w-3-2"}}
    %\draw[->] (\V[1]) to (\V[2]); %Line A
    %\node at (1,1) {\pgfmathparse{\V[2]}\pgfmathresult}; %Line B
    \draw[->] (\pgfmathparse{\V[1]}\pgfmathresult) to (\pgfmathparse{\V[2]}\pgfmathresult); %Line C
  \end{tikzpicture}
\end{document}

I tried Line A first, and it didn't work. It turned out that in order to access the array correctly I have to use pdfmathparse. But the code doesn't compile (although Line B works fine). (It seems that the output of pgfmathresult is a string which is not what draw expects.)

P.S.: The original motivation was to illustrate graph pebbling, succinctly. I have attached the final code, along with the result, in any case.

\documentclass{article}
\usepackage{tikz,pgfmath,xstring,algorithm}
\usetikzlibrary{matrix}

\newcommand{\Configuration}[6]{%A fixed graph
  \begin{minipage}{.2\textwidth}%1
    \begin{tikzpicture}
      \matrix (w) [nodes={circle,draw,scale=0.6}, matrix of nodes, row sep=2em, column sep=0.5em,ampersand replacement=\&]{   
    1\&2\&3\\
    \&4\&5\\
    \&6\\
      };
      \def\V{{"w-1-1","w-1-2","w-1-3","w-2-2","w-2-3","w-3-2"}}%the mapping
      \foreach \x/\y/\z in {{1/4/#1},{2/4/#2},{3/4/#3},{3/5/#4},{4/6/#5},{5/6/#6}}%pebbling
    \pgfmathsetmacro{\X}{\V[\x-1]}
    \pgfmathsetmacro{\Y}{\V[\y-1]}
    \draw[->] (\X) to node {\ifthenelse{\z=0}{}{$\bullet$}} (\Y);
    \end{tikzpicture}
  \end{minipage}
}

\begin{document}
  \begin{figure}
    \centering
    \Configuration{0}{0}{0}{0}{0}{0}
    \Configuration{1}{0}{0}{0}{0}{0}
    \Configuration{1}{1}{0}{0}{0}{0}
    \Configuration{1}{1}{1}{0}{0}{0}
    \Configuration{1}{1}{1}{0}{1}{0}
    \Configuration{1}{1}{0}{0}{1}{0}
    \Configuration{1}{0}{0}{0}{1}{0}
    \Configuration{0}{0}{0}{0}{1}{0}
    \Configuration{0}{0}{0}{1}{1}{0}
    \Configuration{0}{0}{0}{1}{1}{1}
    \Configuration{0}{0}{0}{0}{1}{1}
  \end{figure}
\end{document}

enter image description here

2

Not sure about what do you want, but I think that \pgfmathsetmacro solves your problem:

\documentclass [border=2mm]{standalone}
\usepackage{tikz}
\usepackage{tikz,pgfmath}
\usetikzlibrary{matrix}

\begin{document}
  \begin{tikzpicture}
    \matrix (w) [nodes={circle,draw,scale=0.66}, matrix of nodes, row sep=2em, column sep=0.5em]{    
      1&2&3\\
      &4&5\\
      &6\\
    };
    \def\V{{"w-1-1","w-1-2","w-1-3","w-2-2","w-2-3","w-3-2"}}
    \pgfmathsetmacro{\start}{\V[1]}
    \pgfmathsetmacro{\finish}{\V[2]}
    \draw[->] (\start) to (\finish); %Line C
  \end{tikzpicture}
\end{document}

Result

| improve this answer | |

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.