☰
Overleaf+Elsevier模板论文排版:图片表格参考文献伪代码全攻略
2026/10/3 8:03:48 网站建设 项目流程

做科研的兄弟应该都有这种感觉:Overleaf 这种在线 LaTeX 编辑器,确实是写论文的神器,打开浏览器就能写,不用配环境,随时能看到编译结果。但真到了按 Elsevier 模板投稿的时候,图片老是跑位、表格标题死活不显示、参考文献引用格式不对、伪代码一编译就报错——这些看似不起眼的小问题,往往能卡住你一下午。这篇博文我就把 Elsevier 模板下图片、表格、参考文献、伪代码这几块的高频写法一次讲透,全部是能直接复制、改改就能用的代码,也包含我这几年在 Overleaf 上踩过的坑和总结出来的技巧。

这套经验也适用大部分双栏会议模板和期刊模板,不管你是搞计算机、电子、机械还是数学,只要论文里需要图表和算法,这篇文章都能帮你省下不少时间。

1. 整体思路:为什么用 Overleaf 写 Elsevier 论文

1.1 模板选型背后的逻辑

Elsevier 官方在 Overleaf 上提供好几个版本的模板,最常见的是elsarticle宏包,它本身已经处理好了大部分排版规范,包括双栏、页眉、标题页、作者单位、摘要等。你不需要去手动调\documentclass的参数,直接在 Overleaf 新建项目时搜索 Elsevier,选择官方那个 elsarticle 模板就行。

很多初学者会犯一个错误:自己从零开始写一行\documentclass[preprint,12pt]{elsarticle},然后发现和投稿系统的排版要求对不上。其实 Elsevier 提供了一套非常完整的模板文件,默认就带\journal{}、\bibliographystyle{elsarticle-num}这些配置。用官方模板的好处是,参考文献格式、图表样式、字体字号都已经预设好了,你只需要关注内容本身。

这里多说一句,elsarticle提供了几种模式:preprint模式适合自己阅读和修改阶段,review模式适合返修时给审稿人看,final模式是接近出版的样子。我建议在 Overleaf 上写的时候用preprint,到最后提交前再切成final检查一遍版式是否有超宽表格、图片是否溢出栏宽这类问题。

1.2 需要准备的核心内容

在正式动手前,请先检查你的 Overleaf 项目里是否已经包含了以下这些文件和宏包,它们几乎是所有论文的基础配置:

\usepackage{graphicx} % 插图宏包 \usepackage{booktabs} % 三线表 \usepackage{float} % 图表位置精确控制 \usepackage[numbers]{natbib} % 参考文献引用样式 \usepackage{algorithm} % 伪代码环境 \usepackage{algpseudocode}% 伪代码排版 \usepackage[hidelinks]{hyperref} % 链接跳转,hidelinks 去掉红色边框

如果用的是 Overleaf 的 Elsevier 官方模板,graphicx、natbib一般已经包含,但booktabs、algorithm这类需要自己加。建议把上面的宏包全部放在\documentclass下面的一小段区域里,用注释分好类,项目变大后你就知道这有多重要了。

2. 图片的插入与引用

2.1 图片环境的基本写法

Elsevier 模板是双栏排版,所以在插图时要明确图片占单栏还是跨双栏。绝大多数单栏图片用下面的写法:

\begin{figure}[htbp] \centering \includegraphics[width=0.9\linewidth]{figures/result.png} \caption{实验结果的对比分析。} \label{fig:result} \end{figure}

这里面有几个细节要重点解释。

[htbp]是位置参数,h 表示 here(当前位置),t 表示 top(页面顶部),b 表示 bottom(页面底部),p 表示单独一页放浮动体。四个字母一起写的意思是:LaTeX 会按 h → t → b → p 的顺序尝试摆放。新手经常以为写了 h 就一定会放在当前位置,实际上 LaTeX 会根据页面布局自行调整,这个机制是很多初学者最容易困惑的地方。想要“强制放这里”,可以把参数写成[H],这需要引入float宏包,但投稿前建议还是改回[htbp],因为强制位置可能造成大片空白。

\label{fig:result}这一行必须放在\caption的后面,这是最常见的坑之一。如果先写\label再写\caption,正文里引用出来会是一个错误的编号,而且排查起来非常隐蔽。

