我想展示一个任意有限大小的完整图。这意味着有一定数量的节点与所有其他节点互连。此外,我想澄清的是,节点的数量并不重要。对于数字来说,这看起来就像这样:
$$1, \dots, n$$
我想在连接到完整图中所有其他节点的一侧添加一个附加节点。
我并不是在寻找一本手册,教你如何在 tikz 中做出最优雅的精确表示。那些存在。我正在寻找一种更抽象的描绘,让观看者第一眼就能看出这是一张完整的图。我愿意接受非正统的解决方案。就像一团相互连接的节点云,有或没有\dots
……有什么想法吗?
答案1
嗯... 看起来可能不那么常规。这是对这个问题的简单看法。可以随意添加更多/更少的节点。
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \x in {1,...,7}{%
\pgfmathparse{(\x-1)*360/8}
\node[draw,circle,inner sep=0.25cm] (N-\x) at (\pgfmathresult:5.4cm) [thick] {};
}
\pgfmathparse{7*360/8}
\node[circle,red] (N-8) at (\pgfmathresult:5.4cm) {\ldots};
\foreach \x in {1,...,7}{%
\foreach \y in {\x,...,7}{%
\path (N-\x) edge[ultra thin,-] (N-\y);
}
}
\foreach \y in {1,...,8}{%
\path (N-8) edge[red, very thick, loosely dotted] (N-\y);
}
\end{tikzpicture}
\end{document}
输出:
另一种变体是,用虚线绘制一个节点(带或不带\ldots
内部),需要对上述代码进行一些调整:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}[ultra thick,decoration={border,segment length=2mm,amplitude=0.3mm,angle=90}]
\foreach \x in {1,...,7}{%
\pgfmathparse{(\x-1)*360/8}
\node[draw,circle,inner sep=0.25cm] (N-\x) at (\pgfmathresult:5.4cm) [thick] {};
}
\pgfmathparse{7*360/8}
\node[draw,circle,red,inner sep=0.25cm,decorate] (N-8) at (\pgfmathresult:5.4cm) {};
\foreach \x in {1,...,7}{%
\foreach \y in {\x,...,7}{%
\path (N-\x) edge[ultra thin,-] (N-\y);
}
}
\foreach \y in {1,...,8}{%
\path (N-8) edge[red, very thick, loosely dotted] (N-\y);
}
\end{tikzpicture}
\end{document}
当然,您可以\ldots
在红点节点中使用,但您必须将其设置inner sep
为另一个值(我建议0.125cm
)。
编辑:
@JLDiaz 建议标记节点,最后两个节点应标记为$n-1$
和$n$
。这听起来很酷,所以我决定这样做。诀窍是将第一个foreach
循环中的节点绘制线替换为:
\node[draw,circle] (N-\x) at (\pgfmathresult:5.4cm) [thick] {\pgfmathparse{(\x==2)?"$n$":((\x==1)?"$n-1$":int(\x-2))}\pgfmathresult};
其中有一个条件,用于检查节点的编号。由于要绘制的最后一个节点是带有的节点\ldots
,因此第一个节点应包含$n-1$
,第二个节点应包含$n$
,因此代码就是这样做的。int
需要强制 TikZ 打印整数,否则标签会显示类似“1.0”等的内容。然后还有minimum size=3.5em
所有节点的,这确保仅包含数字的节点与必须容纳的节点一样大$n-1$
-em
如果字体大小发生变化,则选择缩放。
完整代码:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing}
\begin{document}
\begin{tikzpicture}[ultra thick,every node/.style={minimum size=3.5em},decoration={border,segment length=2mm,amplitude=0.3mm,angle=90}]
\foreach \x in {1,...,7}{%
\pgfmathparse{(\x-1)*360/8}
\node[draw,circle] (N-\x) at (\pgfmathresult:5.4cm) [thick] {\pgfmathparse{(\x==2)?"$n$":((\x==1)?"$n-1$":int(\x-2))}\pgfmathresult};
}
\pgfmathparse{7*360/8}
\node[draw,circle,red,inner sep=0.25cm,decorate] (N-8) at (\pgfmathresult:5.4cm) {};
\foreach \x in {1,...,7}{%
\foreach \y in {\x,...,7}{%
\path (N-\x) edge[ultra thin,-] (N-\y);
}
}
\foreach \y in {1,...,8}{%
\path (N-8) edge[red, very thick, loosely dotted] (N-\y);
}
\end{tikzpicture}
\end{document}
...然后ta-dah:
(注意:如果我想到更聪明的办法,我会编辑我的答案......)