我想使用 usepackage tkz-graph 和命令 foreach 或任何其他方法绘制以下图形:
\documentclass{article}
\usepackage{amssymb,amsmath}
\usepackage{xcolor}
\usepackage{tkz-graph}
\begin{document}
\begin{tikzpicture}[rotate=-90]
\GraphInit[vstyle=Classic]
\SetVertexNoLabel
\SetGraphUnit{1.5}
\tikzset{VertexStyle/.append style={fill=black, minimum size=7pt, inner sep=1pt}}
\Vertex{a}
\SOEA(a){b}
\NOEA(a){c}
\EA(b){d}
\EA(c){e}
\Edges(b,d,e,c,a,b,c,e,b)
\Edges(e,a,d,c)
\end{tikzpicture}
\end{document}
答案1
香草溶液tikz
\documentclass[border = 5pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}[
node style/.style = {fill = black, minimum size = 7pt, circle},
edge style/.style = {black, thick},
]
% base
\foreach \i in {0,...,4} {
\node[node style] (A\i) at ({2 * cos(72 * \i)}, {2 * sin(72 * \i)}) {};
}
% blocks
\foreach \i [evaluate=\j as \j using {int(Mod(\i + 1, 5))}] in {0,...,4} {
% nodes, each block has nodes (A, B, C, D, E)
\node[node style] (C\i) at ($ (A\i)!2cm!-90:(A\j) $) {};
\node[node style] (D\i) at ($ (A\j)!2cm!90:(A\i) $) {};
\coordinate (T\i) at ($ (C\i)!0.5!(D\i) $);
\node[node style] (E\i) at ($ (T\i)!1.5cm!-90:(D\i) $) {};
% edges
\draw[edge style] (A\i) -- (A\j) -- (C\i) -- (D\i) -- (A\i)
-- (C\i) -- (E\i) -- (D\i) -- (A\j) (A\i) -- (E\i) -- (A\j);
}
\end{tikzpicture}
\end{document}
答案2
根据您的图表和 提供的解决方案\foreach
。
\documentclass{article}
\usepackage{amssymb,amsmath}
\usepackage{xcolor}
\usepackage{tkz-graph}
\begin{document}
\tikzset{pics/.cd,
house/.style={code={
\Vertex{a}
\SOEA(a){b}
\NOEA(a){c}
\EA(b){d}
\EA(c){e}
\Edges(b,d,e,c,a,b,c,e,b)
\Edges(e,a,d,c)}}}
\begin{tikzpicture}
\GraphInit[vstyle=Classic]
\SetVertexNoLabel
\SetGraphUnit{1.5}
\tikzset{VertexStyle/.append style={fill=black, minimum size=7pt, inner sep=1pt}}
\foreach \X in {0,72,...,288}
{\path (\X-18:2.1) pic[rotate around={\X+180-18:(3,0)}] {house};}
\end{tikzpicture}
\end{document}
答案3
由于问题被标记tikz-图表这是一个非常类似的解决方案caverac 的方法。
首先我们设置了五个“颜色类别”并声明每个节点都使用clique
钥匙。
最内层的节点将通过circular placement
放置规则并分别属于两个类别。
在\foreach
循环中,这些内部节点将用于通过calc
的库语法放置其他节点。“中间”节点将与内部节点正交放置,但距离仅为内部节点之间的 0.8 倍。然后,另一个第三个节点将与中间节点之间的中点正交放置。
所有这些节点都将被声明为五个集合之一,因此我们不必手动放置单个边。
代码
\documentclass[tikz, convert]{standalone}
\usetikzlibrary{graphs.standard, calc}
%\newcommand*\NextOf[2]{\pgfintmod{#1+1}{#2}}
\newcommand*\PrevOf[2]{\pgfintmod{#1-1}{#2}}
\begin{document}
\tikz\graph[
no placement, empty nodes, nodes={circle, draw, fill, inner sep=+1.5pt},
color class/.list={Set 0, Set ..., Set 4},
clique/.list ={Set 0, Set ..., Set 4}]{
subgraph I_n[name=inner, V={0, ..., 4}, phase=0, counterclockwise=5,
nodes={Set \tikzgraphnodename, Set \PrevOf{\tikzgraphnodename}{5}}],
\foreach[evaluate={\j=int(mod(\i+1,5));}] \i in {0, ..., 4}{
[nodes=Set \i]% or \j = \NextOf{\i}{5}
middle \i a[at=($(inner \i)!.8!-90:(inner \j)$)],
middle \i b[at=($(inner \j)!.8!+90:(inner \i)$)],
outer \i c[at=($(middle \i a)!.5!(middle \i b)!1!-90:(middle \i b)$)]
}
};
\end{document}