width=0.9\linewidth表示图片宽度是当前栏宽度的 90%。这里的\linewidth会随着环境变化,单栏时就是单栏宽度,双栏时就是双栏宽度。不要用width=0.45\textwidth这类死值,在单栏跨栏场景下很容易出问题。

2.2 双栏模板中的通栏图

当你需要放一张很宽的图时,比如系统架构图、流程时序图、大尺寸热力图,就需要让它跨过整页两栏,这时要用带星号的figure*:

\begin{figure*}[htbp] \centering \includegraphics[width=0.98\textwidth]{figures/architecture.png} \caption{系统的整体架构图。} \label{fig:architecture} \end{figure*}

注意这里用的是\textwidth,而不是\linewidth,因为figure*已经处于通栏状态,用\linewidth在某些情况下会只占据一个栏的宽度,导致图片尺寸与预期不符。

还有一个技巧是图片路径的管理。我的习惯是建立一个独立的figures文件夹,所有图片都放里面,引用时写相对路径figures/xxx.png。这样项目目录干净,也方便后期打包投稿。

如果你有多张小图想并排放在一个浮动体内,可以用subfigure宏包。Elsevier 模板对子图的支持比较友好,下面是一个双图并排的示例:

\begin{figure}[htbp] \centering \begin{subfigure}{0.45\linewidth} \centering \includegraphics[width=\linewidth]{figures/result_a.png} \caption{方法 A 的效果。} \label{fig:result_a} \end{subfigure} \hfill \begin{subfigure}{0.45\linewidth} \centering \includegraphics[width=\linewidth]{figures/result_b.png} \caption{方法 B 的效果。} \label{fig:result_b} \end{subfigure} \caption{不同方法的视觉效果对比。} \label{fig:results} \end{figure}

正文中如果需要分别引用两张子图,可以写\ref{fig:result_a}和\ref{fig:result_b},如果需要整体引用,就写\ref{fig:results}。子图里的\hfill的作用是把两个子图推到两边,让中间留出均匀空隙,这个细节能让排版更好看。

我用这个结构写过很多论文,Elsevier 模板中完全没有出现过冲突问题,比minipage拼图方案要稳定很多。

3. 表格的制作与引用

3.1 Elsevier 模板下的三线表

学术论文里最推荐的表格形式是三线表,也就是顶线、表头线和底线,没有竖线,看起来清爽且符合出版规范。Elsevier 模板同样遵循这个风格。

基本写法如下:

\begin{table}[htbp] \centering \caption{不同方法的实验指标对比。} \label{tab:compare} \begin{tabular}{lcccc} \toprule 方法名称 & 准确率(\%) & 召回率(\%) & F1值 & 时间(s) \\ \midrule 方法A & 92.5 & 90.1 & 91.3 & 12.5 \\ 方法B & 94.0 & 91.8 & 92.9 & 10.2 \\ 方法C & 96.2 & 94.3 & 95.2 & 8.7 \\ \bottomrule \end{tabular} \end{table}

这里\toprule、\midrule、\bottomrule来自booktabs宏包,它们产生的线条粗细适中,是出版界非常认可的规范。有人问能不能加竖线,我的建议是能不画就不要画,加了竖线会显得非常业余,审稿人看了也会有不好的印象。

表格的\label同样要放在\caption之后,这个规则和图片一致。如果表格的某个单元格内容比较长,而你的列宽又有限,这时需要控制列宽。原始tabular环境不会自动换行,长文本会被硬挤出去。一个解决办法是用tabularx宏包,它允许你指定表格的总宽度,然后自动分配列宽:

\usepackage{tabularx} \begin{table}[htbp] \centering \caption{长文本内容在表格中的自动换行示例。} \label{tab:tabularx} \begin{tabularx}{\linewidth}{lX} \toprule 配置项 & 说明 \\ \midrule 学习率 & 这里是比较长的说明文字,会在表格中自动换行显示。 \\ 批量大小 & 同样会自动换行。 \\ \bottomrule \end{tabularx} \end{table}

{lX}里的X是tabularx专门提供的一种列类型,它会自动铺满剩余宽度并自动换行,非常实用。

3.2 表格跨栏与横排

有时候表格列数太多,单栏放不下。这时可以像图片一样使用带星号的table*环境,让表格横跨两栏:

\begin{table*}[htbp] \centering \caption{大型表格跨双栏显示。} \label{tab:wide} \begin{tabular}{llllll} \toprule ...列内容... \bottomrule \end{tabular} \end{table*}

