我希望我的图形的子图能够像这样排列:
,---, ,---,
| | '---'
| | (b)
| | ,---,
'---' '---'
(a) (c)
我希望底部两幅图像垂直对齐,右边两幅图像水平对齐。
我一直在尝试使用 subfigure 和 minipage 的组合,但无济于事:
\documentclass{article}
\usepackage{graphicx,caption,subcaption}
\usepackage{lipsum}
\begin{document}
\begin{figure}
\centering
\begin{minipage}[t]{.45\columnwidth}
\begin{subfigure}[t]{\columnwidth}
\includegraphics[width=.9\columnwidth,height=\columnwidth]{example-image-a}
\caption{}
\end{subfigure}
\end{minipage}
\begin{minipage}[t]{.45\columnwidth}
\begin{subfigure}[t]{\columnwidth}
\centering
\includegraphics[width=.9\columnwidth,height=.5\columnwidth]{example-image-b}
\caption{}
\end{subfigure}
\begin{subfigure}[b]{\columnwidth}
\includegraphics[width=.9\columnwidth,height=.5\columnwidth]{example-image-c}
\caption{}
\end{subfigure}
\end{minipage}
\end{figure}
\end{document}
生成:
,---,
| |
| |
| | ,---,
'---' '---'
(a) (b)
,---,
'---'
(c)
答案1
两种解决方案,一种是使用测量方法,另一种是将任务留给 TeX。
\documentclass[twocolumn]{article}
\usepackage{graphicx,caption,subcaption}
\usepackage{lipsum}
\newsavebox{\arrangebox}
\newlength{\arrangeht}
\begin{document}
\lipsum[2]
\begin{figure}[htp]
\centering
\sbox{\arrangebox}{%
\begin{subfigure}[b]{0.45\columnwidth}
\centering
\includegraphics[width=.9\textwidth,height=6cm]{example-image}
\caption{}
\end{subfigure}%
}
\setlength{\arrangeht}{\ht\arrangebox}
\usebox{\arrangebox}\hfill
\begin{minipage}[b][\arrangeht][s]{0.45\columnwidth}
\begin{subfigure}[t]{\textwidth}
\centering
\includegraphics[width=.9\textwidth,height=2cm]{example-image}
\caption{}
\end{subfigure}\vfill
\begin{subfigure}[b]{\textwidth}
\centering
\includegraphics[width=.9\textwidth,height=2cm]{example-image}
\caption{}
\end{subfigure}
\end{minipage}
\end{figure}
\lipsum[3]
\begin{figure}[htp]
\centering
\valign{#\cr
\hsize=0.45\columnwidth
\begin{subfigure}{0.45\columnwidth}
\centering
\includegraphics[width=.9\textwidth,height=6cm]{example-image}
\caption{}
\end{subfigure}\cr\noalign{\hfill}
\hsize=0.45\columnwidth
\begin{subfigure}{0.45\columnwidth}
\centering
\includegraphics[width=.9\textwidth,height=2cm]{example-image}
\caption{}
\end{subfigure}\vfill
\begin{subfigure}{0.45\columnwidth}
\centering
\includegraphics[width=.9\textwidth,height=2cm]{example-image}
\caption{}
\end{subfigure}\cr
}
\end{figure}
\lipsum
\end{document}
第一个解决方案是首先测量大图形的高度,以及它的子标题(定位[b]
)。
右半部分设置在minipage
规定高度与左框相同的位置:
\begin{minipage}[<outer alignment>][<height>][<inner alignment>]
这里<inner alignment>
的 是s
,这意味着只使用显式跳过来间隔项目;在本例中,它是\vfill
两个子图之间的 。<outer alignment>
与左侧子图相同,即b
。
设置<height>
为\ht\arrangebox
,即保存的框的高度。然后该框用于排版左侧子图。
第二种解决方案更加深奥,因为它依赖于一些基本的 TeX 构造的知识,特别是\valign
。我将把它放入 LaTeX 环境中。
您将传递subcolumns
每列的宽度。同一列中的子图以\nextsubfigure
; 分隔,\nextsubcolumn
下一列开始。
优点是可以尽可能多的列和子图随心所欲。例如,第一列为 2,第二列为 3,或其他。
\documentclass[twocolumn]{article}
\usepackage{graphicx,caption,subcaption}
\usepackage{lipsum}
% for the first solution
\newsavebox{\arrangebox}
\newlength{\arrangeht}
% for the second solution
\newenvironment{subcolumns}[1]
{\valign\bgroup\hsize=#1##\cr}
{\crcr\egroup}
\newcommand{\nextsubcolumn}{\cr\noalign{\hfill}}
\newcommand{\nextsubfigure}{\vfill}
\begin{document}
\lipsum[2]
\begin{figure}[htp]
\centering
\sbox{\arrangebox}{%
\begin{subfigure}[b]{0.45\columnwidth}
\centering
\includegraphics[width=.9\textwidth,height=6cm]{example-image}
\caption{}
\end{subfigure}%
}
\setlength{\arrangeht}{\ht\arrangebox}
\usebox{\arrangebox}\hfill
\begin{minipage}[b][\arrangeht][s]{0.45\columnwidth}
\begin{subfigure}[t]{\textwidth}
\centering
\includegraphics[width=.9\textwidth,height=2cm]{example-image}
\caption{}
\end{subfigure}\vfil
\begin{subfigure}[b]{\textwidth}
\centering
\includegraphics[width=.9\textwidth,height=2cm]{example-image}
\caption{}
\end{subfigure}
\end{minipage}
\end{figure}
\lipsum[3]
\begin{figure}[htp]
\centering
\begin{subcolumns}{0.45\columnwidth}
\begin{subfigure}{0.45\columnwidth}
\centering
\includegraphics[width=.9\textwidth,height=6cm]{example-image}
\caption{}
\end{subfigure}
\nextsubcolumn
\begin{subfigure}{0.45\columnwidth}
\centering
\includegraphics[width=.9\textwidth,height=2cm]{example-image}
\caption{}
\end{subfigure}
\nextsubfigure
\begin{subfigure}{0.45\columnwidth}
\centering
\includegraphics[width=.9\textwidth,height=2cm]{example-image}
\caption{}
\end{subfigure}
\end{subcolumns}
\end{figure}
\lipsum
\end{document}
答案2
raster
使用来自的库的解决方案tcolorbox
。
我将右侧的两张图片放在一个一列的环境中,这样这两张图片就互相叠在一起了。我为第一张图片设置了高度,为第二张raster
图片设置了宽度(as )。我还用它来模仿古典和实用风格。\linewidth
\subcaptionbox
\caption
\label
这个raster
环境本身是另一个环境的第二个元素,raster
我将左侧的大图片放在该环境中。它的高度是通过\myspace
计算嵌套的总高度得出的raster
,这要归功于选项raster equal height=rows
(一行上的元素将具有相同的高度)。
如果尺寸不匹配,您可以尝试其他设置。请参阅tcolorbox
文档(图书馆栅格大约第 277 页……)
您需要至少编译两次以确保正确调整框。
\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{tcolorbox}
\tcbuselibrary{most}
\usepackage{subcaption}
\usepackage{cleveref}
\begin{document}
\begin{figure}
\begin{tcbitemize}[raster equal height=rows,
raster every box/.style=blankest]
\tcbitem[space to=\myspace]
\subcaptionbox{Sub1\label{fig:A}}{\includegraphics[height=\myspace,width=\linewidth]{figA}}
\tcbitem
\begin{tcbitemize}[raster columns=1]
\tcbitem \centering\subcaptionbox{Sub2}{\includegraphics[height=5cm]{figB}}
\tcbitem \subcaptionbox{Sub3}{\includegraphics[width=\linewidth]{figC}}
\end{tcbitemize}
\end{tcbitemize}
\caption{Figure}
\label{fig:F}
\end{figure}
See \cref{fig:F}, \cref{fig:A}.
\end{document}
答案3
您已经表示您还没有准备好应对复杂的解决方案,因此这个答案是一个捷径的例子,因为它避免了复杂性,所以需要稍微调整一下才能得到正确的外观。当我面临最后期限时,我常常会感激这样的解决方案。
\documentclass[10pt]{article}
\usepackage[paperwidth=11cm,paperheight=15cm,margin=1.5cm]{geometry}
\usepackage{graphicx,subcaption}
\begin{document}
\noindent The preceding line.
\begin{figure}[htp]
\centering
\begin{subfigure}{.45\columnwidth}
\includegraphics[width=3cm,height=8cm]{example-image-a}
\caption{}
\end{subfigure}
\begin{minipage}[s][6.87cm]{.45\columnwidth}
\begin{subfigure}{\columnwidth}
\includegraphics[width=3cm,height=3cm]{example-image-b}
\caption{}
\end{subfigure}
\vfil
\begin{subfigure}{\columnwidth}
\includegraphics[width=3cm,height=3cm]{example-image-c}
\caption{}
\end{subfigure}
\end{minipage}
\end{figure}
\noindent The following line.
\end{document}
第一个subfigure
不需要minipage
,因为 之后没有自动换行符。右边的subfigure
两个用 隔开, 对齐。的高度需要猜测。尝试一个明显太小的值,然后逐步增加。我没花很长时间就得到了这里使用的高度。subfigures
\vfil
minipage
[s]
minipage
警告:还有更复杂的解决方案,但并不是每个使用 LaTeX 的人都想成为 LaTeX 专家。即便如此,随着你对 LaTeX 越来越熟悉,你可能希望在以后尝试更复杂的解决方案。