使用 `\foreach` 在网格上绘制多边形

使用 `\foreach` 在网格上绘制多边形

为什么这段代码不能编译?

\documentclass{amsart}
\usepackage{mathtools}

\usepackage{tikz}
\usetikzlibrary{calc,intersections}



\begin{document}


\begin{tikzpicture}

\foreach \x in {0,1,2,3} \foreach \y in {0,1,2,3} {\draw[fill] ({(5/4)*\x},{(5/4)*\y}) circle (1.5pt)};

\draw (0,(5/4)*1) -- (0,(5/4)*2) -- ((5/4)*2,(5/4)*3) -- ((5/4)*3,(5/4)*0) -- ((5/4)*1,(5/4)*1) -- cycle;


\end{tikzpicture}


\end{document}

答案1

您有,即括号前的\foreach { <drawing macro> };分号\foreach { <drawing macro> ;}。也就是说,您实际上不需要括号,因为\draw循环中只有一个括号。

对于绘制线的路径,您当然需要使用括号括住包含 的坐标(),就像在循环中一样。不过在这种情况下,您根本不需要括号,正如 Zarko 在下面的评论中指出的那样。另一种方法可能是coordinate在每个点定义一个,并使用命名的坐标。

在此处输入图片描述

\documentclass{amsart}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}

\foreach \x in {0,1,2,3}
   \foreach \y in {0,1,2,3} 
      \draw[fill] (5/4*\x,5/4*\y) circle (1.5pt) coordinate (m-\x-\y);

% using named coordinates
\draw (m-0-1) -- (m-1-1) -- (m-3-0) -- (m-2-3) -- (m-0-2) -- cycle;

% or do the calculation again
\draw (0,5*1/4) -- (0,5*2/4) -- (5*2/4,5*3/4) -- (5*3/4,5*0/4) -- (5*1/4,5*1/4) -- cycle;

\end{tikzpicture}
\end{document}

相关内容