tikzlibrary 链行为不当

tikzlibrary 链行为不当

下面的示例直接来自 TikZ 手册(第 46.3 节第 537 页),并产生“未知链“链”错误”。我在前面的例子中注意到我的 PGF\TikZ 不喜欢

{[start chain]
...
}

条款。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}[node distance=1mm,
every node/.style=draw,every join/.style=->]
\draw [help lines] (0,0) grid (3,2);
\node[red] (existing) at (0,2) {existing};
{[start chain]
\node [draw,on chain,join] {Hello};
\node [draw,on chain,join] {World};
\chainin (existing) [join];
\node [draw,on chain,join] {this};
\node [draw,on chain,join] {is};
}
\end{tikzpicture}
\end{document}

答案1

单个括号不能替代适当的 TikZ 范围,因为它可以完成很多非平凡的事情。

因此,您需要说明\begin{scope}一切才能正常工作。因此,我不会将其称为错误,而是文档中的拼写错误。

\documentclass[tikz]{standalone}
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}[node distance=1mm,
every node/.style=draw,every join/.style=->]
\draw [help lines] (0,0) grid (3,2);
\node[red] (existing) at (0,2) {existing};
\begin{scope}[start chain,]
\node [draw,on chain,join] {Hello};
\node [draw,on chain,join] {World};
\chainin (existing) [join];
\node [draw,on chain,join] {this};
\node [draw,on chain,join] {is};
\end{scope}
\end{tikzpicture}
\end{document}

答案2

这不是一个错误。要将其{ ... }视为 TikZ 范围(而不是普通的 TeX 组),您需要加载库scopes

\documentclass[tikz,multi,border=10pt]{standalone}
\usetikzlibrary{chains,scopes}
\begin{document}
\begin{tikzpicture}[node distance=1mm,
  every node/.style=draw,every join/.style=->]
  \draw [help lines] (0,0) grid (3,2);
  \node[red] (existing) at (0,2) {existing};
  {[start chain]
    \node [draw,on chain,join] {Hello};
    \node [draw,on chain,join] {World};
    \chainin (existing) [join];
    \node [draw,on chain,join] {this};
    \node [draw,on chain,join] {is};
  }
\end{tikzpicture}
% last example from section on chains, page 542
\begin{tikzpicture}[node distance=5mm,
every node/.style=draw]
{ [start chain=1]
\node [on chain] {A};
\node [on chain] {B};
\node [on chain] {C};
}
{ [start chain=2 going below]
\node [on chain=2] at (0.5,-.5) {0};
\node [on chain=2] {1};
\node [on chain=2] {2};
}
{ [continue chain=1]
\node [on chain] {D};
}
\end{tikzpicture}
\end{document}

作用域

最后一个例子

PGF/TikZ 手册的一个长期问题是,它倾向于假设已加载正确的库,即使示例代码使用了前几页提到过的库,或者只是顺便或隐式提及过的库。从用户的角度来看,这可能会使其难以使用。(并且手册可能应该为我们用户服务,所以这是一个缺点。)

在这种情况下,库的许多示例都chains假设至少scopes已加载,如果可以在本节开头提到这一点,以及加载库chains本身的语法,那将非常有帮助。

答案3

CFR 和 percusse 都发布了更好的代码解决方案,并提供了更好的解释,解释了手册中出现拼写错误的原因。其中一个应该被标记为正确。

原始帖子:

您说得对,这似乎是代码中的一个错误。只需将移到start chain的可选部分\begin{tikzpicture}即可纠正此问题。这可以在前面的示例中看到。

此外,在我的手册副本中(我相信是最新的),提到的例子在第 545 页,但这并不重要,因为您包含了章节编号,这更有用。

刚刚提交了一个错误报告,#392 文档第 46.3 节示例产生错误

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{chains}
\begin{document}
\begin{tikzpicture}[start chain,node distance=1mm,
every node/.style=draw,every join/.style=->]
\draw [help lines] (0,0) grid (3,2);
\node[red] (existing) at (0,2) {existing};
{
\node [draw,on chain,join] {Hello};
\node [draw,on chain,join] {World};
\chainin (existing) [join];
\node [draw,on chain,join] {this};
\node [draw,on chain,join] {is};
}
\end{tikzpicture}
\end{document}

相关内容