如何在 tikz 中绘制仅由标签名称表示的顶点的图形?

如何在 tikz 中绘制仅由标签名称表示的顶点的图形?

现在我所拥有的是

\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}

输出

图表.png


这类事情让我立刻想起了交换图,所以这里有一个非常简单的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} 

输出

图形 CD.png

答案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 distancetkz-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}

在此处输入图片描述

来自文档:

在此处输入图片描述

相关内容