在 LaTeX 中使用 TikZ 宏包绘制闭合曲线时,可以在 \draw
中使用循环选项。
1.第一种情况
1 2 3 4 5 6 7 8 9 10 11 12 13
| \documentclass{article}
\usepackage{tikz} \usetikzlibrary{arrows,backgrounds,calc,fit,intersections,through}
\begin{document} \begin{tikzpicture}[scale=3] \coordinate[label=left:$A$] (A) at (-1,0); \coordinate[label=right:$B$] (B) at (1,0); \coordinate[label=above:$C$] (C) at (0,1); \draw (A) -- (B) -- (C) -- cycle; \end{tikzpicture} \end{document}
|
上述代码工作正常,结果符合预期,绘制出的图像如下:
2.第二种情况
1 2 3 4 5 6 7 8 9 10 11 12 13
| \documentclass{article}
\usepackage{tikz} \usetikzlibrary{arrows,backgrounds,calc,fit,intersections,through}
\begin{document} \begin{tikzpicture}[scale=3] \node[label=left:$A$] (A) at (-1,0) {}; \node[label=right:$B$] (B) at (1,0) {}; \node[label=above:$C$] (C) at (0,1) {}; \draw (A) -- (B) -- (C) -- cycle; \end{tikzpicture} \end{document}
|
上述代码正常运行,但结果不尽人意,其绘制出的图像如下:
究其原因
第一种情况中不带属性选项的 \coordinate
指定的节点仅仅代表一个坐标,所以此时 A、B、C 节点均为裸节点,其仅仅指代一个坐标点,不具有大小等其他属性,故 TikZ 执行循环选项时清楚知道需要绘制一个已指定三个顶点的封闭曲线;
- 比如,在
\coordinate
选项中加上形状颜色等属性,此时 A、B、C 节点便会被指定一个默认大小,此时 TikZ 循环选项也不能工作:
1 2 3 4 5 6 7 8 9 10 11 12 13
| \documentclass{article}
\usepackage{tikz} \usetikzlibrary{arrows,backgrounds,calc,fit,intersections,through}
\begin{document} \begin{tikzpicture}[scale=3] \coordinate[fill=black!50,circle,label=left:$A$] (A) at (-1,0); \coordinate[fill=black!50,circle,label=right:$B$] (B) at (1,0); \coordinate[fill=black!50,circle,label=above:$C$] (C) at (0,1); \draw (A) -- (B) -- (C) -- cycle; \end{tikzpicture} \end{document}
|
绘制的曲线如下:
第二种情况中 \node
指定的节点默认具有大小等属性,所以此时 A、B、C 节点并不是裸节点,从第二种情况绘制出来的曲线我们也可以看出,AB 与 BC 并未交在一点,而对于具有大小的非裸节点,TikZ 执行循环选项时就不知到要怎么办了,因为此时 A、B、C 指代的是有大小的点,他们包含许多边界坐标点以及中心坐标点,此时要想让循环选项发挥作用,就要显示告诉 TikZ,应该取非裸节点中的哪个具体的坐标点。
1 2 3 4 5 6 7 8 9 10 11 12 13
| \documentclass{article}
\usepackage{tikz} \usetikzlibrary{arrows,backgrounds,calc,fit,intersections,through}
\begin{document} \begin{tikzpicture}[scale=3] \node[label=left:$A$] (A) at (-1,0) {}; \node[label=right:$B$] (B) at (1,0) {}; \node[label=above:$C$] (C) at (0,1) {}; \draw (-1,0) -- (1,0) -- (0,1) -- cycle; \end{tikzpicture} \end{document}
|
绘制的曲线如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| \documentclass{article}
\usepackage{tikz} \usetikzlibrary{arrows,backgrounds,calc,fit,intersections,through}
\begin{document} \begin{tikzpicture}[scale=3] \node[label=left:$A$] (A) at (-1,0) {}; \node[label=right:$B$] (B) at (1,0) {}; \node[label=above:$C$] (C) at (0,1) {}; \draw (A.center) -- (B.center) -- (C.center) -- cycle; \end{tikzpicture} \end{document}
|
绘制的曲线如下:
1 2 3 4 5 6 7 8 9 10 11 12 13
| \documentclass{article}
\usepackage{tikz} \usetikzlibrary{arrows,backgrounds,calc,fit,intersections,through}
\begin{document} \begin{tikzpicture}[scale=3] \coordinate[fill=black!50,circle,label=left:$A$] (A) at (-1,0); \coordinate[fill=black!50,circle,label=right:$B$] (B) at (1,0); \coordinate[fill=black!50,circle,label=above:$C$] (C) at (0,1); \draw (A.center) -- (B.center) -- (C.center) -- cycle; \end{tikzpicture} \end{document}
|
绘制的曲线如下: