基于LaTeX_工作室的2020年8月开始的直播内容,该系列文章将用图文的模式记录下其中的重要内容,方便查阅与学习。

编译环境: $\textrm{Tex Live}$

编辑环境: $\textrm{vscode}$

相关视频:LaTeX 直播之五 – LaTeX 实用插图指南

本次视频内容包括

  1. 认识$\textrm{figure}$环境
  2. 插入图片
  3. 交叉引用
  4. 多图排版

$\textrm{figure}$环境基本结构

\begin{document}
\begin{figure}[位置选项]
%图片内容
\end{figure}
\end{document}

$\textrm{graphicx}$宏包

$\textrm{\includegraphics}$[选项]{文件路径}

支持的常用图片格式:$\textrm{jpg,png,pdf,eps}$。选项:宽度$\textrm{(width)}$或高度$\textrm{(height)}$,与$\textrm{LaTeX}$中的长度定义紧密相关,或者使用绝对长度来定义。

  • 单独使用$\textrm{width}$或$\textrm{height}$:对图片进行等比例缩放
  • 同时使用$\textrm{width}$和$\textrm{height}$:对图片进行自定义拉伸(不推荐)
命令含义
$\textrm{textwidth}$整个页面版芯的宽度
$\textrm{textheight}$整个页面版芯的高度
$\textrm{paperwidth}$整个页面纸张的宽度
$\textrm{paperheight}$这个页面纸张的高度
$\textrm{linewidth}$当前行的宽度,受所在$\textrm{environment}$影响
例如当前进行了分栏,那么宽度就是单位栏的宽度

例如 $\textrm{\includegraphics[width=0.7\linewidth]{elements/photo}}$命令就是放置一张宽度为$\textrm{0.7}$倍的当前行宽,路径为当前目录下$\textrm{elements}$文件夹中名为$\textrm{photo}$的图片,路径同样可以使用绝对路径来描述。

图片控制—图注,位置控制等

浮动体$\textrm{float}$

  • 是一个容器,包含某些不可分页的大块内容
  • 有一个简短的描述,比如图题或者表题。
  • 有一个编号,用于引述。

位置选项

  • $\textrm{h}$:当前位置。将图形放置在正文文本中给出该图形环境的地方。如果本页所剩的页面不够,那么这一参考将不起作用。
  • $\textrm{p}$:浮动页。将图放置在一只允许有浮动对象的页面上。
  • $\textrm{b}$:底部。将图片放置在页面的底部。
  • $\textrm{t}$:顶部。将图片放置在页面的顶部。
  • $\textrm{!}$:覆盖内置布局方式。
  • $\textrm{H}$:强制在当前位置放置图片。需要$\textrm{float}$宏包。
  • $\textrm{!}$可以与其他样式组合使用,例如$\textrm{t!}。
\begin{document}
\begin{figure}[位置选项]
\centering%居中,效果到figure环境结束为止
\includegraphics[选项]{文件路径}
\caption{题注}
\end{figure}
\end{document}

给出一段实例代码

\documentclass{article}

%导言区
\usepackage{graphicx}
\usepackage{ctex}

\begin{document}

    这是一段文本

    \begin{figure}[h]
        \centering%居中,效果到figure环境结束为止
        \includegraphics[width=\textwidth]{1.png}
        \caption{这是一段图注}
    \end{figure}

    文本结束

\end{document}

交叉引用

LaTeX中的交叉引用需要使用$\textrm{\label}$与$\textrm{\ref}$
$\textrm{\label{<label-name>}}$来创建一个便签,$\textrm{\ref{<label-name>}}$来对便签进行引用,请注意一定要将$\textrm{\label}$命令放在$\textrm{\caption}$命令之后

给出一段实例代码,这段代码同样需要编译两次

\documentclass{article}

%导言区
\usepackage{graphicx}
\usepackage{ctex}

\begin{document}


    \begin{figure}[h]
        \centering%居中,效果到figure环境结束为止
        \includegraphics[width=\linewidth]{1.png}
        \caption{这是一段图注}
        \label{这是一个交叉引用}  %创建一个名为“这是一个交叉引用”的标签
    \end{figure}

    这里将通过ref对上图进行交叉引用 \ref{这是一个交叉引用}。

\end{document}

上图中的$\textrm{“1”}$即是对图$\textrm{1}$的引用。

我们当然希望图片能有更丰富的引用方式,例如自定义的名称而不是$\textrm{1}$,并且应该像$\textrm{word}$一样具有超链接功能。 首先介绍另两种引用方式:$\textrm{\Cref}$和$\textrm{\cref}$,在默认情况下,$\textrm{\Cref}$会根据引用对象是图还是表来在引用时添加上$\textrm{Figure}$和$\textrm{Table}$字样,$\textrm{\cref}$则是改用$\textrm{fig}$的缩写形式。这两种引用需要导入宏包$\textrm{cleveref}$。

\documentclass{article}

%导言区
\usepackage{graphicx}
\usepackage{ctex}
\usepackage{cleveref} %添加cleveref宏包

\begin{document}

    \begin{table}
        \caption{这是一个表注}
        \label{表引用}
    \end{table}

    \begin{figure}[h]
        \centering%居中,效果到figure环境结束为止
        \includegraphics[width=\linewidth]{1.png}
        \caption{这是一段图注}
        \label{图引用}
    \end{figure}

    \ref{图引用}

    \ref{表引用}

    \Cref{图引用}

    \Cref{表引用}

    \cref{图引用}

    \cref{表引用}

\end{document}

编译结果如下

紧接着是超链接的添加,需要使用宏包$\textrm{hyperref}$,请务必注意:$\textrm{hyperref}$一定要在$\textrm{cleveref}$之前加载。导入之后其余部分不需要做任何修改,引用会自动附带超链接功能。

\documentclass{article}

%导言区
\usepackage{graphicx}
\usepackage{ctex}
\usepackage{hyperref} %一定要在cleveref之前导入
\usepackage{cleveref} %添加cleveref宏包

\begin{document}

    \begin{table}
        \caption{这是一个表注}
        \label{表引用}
    \end{table}

    \begin{figure}[h]
        \centering%居中,效果到figure环境结束为止
        \includegraphics[width=\linewidth]{1.png}
        \caption{这是一段图注}
        \label{图引用}
    \end{figure}

    \ref{图引用}

    \ref{表引用}

    \Cref{图引用}

    \Cref{表引用}

    \cref{图引用}

    \cref{表引用}

\end{document}

编译出来的六种引用都附带了超链接功能。
注意到上述超链接在预览时有一个红色方框来显式的告知这是一个超链接,如果想隐藏红色方框,那么在导入宏包时采用如下格式:
$\textrm{\usepackage[hidelinks]\{hyperref\}}$,那么红色方框便会隐藏。

多图排版

  • 并排放置,公用题注

我们假设有如下代码

    \begin{figure}
        \centering
        \includegraphics[width=m\linewidth]{example-image-a}
        \includegraphics[width=n\linewidth]{example-image-b}
        \caption{公用的题注}
    \end{figure}

两种图片$\textrm{a}$和$\textrm{b}$在一个$\textrm{figure}$环境下放置,宽度分别是$\textrm{m}$和$\textrm{n}$被的$\textrm{linewidth}$,那么当$\textrm{m+n >= 1}$时,两种图片会上下放置;而若$\textrm{m+n < 1}$,两张图片则会并排放置。

而如果想显式的对图片进行分行,那么只需加入分行命令$\textrm{\\\\}$即可,或者在两张图片之间添加一个空行。

    \begin{figure}
        \centering
        \includegraphics[width=m\linewidth]{example-image-a} \\\\
        \includegraphics[width=n\linewidth]{example-image-b}
        \caption{公用的题注}
    \end{figure}

    \begin{figure}
        \centering
        \includegraphics[width=m\linewidth]{example-image-a}

        \includegraphics[width=n\linewidth]{example-image-b}
        \caption{公用的题注}
    \end{figure}
  • 并排放置,拥有各自的题注

使用$\textrm{minipage}$环境
$\textrm{\begin{minipage}{width}}$
内容….
$\textrm{\end{minipage}}$

\documentclass{article}

%导言区
\usepackage{graphicx}
\usepackage{ctex}

\begin{document}

    \begin{figure}
        \centering
        \begin{minipage}{0.49\linewidth} %所有minipage的宽度之和小于linewidth
            \centering
            \includegraphics[width=\linewidth]{example-image-a} %此处的linewidth已经变成了minipgae的宽度
            \caption{题注B}
        \end{minipage} %此处不要换行!
        \begin{minipage}{0.49\linewidth}
            \centering
            \includegraphics[width=\linewidth]{example-image-b}
            \caption{题注B}
        \end{minipage}
    \end{figure}

\end{document}
  • 子图模式,并排放置

导入$\textrm{subfig}$宏包并使用$\textrm{\subfloat}$命令: $\textrm{\subfloat[子图题注]{图片本体}}$

\documentclass{article}

%导言区
\usepackage{graphicx}
\usepackage{ctex}
\usepackage{subfig}

\begin{document}

    \begin{figure}
        \subfloat[题注a]{\includegraphics[width=0.5\linewidth]{example-image-a}}
        \subfloat[题注b]{\includegraphics[width=0.5\linewidth]{example-image-b}}
        \caption{共同的题注}
    \end{figure}

\end{document}

如果希望子图按上下排列,那么同样添加 $\textrm{\\\\}$换行命令来分隔即可。

  • 图片题注混排

实际排版时我们会遇到图片是奇数张、题注非常长,各种图片大小不一致的情况,而为了保持排版的美观,我们时常需要将图片和题注混排在一起,因此这里介绍一种使用$\textrm{minipage}$和$\textrm{subfloat}$实现混排的用法。

\documentclass{article}

%导言区
\usepackage{graphicx}
\usepackage{ctex}
\usepackage{subfig}

\begin{document}

    \begin{figure}
        \centering
        \subfloat[题注a]{\includegraphics[width=0.5\linewidth]{example-image-a}}
        \subfloat[题注b]{\includegraphics[width=0.5\linewidth]{example-image-b}}\\
        \begin{minipage}{0.49\linewidth}
            \subfloat[题注c]{\includegraphics[width=\linewidth]{example-image-c}}
        \end{minipage}
        \begin{minipage}{0.49\linewidth}
            \caption{这是一段很长很长很长很长很长很长很长很长很长
            很长很长很长很长很长很长很长很长很长很长很长很长很长
            很长很长很长很长很长很长很长很长很长很长很长很长很长
            的题注}
        \end{minipage}
    \end{figure}

\end{document}

对于图片的排版问题解决方法不唯一,随着对$\textrm{LaTeX}$环境和语法的学习,读者可以逐渐开发出自己的排版风格与方法。

$\textrm{Author}$@$\href{http://kuroko.info}{\textrm{Kuroko}}$

$\textrm{GitHub}$@$\href{https://github.com/SuperKuroko}{\textrm{SuperKuroko}}$

$\textrm{LeetCode}$@$\href{https://leetcode-cn.com/u/kuroko177/}{\textrm{kuroko177}}$

$\textrm{Last Modified: 2021-01-28 20:39}$