我在定义路径上的节点时遇到了麻烦。如果使用点和入/出角度来描述路径,则节点始终位于开头。如果使用控制点来描述路径,则它工作正常。
在下面的代码中,您会看到一条路径正确地在中间有一个节点,而对于第二条路径,该节点将放置在路径的起点处。
\documentclass[border=5pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{math,calc}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}
\draw (0,0) .. controls (1,2) and (4,3) .. (5,5)
node [pos=0.5] (mid1) {};
\draw[fill] (mid1) circle (1pt);
\draw (0,0) to[out=90, in=-180] (5,5)
node [pos=0.5] (mid2) {};
\draw[fill] (mid2) circle (1pt);
\end{tikzpicture}
\end{document}
我有一条如第二个示例所示构建的路径,如何将节点放置在特定的相对位置(比如说 2/3)?
我也感兴趣为什么 tikz 处理这两条路径如此不同,以及为什么“node [pos= ]”在其中一种情况下有效,而在另一种情况下无效。
答案1
我会尝试解释一下,因为原帖作者问的是原因。
请记住,有两种方法可以将节点放置在直线或曲线上:明确放置和隐式放置。
- 显式:将节点放置于直线/曲线的终点之后,例如
(a) .. controls (c) and (d) .. (b) node[pos=...] {...}
。 - 隐式:将节点放在直线/曲线的终点之前。例如
(a) -- node[pos=...] {...} (b)
。
它们之间的区别在于,当没有给出内部选项时,隐式放置会继承外部选项(例如,tikzpicture
或scope
环境的选项)。但是,如果给出了内部选项,则无论您使用哪种类型的放置,它都将是 TikZ 接受的最终选项。请参阅下面的示例:
\begin{tikzpicture}[pos=0.8]
\draw (1,0) -- (4,0) node {A}
(1,.5) -- (4,.5) node[midway] {A'};
\draw (1,1) -- node {B} (4,1)
(1,1.5) -- node[midway] {B'} (4,1.5);
\end{tikzpicture}
好的,让我们回到原始 OP 的问题。
一个问题是关于原因。我上面已经解释过一些了。其实,我不太清楚背后的确切原因;但它是总是更安全隐含当不需要继承外部选项时放置节点。(更新:该to
操作仅允许隐式放置)
因此请使用:
\draw (0,0) to[out=90, in=-180] node [pos=0.5] (mid2) {} (5,5);
另一个问题是如何使用相对于线的给定绝对位置放置节点。如果您的意思是沿曲线的“2/3 英寸”,我会说我不知道如何实现。
答案2
事实上,它确实有效:)
事物顺序的一个小变化就会使它对你不起作用。
你有:
\draw (0,0) to[out=90, in=-180] (5,5) node [pos=0.5] (mid2) {} ;
你应该改为:
\draw (0,0) to[out=90, in=-180] node [pos=0.5] (mid2) {} (5,5);
请node [] () {}
注意前最终坐标。
\documentclass[border=5pt]{standalone}
\usepackage[utf8]{inputenc}
\usepackage{tikz}
\usetikzlibrary{math,calc}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}
\draw (0,0) .. controls (1,2) and (4,3) .. (5,5)
node [pos=0.5] (mid1) {};
\draw[fill] (mid1) circle (1pt);
\draw (0,0) to [out=90, in=-180] node [pos=0.5] (mid2) {} (5,5);
\draw[fill] (mid2) circle (1pt);
\end{tikzpicture}
\end{document}