我认为这种方法可行,adjustbox
但不确定。伪代码:
- 如果高度超出,则将图像顺时针旋转 90 度,现在对所有图像应用宽度约束
\linewidth
在任何情况下都不要传递最大宽度 (= )。
换句话说,preudocode
- 如果图像原本太高,则将其旋转 90 度,这样最大尺寸现在就是宽度。将宽度缩放至
width=\linewidth
。
伪代码
\documentclass{article}
\usepackage{graphicx}
\begin{document}
\begin{figure}
% If image height overfull, rotate the image 90 degree clockwise. Apply now to it width constaint.
\includegraphics[if HEIGHT overfull, rotate 90 degree clockwise; width=\linewidth]{1.jpg}
\end{figure}
\end{document}
答案1
以下是您可以遵循的一般方法:
\documentclass{article}
\usepackage{graphicx}
\newsavebox{\imgbox}
\begin{document}
\begin{figure}
\savebox{\imgbox}{% Store image in a box
\includegraphics[height=<h>,width=<w>,keepaspectratio]{example-image}}%
\ifdim\ht\imgbox > <H>
% Do something to the box
\else
\usebox{\imgbox}%
\fi
\end{figure}
\end{document}
本质上,您需要根据所包含图像的大小进行调整。如果图像太高(或太宽),您可能需要以其他方式处理它。因此,您可以将图像存储在一个框中(例如),然后您可以根据其他尺寸\imgbox
测试高度(\ht\imgbox
或宽度) 。\wd\imgbox
具体到您的应用程序,您可以执行以下操作:
\begin{figure}
\savebox{\imgbox}{% Store image in a box
\includegraphics[height=\textheight,width=\linewidth,keepaspectratio]{example-image}}%
\ifdim\ht\imgbox > \textheight
\resizebox{\linewidth}{!}{\rotatebox{90}{\includegraphics{example-image}}}%
\else
\usebox{\imgbox}% Use resized image as-is
% \resizebox{\linewidth}{!}{\usebox{\imgbox}}% ...maybe resize to fit width
\fi
\end{figure}
答案2
以下操作能满足您的要求吗?第一个法线\includegraphics
会产生溢出\vbox
(由于图像移到了第二页,因此在空白的第一页上可以看到),而\includegraphicsoptrotate
旋转图像(并将其缩小到\textwidth
)。
\documentclass{article}
\usepackage{graphicx}
\newlength\graphicsheight
\newcommand\includegraphicsoptrotate[1][]%
{\settowidth\graphicsheight{\includegraphics[#1]{#2}}%
\ifdim\graphicsheight>\textheight
\includegraphics[#1,height=\linewidth,angle=90,origin=c]{#2}%
\else
\includegraphics[#1,width=\linewidth]{#2}%
\fi
}
\begin{document}
\noindent
\includegraphics[scale=2]{example-image-a}
\noindent
\includegraphicsoptrotate[scale=2]{example-image-a}
\end{document}