你可能见过的相关的有:subfigure,subfig,subcaption,subfloat,minipage,subcaptionbox
上面这些里其实混杂了
package
andcommand
andenvironment
;可以补充的小知识是:\usepackage{}
括号里的就是package
,\includegraphics
这样的就是command
,\begin{}
括号里的就是environment
。所以上面分别是什么下面会再讲解到。
我们先看 package
:
subfigure
很老了,已经完全被淘汰了,由subfig
取代。subfig
与hyperref
搭配使用会有点小问题,但不要紧。subfig
和subfigure
也不能同时加载,会冲突subcaption
是最新的,但和subfig
和subfigure
不兼容
接着 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*}
这个*
表示双栏会合并成单栏显示图片(单栏模板就没有区别了)。为了方便更改模板,建议想要大图的使用带*
的。
再看 subcaption
,文档参考,它的主命令是 \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}}}
其他一些可能会遇到的问题
- 如果子图的标题超出了长度,想用换行符
\\
换行的话,会失去居中效果,因此可以加入一行指令\captionsetup[subfigure]{justification=centering}