还有一种情况是表格实在太宽,即使跨双栏也放不下,这时可以考虑把表格旋转 90 度横排。常规做法是把sidewaystable环境配合rotating宏包使用:

\usepackage{rotating} \begin{sidewaystable}[htbp] \centering \caption{旋转表格示例。} \label{tab:rotated} \begin{tabular}{lllllll} \toprule ...列内容... \bottomrule \end{tabular} \end{sidewaystable}

不过我的建议是慎用旋转表格,只在数据实在无法压缩的情况下使用。审稿人阅读旋转表格的体验并不好,如果你能把列数精简、把字段缩写一下,通常都能解决。

4. 图表的标题、标签与交叉引用

4.1 caption 与 label 的正确姿势

前面反复强调\label要放在\caption后面,这里专门说一下原因。\caption内部会更新计数器并生成编号,\label的作用是把当前计数器的值记录到.aux文件中。如果你把\label写在\caption前面,它记录的是上一级环境的计数器值,结果就是引用编号和实际显示编号不一致。

我在写论文时见过太多这样的报错,症状是:图片显示是“图 3”,正文引用出来却是“图 2”,怎么查都查不出问题。实际上只要把 label 移到 caption 下面一行就能解决。

4.2 交叉引用与 hyperref 的配合

用\ref{fig:result}可以对图片进行交叉引用,用\ref{tab:compare}对表格进行交叉引用。为了优化显示效果,建议把引用写成这样:

如图~\ref{fig:result} 所示,实验结果验证了方法的有效性。 表~\ref{tab:compare} 列出了所有方法的详细对比数据。

中间的~是一个不换行空格,作用是让“图”和编号不会跨行断开,这个细节会让排版更专业。

hyperref宏包能够让你在 PDF 中点击引用编号时跳转到对应位置,在 Overleaf 编译出来的 PDF 里非常方便。默认情况下超链接文字会有一个红色边框,投稿时很不美观。如果你用[hidelinks]选项,链接文字不会有任何视觉变化,既保留了跳转功能,又不影响外观。这套配置在 Elsevier 模板中同样适用。

5. 参考文献管理与引用格式

5.1 Elsevier 模板如何选参考文献风格

Elsevier 投稿系统一般要求使用elsarticle-num这种数字编号样式,也就是正文中引用是 [1]、[2],文末按出现顺序排列。在 elsarticle 模板里,参考文献部分通常这样配置:

\bibliographystyle{elsarticle-num} \bibliography{references}

其中references.bib是你的 BibTeX 数据库文件,在 Overleaf 中可以在左侧文件区创建一个新的.bib文件,然后把文献条目粘贴进去。

如果你习惯用natbib宏包,还可以在上面的基础上强化引用命令,支持更丰富的引用方式和姓名年份混合引用。一般情况下,Elsevier 模板自带的 bibtex 命令就够用了,但对需要“作者 + 年份 + 编号”并存的场景,natbib 会方便很多:

\usepackage[numbers,sort&compress]{natbib} \bibliographystyle{elsarticle-num}

这里sort&compress非常重要,它能实现参考文献引用的自动排序和压缩,比如你正文中引用了[1,2,3,4],最终显示会合并成[1-4],这在热点里有大量需求,也是很多人在写审稿意见回复时最想要的功能。

5.2 参考文献连续引用写法

如果你的参考文献列表不带压缩效果,或者你希望手动控制连续引用,可以用下面两种写法:

\cite{ref1,ref2,ref3,ref4} \cite{ref1-ref4}

第一种写法是常规的多文献引用,第二种-写法需要宏包支持,在普通\cite中不一定有效。更靠谱的做法是使用 natbib 配合sort&compress选项,或者干脆让 bibtex 输出时自动压缩。

有些刚开始用 LaTeX 的朋友从 Pubmed、Google Scholar 或者 CNKI 导出 bib 条目后会遇到一个典型问题:文献条目里的字段不完整,比如缺少author或者journal,导致编译时出现 warning。我的建议是尽量用 Google Scholar 的 BibTeX 导出,它比很多数据库导出的字段都完整。Pubmed 也有导出 BibTeX 的功能,但部分旧文献的字段需要手动补全。

5.3 维护 bib 文件的实用技巧

bib 文件里每一项都有一个唯一的 key,比如:

