使用 pgfmathparse+matrix 绘制图形

使用 pgfmathparse+matrix 绘制图形

我想画一个图表。我用tikz 矩阵绘制顶点,然后想从数组中添加边。我尝试了以下代码:

\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}

我试过A 线首先,它不起作用。事实证明,为了正确访问数组,我必须使用pdfmathparse。但代码无法编译(尽管B线工作正常)。(似乎输出pgfmathresult是一个字符串,它不是什么期望。)

PS:最初的动机是为了简洁地说明图 pebbling。无论如何,我已附上最终代码以及结果。

\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}

在此处输入图片描述

答案1

不确定你想要什么,但我认为这\pgfmathsetmacro可以解决你的问题:

\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}

结果

相关内容