TikZ-使用 \foreach 循环时边缘定位不正确

TikZ-使用 \foreach 循环时边缘定位不正确

我想要绘制这样的图表:

1

我可以用下面的代码做得很好:

\node[circle,draw] (v) at (0,0) {$v$};
\foreach \i in {1,...,6}{
    \node[circle,draw] (u_\i) at (180 - 360/6 * \i:2cm) {$u_\i$};
    \draw (u_\i) -- (v);
}
\draw (u_1) -- (u_2);
\draw (u_2) -- (u_3);
\draw (u_3) -- (u_4);
\draw (u_4) -- (u_5);
\draw (u_5) -- (u_6);
\draw (u_6) -- (u_1);

但我希望能够使用 \foreach 循环绘制所有外边缘,而不是逐个绘制,如下所示:

\foreach \i in {1,...,6}{
    \draw let \n{j} = {Mod(\i,6)+1}
    in (u_\i) -- (u_\n{j});
}

但是,当我尝试以这种方式进行操作时,最终得到的图表如下所示: 2

梅威瑟:

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\tikz{
    \node[circle,draw] (v) at (0,0) {$v$};
    \foreach \i in {1,...,6}{
        \node[circle,draw] (u_\i) at (180 - 360/6 * \i:2cm) {$u_\i$};
        \draw (u_\i) -- (v);
    }
    \foreach \i in {1,...,6}{
        \draw let \n{j} = {Mod(\i,6)+1}
        in (u_\i) -- (u_\n{j});
    }
}
\end{document}

有没有办法用 \foreach 循环来做到这一点,而不会让所有的边缘变得混乱?

答案1

5.0欢迎使用 TeX.SE!您可以从计算中获得浮点数,其中.0被解释为东锚点。因此,您基本上需要将结果包装在 中int,并且您可以像这样在不使用 calc 的情况下执行此操作。

\documentclass[tikz,border=3.14mm]{standalone}
\begin{document}
\begin{tikzpicture}
\node[circle,draw] (v) at (0,0) {$v$};
\foreach \i in {1,...,6}{
    \node[circle,draw] (u_\i) at (180 - 360/6 * \i:2cm) {$u_\i$};
    \draw (u_\i) -- (v);
}
\foreach \i [evaluate=\i as \j using {int(mod(\i,6)+1)}] in {1,...,6}
{
    \draw   (u_\i) -- (u_\j);
}
\end{tikzpicture}
\end{document}

在此处输入图片描述

如果您添加以下内容,这也将是 MWE 的结果int

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}

\begin{document}
\tikz{
    \node[circle,draw] (v) at (0,0) {$v$};
    \foreach \i in {1,...,6}{
        \node[circle,draw] (u_\i) at (180 - 360/6 * \i:2cm) {$u_\i$};
        \draw (u_\i) -- (v);
    }
    \foreach \i in {1,...,6}{
        \draw let \n{j} = {int(Mod(\i,6)+1)}
        in (u_\i) -- (u_\n{j});
    }
}
\end{document}

然而,在我看来,这比没有计算的版本稍微复杂一些。

相关内容