本文介绍了在 \(\LaTeX{}\)
中插入图片的基本语法和一些常用的技巧,并且给出了一些在排版中常用的模板样例。
基本语法
\(\LaTeX{}\)
本身不支持插图功能,需要由 graphicx
宏包辅助支持。
使用 \(\textrm{latex + dvipdfmx}\)
编译命令时,调用 graphicx
宏包时要指定 \(\textrm{dvipdfmx}\) 选项;而使用 \(\textrm{pdflatex}\) 或 \(\textrm{xelatex}\) 命令编译时不需要。
不同编译命令支持的图片格式种类各异,见下表。这个表格也能解答诸如“为什么
\(\textrm{.eps}\) 格式图片在 \(\textrm{pdflatex}\)
编译命令下出错”之类的问题。本表格也再一次说明,使用 \(\textrm{xelatex}\) 命令是最推荐的方式。
![image-20250115144839982]()
在调用了 graphicx
宏包以后,就可以使用
\includegraphics
命令加载图片了:
1
| \includegraphics[⟨options⟩]{⟨filename⟩}
|
其中 <filename>
为图片文件名,文件名可能需要用相对路径或绝对路径表示。图片文件的扩展名一般可不写。另外一定要注意,文件名里既不要有空格也不要有多余的英文点号,否则宏包在解析文件名的过程中会出错。
另外 graphicx
宏包还提供了
graphicspath
命令,用于声明一个或多个图片文件存放的目录,使用这些目录里的图片时可不用写路径:
1 2
| \graphicspath{{figures/}{logo/}}
|
在 \includegraphics
命令的可选参数
<options>
中可以使用
<key> = <value>
的形式,常用的参数如下:
![image-20250115145631351]()
graphicx
宏包也支持 \(\textrm{draft}\)/\(\textrm{final}\) 选项。当
graphicx
宏包或文档类指定 \(\textrm{draft}\)
选项时,图片将不会被实际插入,取而代之的是一个包含文件名的与原图片等大的方框。(加快编译过程)
并排和子图表
时常有在一个浮动体里面放置多张图的用法。最简单的用法就是直接并排放置,也可以通过分段或者换行命令
\\
排版多行多列的图片。以下为示意代码,效果大致如图所示。
1 2 3 4 5 6 7 8
| \begin{figure}[htbp] \centering \includegraphics[width=...]{...} \qquad \includegraphics[width=...]{...} \\[...pt] \includegraphics[width=...]{...} \caption{...} \end{figure}
|
![image-20250115160703778]()
由于标题是横跨一行的,用 \caption
命令为每个图片单独生成标题就需要借助前文提到的 parbox
或者
\(\textrm{minipage}\)
环境,将标题限制在盒子内。效果见图所示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| \begin{figure}[htbp] \centering \begin{minipage}{...} \centering \includegraphics[width=...]{...} \caption{...} \end{minipage} \qquad \begin{minipage}{...} \centering \includegraphics[width=...]{...} \caption{...} \end{minipage} \end{figure}
|
![image-20250115161039696]()
当需要更进一步,给每个图片定义小标题时,就要用到
subcaption
宏包的功能了。这里仅举一例,效果见图。更详细的用法请参考
subcaption
宏包的帮助文档。
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| \begin{figure}[htbp] \centering \begin{subfigure}{...} \centering \includegraphics[width=...]{...} \caption{...} \end{subfigure} \qquad \begin{subfigure}{...} \centering \includegraphics[width=...]{...} \caption{...} \end{subfigure} \end{figure}
|
![image-20250115161220429]()
subcaption
依赖上文提到过的 caption
宏包,因此也支持子图表标题样式的定制。并排子图表的功能也可通过
subfig
宏包的 subfloat
命令实现,具体请参考宏包文档。
示例模板
并排子图
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 30 31 32 33 34 35 36 37 38
|
\begin{figure}[H] \centering \begin{subfigure}[b]{0.48\textwidth} \includegraphics[width=\linewidth]{tree} \caption{子图1} \end{subfigure} \hfill \begin{subfigure}[b]{0.48\textwidth} \includegraphics[width=\linewidth]{tree} \caption{子图2} \end{subfigure}
\begin{subfigure}[b]{0.48\textwidth} \includegraphics[width=\linewidth]{tree} \caption{子图3} \end{subfigure} \hfill \begin{subfigure}[b]{0.48\textwidth} \includegraphics[width=\linewidth]{tree} \caption{子图4} \end{subfigure}
\centering \begin{subfigure}[c]{0.48\textwidth} \includegraphics[width=\linewidth]{tree} \caption{子图5} \end{subfigure}
\caption{整体标题} \label{fig:my_figure} \end{figure}
|
![image-20250808203757692]()
上一下二
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
\begin{figure}[H] \centering \begin{subfigure}[b]{0.8\textwidth} \includegraphics[width=\linewidth]{tree} \caption{Diagram.}\label{fig:1a} \end{subfigure} \begin{subfigure}[b]{0.48\textwidth} \includegraphics[width=\linewidth]{tree} \caption{Grid.}\label{fig:1b} \end{subfigure} \hfill \begin{subfigure}[b]{0.48\textwidth} \includegraphics[width=\linewidth]{tree} \caption{Arrangement.}\label{fig:1c} \end{subfigure} \caption{Structural.} \label{fig:1} \end{figure}
|
![image-20250808203945509]()
边注旋转加图片
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 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
|
\begin{figure}[H] \centering \begin{tabular}{rcccc} \rotatebox{90}{10dB} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \label{fig:sub1} \end{subfigure} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \label{fig:sub2} \end{subfigure} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \label{fig:sub3} \end{subfigure} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \label{fig:sub4} \end{subfigure} \\ \rotatebox{90}{10dB} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \label{fig:sub5} \end{subfigure} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \label{fig:sub6} \end{subfigure} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \label{fig:sub7} \end{subfigure} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \label{fig:sub8} \end{subfigure} \\ \rotatebox{90}{10dB} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \caption{a} \label{fig:sub9} \end{subfigure} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \caption{b} \label{fig:sub10} \end{subfigure} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \caption{c} \label{fig:sub11} \end{subfigure} & \begin{subfigure}[c]{0.23\textwidth} \centering \includegraphics[width=\linewidth]{tree} \caption{d} \label{fig:sub12} \end{subfigure} \end{tabular} \caption{边注旋转加图片} \label{fig:grid} \end{figure}
|
![image-20250808204307036]()