\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) 组件也不例外。问题是在cycle
lineto 记录必要的信息之前,它会中断它。
解决办法是将这些信息放回去。我不知道这个修复有多强大,但它对你的例子有用。
\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}