使用 let 和节点引用的循环路径上的 Tikz 填充操作是否中断?

使用 let 和节点引用的循环路径上的 Tikz 填充操作是否中断?

考虑一下这个MWE:

\documentclass[varwidth]{standalone}

\usepackage{tikz}
\usepackage{calc} % \widthof
\usetikzlibrary{calc}

\pagecolor{yellow!15}
\begin{document}
\begin{tikzpicture}

\node (neL0) at (1,4) {};
\node (neRM) at (5,2.5) {};
\path let \p1=(neL0), \p2=(neRM), \p3=(\x1,\y2), \p4=($(\p3)+(0,10pt)$), \p5=($(neRM)+(0,-10pt)$) in
  [draw=red,fill=yellow,opacity=0.9] (\p3) -- (\p4) -| (neRM) -- cycle ;

\node (neL0) at (1,5) {};
\node (neRM) at (5,3.5) {};
\path let \p1=(neL0), \p2=(neRM), \p3=(\x1,\y2), \p4=($(\p3)+(0,10pt)$), \p5=($(neRM)+(0,-10pt)$) in
  [draw=red,fill=yellow,opacity=0.9] (\p3) -- (\p4) -| (\p2) -- cycle ;

\end{tikzpicture}
\end{document}

这两条路径应该相同——但是,当我编译时,我得到了这个输出:

测试03.png

...也就是说,下面(第一条)路径的填充已被破坏——而其原因显然是(neRM)在路径构造中使用,而不是(\p2)

不确定 - 这是否应该通过let路径构造命令以这种方式工作 - 或者这是一个错误?

答案1

在流中使用节点名称时,它会结束到该节点的路径,如果路径继续,则会开始新的路径。这是因为,如果节点具有边界形状,则会计算边界上的点并将其连接到该点,然后计算边界上的另一个点,并从那里继续剩余的路径。

在您的例子中,路径在节点顶部停止并从那里关闭。因此,您需要明确添加另一个坐标,要么使节点成为坐标,要么明确引用节点的锚点。您还可以稍微简化语法以获得相同的效果。

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}

\begin{document}
\begin{tikzpicture}

\node[draw] (neL0) at (1,4) {lo};
\node[draw] (neRM) at (5,2.5) {rm};
%\path let \p1=(neL0|-neRM), \p2=($(\p1)+(0,10pt)$) in
  [fill=yellow,opacity=0.9] (\p1) -- (\p2) -| (neRM) --  cycle;

%\draw (neL0|-neRM) --++(0,10pt) -| (neRM) --  cycle; % This is the same as above

\fill[yellow] (neL0|-neRM) --++(0,10pt) -| (neRM.center) --  cycle;
\end{tikzpicture}
\end{document}

相关内容