使用 etoolbox 中的 Tikz 和 forcsvlist 繪製圖表

使用 etoolbox 中的 Tikz 和 forcsvlist 繪製圖表

我想實作一個命令\drawColoredGraph,它接受逗號分隔的顏色列表n,並在 vertices 上繪製一個圖形1,...,n,其中頂點k使用作為 -th 參數提供的顏色進行著色k

我嘗試使用\forcsvlist非常有用的 etoolbox 套件中的命令來實現此功能。我想出了以下內容

%!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我不會使用tikz \foreach/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}

這是輸出:

在此輸入影像描述

相關內容