Zeichnen Sie ein Diagramm mit Tikz und Forcsvlist von etoolbox

Zeichnen Sie ein Diagramm mit Tikz und Forcsvlist von etoolbox

Ich möchte einen Befehl implementieren \drawColoredGraph, der eine durch Kommas getrennte Liste von nFarben akzeptiert und einen Graphen auf den Scheitelpunkten zeichnet 1,...,n, in dem der Scheitelpunkt kmit der als -tes Argument angegebenen Farbe eingefärbt wird k.

Ich habe versucht, diese Funktionalität mit dem Befehl aus dem sehr nützlichen etoolbox-Paket zu implementieren \forcsvlist. Dabei kam ich auf Folgendes

%!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}

Die tikzpictureUmgebung enthält den Beispielgraphen, den ich versuche, automatisch zu erstellen. Der writeColoredNodesBefehl zeigt, dass der forcsvlistBefehl prinzipiell genau das tut, was ich will.

Aus irgendeinem Grund \drawColoredGraphwird eine endlose Liste von Fehlermeldungen angezeigt (entweder Undefined control sequence.oder Missing \endcsname inserted., beides verstehe ich nicht). Was mache ich falsch?

Ich könnte mir vorstellen, dass das Problem darin liegt, dass der Compiler zunächst --in einen Strich umwandelt und Tikz diesen danach nicht --mehr als Kante im Graphen erkennt, allerdings weiß ich weder, ob hier der Kern des Problems liegt, noch wie man es beheben kann.

Irgendwelche Vorschläge? Ich wäre auch für andere Lösungsansätze für das obige Problem offen.

Antwort1

Anstatt zu verwenden, \forcsvlistwürde ich von tikz/pgf verwenden \foreach, aber ich denke, dass das wirkliche Problem darin liegt, den Pfad zu erstellen und ihn dann an weiterzugeben \graph, was Erweiterungsprobleme mit sich bringt.

So können Sie beide Probleme umgehen:

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

Hier ist die Ausgabe:

Bildbeschreibung hier eingeben

verwandte Informationen