这段代码为何有效
\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
。