为什么这段代码不能编译?
\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}