我想知道为什么在使用简单和系统或操作时,需要不同的语法来在路径上指定nodes
(和) 。coordinates
--
.. controls …
to
以下举例说明该问题:
\documentclass{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{tikz}
\tikzset{every node/.style={fill=white,inner sep=2pt}}
\begin{document}
\begin{tikzpicture}
\draw [thick] (0,0) -- (5,2)
node [pos=0.2] {A}
node [midway] {B};
\end{tikzpicture}
\begin{tikzpicture}
\draw [thick] (0,0) .. controls +(1,2) and +(-2,-1) .. (5,2)
node [pos=0.2] {A}
node [midway] {B};
\end{tikzpicture}
\begin{tikzpicture}% with wrong result
\draw[line width=1pt](0,0) to[out=40, in=160] (5,2)
node [pos=0.2] {A}
node [midway] {B};
\end{tikzpicture}
\begin{tikzpicture}
\draw[line width=1pt](0,0) to[out=40, in=160]
node [pos=0.2] {A}
node [midway] {B} (5,2);
\end{tikzpicture}
\end{document}
使用--
或时controls
可以定位节点后第二个坐标。
但to[in=x, out=y]
这样不行
所有节点都转到(0,0)
(不是第一个坐标,而是始终是),我们必须在操作(0,0)
后立即定位到第二个坐标之前的节点to
我猜这与工作方式有关to
,但我想知道为什么……?
答案1
这个to path
机制非常强大。本质上,使用一个to path
可以任何事物在路径构建的当前阶段,机器to path
需要知道路径的起始坐标、目标以及要放置在路径上的任何节点。后者是因为它to path
应该拥有完全的控制权,包括决定如何解释在路径段上定位节点的各种方式。
TikZ 的路径构造函数的工作原理类似于解析器。因此,它会吞噬输入行,并在执行过程中发出 PGF 命令。to path
当到达目标坐标时(但在处理之前),将调用构造函数。因此,to path
在指定目标之前,必须读取要参与构造的任何节点。可能可以在目标之后指定节点,但这是否有效将在很大程度上取决于实际to path
执行的操作。在一些简单的情况下,它只是将更正常的段插入当前路径规范中,在这种情况下,将节点放在后面应该可以工作。但如果它做了一些更复杂的事情,那就不行了。
通过更简单的路径规范,例如--
,-|
或.. controls ..
,那么 TikZ 就知道路径的外观,因此在处理节点时,可以更灵活地指定它们的时间:不会出现意外。