当我使用循环将“pos = x”添加到最后一个边的 node [] 命令时出现错误

当我使用循环将“pos = x”添加到最后一个边的 node [] 命令时出现错误

这段代码为何有效

\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

相关内容