如何进行算术运算

如何进行算术运算

我正在尝试按顺时针顺序绘制多边形并在其角落标记节点。

\begin{tikzpicture}[node distance=3cm, thick, main node/.style={circle, draw, font = 
\sffamily\Large\bfseries}]
\foreach \a in {2,...,4}{
    % make polygon
    \node[regular polygon, regular polygon sides=\a, minimum size=3cm] at (\a*4,0) (A) {};
    % draw nodes
    \foreach \i in {1,...,\a}{
        \node[circle, draw] (\a\i) at (A.corner \i) {\i};
    }
}
\end{tikzpicture}

结果如下所示:

![结果

为了让标签按照顺时针顺序排列,我尝试直接对\i和进行算术运算\a

\node[circle, draw] (\a\i) at (A.corner \i) {\a - \i + 1};

但未能达到我的目标:

![错误结果

在这种情况下应如何正确执行算术运算?

答案1

与 TeX 中的每个文本一样,节点文本不会被评估。

这只是 PGF/TikZ,它将几乎所有内容都放入 PGFMath 中并对其进行评估,但它不会触及文字。

对于简单的整数运算,您可以使用 LaTeX3/l3int \inteval(这只是普通的顶级快捷方式\the\numexpr):

\node[circle, draw] (\a\i) at (A.corner \i) {\inteval{\a - \i + 1}};

如果您想继续使用 PGFMath,您可以这样做\pgfmathprint{int(\a-\i+1)}

结果regular polygon sides = 2导致错误,这就是我在下面的代码中省略它的原因。


但是除了数学之外,您还可以反转形状并以某种方式旋转它,使得第一个角位于您想要的位置,然后您只需按原样标记它们即可。

由于您不对形状进行任何操作regular polygon而只是使用它的角,因此您可以将圆形节点直接放置在坐标处。

为了使其更容易,我将通过chains库提供一个解决方案(以及一种使用基本相同方法但手动而不是整洁的链式放置规则的替代方案)。

图书馆graphs通过循环放置规则使这一切变得更加简单clockwise

您需要指定的是节点数(n = …)以及第一个节点的起始位置(phase = …)。

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{graphs.standard, chains, shapes.geometric}
\begin{document}
\tikz[% A: regular polygon shape
  n/.style={
    shape=regular polygon, minimum size=3cm, regular polygon sides={#1},
    outer sep=+0pt, xscale=-1, rotate={180-isodd(#1)*180/(#1)}},
  c/.style={circle, draw},
] \foreach \i in {3, ..., 5}
    \node[n=\i] at (right:4*\i) (A) {}
      node foreach \j in {1, ..., \i}
        [c] at (A.corner \j) {\j};

\tikz[% B1: nodes placed in a circle (chains)
  nodes={shape=circle, draw, on chain},
  poly/.style={at=({270+180/(#1)-(\tikzchaincount-1)*360/(#1)}:1.5cm)},
] \foreach \i in {2, ..., 5}
    \path[shift=(right:4*\i), start chain=placed {poly=\i}]
      node foreach \j in {1, ..., \i} {\j};

\tikz[% B2: nodes placed in a circle (w/o chains)
  nodes={shape=circle, draw},
] \foreach[count=\r] \i in {2, ..., 5}
    \node foreach \j in {1, ..., \i}
      [shift=(right:4*\r)] at ({270+180/\i-(\j-1)*360/\i}:1.5cm) {\j};

\tikz[% C: nodes placed in a circle (graphs)
 nodes={shape=circle, draw},
 graphs/every graph/.append style={clockwise, radius=1.5cm},
 graphs/poly/.style={n={#1}, phase=270+180/(#1)},
] \foreach \i in {2, ..., 5}
    \path[shift=(right:4*\i)] graph {subgraph I_n[poly=\i]};
\end{document}

输出

在此处输入图片描述

相关内容