让我们考虑下面的代码
\documentclass[tikz]{standalone}
\usepackage{amsmath}
\usetikzlibrary{arrows}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,5} {
\draw (\i,0)
\ifnum\i=2 node [below, black] {$a$}\fi
to node [pos=1.15, above, black, sloped] {$x = const$}({\i+1},5);
}
\end{tikzpicture}
\end{document}
我应用了一个条件\ifnum ... \fi
来标记绘图线第一个坐标下方的某个节点。在node
靠近第二个坐标的第二个坐标上,没有任何条件。
但如果我对第二个条件应用一些条件node
,比如
\ifnum\i=3 node [pos=1.15, above, black, sloped] {$x = const$}\fi
我收到错误
! Package tikz Error: (, +, coordinate, pic, or node expected.
以下是出现此类错误的代码示例。
\documentclass[tikz]{standalone}
\usepackage{amsmath}
\usetikzlibrary{arrows}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\foreach \i in {1,...,5} {
\draw (\i,0)
\ifnum\i=2 node [below, black] {$a$}\fi
to \ifnum\i=3 node [pos=1.15, above, black, sloped] {$x = const$}\else\relax\fi {$x = const$} ({\i+1},5);
}
\end{tikzpicture}
\end{document}
为什么第二个条件会导致错误,尽管其应用逻辑与第一个节点相同?
答案1
之后to
,解析器被专门设置为逐字查找坐标或节点名称。这就是它出错的原因。
在第一个例子中,它找到了一个坐标,现在正在解析上下文(它是一个吗--
,它是一个吗to
等等),因此会扩展直到找到有用的东西。
请注意,TikZ 解析器逐个字符进行解析。如果解析器发现该字符,c
它会通过分支检查该字符是否为controls
或coordinate
等等。因此,它不会执行块并试图从中找出含义。