你可能见过的相关的有:subfigure,sub­fig,sub­cap­tion,subfloat,minipage,subcaptionbox

上面这些里其实混杂了 package and command and environment;可以补充的小知识是: \usepackage{} 括号里的就是 package\includegraphics 这样的就是 command\begin{} 括号里的就是 environment。所以上面分别是什么下面会再讲解到。

我们先看 package

  • subfigure 很老了,已经完全被淘汰了,由 sub­fig 取代。subfighyperref 搭配使用会有点小问题,但不要紧。
  • subfigsubfigure不能同时加载,会冲突
  • sub­cap­tion 是最新的,但和 subfigsubfigure 不兼容

接着 package 看对应的用法,既包括了 command 也包括了 environment

淘汰了的我们就不看了,先看 subfig文档参考,它的主命令是 \subfloat,所以最简单的用法为

\begin{figure*}[ht]
\centering
	\subfloat[subcaption1]{\includegraphics[width = 0.3\textwidth]{img}}
	\hfill
	\subfloat[subcaption2]{\includegraphics[width = 0.3\textwidth]{img}}
	\hfill
	\subfloat[subcaption3]{\includegraphics[width = 0.3\textwidth]{img}} 
\caption{caption}
\label{fig:label}
\end{figure*}

加上 \hfill 是为了让多幅图在一行均匀分布(不加的效果是都挤在中间),也可以加 \hspace{10mm} 手动调节。另外 \begin{figure*} 这个*表示双栏会合并成单栏显示图片(单栏模板就没有区别了)。为了方便更改模板,建议想要大图的使用带*的。

再看 sub­cap­tion文档参考,它的主命令是 \subcaptionbox,最简单的用法为

\begin{figure*}
\centering
	\subcaptionbox{subcaption1}{\includegraphics[width = 0.3\textwidth]{img}}
	\hfill
	\subcaptionbox{subcaption2}{\includegraphics[width = 0.3\textwidth]{img}}
	\hfill
	\subcaptionbox{subcaption3}{\includegraphics[width = 0.3\textwidth]{img}} 
\caption{caption}
\label{fig:label}
\end{figure*}

然后它还有一个 环境 是 subfigure,和 minpage 一样(所以在这里我也就不介绍minpage用法了,替换一下名字就行),可以使用同样的参数,最简单的用法为

\begin{figure*}
	\begin{subfigure}[b]{0.3\textwidth}
	\centering
	\includegraphics[width = 0.3\textwidth]{img}
	\caption{subcaption1}
	\label{fig:label1}
	\end{subfigure}
	\hfill
	\begin{subfigure}[b]{0.3\textwidth}
	\centering
	\includegraphics[width = 0.3\textwidth]{img}
	\caption{subcaption2}
	\label{fig:label2}
	\end{subfigure}
	\hfill
	\begin{subfigure}[b]{0.3\textwidth}
	\centering
	\includegraphics[width = 0.3\textwidth]{img}
	\caption{subcaption3}
	\label{fig:label3}
	\end{subfigure}
\caption{caption}
\label{fig:label}
\end{figure*}

这样看上去实在是太麻烦了,舍弃

如果想要竖着插入多张图,其实就是每个子图空一行或者用\\,相当于就是分行的效果。在这种情况下需要垂直居中怎么办?

我们可以在 \includegraphics 后面的参数加上 align=c,也就是

\includegraphics[align=c, width = 0.3\textwidth]{img}

但这样会让标题也抬上去,所以还可以使用 \raisebox 手动抬高图片,也就是

\subfloat[]{\raisebox{0.3\height}{\includegraphics[width = 0.3\textwidth]{img}}}

其他一些可能会遇到的问题

  1. 如果子图的标题超出了长度,想用换行符 \\ 换行的话,会失去居中效果,因此可以加入一行指令
    \captionsetup[subfigure]{justification=centering}
    
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