我想将四个子图排列成一个 2×2 的网格,其中网格元素的高度各不相同;如下所示:
|------| |----------|
|------| |----------|
|------| |----------|
|------| c)
|------|
|------| |----------|
|------| |----------|
a) |----------|
|----------|
|------| |----------|
|------| |----------|
|------| |----------|
b) d)
这可能吗?我尝试适应此解决方案对于类似的问题,但无法让它满足我的复杂要求。
更新
看到一些非常有用的答案后,我意识到我没有准确说明我的要求。特别是,每列的高度总和不相等。因此,我想对齐每列的基数,如下所示:
|------|
|------| |----------|
|------| |----------|
|------| |----------|
|------| c)
|------|
|------| |----------|
a) |----------|
|----------|
|------| |----------|
|------| |----------|
|------| |----------|
b) d)
答案1
应用链接的解决方案实际上非常简单 - 只需添加所需的高度:
\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{subcaption}
\begin{document}
\begin{figure}[ht]
\centering
\parbox{\textwidth}{
\parbox{.3\textwidth}{%
\subcaptionbox{}{\includegraphics[width=\hsize, height=4cm]{imageA}}
\vskip1em
\subcaptionbox{}{\includegraphics[width=\hsize, height=2cm]{imageB}}
}
\hskip1em
\parbox{.3\textwidth}{%
\subcaptionbox{}{\includegraphics[width=\hsize, height=2cm]{imageC}}
\vskip1em
\subcaptionbox{}{\includegraphics[width=\hsize, height=4cm]{imageD}}
}
}
\end{figure}
\end{document}
编辑:如果要对齐柱子的底部,可以通过指定 parbox 的垂直对齐来实现:
\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{subcaption}
\begin{document}
\begin{figure}[ht]
\centering
\parbox{\textwidth}{
\parbox[b]{.3\textwidth}{%
\subcaptionbox{}{\includegraphics[width=\hsize, height=4cm]{imageA}}
\vskip1em
\subcaptionbox{}{\includegraphics[width=\hsize, height=2cm]{imageB}}
}
\hskip1em
\parbox[b]{.3\textwidth}{%
\subcaptionbox{}{\includegraphics[width=\hsize, height=2cm]{imageC}}
\vskip1em
\subcaptionbox{}{\includegraphics[width=\hsize, height=4cm]{imageD}}
}
}
\end{figure}
\end{document}
答案2
这是在最右侧列图像上使用小页面环境的解决方案。
\documentclass[]{article}
\usepackage[]{subfig}
\usepackage[demo]{graphicx}
\begin{document}
\begin{figure}
\centering
\subfloat[][]{\includegraphics[width=3cm,height=8cm]{imageA}}\quad
\begin{minipage}[t]{4cm}
\vspace{-8cm}
\subfloat[][]{\includegraphics[width=4cm,height=4cm]{imageA}}
\end{minipage}\\[12pt]
\subfloat[][]{\includegraphics[width=3cm,height=2cm]{imageA}}
\quad
\begin{minipage}[t]{4cm}
\vspace{-6cm}
\subfloat[][]{\includegraphics[width=4cm,height=6cm]{imageA}}
\end{minipage}
\end{figure}
\end{document}
答案3
使用 可以很容易地获得此布局\valign
。
该命令\subcaptionpartial
的语法为
\subcaptionpartial[<list entry>]{<subcaption>}{<image>}
并且,与 一样\subcaptionbox
,\label
应该放在第一个强制参数中。如果缺失,则可选参数将被视为与 的第一个强制参数相同,与 一样\caption
。
\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\usepackage{xparse}
\NewDocumentEnvironment{subcaptioncolumns}{}
{\def\\{\unskip\unskip\cr\noalign{\hspace{1em}}}\valign\bgroup\vfil##\cr}
{\unskip\unskip\crcr\egroup}
\NewDocumentCommand{\subcaptionpartial}{O{#2}mm}{%
\hbox{\subcaptionbox[#1]{#2}{#3}}\medskip
}
\begin{document}
\begin{figure}
\centering
\begin{subcaptioncolumns}
\subcaptionpartial{\label{one}}{%
\includegraphics[width=4cm,height=6cm]{example-image}%
}
\subcaptionpartial{\label{two}}{%
\includegraphics[width=4cm,height=3cm]{example-image}%
}
\\
\subcaptionpartial{\label{three}}{%
\includegraphics[width=4cm,height=4cm]{example-image}%
}
\subcaptionpartial{\label{four}}{%
\includegraphics[width=4cm,height=4cm]{example-image}%
}
\end{subcaptioncolumns}
\caption{Whatever}\label{full}
\end{figure}
\end{document}