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

I can't find a simple way to make a label on the last edge. What I want is something like

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

but it doesn't work.

\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);

This works, but seems too complicated for such a simple task and I think I'm missing something.

  • Welcome to TeX.SX. – Claudio Fiandrino Feb 10 '13 at 19:19
  • 4
    I would probably use \draw (0,0) -- node{a} (2,0) -- node{b} (2,1) -- node{c} (0,1) -- node {d} (0,0) -- cycle ; (so repeating the first coordinate at the end of the path, and using cycle only to get the final corner right). – Jake Feb 10 '13 at 19:25
  • This method is much neater than mine, thank you. Still not as elegant as I hoped though... – Lester Feb 11 '13 at 11:55
  • But isn't there a way to treat the last -- as an edge and label it? – Dror Feb 22 '13 at 12:54

The problem is that the cycle option short circuits the system for putting nodes on paths. The usual path operations have a system whereby they record their path component so that TikZ can figure out where to put nodes afterwards. The -- (lineto) component is no exception to this. The problem is that the cycle interrupts the lineto before it can record the necessary information.

A fix would be to put this information back in. I don't know how robust this fix is, but it works for your example.


\def\tikz@@close cycle{%

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

closed path with labels

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.