我需要绘制简单的图形(例如彼得森图) 在 LaTeX 中。
我在 Ubuntu 中使用 Kile。
答案1
我认为最好的方法是使用tkz-berge
来自 Altermundus 的包裹。
但是,要使用 创建一个简单的示例TikZ
,您可以遵循以下步骤:
\documentclass {article}
% example taken from
% http://www.guitex.org/home/images/doc/GuideGuIT/introingtikz.pdf
\usepackage {tikz}
\usetikzlibrary {positioning}
%\usepackage {xcolor}
\definecolor {processblue}{cmyk}{0.96,0,0,0}
\begin {document}
\begin {center}
\begin {tikzpicture}[-latex ,auto ,node distance =4 cm and 5cm ,on grid ,
semithick ,
state/.style ={ circle ,top color =white , bottom color = processblue!20 ,
draw,processblue , text=blue , minimum width =1 cm}]
\node[state] (C)
{$1$};
\node[state] (A) [above left=of C] {$0$};
\node[state] (B) [above right =of C] {$2$};
\path (A) edge [loop left] node[left] {$1/4$} (A);
\path (C) edge [bend left =25] node[below =0.15 cm] {$1/2$} (A);
\path (A) edge [bend right = -15] node[below =0.15 cm] {$1/2$} (C);
\path (A) edge [bend left =25] node[above] {$1/4$} (B);
\path (B) edge [bend left =15] node[below =0.15 cm] {$1/2$} (A);
\path (C) edge [bend left =15] node[below =0.15 cm] {$1/2$} (B);
\path (B) edge [bend right = -25] node[below =0.15 cm] {$1/2$} (C);
\end{tikzpicture}
\end{center}
\end{document}
这导致:
这是马尔可夫链的一个示例,其中TikZ
使用了多个选项。在同一指南中,您将找到一个将节点放置在矩阵中的示例。
答案2
您可以使用 tkz-berge 包。此包使用 TikZ,可以添加 TikZ 的所有命令。
以下是彼得森图的三种经典形式
\documentclass[11pt]{scrartcl}
\usepackage{tkz-berge}
\begin{document}
\begin{tikzpicture}[scale=.5]
\GraphInit[vstyle=Art]
\SetGraphArtColor{red}{olive}
\grPetersen[form=1,RA=5,RB=3]%
\end{tikzpicture}
\begin{tikzpicture}[scale=.4]
\GraphInit[vstyle=Art]
\SetGraphArtColor{red}{olive}
\grPetersen[form=2,RA=7,RB=3]%
\end{tikzpicture}
\begin{tikzpicture}[scale=.5]
\GraphInit[vstyle=Art]
\SetGraphArtColor{red}{olive}
\grPetersen[form=3,RA=7]%
\end{tikzpicture}
\end{document}
我写了一份包含一些经典命名图表的文档。它位于您的发行版中(我认为是 2011 年以上)
texdoc NamedGraphs
在终端
我添加了来源和所有示例,您也可以在这里找到它们
答案3
这里有一个仅使用 TikZ 绘制 Petersen 图的示例,我尝试正确构造代码。第一个范围用于顶点,第二个范围用于边。唯一的问题是使用“mod”获取边
\pgfmathtruncatemacro{\nextb}{mod(\i+1,5)}
\pgfmathtruncatemacro{\nexta}{mod(\i+2,5)}
完整代码
\documentclass[border=6pt]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\begin{scope} [vertex style/.style={draw,
circle,
minimum size=6mm,
inner sep=0pt,
outer sep=0pt,
shade}]
\path \foreach \i in {0,...,4}{%
(72*\i:2) coordinate[vertex style] (a\i)
(72*\i:4) coordinate[vertex style] (b\i)}
;
\end{scope}
\begin{scope} [edge style/.style={draw=gray,double=white}]
\foreach \i in {0,...,4}{%
\pgfmathtruncatemacro{\nextb}{mod(\i+1,5)}
\pgfmathtruncatemacro{\nexta}{mod(\i+2,5)}
\draw[edge style] (a\i)--(b\i);
\draw[edge style] (a\i)--(a\nexta);
\draw[edge style] (b\i)--(b\nextb);
}
\end{scope}
\end{tikzpicture}
\end{document}
答案4
如果您不想自己进行布局,可以使用 Graphviz 进行布局。这将生成一个“.dot”文件,可以使用 dot2tex 将其转换为 Latex。
我刚刚使用 GraphvizFiddle 工具获取了 Petersen 图的“circo”布局,并验证了 dot2tex 是否有效。以下是分享链接对于 Petersen 图,将输出从“svg”切换到“dot”,然后按“Draw”按钮以获取 Petersen“.dot”文件。tex 输出也使用“tikzpicture”。