我想要绘制这样的图表:
我可以用下面的代码做得很好:
\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});
}
但是,当我尝试以这种方式进行操作时,最终得到的图表如下所示:
梅威瑟:
\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}
然而,在我看来,这比没有计算的版本稍微复杂一些。