我想创建一个包含两张图片和一些文本的页面。这些图片会不时重新创建,这可能会导致不同的图片大小。我不想每次重新创建这些图片时都手动在我的 Latex 文档中设置它们的最大高度和宽度 - 那么有没有办法强制这些图片以最大可能的尺寸显示(因此两张图片都是其原始尺寸的 150% 或仅为其原始尺寸的 90%)
我尝试将它们放置在一个图形环境中,并设置它们的宽度和高度width=\textwidth,height=\textheight
并设置keepaspectratio
属性。
\newpage
\begin{figure}[ht]
\textbf{Title of the first image} \vspace*{10pt} \\
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{tmp/first.png}
\textbf{Title of the second imate} \vspace*{10pt} \\
\includegraphics[width=\textwidth,height=\textheight,keepaspectratio]{tmp/second.png}
\end{figure}
这导致它被强制放在一页上,但第二张图片太大并在底部被切断
有没有办法让 Latex 自动处理图像的大小?
答案1
我把两张图片都做得尽可能宽,如果太高就缩小。棘手的是决定每张图片缩小多少。
\documentclass[12pt]{article}
\usepackage{graphicx}
\usepackage{showframe,duckuments}% MWE only
\begin{document}
\begin{figure}[p]
\centering
\sbox0{\includegraphics[width=\textwidth]{example-image-duck}}
\sbox1{\includegraphics[width=\textwidth]{example-image-duck}}
\dimen0=\dimexpr 2\baselineskip+20pt\relax% height of text
\ifdim\textheight>\dimexpr \dimen0+\ht0+\ht1\relax% max width fits
\textbf{Title of the first image}\\[10pt]
\usebox0\par
\textbf{Title of the second image}\\[10pt]
\usebox1
\else
\dimen1=\dimexpr \dimen0+\ht0+\ht1-\textheight\relax% excess height
\ifdim\ht0>\dimexpr\ht1+\dimen1\relax% sbox0 is HUGE!
\textbf{Title of the first image}\\[10pt]
\resizebox{!}{\dimexpr \ht0-\dimen1}{\usebox0}\par
\textbf{Title of the second image}\\[10pt]
\usebox1
\else
\ifdim\ht1>\dimexpr\ht0+\dimen1\relax% sbox1 is HUGE!
\textbf{Title of the first image}\\[10pt]
\usebox0\par
\textbf{Title of the second image}\\[10pt]
\resizebox{!}{\dimexpr \ht1-\dimen1}{\usebox1}
\else% scale images proportionally
\dimen1=\dimexpr \textheight-\dimen0\relax
\dimen2=\dimexpr \ht0+\ht1\relax
\textbf{Title of the first image}\\[10pt]
\resizebox{!}{\dimexpr \dimen1*\ht0/\dimen2}{\usebox0}\par
\textbf{Title of the second image}\\[10pt]
\resizebox{!}{\dimexpr \dimen1*\ht1/\dimen2}{\usebox1}
\fi
\fi
\fi
\end{figure}
\end{document}
这使用具有不同纵横比的图像文件。