如何用循环标记四个顶点上的 TikZ 图?

如何用循环标记四个顶点上的 TikZ 图?

我需要在四个顶点上绘制所有这些简单的带标签的图形。无论如何,我可以用循环快速完成此操作吗?并将它们放在数组中?我已经在四个顶点上绘制了所有未标记的简单图形。因此,我希望我可以运行一个循环,以六种不同的方式标记每个图形(完整图形和空图形除外)的边。任何想法都会非常有帮助。


这些是我目前绘制的图表。我想制作一个循环来改变边的标签。

代码

\documentclass[tikz,convert=false]{standalone}
\begin{document}
    \begin{tikzpicture}[scale=.5,auto=left,every node/.style={circle,fill=black!20}]  
      \node (n1) at (0,0) {1};
      \node (n2) at (0,2)  {2};
      \node (n3) at (2,2)  {3};
      \node (n4) at (2,0) {4};
    \foreach \from/\to in {n2/n3}
    \draw (\from) -- (\to);
    \end{tikzpicture}
\end{document}

输出

在此处输入图片描述

我想循环绘制相同的图片并重新标记顶点六次。

答案1

您可以使用两个循环来实现这一点:一个循环从 1 运行到 n-1,另一个循环从第一个的当前值运行到 n。以下是六个的示例:

代码

\documentclass[tikz,convert=false]{standalone}

\begin{document}

\begin{tikzpicture}[scale=.5,auto=left,every node/.style={circle,fill=black!20}]  
        \foreach \x in {1,...,6}
        {   \node (n\x) at (\x*60:3) {\x};
        }
    \foreach \x in {1,...,5}
    {   \pgfmathtruncatemacro{\lowerbound}{\x+1}
        \foreach \y in {\lowerbound,...,6}
        {   \draw (n\x) -- (n\y);
            % for labelled edges
            %\draw (n\x) -- (n\y) node[sloped,pos=0.39,fill=white,fill opacity=0.3,above=0.1mm,rectangle, inner sep=0.1mm] {\tiny \x-\y};
        }
    }

\end{tikzpicture}

\end{document}

输出

在此处输入图片描述

带标签的输出

在此处输入图片描述

附加作业:适用于 36 个节点

在此处输入图片描述

答案2

非常类似于汤姆·邦巴迪尔回答,这里有一个使用chains库来处理样式定位的方法nodes around center

代码

\documentclass[tikz]{standalone}
\usetikzlibrary{chains}
\tikzset{
  nodes around center/.style args={#1:#2:#3:#4}{% #1 = start angle, #2 = number of nodes
                                                % #3 = center,      #4 = distance
    at={(#3)},shift={({(\tikzchaincount-1)*360/(#2)+#1}:{#4})}}}
\makeatletter
\tikzset{% "edge node" style from CVS
  edge node/.code={\expandafter\def\expandafter\tikz@tonodes\expandafter{\tikz@tonodes #1}},
  join previous/.code={\ifnum#1=1\relax\else
      \tikzset{Join/.list={1,...,\the\numexpr#1-1\relax}}\fi},
  Join/.style={join=with \tikz@lib@chain@name-#1
%   by {edge node={node[my edge label/.try] {#1-\cnt}}}
   }}
\makeatother
\begin{document}
\begin{tikzpicture}[
  start chain=ch placed {nodes around center=60:-12:{0,0}:3},
  every on chain/.append style={shape=circle,fill=black!20,outer sep=+0pt,inner sep=+2pt,
                                                    text width=\widthof{00}, align=center},
  my edge label/.style={font=\scriptsize, auto=right, sloped, pos=.33, inner sep=+0pt,
                                            fill opacity=.5, text opacity=1, fill=white}]
  \foreach \cnt in {1,...,12}
    \node[on chain=ch, join previous=\cnt] {\cnt};
\end{tikzpicture}
\end{document}

输出

在此处输入图片描述

相关内容