11

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} 
subham soni
  • 9,673

1 Answers1

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