考虑一下这个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}
这两条路径应该相同——但是,当我编译时,我得到了这个输出:
...也就是说,下面(第一条)路径的填充已被破坏——而其原因显然是(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}