我的一些 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
,而是与tkz
Alain Matthes 的收藏有关。我猜他对此(特别是tkz-graph
)进行了更新,导致您的代码无法运行。
当然,您可以尝试找到旧版本的tkz-graph
,但我宁愿更新代码。我不知道这到底应该是什么样的,但下面的代码会生成以下输出:
我对代码所做的更改:
\Vertices*
至\Vertices
。带星号的命令版本似乎不执行任何操作,因此请删除*
。\tikzstyle
至\tikzset
:建议使用后者,但前者仍然有效。(应该使用 \tikzset 还是 \tikzstyle 来定义 TikZ 样式?)\tikzset{node distance = ...}
到\SetGraphUnit{}
:前者没有效果,但tkz-graph
提供了后者,我猜可以完成类似的工作。对于,将添加为可选参数\Vertices
。unit
\usepackage{tkz-berge}
到\usepackage{tkz-graph}
。前者加载后者,所以这其实没什么大不了的,但你使用的命令实际上是由 提供的tkz-graph
。
无关注释:您不应该将选项传递pdftex
给graphicx
,软件包可以自行解决此问题。参见例如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}