@article{smith2023deep, author = {Smith, John and Wang, Xia}, title = {Deep Learning for Medical Image Analysis}, journal = {Medical Image Analysis}, year = {2023}, volume = {85}, pages = {102456} }

正文引用时直接写\cite{smith2023deep}即可。这个 key 尽量用“姓名首字母 + 年份 + 主题词”的方式命名,尤其是项目长期维护时,你不可能记住每个随机生成的数字编号代表哪篇文献。

还有一个很多人不知道的小技巧:\nocite{*}可以把 bib 文件里的所有文献都列在参考文献中,即使正文没有引用。这在草稿阶段整理相关工作时很好用,但投稿前一定要删掉,因为出版方要求参考文献必须是正文实际引用的文献。

6. 伪代码的编写与排版

6.1 环境选型与基础写法

写伪代码是学术论文里的高频需求,Elsevier 模板下我用得最稳的组合是algorithm+algpseudocode,它提供类似 LaTeX 语法的伪代码排版能力,也支持For、While、If、Function等经典算法元素。

基本结构如下:

\usepackage{algorithm} \usepackage{algpseudocode} \begin{algorithm}[htbp] \caption{基于 MapReduce 的并行数据处理算法。} \label{alg:mapreduce} \begin{algorithmic}[1] \Function{MapReduce}{$data$} \State $pairs \gets \emptyset$ \For{each record $r$ in $data$} \State $key \gets \text{ExtractKey}(r)$ \State $value \gets \text{ExtractValue}(r)$ \State Add $(key, value)$ to $pairs$ \EndFor \State \Return $pairs$ \EndFunction \end{algorithmic} \end{algorithm}

编译出来的效果是每条语句前面带行号,逻辑清晰。其中[1]是行号参数,\State表示一行普通语句,\For到\EndFor是一个循环结构,\Function到\EndFunction是一个函数块。\gets生成赋值箭头,$\emptyset$生成空集符号,这些都是很常用的写法。

正文中引用算法时,用算法~\ref{alg:mapreduce},和图表完全一致。生成的编号由algorithm环境自动管理,不需要手动编号。

6.2 在 Elsevier 模板中如何规避冲突

我在使用中发现,algorithm宏包和elsarticle模板配合时,最需要注意的点是浮动体位置和标题显示。如果算法块总是跑到页面最后面去,多半是因为位置参数写得不合理。建议保持[htbp]或者[H],不要完全省略位置参数。

还有一个常见需求是算法里的注释。algpseudocode提供了\Comment{...}命令:

\State $x \gets 0$ \Comment{初始化}

这样注释会显示在语句右侧,非常整齐。但如果注释文字太长,容易超出版心,建议注释简洁一点。

如果你写的伪代码需要跨栏显示,可以使用带星号的algorithm*环境,用法与figure*一致。但要注意,双栏模板里跨栏算法比较占空间,尽量精简算法内容,不要让它占据版面过大比例。

7. 常见问题与排查技巧实录

7.1 表格横超版、伪代码不显示怎么办

表格超出栏宽是最常见的问题,表现是表格内容被截断,或者编译时出现 overfull hbox 警告。排查步骤很简单:先确认是不是tabular中列数太多,然后用tabularx放宽动态列,实在不行再转置表格行列结构,把行变列、列变行。百分之八十的超宽表格能靠转置解决。

伪代码不显示,或只显示框不显示内容,多半是宏包冲突导致的。algorithm和algorithmic是两套不同的宏包体系,algorithmic是老版本,algpseudocode是新版本,二者不能混用。如果你在导言区同时引入了旧版和新版,伪代码环境很可能直接报错或空白。我的建议是只保留:

\usepackage{algorithm} \usepackage{algpseudocode}

千万不要再引入algorithmic或algorithmicx之外的旧宏包。

7.2 编译卡住、引用显示 ?? 的排查方式

Overleaf 在第一次编译时,往往需要跑两遍或者三遍 PDFLaTeX,因为交叉引用、参考文献、目录这些信息要先写入.aux和.bbl文件,第二次编译才能读出来。如果你打开编辑器立即全选编译,第一次看到??是正常现象,等编译完成后自动刷新就会正常显示。

如果编译完成后依然是??,请检查.bib文件是否存在语法错误,比如少了}、中文字符误用、条目 key 重复等,这些都会导致参考文献编译失败。一个很有用的排查方法是看 Overleaf 日志面板,搜索警告关键字Warning和Error,大部分线索都会直接显示在那一行。

