为了得到由两张不同大小的图片组成的图形自动缩放至相同高度和整个文本宽度,只有一个标题,我尝试改编一些例子浮行包。不幸的是,如下面的 MWE 所示,结果并不令人满意。在一个案例中,标题缺失,在另一个案例中,两幅图像之间没有分隔。
\documentclass{article}
\usepackage{mwe}
\usepackage{floatrow}
\begin{document}
\begin{figure}[htb]
\CommonHeightRow{\begin{floatrow}
\ffigbox[\FBwidth]{\includegraphics[height=\CommonHeight]{example-image-16x10}}{}
\ffigbox[\FBwidth]{\includegraphics[height=\CommonHeight]{example-image-10x16}}{}
\end{floatrow}}
\caption{This is a caption.}
\end{figure}
\blindtext
\begin{figure}[htb]
\CommonHeightRow{\begin{floatrow}
\ffigbox[\FBwidth]{\includegraphics[height=\CommonHeight]{example-image-16x10}}{\includegraphics[height=\CommonHeight]{example-image-10x16}}
\end{floatrow}}
\caption{This is a caption.}
\end{figure}
\end{document}
我知道有很多方法可以得到想要的结果,但除了浮行, 能够自动缩放两个不同尺寸的图像具有相同的高度和全文宽度。
在此先感谢您的帮助。
跟进
总而言之,一个很好的解决方案自动缩放双图像图形这还让你选择总宽度(以下代码片段中文本宽度的 90%)可以
\newlength\mylength
\begin{adjustbox}{width=0.9\textwidth,center=\textwidth,caption={This is a caption.},label={some:label},figure=htb}
\adjustimage{gstore height=\mylength}{example-image-16x10}%
\hspace{1em}%
\adjustimage{height=\mylength}{example-image-10x16}%
\end{adjustbox}%
唯一的缺点是图像之间的间隔会根据图像的长宽比略有变化(欢迎其他解决此缺点的解决方案!)。如果您绝对想要固定的间隔,您可以坚持使用更传统的解决方案,其中您必须手动设置高度,通常通过迭代尝试:
\begin{figure}[htb]
\centering
\includegraphics[height=0.4\textwidth]{example-image-16x10}%
\hspace{1em}%
\includegraphics[height=0.4\textwidth]{example-image-10x16}%
\caption{This is a caption.}%
\label{some:label}%
\end{figure}
答案1
您可以使用adjustbox
包来实现这一点。只需使用gstore height
存储第一幅图像的原始高度,将第二幅图像的高度缩放到它的高度,然后将整个图像缩放到所需的宽度。使用\hspace
获取图像之间的一些距离(但是会缩放!)。
figure
您甚至可以使用figure
外部的键来摆脱环境adjustbox
。
\documentclass{article}
\usepackage{adjustbox}
\usepackage{lipsum}
\newlength\mylength
\begin{document}
\lipsum
\begin{figure}[htb]
\begin{adjustbox}{width=\linewidth}
\adjustimage{gstore height=\mylength}{example-image-16x10}%
\hspace{1em}%
\adjustimage{height=\mylength}{example-image-10x16}%
\end{adjustbox}
\caption{This is a caption.}
\end{figure}
\lipsum
\begin{adjustbox}{width=\linewidth,rotate=0,caption={This is a caption},figure=htb}
\adjustimage{gstore height=\mylength}{example-image-16x10}%
\hspace{1em}%
\adjustimage{height=\mylength}{example-image-10x16}%
\end{adjustbox}
% Note the `rotate=0` key is required for `adjustbox` v1.0 to enforce the resizing to happen before the `figure` environment is applied, not after. Starting with v1.1 this is done automatically.
\lipsum
\end{document}
答案2
也许使用adjustbox
会是一个解决方法?
\documentclass{article}
\usepackage{graphicx}
\usepackage{adjustbox}
\begin{document}
\begin{figure}[htbp]
\begin{adjustbox}{width=\linewidth}
\includegraphics[height=1cm]{example-image}
\includegraphics[height=1cm]{example-image-16x10}
\end{adjustbox}
\caption{caption}
\end{figure}
\end{document}
缺点:如果您的图像不包含空白,则必须手动在图像之间插入空格,例如使用\quad
或\hspace{...}
。此空间也将按比例缩放,因此不同图像可能会有所不同。
答案3
最后我还找到了一个使用该floatrow
包的解决方案,这里是MWE:
\documentclass{article}
\usepackage{mwe}
\usepackage{floatrow}
\usepackage{subcaption}
\begin{document}
\blindtext
\begin{figure*}[htbp]
\ffigbox[1.0\linewidth]{}{\CommonHeightRow{\begin{subfloatrow}[2]% this comment needed, otherwise an unprotected space shifts slightly the figure to the right
\ffigbox[\FBwidth]{\includegraphics[height=\CommonHeight]{example-image-10x16}}{\label{fig:01a}}
\ffigbox[\FBwidth]{\includegraphics[height=\CommonHeight]{example-image-16x10}}{\label{fig:01b}}
\end{subfloatrow}}
\caption{A figure caption.}\label{fig:01a+01b}}
\end{figure*}
\blindtext
\end{document}
总宽度可以通过更改1.0\linewidth
为任意分数来设置。
这个解决方案很有趣,因为使用相同的floatrow
包,你可以自动缩放带或不带子标题的多个图像/图形的多种组合,例如这个和这个。