![当我使用循环将“pos = x”添加到最后一个边的 node [] 命令时出现错误](https://linux22.com/image/257946/%E5%BD%93%E6%88%91%E4%BD%BF%E7%94%A8%E5%BE%AA%E7%8E%AF%E5%B0%86%E2%80%9Cpos%20%3D%20x%E2%80%9D%E6%B7%BB%E5%8A%A0%E5%88%B0%E6%9C%80%E5%90%8E%E4%B8%80%E4%B8%AA%E8%BE%B9%E7%9A%84%20node%20%5B%5D%20%E5%91%BD%E4%BB%A4%E6%97%B6%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF.png)
这段代码为何有效
\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\draw (pi,.5)--(pi,-.5)--(-pi,-.5)--(-pi,.5)--cycle node[above]{vv} ;
\end{tikzpicture}
\end{document}
但是当我将其更改为时,node[above]
会node[above,pos=.5]
出现错误?
答案1
这是因为cycle
使路径计时器未定义。这是 TikZ 的一个弱点,它在计算路径的百分比以放置节点时无法越过角落。它会自动查找最后一个输入段进行插值,例如在您的示例中为矩形的左侧。这里问题已解决,但功能仍然有限。此外,TikZ 的开发人员决定这样做可能还有另一个原因,所以最好远离它。
\documentclass{standalone}
\usepackage{tikz}
\makeatletter
\def\tikz@close c{%
\pgfutil@ifnextchar o{\tikz@collect@coordinate@onpath\tikz@lineto@mid c}% oops, a coordinate
{\tikz@@close c}}%
\def\tikz@@close cycle{%
\tikz@flush@moveto%
\tikz@path@close{\expandafter\pgfpoint\pgfsyssoftpath@lastmoveto}%
\def\pgfstrokehook{}%
% \let\tikz@timer=\@undefined% <-- This is the problem ! Uncomment to have the problem again.
\tikz@scan@next@command%
}
\makeatother
\begin{document}
\begin{tikzpicture}
\draw (pi,.5)--(pi,-.5)--(-pi,-.5)--(-pi,.5)--cycle node[above,pos=0.5]{vv} ;
\end{tikzpicture}
\end{document}
您还需要避免这样的构造,并将节点放置在相应的输入段中。例如:
\begin{tikzpicture}
\draw (pi,.5)--(pi,-.5) node[pos=0.5]{vv} --(-pi,-.5)--(-pi,.5)--cycle ;
\end{tikzpicture}
最后,您可能想要演示这个问题,但为了完整起见,请使用rectangle
而不是绕过四个角cycle
。