基本上我需要 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}
答案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}