使用 foreach 循环在弧后添加标签

使用 foreach 循环在弧后添加标签

我有一段代码,可以生成带有弧线标签的循环图(参考这里):

\documentclass[border=2pt,tikz]{standalone}
\usepackage{wasysym}
\usetikzlibrary{decorations.pathreplacing,automata,arrows,shadows,patterns,shapes}

\begin{document}
\newlength{\rnodo}
\newlength{\radio}
\setlength{\rnodo}{10pt}
\setlength{\radio}{3.00cm}
\tikzstyle{nondirected}=[thick]
\tikzstyle{labels}=[inner sep=0pt,font=\scriptsize,auto,circle]
\tikzstyle{main node}=[outer sep=1,inner sep=0,ellipse,thick,draw,minimum  size=2\rnodo,fill=black!10]

\def\n{10}
\begin{tikzpicture}
\foreach \x in {1,...,\n}
    {
    \coordinate (cn\x) at ({(1+2*\x)*180/\n}:\radio);
    \node[main node] (n\x) at (cn\x) {$n_{\x}$};        
    }

\foreach \lab [count=\x]  in     {\oplus,\oplus,\oplus,\ominus,\ocircle,\ocircle,\oplus,\oplus,\ominus,\ominus}
    {
   \pgfmathsetmacro{\ed}{int(mod(\x+9,10)+1)}
   \pgfmathsetmacro{\st}{int(mod(\x+8,10)+1)}
   \path[nondirected] (n\st) edge[bend right=10] node[labels] {$\lab$} (n\ed);
   }
\end{tikzpicture}
\end{document}

\foreach我的问题是,在使用以下循环绘制弧之后,是否可以用单独的循环添加弧的标签\foreach

\foreach \x in {1,...,\n}
    {
    \pgfmathsetmacro{\ed}{int(mod(\x+9,10)+1)}
    \pgfmathsetmacro{\st}{int(mod(\x+8,10)+1)}
    \path[nondirected] (n\st) edge[bend right=10] (n\ed);
    }

然后用另一个循环添加标签...?_?

答案1

您可以对标签使用单独的循环,如下所示:

\foreach \lab [count=\x, evaluate=\x as \ang using {360/\n*(\x-1)}] in 
   {\ominus,\oplus,\oplus,\oplus,\ominus,\ocircle,\ocircle,\oplus,\oplus,\ominus}
   {
   \node[labels] at (\ang:\radio-2ex) {$\lab$} ;
   }

这里,我们通过 计算标签的位置,{360/\n*(\x-1)}并按照通常的方式绘制标签\node[labels] at (\ang:\radius) {$\lab$};。我们从半径中减去\radio一个小的长度2ex,以使标签不会覆盖边缘。

\documentclass[border=2pt,tikz]{standalone}
\usepackage{wasysym}
\usetikzlibrary{decorations.pathreplacing,automata,arrows,shadows,patterns,shapes}

\begin{document}
\newlength{\rnodo}
\newlength{\radio}
\setlength{\rnodo}{10pt}
\setlength{\radio}{3.00cm}
\tikzstyle{nondirected}=[thick]
\tikzstyle{labels}=[inner sep=0pt,font=\scriptsize,auto,circle]
\tikzstyle{main node}=[outer sep=1,inner sep=0,ellipse,thick,draw,minimum  size=2\rnodo,fill=black!10]

\def\n{10}
\begin{tikzpicture}
\foreach \x in {1,...,\n}
    {
    \coordinate (cn\x) at ({(1+2*\x)*180/\n}:\radio);
    \node[main node] (n\x) at (cn\x) {$n_{\x}$};        
    }

\foreach \x in {1,...,\n}
    {
   \pgfmathsetmacro{\ed}{int(mod(\x+9,10)+1)}
   \pgfmathsetmacro{\st}{int(mod(\x+8,10)+1)}
   \path[nondirected] (n\st) edge[bend right=10] (n\ed);
   }
\foreach \lab [count=\x, evaluate=\x as \ang using {360/\n*(\x-1)}] in 
   {\ominus,\oplus,\oplus,\oplus,\ominus,\ocircle,\ocircle,\oplus,\oplus,\ominus}
   {
   \node[labels] at (\ang:\radio-2ex) {$\lab$} ;
   }
\end{tikzpicture}
\end{document}

在此处输入图片描述

相关内容