
1. 为什么“导入一张图”值得单独拎出来讲很多人第一次接触 LaTeX 排版卡住的地方往往不是公式也不是参考文献而是最不起眼的插图。我见过不少同学公式敲得飞起\cite用得贼溜结果一到插图环节就翻车图片不显示、位置乱跑、路径报错、编译出来糊成一团。这些问题的根源其实都集中在“导入图片”这一件事上。LaTeX 导入图片说白了就是把外部图像文件引入到.tex文档里让排版引擎在编译时把它放到指定位置。听起来简单但背后涉及宏包选择、编译引擎、路径管理、尺寸控制、浮动体定位这一整套东西。它解决的核心问题是让图片在文档中稳定、清晰、可控地出现而不是靠手动拖拽碰运气。这篇内容适合三类人看。第一类是刚上手 LaTeX 的新手想搞清楚插图到底该怎么写第二类是用了一段时间但总被图片位置折磨的人第三类是需要批量处理图片、对排版一致性有要求的论文写作者。我会从宏包选型讲到实操细节再到踩坑排查尽量把每个“为什么”都讲透让你看完能直接抄作业。2. 导入图片的整体思路与宏包选型2.1 先搞清楚你的编译引擎是谁在动手写代码之前有一件事必须先确认你用的是哪种编译引擎。这个决定了你后面能用什么图片格式、该引哪个宏包。常见的引擎有pdflatex、xelatex、lualatex这几种它们对图片格式的支持是不一样的。pdflatex直接支持 PNG、JPG、PDF 这三种格式这是它最省心的地方。xelatex和lualatex同样支持这三种而且对中文支持更好所以现在中文文档基本都用xelatex。至于 EPS 格式那是老式latex加dvips流程的产物现在除非你维护很老的模板否则没必要碰。我个人的建议是中文文档一律用xelatex图片统一用 PDF 或 PNG。矢量图比如用绘图工具导出的图优先用 PDF位图照片、截图用 PNG。JPG 虽然也能用但它是有损压缩图里如果有文字或线条边缘容易糊能不用就不用。2.2 graphicx 是绝对主力别绕弯子LaTeX 插图的核心宏包就是graphicx它提供了\includegraphics这个命令。几乎所有插图需求靠它加几个参数就能搞定。导言区写一行\usepackage{graphicx}有人会问那graphics宏包呢那是老版本功能弱参数写法也不一样直接忽略。还有人会提到float宏包那个是用来增强浮动体控制的不是用来导入图片的属于配套工具后面讲位置控制时会用到。graphicx的强大之处在于它的可选参数非常丰富宽度、高度、缩放、旋转、裁剪、页面选择全都能通过键值对的方式传进去。你不需要记太多掌握最常用的五六个参数就能应付九成以上的场景。2.3 图片格式的选择逻辑为什么我一直强调格式选择因为格式选错轻则图片模糊重则编译直接报错。这里给一个简单的判断表图片类型推荐格式原因数据图表、流程图PDF矢量任意缩放不糊软件截图PNG无损文字边缘清晰照片、实拍图JPG体积小照片本身对无损要求低公式截图不推荐应该用 LaTeX 重打而不是贴图扫描件PNG 或 PDF视清晰度需求而定提示如果你的图是 MATLAB、Python 画出来的导出时直接选 PDF 或 EPS 转 PDF别导出成低分辨率 PNG否则打印出来全是马赛克。3. 核心细节解析与实操要点3.1 \includegraphics 的参数到底怎么填先看一个最基础的写法\includegraphics[width0.8\textwidth]{figures/result.pdf}这里width0.8\textwidth表示图片宽度占正文宽度的 80%。为什么不直接写死厘米数因为\textwidth会随着文档版心自动变化你换个模板、调个页边距图片宽度会跟着自适应不用手动改。这是我最推荐的做法。常用的参数有这么几个width指定宽度最常用height指定高度一般不单独用容易变形scale整体缩放比例比如scale0.5angle旋转角度比如angle90trim配合clip裁剪图片格式是trim左 下 右 上page当图片是 PDF 且有多页时指定用第几页这里有个关键点同时指定 width 和 height 会强制拉伸图片导致变形。除非你就是要这个效果否则只给一个维度另一个让 LaTeX 按原始比例自动算。这个坑我踩过当年把一张流程图拉得又扁又宽被导师一眼看穿。3.2 路径管理别让“找不到图片”毁了一天图片路径是新手报错的重灾区。\includegraphics里的路径默认是相对于主.tex文件所在目录的。如果你把图片放在figures子文件夹里就要写figures/xxx.pdf。更省事的做法是在导言区声明图片搜索路径\graphicspath{{figures/}{images/}}这样你写\includegraphics{result.pdf}时LaTeX 会自动去figures/和images/里找。注意路径要用花括号包起来每一条路径单独一对花括号末尾带斜杠。这个写法很多人不知道写对了能省掉大量重复路径。还有一个坑文件名里不要有空格、中文、特殊符号。图 1.png、结果(最终版).pdf这种命名在不同系统、不同引擎下表现不一致轻则报错重则静默失败。统一用英文小写加下划线或连字符比如result_final.pdf这是最稳的。3.3 浮动体figure 环境是干嘛的直接写\includegraphics也能显示图片但图片会死死卡在你写代码的位置前后留白很难看。所以实际写作中图片几乎都放在figure环境里\begin{figure}[htbp] \centering \includegraphics[width0.8\textwidth]{figures/result.pdf} \caption{实验结果对比} \label{fig:result} \end{figure}figure是一个浮动体意思是 LaTeX 会根据排版需要把图片“浮动”到合适的位置而不是硬塞在当前位置。[htbp]是位置优先级h 当前位置、t 页顶、b 页底、p 单独一页。LaTeX 会按这个顺序尝试但最终放哪由它决定。\centering让图片居中\caption生成图注\label给图片编号方便正文里用\ref{fig:result}引用。这套组合是标准写法建议直接背下来。注意\label必须放在\caption之后否则引用编号会出错。这个顺序问题坑过无数人。3.4 图片位置总乱跑怎么办“我明明写在第二段图片却跑到第五页去了”——这是 LaTeX 插图最经典的抱怨。原因就是浮动体机制LaTeX 觉得当前位置放不下就往后挪。解决办法有几个层次。轻度调整可以放宽位置参数比如[!htbp]加感叹号表示“强烈建议”。中度调整可以在导言区设置浮动体允许占用的比例\renewcommand{\topfraction}{0.9} \renewcommand{\bottomfraction}{0.8} \renewcommand{\textfraction}{0.1}这几个参数控制页顶、页底、正文最少占多少比例调大浮动体比例图片更容易被安排在当页。重度调整可以用float宏包的[H]参数强制图片“就在这里”\usepackage{float} ... \begin{figure}[H]但我要提醒一句[H]用多了会导致页面留白严重排版很难看。论文写作里导师通常更希望图片自然浮动而不是硬卡位置。所以优先用参数微调实在不行再上[H]。4. 完整实操流程与关键环节4.1 从零开始的一次完整插图假设你现在有一个主文件main.tex图片放在figures/目录下文件名是pipeline.pdf。完整流程是这样的。第一步导言区引入宏包和路径\documentclass{article} \usepackage{graphicx} \usepackage{float} \graphicspath{{figures/}}第二步正文里插入图片\begin{figure}[htbp] \centering \includegraphics[width0.85\textwidth]{pipeline.pdf} \caption{系统整体流程} \label{fig:pipeline} \end{figure}第三步正文引用如图~\ref{fig:pipeline} 所示整个流程分为三个阶段。注意\ref前面加了个波浪号~这是不换行空格防止“图”和编号被拆到两行。这个细节很小但很显专业。第四步编译。用xelatex的话命令是xelatex main.tex如果用了参考文献或交叉引用通常要编译两遍让编号稳定下来。4.2 多图并排怎么排论文里经常需要两张图并排。最直接的方式是用minipage\begin{figure}[htbp] \centering \begin{minipage}{0.48\textwidth} \centering \includegraphics[width\textwidth]{figures/a.pdf} \caption{方案A} \label{fig:a} \end{minipage} \hfill \begin{minipage}{0.48\textwidth} \centering \includegraphics[width\textwidth]{figures/b.pdf} \caption{方案B} \label{fig:b} \end{minipage} \end{figure}两个minipage各占 48% 宽度中间用\hfill撑开。注意minipage里的\includegraphics宽度写\textwidth这里的\textwidth指的是minipage自己的宽度不是整页宽度所以图片会自动填满各自的小格子。如果想让两张图共用一个总图注可以用subcaption宏包那个更规范但配置稍复杂。日常够用的话上面这种写法已经能应付大部分场景。4.3 图片尺寸的计算过程很多人对width0.8\textwidth这种写法是“照着抄”但不知道 0.8 是怎么来的。其实很简单假设你的正文宽度是 15 厘米图片原始宽度是 20 厘米那图片放不下必须缩。缩到多少合适一般留一点边距取正文宽度的 80% 到 95% 之间。如果你想让图片精确占满正文宽度就写width\textwidth。如果想让图片宽度等于某个具体厘米数可以写width10cm。但具体厘米数在不同模板下可能溢出所以相对宽度更安全。高度方面一般不建议指定。因为一旦指定高度图片可能被拉伸变形。如果你确实需要控制高度比如防止图片太高跨页可以用height0.4\textheight同时配合keepaspectratio\includegraphics[width0.8\textwidth, height0.4\textheight, keepaspectratio]{figures/big.pdf}keepaspectratio会保证图片按原始比例缩放不会变形。这个参数在同时给宽高时非常有用。4.4 裁剪与旋转的实操有时候图片周围有多余白边或者你只需要图片的某一部分。这时候用trim加clip\includegraphics[trim10mm 20mm 10mm 20mm, clip, width0.8\textwidth]{figures/raw.pdf}trim的四个值顺序是左、下、右、上单位可以是 mm、cm、pt 等。clip表示真的裁掉不加clip的话trim只是移动可视区域不裁剪。旋转用angle\includegraphics[angle90, width0.6\textwidth]{figures/wide.pdf}旋转 90 度常用于把横长的表格图竖过来放。注意旋转后图片的占位会变可能需要重新调宽度。5. 常见问题与排查技巧实录5.1 报错“File not found”怎么查这是最高频的报错。排查顺序是这样的确认文件名拼写包括大小写。Linux 下大小写敏感Result.pdf和result.pdf是两个文件。确认路径。如果用了\graphicspath检查花括号和斜杠有没有写错。确认文件真的在那个目录里。有时候图片被挪走了自己忘了。确认扩展名。有些引擎会自动补.pdf有些不会写全最保险。确认文件名没有空格和特殊字符。我一般会在报错后先把\includegraphics的路径改成绝对路径试一下如果能显示说明是相对路径问题如果还不显示说明是文件名或格式问题。这个二分法排查很快。5.2 图片显示但模糊怎么办模糊基本两个原因一是原图分辨率不够二是格式选错。如果是截图检查截图时是不是被压缩了如果是数据图重新导出成 PDF 矢量格式。位图的话确保有效像素足够一般印刷要求 300 DPI 以上。还有一个隐蔽原因有些工具导出的 PDF 里嵌的是低分辨率位图看起来是 PDF其实是糊的。这种情况只能回源头重新导出。5.3 图片位置和预期差太远先别急着骂 LaTeX。检查这几点图片是不是太大了当前页放不下浮动体参数是不是太严格是不是连续好几个 figure 挤在一起。解决办法前面讲过放宽比例参数或者适当调整图片尺寸。如果实在需要图片紧跟某段文字可以用[H]但要接受页面留白。另一个技巧是把图片放在段落之后而不是段落中间给 LaTeX 更多排版余地。5.4 常见问题速查表现象可能原因解决办法File not found路径/文件名错误检查拼写、用 graphicspath图片变形同时指定宽高只给宽度或加 keepaspectratio图片模糊分辨率低或格式错换 PDF/PNG提高 DPI位置乱跑浮动体机制调比例参数或适度用 [H]编号引用错label 位置不对label 放 caption 之后编译报错格式不支持换引擎或转格式图片超出边界宽度过大用相对宽度如 0.8\textwidth提示遇到报错先看日志文件.log里的第一处错误后面的错误往往是连锁反应解决第一个通常就好了。5.5 几个我踩过的坑第一个坑图片文件名用了中文在 Windows 上编译通过换到 Linux 服务器上直接报错。后来统一改成英文再没出过问题。第二个坑\label写在\caption前面引用出来的编号是上一张图的。这个错误很隐蔽因为不报错只是编号错查半天才发现。第三个坑用[H]强制定位结果一页里塞了三张图页面底部留了一大片空白被审稿人吐槽排版差。后来改成[htbp]让 LaTeX 自己安排反而好看多了。第四个坑PDF 图片有多页\includegraphics默认只取第一页结果引错了图。后来学会用page2指定页码。6. 进阶技巧与效率提升6.1 用命令批量统一图片宽度如果你文档里图片很多每张都写width0.8\textwidth很啰嗦。可以在导言区定义一个命令\newcommand{\myfig}[2]{% \begin{figure}[htbp] \centering \includegraphics[width0.8\textwidth]{#1} \caption{#2} \end{figure} }之后写\myfig{figures/a.pdf}{方案A}就行。这样不仅省事还能保证全文档图片宽度一致改的时候只改一处。这个技巧在写长论文时特别有用。6.2 图片文件夹的规范管理项目一大图片就多。我的习惯是按章节建子文件夹figures/ch1/、figures/ch2/然后在\graphicspath里把子目录都列上。这样找图方便也不会所有图堆在一个文件夹里。命名上用“章节号_内容_版本”的格式比如ch2_pipeline_v3.pdf。版本号能帮你区分修改记录避免覆盖了旧图又后悔。6.3 导出图片时的参数建议从 Python 的 matplotlib 导出时我一般这样设置plt.savefig(result.pdf, bbox_inchestight, pad_inches0.05)bbox_inchestight会自动裁掉周围白边pad_inches控制留白大小。这样导出的 PDF 直接插入 LaTeX不用再手动 trim省事很多。从绘图软件导出时字体尽量嵌入避免换电脑后字体丢失导致显示异常。这个细节在跨平台协作时特别重要。6.4 图片与文字的间距控制有时候图片和正文贴得太近显得拥挤。可以在 figure 环境里加一点垂直间距\vspace{0.5em}或者用\captionsetup调整图注和图片的间距。这些微调不影响大局但能让排版更舒服。我个人习惯在图片上方留一点空下方图注紧跟整体看起来更紧凑。7. 关于图片导入这件事的个人体会说到底LaTeX 导入图片的难点不在命令本身而在对浮动体机制和路径管理的理解。命令就那么几个参数也就那么几组真正让人头疼的是“为什么图片不听话”。一旦你理解了 LaTeX 是在帮你做全局排版优化而不是简单地执行“把图放这里”很多困惑就迎刃而解了。我现在写文档图片一律 PDF 或 PNG路径统一用\graphicspath宽度统一用相对值位置参数用[htbp]让 LaTeX 自己安排。偶尔需要强制位置才用[H]但会控制数量。这套组合用了几年基本没再被图片问题卡住过。最后分享一个小技巧如果你实在搞不定某张图的位置把它单独放在一个段落之后前后各留一个空行给 LaTeX 足够的操作空间通常就能得到比较理想的结果。图片排版这件事顺着 LaTeX 的脾气来比跟它硬刚要省心得多。