Say I draw a red image with below code, generate input.pdf:

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=1pt,y=1pt,line width = 1pt,red]
    \draw (0,0) rectangle (50,50);
    \draw (25,25) circle (25);
\end{tikzpicture}
\end{document}

enter image description here

Then include input.pdf and draw the same thing on this image (draw with black):

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=1pt,y=1pt,line width = 1pt]
    \node[anchor=south west,inner sep=0,outer sep=0] at (0,0) {\includegraphics{input.pdf}};
    \draw (0,0) rectangle (50,50);
    \draw (25,25) circle (25);
\end{tikzpicture}
\end{document}

But the black line not over red line perfectly,see below zoomed parts:

enter image description here

What's wrong with my draw on image code?

  • 3
    Well, seems like you did not take into account the line width. Try putting the image at (-\pgflinewidth/2,-\pgflinewidth/2) to take this into account. – marmot Nov 20 at 1:38
  • I think the problem is the draw. Replace it by \fill[yellow] and \fill[green] for exmple. – Sigur Nov 20 at 1:38
  • 1
    @marmot is right. put your node at (-0.5,-0.5) (half line width offset) and it lines up right. Your image is actually 51pt × 51pt but your code assumes it is 50pt × 50pt. – David Purton Nov 20 at 1:52
up vote 10 down vote accepted

OK, I just tried what I thought should work, and surprisingly it does. That is.

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=1pt,y=1pt,line width = 1pt]
    \node[anchor=south west,inner sep=0,outer sep=0] at (-\pgflinewidth/2,-\pgflinewidth/2) {\includegraphics{input.pdf}};
    \draw (0,0) rectangle (50,50);
    \draw (25,25) circle (25);
\end{tikzpicture}
\end{document}

produces

enter image description here

as expected. Why? You put the node with anchor south west, and, as pointed out
by David Purton, your image is wider (and taller) by the line width (since it is wider and taller by half the line width in each direction). And why is this? You draw a path through the specified coordinates, and the line width gets added to this. I know that the explanation is very clumsy, it would be much easier in marmot language, but I am not sure how to type this, so as a compromise I add a figure. ;-)

enter image description here

An alternative to @marmot's solution is to put the image at (25,25) to line up with your circle and anchor it at it's centre:

\documentclass{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[x=1pt,y=1pt,line width = 1pt]
    \node[inner sep=0,outer sep=0] at (25,25) {\includegraphics{input.pdf}};
    \draw (0,0) rectangle (50,50);
    \draw (25,25) circle (25);
\end{tikzpicture}
\end{document}

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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