TikZ 路径标签和--cycle

TikZ 路径标签和--cycle
\draw (0,0) -- node{a} (2,0) -- node{b}  (2,1)  -- node{c}  (0,1)  -- cycle;

我找不到在最后一条边上做标签的简单方法。我想要的是

\draw (0,0) -- node{a} (2,0) -- node{b}  (2,1)  -- node{c}  (0,1)  -- node{d} cycle;

但它不起作用。

\draw (0,0) coordinate(A) -- node{a} (2,0) -- node{b}  (2,1)  -- 
                             node{c}  (0,1) coordinate(D) -- cycle;
\draw (A) -- node{d} (D);

这可行,但对于这么简单的任务来说似乎太复杂了,我想我遗漏了一些东西。

答案1

问题是该cycle选项会使将节点放在路径上的系统短路。通常的路径操作都有一个系统,它们会记录其路径组件,以便 TikZ 可以确定之后将节点放在何处。--(lineto) 组件也不例外。问题是在cyclelineto 记录必要的信息之前,它会中断它。

解决办法是将这些信息放回去。我不知道这个修复有多强大,但它对你的例子有用。

\documentclass{article}
%\url{http://tex.stackexchange.com/q/97602/86}
\usepackage{tikz}

\makeatletter
\def\tikz@@close cycle{%
  \edef\tikz@timer@start{\noexpand\pgfqpoint{\the\tikz@lastx}{\the\tikz@lasty}}
  \tikz@flush@moveto%
  \tikz@path@close{\expandafter\pgfpoint\pgfsyssoftpath@lastmoveto}%
  \edef\tikz@timer@end{\noexpand\pgfpoint\pgfsyssoftpath@lastmoveto}%
  \def\pgfstrokehook{}%
  \let\tikz@timer=\tikz@timer@line%
  \tikz@scan@next@command%
}
\makeatother


\begin{document}
\begin{tikzpicture}
\draw (0,0) -- node{a} (2,0) -- node{b}  (2,1)  -- node[pos=.3]{c}  (0,1)  -- node[pos=.3]{d} cycle;
\end{tikzpicture}
\end{document}

带标签的封闭路径

相关内容