我正在构建一个树形图并从创建顶点开始
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{10pt}
\definecolor{lavander}{cmyk}{0,0.48,0,0}
\definecolor{violet}{cmyk}{0.79,0.88,0,0}
\definecolor{burntorange}{cmyk}{0,0.52,1,0}
\def\lav{lavander!90}
\def\oran{orange!30}
\tikzstyle{vertices}=[draw,circle,violet,bottom color=\lav,
top color= white, text=violet,minimum width=10pt]
\tikzstyle{namedvertices}=[draw,circle,burntorange, left color=\oran,
text=violet,minimum width=12pt]
\begin{document}
\begin{tikzpicture}[auto, thick]
\pgfmathsetmacro{\xoffset}{1}
\pgfmathsetmacro{\yoffset}{1.5}
% Place named vertices
\foreach \vertex/\name in
{
{(0,0)/t},
{(0 * \xoffset, 2 * \yoffset)/v},
{(1 * \xoffset, -3 * \yoffset)/a},
{(-4 * \xoffset, -4 * \yoffset)/u},
{(0 * \xoffset, -4 * \yoffset)/b}
}
\node[namedvertices] (\name) at \vertex {};
\end{tikzpicture}
\end{document}
不幸的是,编译这个我得到了
包 tikz 错误:无法解析此坐标。
如果我只删除最后一个顶点,即保留 4 而不是 5,则一切都可以正常编译。
我做错了什么?或者我应该做哪些更改才能处理超过 4 个节点?
更新:我已经通过以下方式解决了这个问题
{(0 * \xoffset, -4 * \yoffset)/b}%
所以也许现在,
我想了解为什么它能解决某些问题?最初,在关闭 } 之后没有写入任何隐藏符号。
答案1
TikZ 通过寻找模式来解析输入流。括号{}
对用于对输入参数进行分组。当您用括号括住这些项时,您基本上会将它们作为顶点的单个参数。
当 TikZ 发现at
它切换到坐标解析模式时,它(请注意,它会删除括号,因为它们是 foreach 宏的输入)并找到括号,(
现在它将所有内容(直到第一个))
作为坐标表达式,其余部分留在输入流中,即/b
,因为 TikZ 环境中\nullfont
没有 TikZ 不关心的内容被打印。这就是为什么b
不将其作为节点名称的原因,因为它被丢弃了。
关于这个%
问题,TikZ 再次通过逐字比较来决定循环数组,即使是空格,换行符也是空格字符。 类似的问题可以在这里看到当列表需要完成时,PGF 的 \foreach.因此这是可行的:
\draw (b ) -- (a);% Notice the whitespace after b
一个好的做法是避免使用多参数 foreach 模式,或者../../..
单独使用流中的每个项目。