Tikz:无法根据坐标创建节点

Tikz:无法根据坐标创建节点

我正在构建一个树形图并从创建顶点开始

\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 模式,或者../../..单独使用流中的每个项目。

相关内容