在 tikz 路径上定位节点

在 tikz 路径上定位节点

我在定义路径上的节点时遇到了麻烦。如果使用点和入/出角度来描述路径,则节点始终位于开头。如果使用控制点来描述路径,则它工作正常。

在下面的代码中,您会看到一条路径正确地在中间有一个节点,而对于第二条路径,该节点将放置在路径的起点处。

\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)

它们之间的区别在于,当没有给出内部选项时,隐式放置会继承外部选项(例如,tikzpicturescope环境的选项)。但是,如果给出了内部选项,则无论您使用哪种类型的放置,它都将是 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}

相关内容