![tikzlibrary 链行为不当](https://linux22.com/image/334867/tikzlibrary%20%E9%93%BE%E8%A1%8C%E4%B8%BA%E4%B8%8D%E5%BD%93.png)
下面的示例直接来自 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}