使用 TiKz 在边缘上使用带引脚的坐标

使用 TiKz 在边缘上使用带引脚的坐标

我试图让pin edge触摸另一个人edge,在以下影响下shorten

\begin{tikzpicture}[s/.style={->,shorten >=1ex,shorten <=1ex}]
   \node (a) at (180:1) {$a$};
   \node (b) at (270:1) {$b$};
   \path[s,bend right=10] (a) edge node[pin={[pin edge={line to,-,shorten >=0ex,shorten <=0ex}]45:test}]{} (b);
\end{tikzpicture}

产量

pin edge not touching edge

这是因为创建的节点有一定的空间,所以我想到做一个协调风格:

\begin{tikzpicture}[s/.style={->,shorten >=1ex,shorten <=1ex}]
   \node (a) at (180:1) {$a$};
   \node (b) at (270:1) {$b$};
   \path[s,bend right=10] (a) edge node[coordinate,pin={[pin edge={line to,-,shorten >=0ex,shorten <=0ex}]45:test}]{} (b);
\end{tikzpicture}

...这导致了这个看起来很有趣的构造,其中第一个边失去了风格s,但保留了bend left属性:

edges touch, but first edge is drawn wrong

只是为了好玩我尝试使用coordinate而不是node[coordinate]

\begin{tikzpicture}[s/.style={->,shorten >=1ex,shorten <=1ex}]
   \node (a) at (180:1) {$a$};
   \node (b) at (270:1) {$b$};
   \path[s,bend right=10] (a) edge coordinate[pin={[pin edge={line to,-,shorten >=0ex,shorten <=0ex}]45:test}] (b);
\end{tikzpicture}

这显然是个坏主意

have no idea what happened here

答案1

避免继承问题可能更容易,只需分两步完成即可:

\path [s, bend right] (a) edge coordinate (@aux) (b);
\path [late options={name=@aux, pin=45:test}];

坐标名称@aux只是一个一次性的(aux辅助的),因为您可能不会再次引用该坐标。

late options选项的解释如下PGF 手册在第 200f 页。

大多数这些选项都不会产生效果,因为您无法更改节点的外观,也就是说,您无法使用后期选项将红色节点更改为绿色节点。但是,在 中(直接或间接)提供append after command和选项确实会产生预期的效果:给定的路径会执行,并将设置为确定的节点。prefix after command<options>\tikzlastnode

所有这些的最终效果是,您可以提供label选项,例如,<options>将标签添加到已构建的节点。同样,您可以使用选项on chain将已成为<existing node>链的一部分。

笔记:

  • pin与 非常相似label
  • \chainin [<options>] (<existing name>)其实只是

    \path (<existing name>) [late options={on chain,every chain in,<options>}]
    

答案2

该死……整天都在断断续续地思考这个问题,就在我发布问题后,我突然有了一个主意。只需将尺寸设置为 0 即可模拟样式coordinate,呵呵!

这当然可以通过 来完成inner sep=0, minimum size=0

\begin{tikzpicture}[s/.style={->,shorten >=1ex,shorten <=1ex}]
   \node (a) at (180:1) {$a$};
   \node (b) at (270:1) {$b$};
   \path[s,bend right=10] (a) edge node[inner sep=0,minimum size=0,pin={[pin edge={line to,-,shorten >=0ex,shorten <=0ex}]45:test}]{} (b);
\end{tikzpicture}

尽管结果非常接近,但还没有达到预期。

almost touching

因此我不愿意接受我自己的答案。

相关内容