将图像缩放至整页,保持纵横比

将图像缩放至整页,保持纵横比

我有一张图片,想将其缩放到整个页面大小。我知道,我可以使用\includegraphics[width=\textwidth]{...}缩放图像到整个页面宽度(或者\rotatebox{90}{\includegraphics[height=\pagewidth]{...}}在需要将图像旋转 90 度的情况下)。但问题是我的图像占用的空间比页面高度还多。

我也尝试过\includegraphics[height=\textheight]并且确实有效,但是这会带来两个问题:

  1. 我必须猜测每幅图像的高度或宽度是否是限制因素,并且
  2. 没有更多空间用于图片标题。这意味着,除非我手动降低高度,否则我会得到一个过满的框,但我必须猜测每张图片的系数。

我真正想要的是,我希望尽可能地缩放此类图像,保持纵横比,但要足够小,以便标题也能适合页面。 有没有什么好方法可以实现这一点?

我正在使用该scrbook课程,这应该会有什么区别。

答案1

在此处输入图片描述

\documentclass{scrbook}
\usepackage{lscape,graphicx,ifthen,calc}

\newsavebox{\image}
\newlength{\MyLgth}

\def\CaptionRoom{30pt} % Empirically set

\makeatletter
\newcommand*{\DivideLengths}[2]{%
  \strip@pt\dimexpr\number\numexpr\number\dimexpr#1\relax*65536/\number\dimexpr#2\relax\relax sp\relax
}
\makeatother

\newcommand{\SetMyLght}[1]{%
    \sbox{\image}{\includegraphics[width=\linewidth]{#1}}%
    \ifthenelse{\lengthtest{\ht\image>\textheight}}{%
        \setlength{\MyLgth}{%
        \DivideLengths{\textheight-\CaptionRoom}{\ht\image}\linewidth}%
    }{%
        \setlength{\MyLgth}{\linewidth}%
    }%
}


\newcommand{\MyImage}[2][]{%
\sbox{\image}{\includegraphics{#2}}%
\ifthenelse{\lengthtest{\wd\image>\ht\image}}{%
\begin{landscape}%
    \SetMyLght{#2}%
    \begin{figure}[!ht]
    \hfill\includegraphics[width=\MyLgth]{#2}\hfill\strut%
    \caption{#1}
    \end{figure}
\end{landscape}
}{%
    \SetMyLght{#2}%
    \begin{figure}[!ht]
    \hfill\includegraphics[width=\MyLgth]{#2}\hfill\strut%
    \caption{#1}
    \end{figure}
}
}

\begin{document}

\MyImage[Why science teachers should not be given playground duty.]{sc-teacher}%

\MyImage[The Monkey selfie.]{monkey-selfie}

\end{document}

相关内容