图上的边缘与 foreach 中的节点中心不对齐

图上的边缘与 foreach 中的节点中心不对齐

据我所知,这应该以完全相同的方式绘制同一组五条边。第一组边的位置正确。但第二组边对齐得很糟糕。在我的屏幕上,在这些边中\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.01.001a\s0.0\s.0

\pgfmathsetmacro{\s}{int(mod(\t+1,5))}

2 个五边形

红色线条显示第二种构造方法与第一种完全对应。

但请注意,

\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}

相关内容