缩放图像,使宽度和高度均不受限制

缩放图像,使宽度和高度均不受限制

当使用大于文本区域的图像时,我想缩放它们,但同时考虑宽度和高度。问题恰好出现在宽度和高度都是禁止的。在这里,我必须确定哪一个更大,然后缩放它,因此这个过程也会影响另一个,并且图像将完美地适合文本区域。

我尝试了几种方法来解决这个问题。例如:(我正在使用calc包)

\makeatletter
\def\ScaleThisP{%
    \ifdim\Gin@nat@width>\Gin@nat@height
        \ifdim\Gin@nat@width>\textwidth
            \textwidth
        \else
            \Gin@nat@width
        \fi
    \else
        \ifdim\Gin@nat@height>\textheight
            \Gin@nat@width/{\Gin@nat@height/{\textheight}}
        \else
            \Gin@nat@height
        \fi
    \fi
}
\makeatother

...

\includegraphics[width=\ScaleThisP]{myfig.jpg}

结果(始终认为宽度和高度大于文本区域)是:

  • 情况 1:宽度 > 高度 | 正常工作!

  • 情况 2:高度 > 宽度 | 什么都不显示。根本没有包含任何图像!

如果您注意到,我正在使用宽度来缩放,因为如果我使用比例属性\includegraphics,它会出现错误。

我尝试了许多其他方法,但没有人能给出我想要的结果。我认为问题出在我执行计算的那一行:

\Gin@nat@width/{\Gin@nat@height/{\textheight}}

如果我将其替换为,例如,

.5\textwidth

它显示缩小的图像并保持纵横比(所以,我知道它有效……有点)。有人能帮我解决这个问题吗?我不知道还能做什么,也许可以使用包xifthen

答案1

忽略你问的问题,有一个简单的解决方案,你的实际问题:\includegraphics有一个可选参数keepaspectratio,(引用手册),

如果设置为 true,则指定 widthheight(或 totalheight)不会扭曲图形,但会按比例缩放,以使指定的尺寸均不超过。

因此,你可以简单地写

\includegraphics[height=5cm,width=.5\textwidth,keepaspectratio]{some_image.jpg}

相关内容