includegraphics 中的框架选项使 \hbox 溢出

includegraphics 中的框架选项使 \hbox 溢出

我正在使用调整frame包在命令中添加选项\includegraphics。包的加载方式如下:

\usepackage[export]{adjustbox}

现在我可以编写以下命令:

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

并且边框将自动添加到图像中。

不幸的是,使用此选项时,我收到了众所周知的overfull \hbox (.. too wide) in paragraph警告。如果没有此frame选项,警告就会消失。

是否存在使用该选项来消除此警告的方法frame

答案1

您可以这样做;在第二个和第三个示例之间选择哪一个取决于您的品味以及图片所包含的内容。

frame选项绘制一个具有宽度规则的框架\fboxrule(默认情况下),并且框架和框之间的间距为零。但是规则宽度会添加到框的宽度中,因此您必须对此采取一些措施:要么稍微减小框的宽度,要么通过指定负间隔(选项的第二个参数)在框内绘制框架frame

\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}

不包括minipage环境,它们只是为了显示使用时的效果\textwidth(在 a 中重置minipage),而不是显示结果的大图。

在此处输入图片描述

为这种工作定义一个命令非常容易:

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

所以你可以打电话

\twincludegraphics{tiger}

或者

\twincludegraphics[<other options>]{tiger}

甚至<other options>可能在特殊情况下取消默认设置。

答案2

你不说你想要发生什么,没有adjustbox那么

\frame{\includegraphics[width=\textwidth]{...}}

将制作一个覆盖图像边缘的框架,因此最终的组合仍然很\textwidth宽,适合页面

\fbox{\includegraphics[width=\textwidth]{...}}

将在图像外部形成边框,因此生成的组合比每边的填充和边框的宽度要宽,因此您需要

\fbox{\includegraphics[width=\dimexpr\textwidth-2\fboxsep-2\fboxrule\relax]{...}}

因此产生的组合范围很\textwidth广。

或者你可能希望图片占满整个宽度,边框在边缘

\hspace*{\dimexpr-\fboxsep-\fboxrule}%
\fbox{\includegraphics[width=\textwidth]{...}}%
\hspace*{\dimexpr-\fboxsep-\fboxrule}%

相关内容