我有一张图片,想将其缩放到整个页面大小。我知道,我可以使用\includegraphics[width=\textwidth]{...}
缩放图像到整个页面宽度(或者\rotatebox{90}{\includegraphics[height=\pagewidth]{...}}
在需要将图像旋转 90 度的情况下)。但问题是我的图像占用的空间比页面高度还多。
我也尝试过\includegraphics[height=\textheight]
并且确实有效,但是这会带来两个问题:
- 我必须猜测每幅图像的高度或宽度是否是限制因素,并且
- 没有更多空间用于图片标题。这意味着,除非我手动降低高度,否则我会得到一个过满的框,但我必须猜测每张图片的系数。
我真正想要的是,我希望尽可能地缩放此类图像,保持纵横比,但要足够小,以便标题也能适合页面。 有没有什么好方法可以实现这一点?
我正在使用该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}