使用 etoolbox 中的 Tikz 和 forcsvlist 绘制图形

使用 etoolbox 中的 Tikz 和 forcsvlist 绘制图形

我想实现一个命令\drawColoredGraph,它接受以逗号分隔的颜色列表n并在顶点上绘制图形1,...,n,其中顶点k使用作为第个参数提供的颜色进行着色k

我尝试使用非常有用的 etoolbox 包中的命令来实现此功能\forcsvlist。我想出了以下方法

%!TEX program = lualatex
\documentclass{article}
\usepackage{tikz,etoolbox}
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{circular}

\newcounter{countNodes}

\newcommand\drawColoredGraph[1]{%
  \setcounter{countNodes}{0}
  \begin{tikzpicture}
  \graph[simple necklace layout] {
    \forcsvlist{\drawNode}{#1} 1;
  };
  \end{tikzpicture}
}
\newcommand{\drawNode}[1]{\stepcounter{countNodes}\thecountNodes[fill = #1] -- }%

\newcommand\writeColoredNodes[1]{%
  \setcounter{countNodes}{0}
  \forcsvlist{\writeNode}{#1}1
}
\newcommand{\writeNode}[1]{\stepcounter{countNodes}{\color{#1}\thecountNodes} -- }


\begin{document}

\begin{tikzpicture}
\graph[simple necklace layout] {
  1[fill = red] -- 2[fill = blue] -- 3[fill = yellow] -- 4[fill = blue] -- 1;
};
\end{tikzpicture}

\writeColoredNodes{red,blue,yellow,blue} % writes 1–2–3–4–1 in the correct colors 

% \drawColoredGraph{red,blue,yellow,blue} % DOES NOT COMPLILE

\end{document}

环境tikzpicture包含我尝试自动创建的示例图。该writeColoredNodes命令显示该forcsvlist命令主要执行我想要它执行的操作。

由于某种原因,\drawColoredGraph产生了无穷无尽的错误消息列表(要么Undefined control sequence.要么Missing \endcsname inserted.,我都不明白)。我做错了什么?

我可以想象问题在于编译器首先将其转换--为破折号,之后 Tikz 不再将其识别--为图中的边,但我不知道这是否是问题的核心,也不知道如何解决它。

有什么建议吗?我也愿意接受其他方法来解决上述问题。

答案1

\forcsvlist我不会使用,而是会使用\foreachtikz/pgf,但我认为真正的问题是构建路径然后将其提供给\graph,这涉及到扩展问题。

以下是解决这两个问题的方法:

\documentclass{article}
\usepackage{tikz}
\usepackage{etoolbox}% for \xappto
\usetikzlibrary{graphs,graphdrawing}
\usegdlibrary{circular}

\newcommand\drawColoredGraph[1]{%
  % build the graph specifications
  \def\graphspecs{}%
  \foreach \colour [count=\g] in {#1} {
      \xappto\graphspecs{\g [fill=\colour] -- }
  }%
  % expand specs but not \graph -- and close off graph specs by adding 1
  \xdef\graphspecs{\noexpand\graph[simple necklace layout]{\graphspecs 1}}%
  \begin{tikzpicture}% draw the graph
    \graphspecs;
  \end{tikzpicture}%
}

\begin{document}

   \drawColoredGraph{red,blue,yellow,blue}

\end{document}

输出如下:

在此处输入图片描述

相关内容