3 Stimmen

Modulare Arithmetik auf Knotennamen in TikZ?

Angenommen, ich möchte einen zirkulierenden Graphen in TikZ konstruieren, mit einer variablen Anzahl von Knoten, die mit v0, v1, ..., v_n-1 für ein n meiner Wahl (sagen wir 5) bezeichnet sind.

Ich würde gerne die Möglichkeit haben, die \foreach Befehl in TikZ, um iterativ (1) die Knoten zu definieren und (2) die Knoten zu verbinden. Ich möchte z.B. v_i mit v_(i+1) und v_i mit v_{i+2} verbinden können.

\foreach \i in {0, ..., 4} {\path (\i*72:3) node (v\i) {};}

konstruiert die Knotenpunkte perfekt. Aber dann, wenn ich einige Linien zeichnen möchte,

\foreach \i \in {0, ..., 3} { \draw (v\i) -- (v{\i+1}); } ????

funktioniert nicht. Auch nicht

\foreach \i / \j in {0/1, ..., 3/4} { \draw (v\i) -- (v{\j}); }

Ich erhalte die Fehlermeldung "no such shape v0" oder etwas Ähnliches.

Ich weiß, dass das ganz einfach zu machen ist, aber ich weiß nicht, wie. Irgendwelche Vorschläge?

Als Folgemaßnahme wäre es schön, v_i und v_{i+4} oder so etwas mit einem einzigen \foreach Befehl zu verwenden und TikZ/pgf die modulare Arithmetik für mich erledigen zu lassen, ohne dass ich mir Sorgen machen muss, dass etwas überläuft.

3voto

Steve Tjoa Punkte 55411

Das hat bei mir funktioniert:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{shapes,fit,arrows,positioning}
\tikzstyle{vertex} = [circle, draw, thick, text centered]
\tikzstyle{edge} = [draw, thick,->]
\begin{document}
\begin{tikzpicture}[scale=1]
  \foreach \x in {0,...,6}
    \node[vertex] (\x) at (\x*360/7:3) {v\x};
  \foreach \x/\y in {0/1,1/2,2/3,3/4,4/5,5/6,6/0}
    \draw[edge] (\x) to (\y);
\end{tikzpicture}
\end{document}

circular graph

Die Syntax {0/1,...,5/6} hat bei mir nicht funktioniert. Aber ich gebe zu, ich habe ein bisschen Zeit damit verbracht, eine gute Lösung zu finden, und ich bin immer noch nicht ganz zufrieden.

2voto

MattAllegro Punkte 5277

Eine andere Lösung, die durch die Bearbeitung des Codes von Steve Tjoa erreicht wurde:

\documentclass[tikz,border=1mm]{standalone}
\usetikzlibrary{arrows}

\begin{document}
\begin{tikzpicture}[thick]
\foreach \x in {0,...,4}{%
  \node [circle, draw] at (\x*72:3) {$v_{\x}$};
  \draw [->] (\x*72+10:3) arc (\x*72+10:\x*72+62:3);
}
\end{tikzpicture}
\end{document}

screenshot of output

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X