如何将子图放在多行中

如何将子图放在多行中

基本上我需要 html 表中的 Rowspan 选项之类的东西。我希望图 3 和图 4 占据三行,我需要类似这样的布局:

|图 1 | 图 2 | | |
|图 5 | 图 6 | 图 3 | 图 4 |
|图 7 | 图 8 | | |

我如何获得此布局?

答案1

\documentclass{article}

\usepackage[demo]{graphicx}
\usepackage{subfig}
\usepackage{tabularx}

\begin{document}

\begin{figure}
\def\tabularxcolumn#1{m{#1}}
\begin{tabularx}{\linewidth}{@{}cXX@{}}
%
\begin{tabular}{cc}
\subfloat[A]{\includegraphics[width=2cm]{logo}} 
   & \subfloat[B]{\includegraphics[width=3cm]{logo}}\\
\subfloat[C]{\includegraphics[width=2cm]{logo}} 
   & \subfloat[D]{\includegraphics[width=3cm]{logo}}\\
\subfloat[E]{\includegraphics[width=2cm]{logo}} 
   & \subfloat[F]{\includegraphics[width=3cm]{logo}}\\
\end{tabular}
&
\subfloat[G]{\includegraphics[width=2cm,height=4cm]{logo}}
&
\subfloat[H]{\includegraphics[width=\linewidth]{logo}}
\end{tabularx}

\caption{Many figures}\label{foo}
\end{figure}

\end{document}

演示输出

答案2

补充一下 Leo Liu 的回答:由于图 3 和图 4 可能比其他图大,因此您还需要使用该multirow包来跨越多行。该包在垂直对齐方面存在很多问题,因此您需要\multirow手动调整命令的可选参数。

\documentclass{article}

\usepackage{graphicx}
\usepackage{subfig}
\usepackage{multirow}
\usepackage{array}

\begin{document}

\begin{figure}
\centering
\begin{tabular}{cccc}
\subfloat[A]{\includegraphics{logo}} & 
\subfloat[B]{\includegraphics{logo}} & 
\multirow{-3}[2.5]{*}{\subfloat[D]{\includegraphics[width=2cm,height=4cm]{logo}}} &
\multirow{-3}[-3]{*}{\subfloat[E]{\includegraphics[width=2cm,height=3cm]{logo}}} \\
\subfloat[E]{\includegraphics{logo}} & 
\subfloat[F]{\includegraphics{logo}}\\
\subfloat[G]{\includegraphics{logo}}&
\subfloat[H]{\includegraphics{logo}} \\
\end{tabular}
\caption{Many figures}
\end{figure}

\end{document}

具有跨行功能的子图

这是使用的图像文件(另存为logo.png


如果您想用大锤砸碎坚果,您也可以使用TikZ节点和矩阵。 Herbert 在评论中指出,这种方法对于给定的问题来说有点矫枉过正。 我将把它留在这里作为不该做什么的一个例子,也许可以作为可能出现的更复杂的子图布局挑战的模板,并证明使用这种“重型机器”是合理的。

\documentclass{article}

\usepackage{graphicx}
\usepackage{subfig}
\usepackage{tikz}
\usetikzlibrary{positioning}

\begin{document}
\captionsetup[subfloat]{farskip=0pt} % Remove the top glue from subfloats
\begin{figure}
\centering
\begin{tikzpicture}[every node/.style=inner sep=0pt]
\matrix [name=m,
cells={anchor=south},
column sep=0.8cm,row sep = 0.4cm]
{
\node (f1) {\subfloat[A]{\includegraphics{logo}} }; &
\node (f2) {\subfloat[B]{\includegraphics{logo}} }; \\
\setcounter{subfigure}{4}
\node (f5)  {\subfloat[E]{\includegraphics{logo}} }; &
\node (f6) {\subfloat[F]{\includegraphics{logo}} }; \\
\node (f7)  {\subfloat[G]{\includegraphics{logo}} }; &
\node (f8)  {\subfloat[H]{\includegraphics[width=4cm]{logo}} };  \\
};
\setcounter{subfigure}{2}
\node (f3) [right=.8cm of m] {\subfloat[C]{\includegraphics[height=4cm,width=2cm]{logo}} }; 
\node (f4) [right=.8cm of f3] {\subfloat[D]{\includegraphics[height=2cm,width=2cm]{logo}} }; 
\end{tikzpicture}

\caption{Many figures}
\end{figure}

\end{document}

使用 TikZ 放置的子图

答案3

你可以把它们放在一个tabular环境中。如果需要数字,你还必须更改计数器figure

\usepackage{array} % in preamble

\begin{figure}
\begin{tabular}{*{4}{>{\centering\arraybackslash}p{.2\textwidth}}}
one \caption{a} & two \caption{b} \\
\addtocounter{figure}{2}five \caption{b} & six \caption{b}
 & \addtocounter{figure}{-4}three \caption{b} & four \caption{b} \\
\addtocounter{figure}{2}
seven \caption{b} & eight \caption{b} \\
\end{tabular}
\end{figure}

相关内容