LaTeX插图完全指南:从格式选择到浮动体排版与路径解析

发布时间:2026/10/13 13:49:40
LaTeX插图完全指南:从格式选择到浮动体排版与路径解析 1. 从“图片放不进去”说起LaTeX 插图到底卡在哪很多人第一次在 LaTeX 里插图都会经历一个相似的循环写\includegraphics编译报错换路径再编译还是报错最后干脆把图片拖到跟.tex同一个目录下居然成了。于是得出一个结论——“LaTeX 插图就是路径问题”。这个结论对了一半但远远不够。latex导入图片学习这个主题表面上看是学一个命令实际上它牵扯到四件事图片文件的格式与分辨率、路径的解析规则、浮动体figure的排版逻辑、以及编译引擎对图片的处理方式。这四件事里任何一件没搞明白你都会在某个深夜对着一个红叉发呆。这篇文章面向的是刚接触 LaTeX、或者用过一段时间但插图总是“时灵时不灵”的人。我会把插图这件事从最底层的文件格式讲起一路讲到多图并排、跨栏插图、矢量图导入这些进阶场景。中间会穿插我自己踩过的坑比如为什么同一张图在别人电脑上能编译、在我这里就报File not found为什么 PDF 图放大后依然清晰而 JPG 一放大就糊为什么[h]写了跟没写一样。先把结论摆在这里LaTeX 插图的核心不是“插入”而是“告诉编译器去哪里找、找什么格式、放在哪一页的哪个位置”。把这三件事拆开理解后面所有问题都能自己定位。2. 图片格式的选择为什么 PDF 和 PNG 是主力JPG 要慎用2.1 位图与矢量图的本质区别在讲具体格式之前得先分清两类图片。位图raster是由一个个像素点组成的放大到一定程度就会看到马赛克矢量图vector是用数学公式描述线条和填充的无论放大多少倍都保持锐利。LaTeX 最终产出的是 PDF而 PDF 天生支持矢量图形。所以如果你的图片本身是矢量格式插入后放大到任意倍数都不会糊。这就是为什么学术论文里的折线图、流程图、公式图几乎都用矢量格式。位图这边常见的格式有 PNG、JPG、BMP、TIFF。其中PNG 是无损压缩适合截图、带透明通道的图、线条清晰的示意图JPG 是有损压缩适合照片这类色彩连续变化的图但它在文字和线条边缘会产生“振铃效应”也就是俗称的糊边。我做过一个对比实验同一张包含细小文字的截图分别存成 PNG 和 JPG质量 90%插入 LaTeX 后编译成 PDF在 400% 缩放下看PNG 的文字边缘干净JPG 的文字周围有一圈淡淡的杂色。所以只要图里有文字、线条、表格一律用 PNG不要用 JPG。2.2 各格式在 LaTeX 中的支持情况不同编译引擎对图片格式的支持是不一样的这一点很多人没注意。下面这张表是我实际测试后整理的图片格式pdfLaTeXXeLaTeXLuaLaTeX说明PDF支持支持支持矢量首选PNG支持支持支持位图截图首选JPG支持支持支持位图照片可用EPS支持不直接支持不直接支持老格式需转换SVG不支持不支持不支持需先转 PDFBMP不支持不支持不支持需先转 PNGTIFF不支持不支持不支持需先转 PNG这张表里最关键的一行是SVG。现在很多绘图工具默认导出 SVG但 LaTeX 不认。解决办法是用工具把它转成 PDF比如在命令行里用inkscape或者在线转换转出来的 PDF 依然是矢量的插入后清晰度不受影响。提示EPS 是早期 LaTeX 的宠儿但现在 pdfLaTeX 虽然还能处理XeLaTeX 和 LuaLaTeX 已经不太友好了。新项目不要再用 EPS直接上 PDF。2.3 分辨率与 DPI为什么你的图印出来是糊的位图有一个绕不开的参数叫DPI每英寸点数。它决定了图片在物理尺寸下的清晰度。LaTeX 插入图片时如果你不指定宽度它会按图片的“自然尺寸”来放而这个自然尺寸是根据像素数和 DPI 算出来的。举个例子一张 1200×800 像素的 PNG如果它的 DPI 是 72那自然尺寸就是 1200/72 16.67 英寸宽插到 A4 纸上直接爆页。如果 DPI 是 300自然尺寸就是 4 英寸宽刚好合适。所以截图或导出图片时尽量让 DPI 在 300 左右。低于 150 的图打印出来会明显发虚高于 600 的图文件体积大但肉眼收益很小。我一般用 300 作为默认值。如果你拿到一张 DPI 很低的图又没法重新导出可以在 LaTeX 里强行缩小它的显示宽度这样等效 DPI 会提高。比如一张 72 DPI 的图你把它显示宽度设为自然尺寸的四分之一等效 DPI 就变成 288清晰度会好很多。但这是权宜之计能重新导出还是重新导出。3. 路径解析的坑File not found 的六种真实原因3.1 LaTeX 找图的搜索顺序很多人以为\includegraphics{fig.png}就是从当前目录找fig.png其实 LaTeX 的搜索逻辑比这复杂。它会按以下顺序找当前.tex文件所在目录你在导言区用\graphicspath指定的目录列表编译时命令行用-include-directory指定的目录TeX 发行版的默认搜索路径这里最容易出问题的是第 2 条。\graphicspath的写法有个坑每个路径都必须以斜杠结尾。比如\graphicspath{{figures/}{images/}}注意里面那层花括号每个路径单独包一层而且末尾的/不能省。我见过有人写成\graphicspath{{figures}{images}}少了斜杠结果 LaTeX 把figures当成文件名的一部分自然找不到。3.2 文件名里的空格、中文和特殊字符这是新手最容易踩的坑。LaTeX 对文件名相当挑剔空格my figure.png这种带空格的文件名在\includegraphics里会出问题因为空格被当作参数分隔符。要么改成下划线my_figure.png要么用引号包起来{my figure.png}但后者在不同引擎下表现不一致不推荐。中文图片.png这种中文文件名pdfLaTeX 基本处理不了XeLaTeX 有时能行有时不行取决于系统编码。最稳妥的做法是全部用英文小写加下划线。特殊字符#、%、、$、{、}这些在 LaTeX 里有特殊含义出现在文件名里会引发各种诡异错误。还有~和^也不行。我自己的习惯是图片文件名只用小写字母、数字、下划线、连字符比如result_2024_v2.png。这样永远不会出问题。3.3 大小写敏感Windows 能跑Linux 报错这个坑特别隐蔽。Windows 的文件系统默认不区分大小写Figure.PNG和figure.png是同一个文件。但 Linux 和 macOS默认情况下是区分大小写的。所以你在 Windows 上写\includegraphics{Figure.png}能编译把项目拷到 Linux 服务器上就报File not found。解决办法只有一个从第一天起就严格区分大小写文件名全用小写。不要依赖 Windows 的宽容。3.4 扩展名到底要不要写\includegraphics{fig}和\includegraphics{fig.png}有什么区别前者不写扩展名LaTeX 会按一个默认顺序去试先试.pdf再试.png再试.jpg再试.eps等等。后者写死了扩展名只找那一种。不写扩展名的好处是换格式不用改代码。比如你一开始用 PNG后来换成 PDF代码不用动。坏处是如果同目录下同时有fig.pdf和fig.png它会优先用 PDF可能不是你想要的。我的建议是如果项目里图片格式统一不写扩展名更灵活如果格式混杂写清楚扩展名避免歧义。3.5 编译缓存导致的“幽灵错误”有时候你明明改了图片路径编译还是报旧路径的错。这通常是辅助文件.aux、.log里的缓存没清干净。解决办法是清理辅助文件后重新编译。在命令行里可以删掉.aux、.log、.out、.toc这些或者用latexmk -c一键清理。我遇到过最离谱的一次图片明明删了编译还提示找不到它。查了半天发现是.aux文件里还记着旧的引用。清掉辅助文件就好了。3.6 一个排查清单遇到File not found按这个顺序查文件名是否全小写、无空格、无中文、无特殊字符路径分隔符是否用了/而不是\LaTeX 里反斜杠是转义符\graphicspath里每个路径是否以/结尾文件扩展名是否被正确识别大小写是否与文件系统一致辅助文件是否需要清理这六条能解决九成以上的路径问题。4. 浮动体排版为什么图片总是不听话4.1 figure 环境的本质是“浮动”很多人把figure环境当成一个“放图片的盒子”以为写了它图片就在那儿。其实figure是一个浮动体float它的意思是“这张图最好放在这附近但具体放哪由 LaTeX 根据排版规则决定”。LaTeX 为什么要浮动因为如果图片固定在某处前面文字不够长就会在页面底部留一大块空白非常难看。浮动机制让 LaTeX 可以把图片挪到下一页顶部把文字填满当前页整体更紧凑。理解这一点你就不会对“图片跑到下一页”感到意外了。4.2 位置参数 h、t、b、p 的真实含义\begin{figure}[htbp]里的htbp是四个位置偏好hhere就放在这里ttop放在页顶bbottom放在页底ppage单独放一页关键点这些只是“偏好”不是“命令”。LaTeX 会按h→t→b→p的顺序尝试如果都不满足比如当前页剩余空间不够它就会把图推迟到后面甚至推迟到下一章。所以[h]写了跟没写一样是因为当前页真的放不下。这时候你可以加!强制[!h]意思是“忽略大部分限制尽量放这”调整图片尺寸让它能塞进剩余空间把图片代码往前挪挪到文字更少的位置但我要提醒一句滥用!会导致页面出现大片空白排版反而更丑。能不用就不用。4.3 用 \FloatBarrier 控制浮动范围如果你实在受不了图片乱跑可以在章节之间加一个\FloatBarrier需要placeins宏包它会强制把之前所有未排版的浮动体都排出来不让它们跨过这个屏障。\usepackage{placeins} ... \FloatBarrier这样图片就不会跑到下一节去了。代价是可能出现空白但至少位置可控。4.4 图片尺寸width 和 scale 怎么选控制图片大小有两个常用参数width0.8\textwidth宽度设为文本宽度的 80%scale0.5整体缩放为自然尺寸的 50%推荐用width而不是scale。因为width是相对于文本宽度换模板、换纸张大小时会自动适配scale是相对于图片自然尺寸换一张 DPI 不同的图显示大小就变了。如果只指定width高度会按比例自动算不会变形。如果同时指定width和height图片可能被拉伸变形除非你故意要那个效果。\includegraphics[width0.8\textwidth]{fig.png}这行代码的意思是图片宽度占文本宽度的 80%高度按原比例。这是最常用的写法。5. 从单图到多图并排、子图与跨栏布局5.1 两张图并排的两种做法最简单的并排是用两个minipage\begin{figure}[htbp] \centering \begin{minipage}{0.48\textwidth} \centering \includegraphics[width\textwidth]{fig1.png} \caption{第一张图} \end{minipage} \hfill \begin{minipage}{0.48\textwidth} \centering \includegraphics[width\textwidth]{fig2.png} \caption{第二张图} \end{minipage} \end{figure}两个minipage各占 48% 宽度中间用\hfill撑开。注意两个宽度加起来不能超过 100%留一点余量给中间的间隙。这种做法的好处是简单直接坏处是每张图有独立的 caption编号是 (a) (b) 还是 1 2 取决于你怎么写。如果要标准的子图编号得用subcaption宏包。5.2 用 subcaption 做规范子图subcaption是现在做子图的主流方案配合caption宏包使用\usepackage{caption} \usepackage{subcaption} ... \begin{figure}[htbp] \centering \begin{subfigure}{0.48\textwidth} \centering \includegraphics[width\textwidth]{fig1.png} \caption{左图} \end{subfigure} \hfill \begin{subfigure}{0.48\textwidth} \centering \includegraphics[width\textwidth]{fig2.png} \caption{右图} \end{subfigure} \caption{两张图的对比} \end{figure}这样编译出来子图编号是 (a) (b)总图编号是 1引用时用\ref{fig:compare}得到 1用\subref得到 a 或 b。这是学术论文里最规范的写法。5.3 跨栏插图双栏模板里的特殊处理双栏模板比如很多会议论文模板里图片默认只占一栏宽度。如果要让图片横跨两栏需要用带星号的figure*\begin{figure*}[t] \centering \includegraphics[width0.9\textwidth]{wide.png} \caption{跨栏大图} \end{figure*}注意figure*有个限制它只能放在页顶不能放在页底或当前位置。这是 LaTeX 双栏排版的固有限制不是 bug。所以跨栏图通常会出现在下一页顶部写的时候要有心理预期。5.4 多图网格布局如果要排 2×2 或 3×3 的图网格用subcaption嵌套或者直接算宽度\begin{figure}[htbp] \centering \begin{subfigure}{0.32\textwidth} \includegraphics[width\textwidth]{a.png} \caption{} \end{subfigure} \hfill \begin{subfigure}{0.32\textwidth} \includegraphics[width\textwidth]{b.png} \caption{} \end{subfigure} \hfill \begin{subfigure}{0.32\textwidth} \includegraphics[width\textwidth]{c.png} \caption{} \end{subfigure} \\[1em] \begin{subfigure}{0.32\textwidth} \includegraphics[width\textwidth]{d.png} \caption{} \end{subfigure} \hfill \begin{subfigure}{0.32\textwidth} \includegraphics[width\textwidth]{e.png} \caption{} \end{subfigure} \hfill \begin{subfigure}{0.32\textwidth} \includegraphics[width\textwidth]{f.png} \caption{} \end{subfigure} \caption{六图网格} \end{figure}三个 32% 加起来 96%留 4% 给\hfill的间隙。\\[1em]是换行并加一点垂直间距。这种布局在展示实验结果时特别常用。6. 矢量图与高质量输出的进阶技巧6.1 用 PDF 替代 EPS 的正确姿势前面说过 EPS 已经过时但很多老工具还在导出 EPS。转换方法有几种命令行epstopdf fig.eps生成fig.pdf在线工具搜“eps to pdf”有很多绘图软件直接导出 PDF比如用绘图工具时直接选 PDF 格式转出来的 PDF 是矢量的插入后放大不糊。注意转换时不要选“栅格化”选项否则就变成位图了。6.2 用 TikZ 直接画图彻底告别外部图片如果你的图是流程图、示意图、函数曲线这类可以用代码描述的强烈建议用TikZ直接在 LaTeX 里画。好处是矢量输出无限放大字体与正文一致风格统一改颜色、改文字不用重新导出图片版本控制友好代码 diff 清晰\usepackage{tikz} ... \begin{tikzpicture} \draw[-] (0,0) -- (2,0) node[right] {$x$}; \draw[-] (0,0) -- (0,2) node[above] {$y$}; \draw[thick, blue] (0,0) parabola (2,2); \end{tikzpicture}这段代码画了一个带坐标轴的抛物线。虽然学习曲线陡一点但一旦上手画图效率比“打开绘图软件→画→导出→插入”高得多。6.3 图片压缩与文件体积控制论文投稿时经常有文件大小限制比如不超过 10MB。图片往往是体积大户。压缩思路矢量图用pdfsizeopt或gs压缩 PDFPNG用pngquant或optipng无损/有损压缩JPG降低质量到 80% 左右肉眼几乎无差别我一般用pngquant把 PNG 压到原来的 30% 左右画质损失很小。命令是pngquant --quality65-80 fig.png它会生成一个fig-fs8.png替换原文件即可。6.4 图片与文字的间距控制图片和 caption、正文之间的间距默认值有时偏大或偏小。可以用caption宏包调整\usepackage{caption} \captionsetup{skip6pt}skip控制 caption 与图片之间的间距。如果觉得图片和正文太挤可以在figure环境里加\vspace\begin{figure}[htbp] \vspace{-0.5em} \includegraphics{...} \vspace{-0.5em} \end{figure}负的\vspace是减少间距正的增加。这个技巧在赶版面的时候特别有用。7. 我踩过的那些坑与排查心得7.1 图片显示为黑框或空白有时候编译没报错但图片位置是一个黑框或者空白。常见原因PDF 图版本不兼容某些工具导出的 PDF 版本太新pdfLaTeX 读不了。用gs降级到 1.4 或 1.5 试试。PNG 透明通道问题带 alpha 通道的 PNG 在某些引擎下会显示异常。用图片工具把透明背景填成白色再导出。图片本身损坏文件下载不完整或导出中断。用图片查看器打开确认一下。7.2 编译速度突然变慢图片多了以后编译可能从几秒变成几十秒。原因通常是 LaTeX 每次都在重新处理图片。解决办法用latexmk做增量编译把不常改的图先转成 PDF减少处理开销用draft选项\usepackage[draft]{graphicx}这样图片只显示一个框不实际加载编译飞快。定稿前再去掉draft。draft模式是我写长文档时的救星改文字阶段完全不需要看图片编译速度提升非常明显。7.3 引用图片编号总是对不上\label要放在\caption之后否则引用会出错。正确写法\begin{figure}[htbp] \includegraphics{...} \caption{说明文字} \label{fig:myfig} \end{figure}然后正文里用\ref{fig:myfig}引用。注意\label必须在\caption后面因为编号是 caption 生成的。放前面的话\ref可能引用到上一张图的编号。7.4 换电脑后图片全找不到这是路径写死导致的。解决办法是用相对路径并且把图片放在项目子目录里用\graphicspath统一管理\graphicspath{{figures/}}这样整个项目拷到任何电脑只要figures目录跟着走就能编译。绝对不要用C:\Users\...这种绝对路径。7.5 一个真实的排查案例有次帮人看一个项目图片死活不显示报错信息是Cannot determine size of graphic。查了半天发现图片是一个没有 DPI 信息的 PNG。LaTeX 不知道它的物理尺寸就没法排版。解决办法是用图片工具重新导出指定 DPI 为 300。或者用\includegraphics[width...]强制指定宽度这样 LaTeX 就不需要自己算尺寸了。这个案例说明图片元数据DPI、色彩空间也会影响 LaTeX 处理。导出图片时不要只关注像素数DPI 也要设对。8. 一套可复用的插图工作流把上面所有内容串起来我现在的插图流程是这样的绘图阶段能用 TikZ 就用 TikZ不能用就用绘图工具导出 PDF矢量或 PNG300 DPI无透明通道命名阶段全小写英文加下划线如result_compare_v2.png存放阶段统一放在figures/子目录导言区写\graphicspath{{figures/}}插入阶段用figure环境\centeringwidth0.8\textwidth\caption后跟\label调试阶段路径问题按第 3 节的清单查排版问题调位置参数或加\FloatBarrier定稿阶段去掉draft选项检查所有图片清晰度和编号这套流程跑下来插图基本不会再出问题。偶尔遇到奇怪的报错按“格式→路径→浮动→引擎”的顺序排查也能快速定位。LaTeX 插图这件事说难不难说简单也不简单。它不像 Word 那样拖进去就行但一旦理解了背后的规则你会发现它比 Word 可控得多——图片放哪、多大、什么格式全在你手里。这种掌控感正是 LaTeX 让人上瘾的地方。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询