2

In tikzpicture, I can set 1pt as unit but 1px doesn't work! So I guess 1pt equal to 1px. But sounds like almost but not exactly!

This is a example. Original image is 200x150 but the node display is 200.74948ptx150.5621pt!

Should it be exactly 200x150? What's correct way to get 200x150?

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
    \begin{tikzpicture}[x=1pt,y=1pt]
    %image source: /usr/local/texlive/2017/texmf-dist//latex/mwe/example-image-4x3.png
    \node[anchor=south west,inner sep=0,outer sep=0] (image) at (0,0)       
        {\includegraphics{example-image-4x3}};
    \draw[line width=0.1pt] let 
        \p1=(image.south west),
        \p2=(image.north east),
        \n1={(\x2-\x1)},
        \n2={(\y2-\y1)}  
        in node[anchor=west] at (0,120) {\large \n1,\n2};
\end{tikzpicture}
\end{document}

enter image description here

2

I can not tell you why this happens, but I stumbled over this some time ago, and at least back then I did not know if there is a deeper reason. If you look up the conversion rate in the web, you will find that

1cm = 28.3465pt   (in web).

However, TikZ claims, as shown in the MWE below, it is

1cm = 28.45274pt  (Ti*k*Z).

If you factor in that slight discrepancy, you get, within the rounding errors, a perfect match, as the lowest line in the following output reveals.

\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
    \begin{tikzpicture}[x=1pt,y=1pt]
    %image source: /usr/local/texlive/2017/texmf-dist//latex/mwe/example-image-4x3.png
    \node[anchor=south west,inner sep=0,outer sep=0] (image) at (0,0)       
        {\includegraphics{example-image-4x3}};
    \draw[line width=0.1pt] let 
        \p1=(image.south west),
        \p2=(image.north east),
        \n1={(\x2-\x1)},
        \n2={(\y2-\y1)}  
        in node[anchor=west] at (0,120) {\large \n1,\n2};
    \path let \p1=(1cm,0) in node[anchor=west,fill=white] at (0,90) {$\x1\ne 28.3465pt$};   
    \pgfmathsetmacro{\myconv}{28.3465pt/28.45274}
    \draw[line width=0.1pt] let 
        \p1=(image.south west),
        \p2=(image.north east),
        \n1={(\x2-\x1)*\myconv},
        \n2={(\y2-\y1)*\myconv}  
        in node[anchor=west] at (0,40) {\large \n1,\n2};    
\end{tikzpicture}
\end{document}

enter image description here

2
  • Thanks, what's more, if I add [width=200pt] to includepicture, then I can get 200pt width, but the height is 150.01074pt.
    – beetlej
    Dec 6 '18 at 2:32
  • @beetlej I am not really sure, but to me this sounds like a rounding error.
    – user121799
    Dec 6 '18 at 2:34

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.