我是 TikZ 新手,有什么最好的软件包(和技术)可以快速(轻松地)绘制像这样的有向图(图片来自 M. Sipser 的书)?
特别是在图形中间绘制(对齐)点的最佳方法是什么(添加“...”文本并将其放置在绝对位置)?那么半圆弧呢?
是否存在功能足够强大的图形 Tikz GUI 工具来实现相同的结果?
答案1
有一些软件包可以做到这一点,但如果学习一些关于 Tikz 的简单知识以及如何使用一些基本命令可能会很有趣
1)加载包蒂克兹
2)然后加载一个库箭获取一些关于箭头的特殊样式
3)我们可以为顶点和边定义一些样式,但你可以在之后查看
4)我们放置一些节点。我这里的方法很简单,但不是一个好方法,因为修改值并不容易。
5)画出边缘
6) (a3) 和 (c) 之间的点\path
很有用,因为我们不绘制任何东西,但可以放置一个节点。默认情况下,节点放置在每个末端的中间。
7)我创建了空节点,没有绘制
\documentclass[11pt]{article}
\usepackage{tikz}
\usetikzlibrary{arrows}
\begin{document}
\begin{tikzpicture}
\tikzset{vertex/.style = {shape=circle,draw,minimum size=1.5em}}
\tikzset{edge/.style = {->,> = latex'}}
% vertices
\node[vertex] (a) at (0,0) {};
\node[vertex] (b) at (4,3) {};
\node[vertex] (c) at (8,0) {};
\node[vertex] (d) at (4,-3) {$t$};
\node[vertex] (a1) at (1.5,0) {};
\node[vertex] (a2) at (3,0) {};
%edges
\draw[edge] (b) to (a);
\draw[edge] (b) to (c);
\draw[edge] (a) to (d);
\draw[edge] (c) to (d);
\draw[edge] (a) to[bend left] (a1);
\draw[edge] (a1) to[bend left] (a);
\draw[edge] (a1) to[bend left] (a2);
\draw[edge] (a2) to[bend left] (a1);
\path (a2) to node {\dots} (c);
\node [shape=circle,minimum size=1.5em] (a3) at (4.5,0) {};
\draw[edge] (a2) to[bend left] (a3);
\draw[edge] (a3) to[bend left] (a2);
\node [shape=circle,minimum size=1.5em] (c1) at (6.5,0) {};
\draw[edge] (c) to[bend left] (c1);
\draw[edge] (c1) to[bend left] (c);
\end{tikzpicture}
\end{document}
备注:可以定义常数来定义节点之间的距离。Tikz 还提供了使用某些选项的可能性,例如node distance
。还有其他选项可以放置节点,但对于第一种方法来说,它更复杂。