据我所知,这应该以完全相同的方式绘制同一组五条边。第一组边的位置正确。但第二组边对齐得很糟糕。在我的屏幕上,在这些边中\foreach
,底部水平边向右移动,其他边似乎开始正常,然后最终离五边形中心比应有的距离更远。
除了想知道如何修复对齐之外,我还想知道为什么这只发生在 内部\foreach
。
我可以通过首先用 绘制节点minimum size=0mm
,然后在最后用 重新绘制它们来“解决”这个问题2mm
,但这似乎不太理想......
\documentclass{beamer}
\usepackage{calc,ifthen}
\usepackage{amsthm,amsmath,amssymb}
\usepackage{tikz}
\begin{document}
\frame{
\begin{tikzpicture}
\def\r{2cm}
\foreach \t in {0,...,4} {
\node[circle,draw, outer sep=0mm, inner sep=0mm, minimum size=2mm] (a\t) at ({90+\t*72}:\r) {} ;
}
% draw the edges of the pentagon in a silly way
% draws edges from node-center to node-center
\draw (a0) edge (a1) ;
\draw (a1) edge (a2) ;
\draw (a2) edge (a3) ;
\draw (a3) edge (a4) ;
\draw (a4) edge (a0) ;
% draw the edges of the pentagon in a better way
% draws edges from node-something to node-something-else
\foreach \t in {0,...,4} {
\pgfmathsetmacro{\s}{mod(\t+1,5)}
\draw (a\t) edge (a\s) ;
}
\end{tikzpicture}
}
\end{document}
答案1
问题是
\pgfmathsetmacro{\s}{mod(\t+1,5)}
返回 的值,\s
等等,而不是 的值,等等。因此,当您要求一条到 的路径时,您是在要求一条到相关节点边界上的角度为 的点的路径,因为这就是锚点的意思。如果重写为仅返回节点的名称而不返回锚点,则会获得正确的结果。0.0
1.0
0
1
a\s
0
.0
\s
.0
\pgfmathsetmacro{\s}{int(mod(\t+1,5))}
红色线条显示第二种构造方法与第一种完全对应。
但请注意,
\foreach \t [count=\s] in ...
简单多了。
完整(非简单)代码:
\documentclass[tikz,border=10pt,multi]{standalone}
\begin{document}
\begin{tikzpicture}
\def\r{2cm}
\foreach \t in {0,...,4} {
\node[circle,draw, outer sep=0mm, inner sep=0mm, minimum size=2mm] (a\t) at ({90+\t*72}:\r) {} ;
}
% draw the edges of the pentagon in a silly way
% draws edges from node-center to node-center
\draw (a0) edge (a1) ;
\draw (a1) edge (a2) ;
\draw (a2) edge (a3) ;
\draw (a3) edge (a4) ;
\draw (a4) edge (a0) ;
% draw the edges of the pentagon in a better way
% draws edges from node-something to node-something-else
\foreach \t in {0,...,4} {
\pgfmathsetmacro{\s}{int(mod(\t+1,5))}
\draw [red] (a\t) edge (a\s) ;
}
\end{tikzpicture}
\end{document}