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

news2025/6/9 16:32:42

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}

上述代码的结果为:
在这里插入图片描述
特别需要注意的是,第一个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}

在这里插入图片描述

并排显示两张图,并只作一个标记\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}

语法与上一节的类似,不同之处在于,对每个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}

在这里插入图片描述

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

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

实现这个效果需要用到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}

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}

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/580084.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

StarRocks 中的数据模型和索引使用

一、StarRocks 数据模型 StarRocks 支持四种数据模型,分别是明细模型 (Duplicate Key Model)、聚合模型 (Aggregate Key Model)、更新模型 (Unique Key Model) 和主键模型 (Primary Key Model)。 1.1 明细模型 明细模型是默认的建表模型。如果在建表时未指定任何…

chatgpt赋能python:Python自动截屏教程

Python 自动截屏教程 介绍 Python 是一种高级程序设计语言,已广泛用于各种应用中,从 Web 开发到机器学习都有很多案例。其中,Python 的截屏功能得到了越来越多的关注,因为在很多应用场景中,自动截屏可以帮助我们更有…

【JVM】11. 垃圾回收及回收算法算法

文章目录 11.1. 垃圾回收概述11.1.1. 什么是垃圾?什么是垃圾? 11.1.2. 为什么需要GC11.1.3. 早期垃圾回收11.1.4. Java垃圾回收机制担忧GC主要关注的区域 11.2. 垃圾回收相关算法11.2.1. 标记阶段:引用计数算法方式一:引用计数算法…

C++数据结构:散列表简单实现(hash表)

文章目录 前言一、设计思想二、实现步骤1、定义节点2、定义Hash表类 三、数据示例总结 前言 散列表是一种常用的数据结构,它可以快速地存储和查找数据。散列表的基本思想是,将数据的关键字映射到一个有限的地址空间中,然后在该地址空间中存储…

Nacos源码-从Demo出发研究事件驱动与观察者模式的应用

在我们分析 Nacos 源码时,会看见大量的事件发布的动作,不管是客户端注册/下线、服务改变、服务订阅等等都是利用了事件发布。 下面我在自己的项目中,引入Nacos的依赖进行一个简单的demo的演示,我个人认为其和spring容器的listene…

Koa学习1:初始化项目

前言 作为前端开发者,最适合我们的后端就是node了,node的框架挺多的。选择Koa是因为国内用的挺多的、关于这方面的教程也很多、而且比较适合小项目。 学习教程是:【杰哥课堂】-项目实战-NodeKoa2从零搭建通用API服务 写这些文章&#xff0…

K8s in Action 阅读笔记——【5】Services: enabling clients to discover and talk to pods

K8s in Action 阅读笔记——【5】Services: enabling clients to discover and talk to pods 你已了解Pod以及如何通过ReplicaSets等资源部署它们以确保持续运行。虽然某些Pod可以独立完成工作,但现今许多应用程序需要响应外部请求。例如,在微服务的情况…

在Python中载入大量图片型数据集,与matlab结合使用时,如何解决RAM的占用爆炸性增长的问题

在Python中载入大量图片时,由于每张图片都会被转换成Numpy数组并存储在内存中,因此可能会导致RAM的占用爆炸性增长。为了减少RAM的使用,可以考虑采用以下方法: Python和Matlab结合使用。首先,可以使用Python的Pillow库…

【Linux】遇事不决,可先点灯,LED驱动的进化之路---1

【Linux】遇事不决,可先点灯,LED驱动的进化之路---1 前言: 一、最简单的LED驱动程序 1.1 字符设备驱动程序框架 1.2 程序实战 1.2.1 驱动程序(led_drive_simple.c) 1.2.2 应用程序(led_test_simple.c…

C#,码海拾贝(25)——求解“三对角线方程组”的“追赶法”之C#源代码,《C#数值计算算法编程》源代码升级改进版

using System; namespace Zhou.CSharp.Algorithm { /// <summary> /// 求解线性方程组的类 LEquations /// 原作 周长发 /// 改编 深度混淆 /// </summary> public static partial class LEquations { /// <summary> /…

Apache Kafka - 理解Kafka内部原理

文章目录 Kafka的实现机制1. 集群成员关系&#xff1a;2. 控制器*&#xff1a;3. Kafka的复制&#xff1a;4. 请求处理&#xff1a;5. 物理存储&#xff1a; 导图 Kafka的实现机制 作为Kafka专家&#xff0c;我很高兴为您深入解释Kafka的实现机制。我将从以下几个方面对Kafka进…

ARM体系结构与异常处理

目录 一、ARM体系架构 1、ARM公司概述 ARM的含义 ARM公司 2.ARM产品系列 3.指令、指令集 指令 指令集 ARM指令集 ARM指令集 Thumb指令集 &#xff08;属于ARM指令集&#xff09; 4.编译原理 5.ARM数据类型 字节序 大端对齐 小端对齐 …

VTK安装和运行

创建日期: 2019-04-02 09:19:00 开始 学习资源 官方网站&#xff1a;https://vtk.org/ GitHub&#xff1a;https://github.com/Kitware/VTK 官方教程&#xff1a;https://vtk.org/Wiki/VTK/Tutorials 官方文档&#xff1a;https://vtk.org/documentation/ 用户手册&#…

RocketMQ 学习教程——(一)安装 RocketMQ

文章目录 RocketMQ 安装下载安装上传服务器配置环境变量修改 runserver.sh修改 runbroker.sh修改 broker.conf启动 安装 RocketMQ 控制台安装Linux 防火墙命令 Docker 安装 RocketMQ拉取镜像启动 NameServer 服务启动 Broker 服务启动控制台 RocketMQ 官网&#xff1a; http://…

​【编写UI自动化测试集】Appium+Python+Unittest+HTMLRunner​

简介 获取AppPackage和AppActivity 定位UI控件的工具 脚本结构 PageObject分层管理 HTMLTestRunner生成测试报告 启动appium server服务 以python文件模式执行脚本生成测试报告 下载与安装 下载需要自动化测试的App并安装到手机 获取AppPackage和AppActivity 方法一 有源码的…

算法11.从暴力递归到动态规划4

算法|11.从暴力递归到动态规划4 1.最长公共子序列 题意&#xff1a;给定两个字符串str1和str2&#xff0c;返回这两个字符串的最长公共子序列长度 比如 &#xff1a; str1 “a12b3c456d”,str2 “1ef23ghi4j56k” 最长公共子序列是“123456”&#xff0c;所以返回长度6 解…

【PowerShell】PowerShell 7.1 之后版本的安装

当前以下操作系统支持PowerShell 7.1 版本的安装,非Windows 系统支持的版本和要求有一定的限制。 Windows 8.1/10 (including ARM64)Windows Server 2012 R2, 2016, 2019, and Semi-Annual Channel (SAC)Ubuntu 16.04/18.04/20.04 (including ARM64)Ubuntu 19.10 (via Snap pa…

图的邻接矩阵表示

设图有n个顶点&#xff0c;则邻接矩阵是一个n*n的方阵&#xff1b;若2个顶点之间有边&#xff0c;则方阵对应位置的值为1&#xff0c;否则为0&#xff1b; 看几个例子&#xff1b; 此图的邻接矩阵是 0 1 1 1 1 0 1 0 1 1 0 1 1 0…

学习 xss+csrf 组合拳

目录 1.xss基础铺垫 1.1反射型xss 1.2存储型xss 1.3基于DOM的xss 1.4xss漏洞的危害 1.5xss漏洞的黑盒测试 1.6xss漏洞的白盒测试 2.csrf基础铺垫 2.1csrf攻击原理 2.2csrf攻击防护 3.应用案例 3.1存储型xsscsrf组合拳 3.2csrfselfxss组合拳 1.xss基础铺垫 跨站脚…

线程和进程

进程和线程的区别(超详细) 与进程不同的是同类的多个线程共享进程的堆和方法区资源&#xff0c;但每个线程有自己的程序计数器、虚拟机栈和本地方法栈&#xff0c;所以系统在产生一个线程&#xff0c;或是在各个线程之间作切换工作时&#xff0c;负担要比进程小得多&#xff0…