我可以使用 graphicx 有条件地缩放图像吗

我可以使用 graphicx 有条件地缩放图像吗

具体来说,当我包含一个图形时,width=\linewidth如果它的宽度大于,我希望它具有,但如果它的宽度小于线宽,\linewidth我希望它具有。\scale=1

换句话说,如果我的图像不适合,我只想缩小它们。

我知道生成文档通常需要反复排版,但在创建不会发布的内部共享文档时,我并不太关心布局是否完美。我只希望第一次就做得不错,而不必担心反复排版。nally-share

答案1

\newcommand{\lwincludegraphics}[2][]{%
  \sbox{0}{\includegraphics[#1]{#2}}%
  \ifdim\wd0>\linewidth
    \resizebox{\linewidth}{!}{\box0 }%
  \else
    \leavevmode\box0
  \fi}

\lwincludegraphics随意使用\includegraphics

(与 Werner 的答案的相似性是显而易见的,但有一个允许在可选参数中设置的适当命令更好。)

答案2

您可以在图形中使用以下条件:

\documentclass{article}
\usepackage[showframe]{geometry}% http://ctan.org/pkg/geometry
\usepackage{graphicx}% http://ctan.org/pkg/graphicx
\usepackage{xifthen}% http://ctan.org/pkg/xifthen
\begin{document}
\begin{figure}
  \setbox0=\hbox{\includegraphics{tiger}}% Store image in box0
  \ifthenelse{\dimtest{\wd0}>{\linewidth}}%
    {\includegraphics[width=\linewidth]{tiger}}% Scale image to fit within \linewidth
    {\usebox0}% Use original (unaltered in width) image
  \caption{This is a tiger, rawr.}
\end{figure}
\end{document}

老虎图片

geometry包裹添加此设置只是为了通过showframe包选项突出显示页面尺寸。老虎的实际图像宽度550.68999pt> 430.004462pt= \linewidth

您还可以将上述代码组合成一个宏。例如,考虑以下宏\maxwidth[<max hlen>]{<stuff>}

\newcommand{\maxwidth}[2][\linewidth]{% \maxwidth[<max hlen>]{<stuff>}
  \setbox0=\hbox{#2}% Store image in box0
  \ifthenelse{\dimtest{\wd0}>{#1}}%
    {\resizebox{#1}{!}{#2}}% Scale object to fit within \linewidth
    {\usebox0}% Use original (unaltered in width) object
}

第一个(可选)参数<max hlen>指定对象的最大水平长度<stuff>(第二个强制参数)。如果没有<max hlen>指定,则默认值为\linewidth。您可以按以下方式使用它:

\maxwidth{\includegraphics{tiger}}

这将产生与上面相同的输出

相关内容