现在我所拥有的是
\documentclass[11pt]{article}
\usepackage{tikz}
\usepackage{tkz-graph}
\tikzstyle{vertex}=[circle, draw, inner sep=0pt, minimum size=6pt]
\newcommand{\vertex}{\node[vertex]}
\begin{document}
\begin{center}
\begin{tikzpicture}[scale=0.7]
\vertex[label=$p_1$](p1) at (-1,1.5) {};
\vertex[label=$p_2$](p2) at (1,1.5) {};
\vertex[label=$p_3$](p3) at (-1,0) {};
\vertex[label=$p_4$](p4) at (-1,-1.5) {};
\vertex[label=$p_5$](p5) at (1,-1.5) {};
\tikzset{EdgeStyle/.style={->}}
\Edge(p1)(p3)
\Edge(p3)(p4)
\Edge(p1)(p5)
\Edge(p2)(p4)
\Edge(p2)(p5);
\end{tikzpicture}
\end{center}
\end{document}
其结果如下:
我对 tikz 还不熟悉,所以如果这个问题很愚蠢,我深表歉意,但我该如何做才能使顶点不显示为圆圈,而是只显示为文本标签 $p_1$、$p_2$ 等(应位于圆圈当前所在的位置)?标签周围可能还需要一些填充,以便箭头不会与它们重叠。我不确定如何做这两件事。
答案1
\documentclass{amsart}
\usepackage{tikz}
\begin{document}
\begin{center}
\begin{tikzpicture}
\node (p1) at ( 0, 0) {$p_1$};
\node (p2) at ( 1, 0) {$p_2$};
\node (p3) at ( 0,-1) {$p_3$};
\node (p4) at ( 0,-2) {$p_4$};
\node (p5) at ( 1,-2) {$p_5$};
\begin{scope}[every path/.style={->}]
\draw (p1) -- (p3);
\draw (p3) -- (p4);
\draw (p1) -- (p5);
\draw (p2) -- (p4);
\draw (p2) -- (p5);
\end{scope}
\end{tikzpicture}
\end{center}
\end{document}
输出
这类事情让我立刻想起了交换图,所以这里有一个非常简单的tikz-cd
代码来实现你想要的目标:
\documentclass{amsart}
\usepackage{tikz-cd}
\begin{document}
\begin{tikzcd}
p_1 \arrow{d} \arrow{rdd} & p_2 \arrow{ldd} \arrow{dd}\\
p_3 \arrow{d} & \\
p_4 & p_5
\end{tikzcd}
\end{document}
输出
答案2
使用 tkz-graph 的解决方案也很简单,但是您需要避免混合 tikz 和 tkz-graph。如果您使用 tkz-graph,您需要了解一些原则。
通过你给出的例子,使用 tikz 或 tikz-cd 很容易,tkz-graph 只有在你需要自动设置一些样式并且需要绘制一些复杂的图形但有一些几何要求(线上的顶点,正方形上的顶点,圆形上的顶点)时才有用。
\documentclass[11pt]{article}
\usepackage{tkz-graph} % tkz-graph loads tikz
\begin{document}
\begin{center}
\begin{tikzpicture}%[scale=0.7]
% initialization
\SetGraphUnit{2}
\SetVertexMath
\GraphInit[vstyle=Empty]
% vertices
\Vertex[L=p_1]{p1} \EA[L=p_2](p1){p2}
\SO[L=p_3](p1){p3}
\SO[L=p_4](p3){p4} \EA[L=p_5](p4){p5}
% edges
\tikzset{EdgeStyle/.style = {->}}
\Edges(p1,p3,p4)
\Edges (p1,p5) \Edges (p2,p5) \Edges (p2,p4)
\end{tikzpicture}
\end{center}
\end{document}
评论 :
\SetGraphUnit
如果你使用一些自动放置,你需要用node distance
tkz-graph 修复,你可以使用这个宏,但可能d=2 cm
在 Vertex 的选项中进行局部修改\SetVertexMath
所有标签都处于数学模式,所以L=p_3
足够了\GraphInit[vstyle=Empty]
样式的选择。这里的节点是圆形的,但没有绘制\Vertex[L=p_1]{p1}
如您所见,第一个顶点无需;
在命令末尾添加。引用是 p1,但标签是 $p_1$。\EA
代表东部(我在定位库出现之前就制作了这个包)。\SO
代表南部等等...你还有 SOEA NOWE 等等。- 可以使用个人风格
\tikzset{EdgeStyle/.style = {->}}
或 \tikzset{VertexStyle/.style = {...}} 等\tikzset{EdgeStyle/.append style = {->}}
。
答案3
考虑到您的目的,使用 XY 包可能会更容易,就像:
\documentclass{article}
\usepackage[all]{xy}
\begin{document}
\xymatrix{
p_1 \ar[d] \ar[ddrr] & & p_2 \ar[dd] \ar[ddll]\\
p_3 \ar[d] & & \\
p_4 & & p_5
}
\end{document}
输出:
答案4
对于 tkz-graph 使用\GraphInit[vstyle=Empty]
(为什么\newcommand{\vertex{\node[vertex]}
?)
\documentclass[11pt]{article}
\usepackage{tikz}
\usepackage{tkz-graph}
\begin{document}
\begin{center}
\begin{tikzpicture}
\GraphInit[vstyle=Empty]
\Vertex[x=-1,y= 1.5,L=$p_1$]{p1};
\Vertex[x= 1,y= 1.5,L=$p_2$]{p2};
\Vertex[x=-1,y= 0,L=$p_3$]{p3};
\Vertex[x=-1,y=-1.5,L=$p_4$]{p4};
\Vertex[x= 1,y=-1.5,L=$p_5$]{p5};
\tikzset{EdgeStyle/.style={->}}
\Edge(p1)(p3)
\Edge(p3)(p4)
\Edge(p1)(p5)
\Edge(p2)(p4)
\Edge(p2)(p5);
\end{tikzpicture}
\end{center}
\end{document}
来自文档: