• Latex在同一figure中排版多张图片的方法


    Latex在同一figure中排版多张图片的方法

    主要使用了minipage(子图)语法。minipage可以嵌套,子图还可以分解为更多子图,功能很好玩,无聊可以自己试试。下面介绍几种常用效果的实现方法。

    并排显示两张图,并分别标记

    \begin{figure}[thbp!]
        \centering
        \begin{minipage}[t]{0.49\linewidth}
            \centering
            \includegraphics[width=0.9\linewidth]{figure/opencv-logo.png}
            \caption{OpenCV的logo}
            \label{fig:opencv_logo}
        \end{minipage}
        \begin{minipage}[t]{0.49\linewidth}
            \centering
            \includegraphics[width=0.9\linewidth]{figure/gdalicon_big.png}
            \caption{GDAL的logo}
            \label{fig:gdal_logo}
        \end{minipage}
     \end{figure}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    上述代码的结果为:
    在这里插入图片描述
    特别需要注意的是,第一个minipage的宽度和第二个minipage的宽度之和不能超过1。如果超过一,则会自动变成垂直排列,如下图所示:

    \begin{figure}[thbp!]
        \centering
        \begin{minipage}[t]{0.49\linewidth}% 注意!0.49
            \centering
            \includegraphics[width=0.9\linewidth]{figure/opencv-logo.png}
            \caption{OpenCV的logo}
            \label{fig:opencv_logo}
        \end{minipage}
        \begin{minipage}[t]{0.59\linewidth}% 注意!0.49+上面的0.59>1,导致自动重排版
            \centering
            \includegraphics[width=0.9\linewidth]{figure/gdalicon_big.png}
            \caption{GDAL的logo}
            \label{fig:gdal_logo}
        \end{minipage}
     \end{figure}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    并排显示两张图,并只作一个标记\label

    尝试下面的代码,figure/opencv-logo、figure/gdalicon_big为两张图片的相对路径,表示figure文件夹下的opencv-logo.png、gdalicon_big.png两张图片。则将其并排显示且整体标记的代码如下:

    \begin{figure}[thbp!]
        \centering
        \begin{minipage}[t]{0.49\linewidth}
            \centering
            \includegraphics[width=0.9\linewidth]{figure/opencv-logo}
            %\caption{第1个子图标题}
        \end{minipage}
        \begin{minipage}[t]{0.49\linewidth}
            \centering
            \includegraphics[width=0.9\linewidth]{figure/gdalicon_big}
            %\caption{第2个子图标题}
        \end{minipage}
        \caption{并排安放两张图}
        \label{fig:image_group}
     \end{figure}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    语法与上一节的类似,不同之处在于,对每个minipage都不使用\caption\label,以免将其编号。
    在这里插入图片描述

    注意,如果在minipage包含的图片中也使用了\caption命令,则也会将minipage子图编号,如下图所示:

    \begin{figure}[thbp!]
        \centering
        \begin{minipage}[t]{0.49\linewidth}
            \centering
            \includegraphics[width=0.9\linewidth]{figure/opencv-logo.png}
            \caption{OpenCV的logo}
        \end{minipage}
        \begin{minipage}[t]{0.49\linewidth}
            \centering
            \includegraphics[width=0.9\linewidth]{figure/gdalicon_big.png}
            \caption{GDAL的logo}
        \end{minipage}
        \caption{并排安放两张图}
        \label{fig:image_group}
     \end{figure}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    在这里插入图片描述

    那么,如何做到既标记子图,又不编号呢?

    为子图增加说明文字,但不编号

    实现这个效果需要用到tabular包。

    \begin{figure}[thbp!]
        \centering
        \begin{tabular}{@{\extracolsep{\fill}}c@{}c@{\extracolsep{\fill}}}
                \includegraphics[width=0.5\linewidth]{figure/opencv-logo.png} &
                \includegraphics[width=0.5\linewidth]{figure/gdalicon_big.png}\\
                (a)OpenCV的logo & (b)GDAL的logo\\
        \end{tabular}
        \caption{并排,但不标记子图}
        \label{fig:image_with_table}
     \end{figure}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    figure中嵌套一个两行两列表格,然后将两张图片插入第一行,两张图片的描述文字插入第二行,最后将整个figure作一次标签。效果如下所示:
    在这里插入图片描述

    另一个例子,将6张图片按321排版:

    \begin{figure}[thbp!]
        \centering
        \begin{minipage}[t]{1.0\linewidth}
        \centering
            \begin{tabular}{@{\extracolsep{\fill}}c@{}c@{}c@{}@{\extracolsep{\fill}}}
                \includegraphics[width=0.33\linewidth]{figure/opencv-logo} &
                \includegraphics[width=0.33\linewidth]{figure/gdalicon_big}&
                \includegraphics[width=0.33\linewidth]{figure/eigen_logo}\\
                (a)OpenCV的logo & (b)GDAL的logo & (c)Eigen的logo\\
            \end{tabular}
        \end{minipage}
        \begin{minipage}[t]{1.0\linewidth}
        \centering
            \begin{tabular}{@{\extracolsep{\fill}}c@{}c@{}@{\extracolsep{\fill}}}
                \includegraphics[width=0.33\linewidth]{figure/vtk_logo} &
                \includegraphics[width=0.33\linewidth]{figure/qt}\\
                (d)vtk的logo & (e)Qt的logo\\
            \end{tabular}
        \end{minipage}
        \begin{minipage}[t]{1.0\linewidth}
        \centering
            \begin{tabular}{@{\extracolsep{\fill}}c@{}@{\extracolsep{\fill}}}
                \includegraphics[width=0.33\linewidth]{figure/vcpkg_logo}\\
                (f)vcpkg的logo\\
            \end{tabular}
        \end{minipage}
        \caption{3行,每行子图数不同,子图不编号}
        \label{fig:image_with_table_321}
     \end{figure}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    代码中使用了3个minipage来分别完成3行图片的设置;每个minipage内嵌一个tabular来实现当前行子图的文字说明(不标记);每个tabular的行数为2,第一行为子图、第二行为说明文字,列数为该行的子图数。
    效果如下:

    在这里插入图片描述

  • 相关阅读:
    Java中实现http请求的方式
    简单有效的评估大小鼠的认知能力、空间记忆和学习能力——大小鼠T迷宫和Y迷宫
    一个奇葩的线上问题,导致我排查了一天
    9.25 day 2
    基于非洲秃鹫算法优化概率神经网络PNN的分类预测 - 附代码
    【技术积累】Python基础知识【第二版】
    (ICIP-2019)通过神经结构搜索进行视频动作识别
    OneFlow v0.5.0正式上线:四大特性实现轻快上手,高效、易用从此兼得
    VMware三种网络模式详解
    Mesh快连
  • 原文地址:https://blog.csdn.net/qq_42679415/article/details/130894937