使用 \foreach 命令命名节点时出错

使用 \foreach 命令命名节点时出错

如果我尝试以下代码:

\documentclass{standalone}
\usepackage{tikz}

\usetikzlibrary{calc, positioning, decorations.pathmorphing}

\begin{document}
    \begin{tikzpicture}

    \foreach \x/\y  in {1/1, 2/2, 3/1, 4/2, 5/1}
    \node[fill=black!30, circle] (m\x) {$m_{\y}$} at (1.5*{\x}, 0);

    \foreach \x in {1,2,3,4}
    \draw[decorate, decoration={coil}] (m\x) -- node[above] {$K$} (m{\x+1});


    \end{tikzpicture}
\end{document}

然后出现错误。我该如何解决这个问题?

答案1

宏在节点名称中展开,但不执行算术运算。您可以使用\the\numexpr\x+1\relax

我还修正了一些错误。

\documentclass{standalone}
\usepackage{tikz}

\usetikzlibrary{calc, positioning, decorations.pathmorphing}

\begin{document}

\begin{tikzpicture}

\foreach \x/\y  in {1/1, 2/2, 3/1, 4/2, 5/1}
\node[fill=black!30, circle] (m\x) at ({1.5*\x}, 0) {$m_{\y}$};

\foreach \x in {1,2,3,4}
\draw[decorate, decoration={coil}] (m\x) -- node[above] {$K$} (m\the\numexpr\x+1\relax);

\end{tikzpicture}

\end{document}

在此处输入图片描述

答案2

执行相同操作的更 TikZ 式方法是使用evaluate。在此过程中,我演示了编写第一个循环的不同方法。输出与 egreg 的答案相同。

请注意,您需要使用int,否则\x+1将为小数,2.0例如\x=1

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, positioning, decorations.pathmorphing}
\begin{document}
\begin{tikzpicture}

    \foreach [evaluate=\x as \y using {int(2-mod(\x,2))}] \x in {1,...,5}
        %\x/\y  in {1/1, 2/2, 3/1, 4/2, 5/1}
       \node[fill=black!30, circle] (m\x) at (1.5*\x, 0) {$m_{\y}$};

    \foreach [evaluate=\x as \y using int(\x+1)] \x in {1,...,4}
        \draw[decorate, decoration={coil}] (m\x) -- node[above] {$K$} (m\y);
\end{tikzpicture}
\end{document}

答案3

仅剩两个选项:count第一个循环和remember第二个循环。

\documentclass{standalone}
\usepackage{tikz}

\usetikzlibrary{calc, positioning, decorations.pathmorphing}

\begin{document}
    \begin{tikzpicture}

    \foreach \y [count=\x] in {1, 2, 1, 2, 1}
        \node[fill=black!30, circle] (m\x) at (1.5*\x, 0) {$m_{\y}$} ;

    \foreach \x [remember=\x as \lastx (initially 1)] in {2,...,5}
        \draw[decorate, decoration={coil}] (m\lastx) -- node[above] {$K$} (m\x);

    \end{tikzpicture}
\end{document}

相关内容