Модульная арифметика по именам узлов в TikZ? - PullRequest
2 голосов
/ 15 октября 2010

Скажем, я хочу построить циркулянтный граф в TikZ с переменным числом узлов, помеченный v0, v1, ..., v_n-1 для некоторого n по моему выбору (скажем, 5).

Я хотел бы иметь возможность использовать команду \ foreach в TikZ для итеративного (1) определения узлов и (2) соединения узлов.Я хотел бы иметь возможность подключить v_i к v_ (i + 1) и v_i к v_ {i + 2}, скажем.

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

отлично конструирует узлы.Но потом, когда я хочу нарисовать несколько линий,

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

не работает.

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

Я также получаю сообщение об ошибке «нет такой формы v0» или что-то в этом роде.

Я знаю, что это должно быть совершенно легко сделать, но яне могу понять, как.Любые предложения?

В качестве продолжения было бы неплохо иметь возможность соединить v_i и v_ {i + 4} или что-то, с помощью одной команды \foreach, и чтобы TikZ / pgf выполнял модульную арифметикудля меня, не беспокоясь о том, чтобы пролить.

Ответы [ 2 ]

2 голосов
/ 15 декабря 2015

Другое решение, достигшее редактирования кода Стивом Тджоа:

\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

2 голосов
/ 18 октября 2010

Это сработало для меня:

\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

Синтаксис {0/1,...,5/6} не сработал для меня.Но я признаю, я потратил немного времени, пытаясь найти хорошее решение, и я все еще не полностью удовлетворен.

...