前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TikZ中节点绘制的循环选项问题

TikZ中节点绘制的循环选项问题

作者头像
hotarugali
发布2022-03-17 14:15:47
1.2K0
发布2022-03-17 14:15:47
举报

在 LaTeX 中使用 TikZ 宏包绘制闭合曲线时,可以在 \draw 中使用循环选项。

1.第一种情况

代码语言:javascript
复制
\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.第二种情况

代码语言:javascript
复制
\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 循环选项也不能工作:
代码语言:javascript
复制
\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 节点并不是裸节点,从第二种情况绘制出来的曲线我们也可以看出,ABBC 并未交在一点,而对于具有大小的非裸节点,TikZ 执行循环选项时就不知到要怎么办了,因为此时 A、B、C 指代的是有大小的点,他们包含许多边界坐标点以及中心坐标点,此时要想让循环选项发挥作用,就要显示告诉 TikZ,应该取非裸节点中的哪个具体的坐标点。

  • 比如,显示的告诉 TikZ 取那些坐标点:
代码语言:javascript
复制
\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}

绘制的曲线如下:

  • 或者,利用TikZ提供的命令指定坐标点:
代码语言:javascript
复制
\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}

绘制的曲线如下:

代码语言:javascript
复制
\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}

绘制的曲线如下:

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-01-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.第一种情况
  • 2.第二种情况
  • 究其原因
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档