
Я пытаюсь использовать pgfmath для вычисления модульного значения. Однако, когда я пытаюсь дать это значение в качестве метки узлу, оно не компилируется.
Следующий код не работает:
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\pgfmathsetmacro{\N}{5}
\foreach \x in {0,...,\N}
{
\pgfmathtruncatemacro{\next}{Mod(\x+1,\N)}
\node at (\next,0) {\next};
% \node at (\next,0) {\x};
}
\end{tikzpicture}
\end{document}
Выдает ошибку: "Отсутствует } вставлено. } l.16 }". Строка 16 — это строка с "}".
Код, в котором я заменяю строку с "\node" на закомментированную строку, компилируется (как пример). Может кто-нибудь объяснить, что не так, и как это исправить?
Я пытался сделать то, что сделано вэтот ответ, но математический режим мне, похоже, не помогает.
Спасибо!
решение1
Не используйте \next
, так как это специальное. Оно используется во всем ядре и может быть переопределено, что приведет к проблеме, с которой вы столкнулись. Вместо этого используйте что-то более описательное, например \nextnode
.
решение2
Когда ТикZ обрабатывает ваш узел, он использует
\let\next=
для поглощения символа begin-group {
в вашем коде
\node at (\next,0) {\next};
Поэтому \next
будет Mod(\x+1,\N)
до тех пор, пока ТикZ входит в узел.
Вот почему вы можете использовать \next
в координатах
\node at (\next,0) {\x};
но не может использовать его в узле.