12

I was trying to replicate the figure in Box half filled color using TikZ.

I draw a rectangle from (0,0) to (4,3).

I locate two points (0,1) as A and (4,2) as B.

When I connect the points A and B, I was expecting that the line will touch the rectangle. But there is a gap when the two points are connected.

enter image description here

I wish to understand this behavior.

Code:

\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
  \draw (0,0) rectangle (4,3);

  \node (A) at (0,1) {};
  \node (B) at (4,2) {};

  \draw (A) -- (B);

\end{tikzpicture}
\end{document} 
18

It is because your path joins two nodes (A) and (B), not the coordinates themselves. This can be made clearer by adding draw option to the nodes:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw (0,0) rectangle (4,3);

  \node[draw] (A) at (0,1) {};
  \node[draw] (B) at (4,2) {};

  \draw (A) -- (B);

\end{tikzpicture}
\end{document} 

enter image description here

Let's add some texts to make it even clearer:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw (0,0) rectangle (4,3);

  \node[draw] (A) at (0,1) {A};
  \node[draw] (B) at (4,2) {B};

  \draw (A) -- (B);

\end{tikzpicture}
\end{document} 

enter image description here

So how to solve it? Of course, to join the coordinates, there is a standard solution with \coordinate:

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw (0,0) rectangle (4,3);

  \coordinate (A) at (0,1);
  \coordinate (B) at (4,2);

  \draw (A) -- (B);

\end{tikzpicture}
\end{document} 

or you can have the coordinates directly

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw (0,0) rectangle (4,3);

  \draw (0,1) -- (4,2);

\end{tikzpicture}
\end{document} 

If you want to keep the nodes: you should use the coordinate (<node name>.center):

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw (0,0) rectangle (4,3);

  \node (A) at (0,1) {};
  \node (B) at (4,2) {};

  \draw (A.center) -- (B.center);

\end{tikzpicture}
\end{document} 

or set option coordinate for the nodes (suggested by Gregory Puleo):

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw (0,0) rectangle (4,3);

  \node[coordinate] (A) at (0,1) {};
  \node[coordinate] (B) at (4,2) {};

  \draw (A) -- (B);

\end{tikzpicture}
\end{document}

Output of the above four codes:

enter image description here

  • Another option would be \node[coordinate] -- which is handy if you want a label at the point. – Gregory Puleo Mar 19 at 21:05
  • @GregoryPuleo Great! Thank you very much! – JouleV Mar 20 at 4:57

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.