67

Possible Duplicate:
Best figure size adjustment when dealing with different image sizes

Given: a large figure, whose height:width ratio is unknown.
Todo: Include this fig in LaTeX, such that:

  • if the figure is very tall, then fit its height to page
  • if the figure is very wide, then fit its width to page

How to do it?

Or in other words, is there way for LaTeX to get (or compare) the width and length of a figure?

100

How about

\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{myfig.png}

EDIT: added keepaspectratio

|improve this answer|||||
  • @lukmac: if you want the picture with the height equal to text height, remove width=\textwidth keyvalue and viceversa. – Azoun Oct 27 '11 at 13:48
  • 6
    @ArrayIndexOutOfBoundsException: Thanks for your answer. While this is relative common known, it is good to have it here for beginners to find. You should also mention that you need the graphicx package (not graphics) for this, even if it is standard package. – Martin Scharrer Oct 27 '11 at 17:06
  • 4
    It's a nice solution but the caption goes over the page number when using \textheight – xApple Jul 10 '13 at 15:19
  • 6
    @xApple Just use something like height=0.9\textheight . – tcpaiva Aug 5 '15 at 5:06
  • I am still looking for an adaptive solution to integrate the entire caption depending on its height. Since the text of the captions can change, it would be a good thing if the image size could be adjusted accordingly (automatically). – DaveM Dec 5 '19 at 15:05
18

Given that the figure is large, the adjustbox package can be used scale the image to a specified maximum width and height and keep the aspect ratio:

\documentclass{article}
\usepackage{graphicx}
\usepackage{adjustbox}

\newcommand*{\MyIncludeGraphics}[2][]{%
\begin{adjustbox}{max size={\textwidth}{\textheight}}
    \includegraphics[#1]{#2}%
\end{adjustbox}
}

\begin{document}
\MyIncludeGraphics{images/eiffel_tower}
\end{document}

As Martin pointed out, a simpler solution would be to use \usepackage[export]{adjustbox}:

\documentclass{article}
\usepackage{graphicx}
\usepackage[export]{adjustbox}

\begin{document}
\includegraphics[max size={\textwidth}{\textheight}]{images/eiffel_tower}
\end{document}
|improve this answer|||||
  • 2
    Simply use \usepackage[export]{adjustbox} and \includegraphics[max size={\textwidth}{\textheight}]{<image>}. Note that this will only scale it down if it is larger (as you assumed). – Martin Scharrer Oct 27 '11 at 18:50
  • 1
    This is very useful also for cases where \includegraphcs is somehow involved, but not directly available for passing keyword arguments to it. This is the case with SVG files exported to PDF for LaTeX using Inkscape. In that case only the image width is adjustable through \svgwidth, whereas the height is not. So using an encapsulating environment like adjustbox seems to be the only solution. – Ioannis Filippidis Jul 23 '13 at 3:38

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