尝试编译 tikzpicture 代码时出错

尝试编译 tikzpicture 代码时出错

我的一些 tikzpicture 代码无法再编译。以下代码曾经可以编译(2 年前),但现在我得到了

"ABD: EveryShipout initializing macros
! Package pgf Error: No shape named B is known.

! Package pgf Error: No shape named B is known.

See the pgf package documentation for explanation.
Type  H <return>  for immediate help.
 ...                                              

l.15 \WE(B){A}"

我已经安装了最新的 pgf 包,但没有什么区别。这是代码。

\documentclass[12pt]{article}
\usepackage[pdftex]{graphicx}
\usepackage {amssymb,amsmath,amsfonts,amsthm,verbatim,pgfpict2e}
\usepackage{tikz,tkz-berge}

 \begin{document}


\begin{tikzpicture}[scale=1.4]
\GraphInit[vstyle=Dijkstra]
\tikzset{node distance = 5.25cm}
\tikzstyle{EdgeStyle}= [thick]
\Vertices*{square}{E,D,C,B}
\tikzset{node distance = 2.75cm}
\WE(B){A}
\SO(B){G}
\WE(G){F}
\tikzset{node distance = 3cm}
\SOEA(B){H}

\Edge[label=$20$](A)(B)
\Edge[label=$70$](B)(C)
\Edge[label=$40$](A)(F)
\Edge[label=$30$](F)(G)
\Edge[label=$30$](G)(H)
\Edge[label=$20$](B)(H)
\Edge[label=$50$](H)(D)
\Edge[label=$70$](F)(E)
\Edge[label=$50$](E)(D)
\Edge[label=$50$](G)(D)
\Edge[label=$70$](C)(D)
\end{tikzpicture}
  \end{document}

答案1

这里的问题与 不直接相关pgf,而是与tkzAlain Matthes 的收藏有关。我猜他对此(特别是tkz-graph)进行了更新,导致您的代码无法运行。

当然,您可以尝试找到旧版本的tkz-graph,但我宁愿更新代码。我不知道这到底应该是什么样的,但下面的代码会生成以下输出:

在此处输入图片描述

我对代码所做的更改:

  • \Vertices*\Vertices。带星号的命令版本似乎不执行任何操作,因此请删除*

  • \tikzstyle\tikzset:建议使用后者,但前者仍然有效。(应该使用 \tikzset 还是 \tikzstyle 来定义 TikZ 样式?

  • \tikzset{node distance = ...}\SetGraphUnit{}:前者没有效果,但tkz-graph提供了后者,我猜可以完成类似的工作。对于,将添加为可选参数\Verticesunit

  • \usepackage{tkz-berge}\usepackage{tkz-graph}。前者加载后者,所以这其实没什么大不了的,但你使用的命令实际上是由 提供的tkz-graph

无关注释:您不应该将选项传递pdftexgraphicx,软件包可以自行解决此问题。参见例如Martin Scharrer 的回答

\documentclass[12pt]{standalone}
\usepackage{tkz-graph}
\begin{document}

\begin{tikzpicture}[scale=1.4]
\GraphInit[vstyle=Dijkstra]
\tikzset{EdgeStyle/.style ={thick}}
\Vertices[unit=5.25cm]{square}{E,D,C,B}
\SetGraphUnit{2.75cm}
\WE(B){A}
\SO(B){G}
\WE(G){F}
\SetGraphUnit{3cm}
\SOEA(B){H}

\Edge[label=$20$](A)(B)
\Edge[label=$70$](B)(C)
\Edge[label=$40$](A)(F)
\Edge[label=$30$](F)(G)
\Edge[label=$30$](G)(H)
\Edge[label=$20$](B)(H)
\Edge[label=$50$](H)(D)
\Edge[label=$70$](F)(E)
\Edge[label=$50$](E)(D)
\Edge[label=$50$](G)(D)
\Edge[label=$70$](C)(D)
\end{tikzpicture}
\end{document}

相关内容