我想要两张图片放在另一张大图片旁边,并且每张图片都有不同的大小(如下面的例子)。
我希望所有图片都保持其纵横比,并且右侧的图片应具有相同的高度。另外,所有 3 张图片的宽度应与 一样宽\textwidth
。
我尝试过subfigure
和\resizebox
,但无法根据左图的高度设置正确的高度。手动尝试适应所有尺寸太繁琐了,有没有简单的方法可以做到这一点?
编辑:以下是有关我的问题的更多信息。我当前的代码如下所示。我刚刚调整了图片的大小,直到它们适合(试验结束错误)。这是一个非常繁琐的过程。
图片有(a)、(b)和(c)单独的标题,整张图片还有另一个标题。
最好管理右侧图片的尺寸,使它们不大于左侧图片,并且所有 3 张图片均不超过线宽。
\begin{figure}[H]
\centering
\begin{subfigure}[p]{.45\textwidth}
\includegraphics[height=\textheight]{MMC.eps}
\caption{MMC Schaltbild, \cite{Eremia.2016}} \label{fig:ch2_MMC
\end{subfigure}
\qquad
\begin{subfigure}[p]{.45\textwidth}
\centering
\includegraphics[height=0.39\textheight]{Halfbridge.eps}
\caption{Halfbridge, \cite{Shah.17.07.201621.07.2016}} \label{fig:ch2_Halfbridge}
\vspace{2ex}
\includegraphics[height=0.39\textheight]{Fullbridge.eps}
\caption{Fullbridge, \cite{Shah.17.07.201621.07.2016}} \label{fig:ch2_Fullfbridge}
\end{subfigure}
\caption{MMC and Submodule}\end{figure}
答案1
如果我们表示为
- A和b左边图片的宽度和高度,
- C和d右上角图片的宽度和高度,
- 埃和F右下角图片的宽度和高度,
- 五右边图片之间的差距,
- 瓦所需的总宽度(略小于
\textwidth
),
我们可以用X,是和是为三幅图(左图、右上图和右下图)计算所需的比例因子。然后求解线性系统可得出
X=(2防火墙+埃弗)/(是+ 2自动对焦)
是= (百福-装甲车辆)/(溴化乙烷+ 2自动对焦)
是= (体重-AV)/(是+ 2自动对焦)
明显的限制是第二和第三个比例因子是正的。
这是一个实现。
\documentclass{article}
\usepackage{graphicx,xfp}
\begin{document}
\begin{figure}
\sbox0{\includegraphics{example-image-a}}
\sbox2{\includegraphics{example-image-1x1}}
\sbox4{\includegraphics{example-image-b}}
\edef\Da{\fpeval{\wd0}}\edef\Db{\fpeval{\ht0}}
\edef\Dc{\fpeval{\wd2}}\edef\Dd{\fpeval{\ht2}}
\edef\De{\fpeval{\wd4}}\edef\Df{\fpeval{\ht4}}
\edef\Dv{\fpeval{8ex}}
\edef\Dw{\fpeval{\textwidth-3em}}
\edef\Dx{\fpeval{(2*\Df*\Dw + \De*\Dv)/(\Db*\De + 2*\Da*\Df)}}
\edef\Dy{\fpeval{(\Db*\Df*\Dw - \Da*\Df*\Dv)/(\Db*\Dd*\De + 2*\Da*\Dd*\Df)}}
\edef\Dz{\fpeval{(\Db*\Dw - \Da*\Dv)/(\Db*\De + 2*\Da*\Df)}}
\sbox{0}{%
\begin{minipage}[b]{\fpeval{\Da*\Dx}pt}
\vspace{0pt}
\scalebox{\Dx}{\box0}
\caption{First pic}
\end{minipage}%
}\usebox{0}\hfill
\begin{minipage}[b][\ht0][s]{\fpeval{\Dw-\Da*\Dx}pt}
\centering
\vspace{0pt}
\scalebox{\Dy}{\box2}
\caption{Second pic}
\vfill
\scalebox{\Dz}{\box4}
\caption{Third pic}
\end{minipage}
\end{figure}
\end{document}
如果您想要子图,请minipage
用替换subfigure
。
\documentclass{article}
\usepackage{graphicx,xfp,subcaption}
\begin{document}
\begin{figure}
\sbox0{\includegraphics{example-image-a}}
\sbox2{\includegraphics{example-image-1x1}}
\sbox4{\includegraphics{example-image-b}}
\edef\Da{\fpeval{\wd0}}\edef\Db{\fpeval{\ht0}}
\edef\Dc{\fpeval{\wd2}}\edef\Dd{\fpeval{\ht2}}
\edef\De{\fpeval{\wd4}}\edef\Df{\fpeval{\ht4}}
\edef\Dv{\fpeval{8ex}}
\edef\Dw{\fpeval{\textwidth-3em}}
\edef\Dx{\fpeval{(2*\Df*\Dw + \De*\Dv)/(\Db*\De + 2*\Da*\Df)}}
\edef\Dy{\fpeval{(\Db*\Df*\Dw - \Da*\Df*\Dv)/(\Db*\Dd*\De + 2*\Da*\Dd*\Df)}}
\edef\Dz{\fpeval{(\Db*\Dw - \Da*\Dv)/(\Db*\De + 2*\Da*\Df)}}
\sbox{0}{%
\begin{subfigure}[b]{\fpeval{\Da*\Dx}pt}
\vspace{0pt}
\scalebox{\Dx}{\box0}
\caption{First pic}
\end{subfigure}%
}\usebox{0}\hfill
\begin{subfigure}[b][\ht0][s]{\fpeval{\Dw-\Da*\Dx}pt}
\centering
\vspace{0pt}
\scalebox{\Dy}{\box2}
\caption{Second pic}
\vfill
\scalebox{\Dz}{\box4}
\caption{Third pic}
\end{subfigure}
\caption{Global caption}
\end{figure}
\end{document}
答案2
@egreg 解决方案——https://tex.stackexchange.com/a/87976/197451
您可以使用一些小型页面环境并\sbox
测量最大框的高度。
请注意,我使用的是subfig
而不是过时的subfigure
。subcaption
如果您使用 ,也可以选择hyperref
。
选择demo
只是graphicx
制作一些模拟图片;我给了他们一个高度来展示示例。
\documentclass{article}
\usepackage{subfig}
\documentclass{article}
\usepackage{subfig}
\usepackage[demo]{graphicx}
\newsavebox{\measurebox}
\begin{document}
\begin{figure}
\centering
\sbox{\measurebox}{%
\begin{minipage}[b]{.33\textwidth}
\subfloat
[]
{\label{fig:figA}\includegraphics[width=\textwidth,height=5cm]{figA}}
\end{minipage}}
\usebox{\measurebox}\qquad
\begin{minipage}[b][\ht\measurebox][s]{.33\textwidth}
\centering
\subfloat
[]
{\label{fig:figB}\includegraphics[width=\textwidth,height=2cm]{figB}}
\vfill
\subfloat
[]
{\label{fig:figC}\includegraphics[width=\textwidth,height=2cm]{figC}}
\end{minipage}
\caption{my caption. (a) is .... (b) is .... (c) is ....}
\label{fig:Test}
\end{figure}
\end{document}