Почему \pgfmathtruncatemacro не может быть меткой?

Почему \pgfmathtruncatemacro не может быть меткой?

Я пытаюсь использовать 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};

но не может использовать его в узле.

Связанный контент