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