[Tex/LaTex] Frame option in includegraphics makes an overfull \hbox

adjustboxboxeswarnings

I'm using the adjust package to add the frame option in \includegraphics command. The package is loaded in this way:

\usepackage[export]{adjustbox}

Now I can write the following command:

\includegraphics[width=\textwidth, frame]{foo.png}

and borders will be automagically added to the image.

Unfortunately using this options I get the well-known overfull \hbox (.. too wide) in paragraph warning. Without the frame option the warning disappears.

Does exixst a way to defeat this warning using the frame option?

Best Answer

Here's how you can do; which one to choose between the second and third example is a matter of taste and of what your pictures contain.

The frame option draws a frame with rule of width \fboxrule (by default) and zero space between the frame and the box. But the rule width is added to the width of the box, so you have to do something about it: either reduce a bit the width of the box, or draw the frame inside the box, by specifying a negative separation (second parameter to the frame option).

\documentclass{article}
\usepackage[export]{adjustbox}
\usepackage{graphicx}
\setlength{\parindent}{0pt} % just for the example

\begin{document}

\footnotesize

% first example: bad, there's an overfull of twice the rule width    
\verb|\includegraphics[width=\textwidth,frame]{tiger}|\\
\begin{minipage}{4cm}
\includegraphics[width=\textwidth,frame]{tiger}
\end{minipage}

\medskip

% second example: good, the frame is drawn outside the picture
\verb|\includegraphics[width=\dimexpr\textwidth-2\fboxrule,frame={\fboxrule}]{tiger}|\\
\begin{minipage}{4cm}
\includegraphics[width=\textwidth-2\fboxrule,frame={\fboxrule}]{tiger}
\end{minipage}

\medskip

% third example: good, the frame is drawn inside the picture
\verb|\includegraphics[width=\textwidth,frame={\fboxrule} {-\fboxrule}]{tiger}|\\
\begin{minipage}{4cm}
\includegraphics[width=\textwidth,frame={\fboxrule} {-\fboxrule}]{tiger}
\end{minipage}
\end{document}

Don't include the minipage environments, they are just to show the effect while using \textwidth (that's reset in a minipage) and not having a huge picture of the result.

enter image description here

Defining a command for this kind of job is quite easy:

\newcommand{\twincludegraphics}[2][]{%
   \includegraphics[
     width=\dimexpr\textwidth-2\fboxrule,
     frame={\fboxrule},
     #1]{#2}%
}

so you can call

\twincludegraphics{tiger}

or

\twincludegraphics[<other options>]{tiger}

where <other options> might even countermand the default ones for special cases.