如果你在 Overleaf 上遇到过编译卡死的感觉,先看看是不是某个图片文件过大。我有一张 100 MB 的 PNG,插入后整个 PDF 体积爆炸,编译过程明显变慢。解决办法是用在线压缩工具把图片压到 2 MB 以内,或者转成 PDF/JPG 格式,投稿要求一般也接受 PNG、EPS、PDF 三种格式。

[ \boxed{\text{Overleaf 项目里建议按功能拆文件}} ]

第 7 个小标题专门整理了一个经验速查表,方便你在投稿前逐条排查:

现象原因解决办法
图片位置乱跑未使用浮动体参数或参数过少用[htbp],必要时用[H]
图片引用编号对不上\label在\caption之前将 label 移到 caption 后
表格超宽列数过多或文本过长转置、压缩、用 tabularx
表格标题不换行表头文字过长使用\makecell或 tabularx
参考文献显示 ??bib 文件语法错误或未编译两遍检查 bib,重新编译
多篇引用不压缩未设置 natbib 参数用[sort&compress]
伪代码没内容新旧宏包混用只保留 algpseudocode
编译特别慢图片文件过大压图、转格式

7.3 关于图片路径和命名的那点坑

Overleaf 对中文路径的支持一直比较薄弱。如果你的图片路径或者文件名里带中文,在某些编译器配置下会找不到图片,甚至直接编译失败。我的习惯是全部用英文小写、下划线连接的方式命名图片,比如loss_curve.png、architecture_v2.pdf。这样既避免路径问题,也能让你的项目文件更有条理。

引用图片路径时,有时候你会看到figure/和figures/两种写法混用,这在多人协作的 Overleaf 项目里很容易引发找不到文件的问题。建议从一开始就统一用一个文件夹名,并让所有队友都按同一个规则添加文件。顺带说一句,Overleaf 的文件编译顺序不依赖你在左侧面板看到的顺序,它默认从主.tex文件开始,所以不要试图通过拖拽文件名来调整编译顺序,没有用。

还有一个细节是图片格式的选择。Elsevier 投稿通常要求矢量图优先,因为 PDF 输出时清晰度更高。如果你只有位图,比如截图,建议至少保证分辨率在 300 dpi 以上,不要直接放一个 72 dpi 的网页截图,放大后模糊到没法看。Overleaf 本身不做图片放大处理,图片在 PDF 里的实际尺寸取决于\includegraphics的 width 参数,如果 width 设置得比图片原始尺寸大,就会发现图片变得很模糊。这个经验我在写实验对比图时踩过太多次了,现在所有图片都会先检查原始分辨率和显示尺寸的比例。

如果你用 Excel 画了折线图,直接截图放到论文里,那效果通常不忍直视。更好的做法是把 Excel 图表导出成 PDF,或者使用 draw.io、matplotlib、Python 脚本生成 PDF 矢量图,再插入 Overleaf。这能让图表的字迹在任何缩放级别下都保持清晰,也是出版排版的基本要求。

写参考文献的时候,有一些小技巧我从一开始用 LaTeX 就在用,一直没有换过。一是保持 bib 文件按主题或字母顺序排列,文件大了以后查找起来非常快;二是每条文献都尽量补齐 DOI 和访问日期,这样 Elsevier 审稿系统自动识别文献信息时准确率高很多;三是在最终投稿前,用\nocite{*}列出全部文献检查一遍,确认没有多引或漏引,再把这行代码删掉。

最后的几点个人体会

做科研写作这几年,我最大的感受是 LaTeX 和 Overleaf 这类工具真正教会你的不只是排版,更是“规范”二字。图片该怎么标注、表格该怎么呈现、参考文献该用什么格式、伪代码要怎么写得让人一眼看懂,这些表面上是格式问题,实际上是你对“科研表达”的理解深度。Elsevier 模板在 Overleaf 上其实是一个非常友好的起点,官方已经把大头都帮我们处理好了,我们只需要摸清它的脾气,就能把精力全部放在内容本身。

如果这篇文章能帮你少走一些我当年走过的弯路,哪怕只是解决了一个图片乱跑的下午,那它的价值就已经达到了。希望你能把这个页面当作一个随手能查的速查手册,写正文遇到图表、引用、伪代码问题的时候,直接翻到对应小节,照着代码改一改,编译就过了。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询