IEEE投稿LaTeX工程化实践:模板、编译与源文件打包

发布时间:2026/11/3 6:42:41
IEEE投稿LaTeX工程化实践:模板、编译与源文件打包

1. 先想清楚:为什么IEEE投稿这条路要用LaTeX

第一次给IEEE的会议投文章,我用Word排版排到凌晨三点,双栏、公式编号、参考文献顺序,改一处崩三处。后来换成LaTeX,前两个小时确实痛苦,但一旦工程跑通,后面每一次改稿、每一个合作者接手,效率差距是碾压级的。这篇就把我从零搭环境、改模板、调编译、到最后把源文件打包上传的整条链路摊开讲,重点放在那些官方模板文档里不会写、但第一次投稿一定会踩的坑上。核心关键词先摆出来:LaTeX、IEEE论文模板、IEEEtran文档类、BibTeX参考文献、latexmk编译、投稿源文件打包,这些是贯穿全文的主线。适合谁看?三类人:第一次投IEEE会议或期刊、只会Word的研究生;用LaTeX写过普通报告但没碰过IEEEtran的作者;以及被合作者甩了一个编译不过的工程包、需要快速救火的同学。读完你应该能做到:本地跑通一份双栏IEEE格式的稿件,图表参考文献全部正确,页数可控,最后打出一个投稿系统能接受的PDF和源文件压缩包。

1.1 从Word切到LaTeX,真正的取舍点在哪

很多人把这件事理解成"排版工具之争",其实不是。Word的问题不在于它排不出双栏,而在于格式与内容是耦合的:你在正文里手动调过的每一处行距、每一个图注字号,都是一颗定时炸弹,等审稿意见回来要求加两页内容,前面的手工微调全部失效,你得从头再捋一遍。LaTeX把这层关系倒过来了——内容写在.tex里,格式交给.cls文档类,你调版面的时候是在调参数,不是在拖文本框。

对IEEE投稿来说,这个倒置有三个直接好处。第一是模板即规范:出版方给的IEEEtran.cls已经把栏宽、字号、图注位置、参考文献样式全部定死,你只要不违规改动,格式审查这一关基本不会出问题。第二是参考文献自动编号:IEEE要求按正文引用顺序编号,用BibTeX加上IEEEtran.bst,顺序是自动排的,插一条删一条都不用手工维护。第三是多人协作可合并:纯文本文件能diff、能合并,不会出现"两个人同时改一份docx、最后互相覆盖"的惨剧。

代价也很实在:你要花时间学语法,要接受"编译一次才知道结果"的反馈延迟,还要处理各种看不懂的报错。我的判断标准很简单——如果你的稿子有超过10个公式、超过5张图、参考文献超过20条,LaTeX的投入产出比就是正的。低于这个量级,用什么都行,别为了用而用。

1.2 整条工作流的四层结构,先建立地图

新手最容易犯的错是直接下载模板、双击打开、开始写,然后在某个报错上卡一整天。我建议先在心里建一张四层地图,出问题时能快速定位是哪一层坏了:

层级组成出问题时的典型症状
发行版层TeX Live 或 MiKTeX,提供编译器与宏包提示File xxx.sty not found
模板层IEEEtran.cls、.bst、示例.texUndefined control sequence \IEEEPARstart
源码层你的.tex、.bib、图片文件图片不显示、引用显示为[?]
编译链层pdflatex、bibtex、latexmk 的调用顺序参考文献空白、目录不更新、页码错乱

这张表看着朴素,但非常救命。比如"引用显示成问号",90%的人在源码层找问题,其实那是编译链层——.bbl文件根本没生成。后面第5节我会把这张表展开成一份速查清单。

2. 环境搭建:发行版、编辑器与工程管理

环境这一步,我的建议是别折腾花活,一次装对,之后三年不用管。太多人在这里追求"最轻量""最优雅",结果宏包缺一半,每次编译都在补装。你要的是能跑通IEEE模板,不是搭一个艺术装置。

2.1 TeX发行版:TeX Live 与 MiKTeX 怎么选

目前主流就两个选择,外加一个在线方案。我把对比列清楚,你按自己的场景对号入座:

方案安装体积宏包策略适合场景我的评价
TeX Live 完整版约 5–8 GB一次装全,离线可用长期写论文、网络不稳、要投稿首选,装完基本不再折腾
TeX Live 基础版 + 按需装约 500 MB 起用tlmgr手动补磁盘紧张、有经验可以,但要预判会用到哪些包
MiKTeX约 300 MB 起缺什么自动装什么Windows 用户、临时应急方便,但自动装包偶尔会卡住
在线编译平台无需安装平台预装常见宏包换电脑、多人共享工程应急可以,长期主力不推荐

选TeX Live完整版的理由很实际:投稿前你最不想遇到的事,就是"本地能编译、换台机器缺个包"。完整版把常见宏包全带上了,.bst、字体、图片转换工具一应俱全,离线也能跑。安装时记得做两件事:一是把安装目录下的bin/...加进系统PATH,二是装完在终端敲一句验证:

pdflatex --version bibtex --version latexmk --version

三条都有版本号输出,说明环境通了。如果只有前两条有、latexmk报找不到,说明发行版里的latexmk没随主包安装,用tlmgr install latexmk补一下即可。这一步别跳过,后面所有自动化编译都依赖它。

提示:Windows上装完一定要重开终端再验证,PATH变量的改动对已经打开的窗口不生效。我见过不止一个人在这上面浪费半小时。

2.2 编辑器与辅助工具的组合拳

编辑器这块没有标准答案,我给一个务实组合:一个支持正反向搜索的编辑器 + 一个PDF阅读器 + 一个终端。所谓正反向搜索,就是点源码跳到PDF对应位置、点PDF跳回源码行,这个功能在改几十页双栏稿时是刚需,找一张图的代码位置不用翻半天。

编辑器上,主流的代码编辑器配LaTeX插件就够用,配置里记得打开三件事:编译命令用latexmk、开启保存时自动编译、开启PDF正反向同步。喜欢开箱即用的,也有专门面向LaTeX的编辑器,优点是零配置,缺点是定制性差一些。用什么不重要,重要的是统一入口——所有编译都从同一个按钮或同一条命令触发,别今天点按钮、明天敲命令,出了问题不知道是谁的锅。

辅助工具里有两个东西我强烈建议装上。一个是latexindent,格式化源码用,团队协作时能避免"你改缩进我改内容"的无意义冲突。另一个是pdffonts(随poppler工具集提供),投稿前用它检查PDF字体是否全部嵌入,这个后面第6节会细讲。

2.3 工程目录与版本管理:从第一天就做对

我见过最惨的工程目录是这样的:根目录下堆着main.tex、main(1).tex、main_final.tex、main_final_v2.tex,图片散落在各处,.aux文件混在里面。这种工程一旦要交源文件,你会花两小时清理。

我的习惯是固定一套目录结构,从第一篇论文用到现在:

paper/ ├── main.tex # 主文件,只放结构和引用 ├── sections/ │ ├── intro.tex │ ├── method.tex │ └── exp.tex ├── figs/ │ ├── arch.pdf │ └── result.png ├── refs.bib # 参考文献库 ├── IEEEtran.cls # 模板类文件 ├── IEEEtran.bst # 参考文献样式 ├── .gitignore └── README.md # 记录编译命令和宏包版本

正文拆到sections/下用\input{}引入,好处是Git冲突范围小、单文件不容易长到几千行。.gitignore至少要挡住这些中间产物:

*.aux *.log *.out *.toc *.bbl *.blg *.fls *.fdb_latexmk *.synctex.gz *.pdf

注意*.pdf也建议忽略——编译产物不该进版本库,否则每次编译都产生一个巨大的二进制diff。但投稿前要单独备份一份编译好的PDF,那是你的存档。

提示:.bbl文件要不要忽略,取决于你的投稿要求。有些出版方要求提交.bbl(因为他们的编译环境可能不跑BibTeX),这种情况下你要在最后打包时手动带上,但平时开发阶段忽略它。

3. 模板获取与骨架改造:把官方模板变成自己的工程

这一步是新手翻车率最高的地方,原因不是技术难,而是拿到模板之后不知道该动哪里、不该动哪里。

3.1 模板的正确获取姿势与常见陷阱

模板只有一个正确来源:出版方作者中心提供的官方模板包。别从师兄的网盘拿,别从第三方镜像站下,更别用某个论坛流传的"精简版"。原因很实在——模板会更新,旧版本的.cls可能和新版排版规范不一致,而你根本无从判断手里这份是哪一年的。

下载下来通常是一个压缩包,里面包含:IEEEtran.cls(文档类)、若干.bst(参考文献样式,会议和期刊用的不是同一个)、一个示例.tex、一个示例.bib、以及一份说明文档。先别急着改示例文件,第一步是原样编译一遍示例,确认你的环境能跑通官方代码。这一步能排除掉80%的环境问题——如果官方示例都编不过,那一定是你环境的问题,不是模板的问题。

常见的下载陷阱有三个。第一是用了会议模板写期刊、或者反过来,两者在作者信息块、页眉、参考文献样式上都有差异,投错版本会在格式初审被打回。第二是只下载了.tex没下载.cls,本地编译时用的其实是系统里预装的旧版IEEEtran.cls,结果格式微妙地不对。第三是模板包里带了README说明你没看,里面通常写了明确的编译命令和已知问题。

3.2 拆解模板骨架:每一段在干什么

拿到示例文件后,我建议你逐段读一遍,而不是直接替换内容。一份典型的会议模板主文件骨架长这样:

\documentclass[conference]{IEEEtran} \IEEEoverridecommandlockouts \usepackage{cite} \usepackage{amsmath,amssymb,amsfonts} \usepackage{algorithmic} \usepackage{graphicx} \usepackage{textcomp} \usepackage{xcolor} \begin{document} \title{Your Paper Title Here} \author{ \IEEEauthorblockN{First Author} \IEEEauthorblockA{\textit{Department Name} \\ \textit{Institution Name}\\ City, Country \\ author@example.com} \and \IEEEauthorblockN{Second Author} \IEEEauthorblockA{\textit{Department Name} \\ \textit{Institution Name}\\ City, Country \\ author2@example.com} } \maketitle \begin{abstract} Your abstract goes here. \end{abstract} \begin{IEEEkeywords} Keyword1, Keyword2, Keyword3 \end{IEEEkeywords} \section{Introduction} \label{sec:intro} Text... \section{Conclusion} Text... \bibliographystyle{IEEEtran} \bibliography{refs} \end{document}

逐段说清楚:

\documentclass[conference]{IEEEtran}这一行决定了整篇的版面规则。会议用conference选项,期刊通常不带这个选项或者用journal,具体看你下载的模板说明。这个选项写错,后面调页数会调到怀疑人生,因为会议和期刊的行距、栏间距、页边距都不同。

\IEEEoverridecommandlockouts这行是模板要求的,配合某些宏包使用,示例里有就保留,别自作聪明删掉。

\author{}块里\IEEEauthorblockN放姓名、\IEEEauthorblockA放单位地址邮箱,多个作者之间用\and分隔。这里有个细节:单位信息里用\textit{}斜体是模板惯例,不是强制的,但保持和示例一致最省事。

\begin{IEEEkeywords}是IEEE特有的关键词环境,它有自己的排版样式,不要用\textbf{Keywords:}手打,那样格式审查会挑出来。

\bibliographystyle{IEEEtran}和\bibliography{refs}两行是参考文献入口,refs对应refs.bib(不带扩展名)。会议和期刊用的.bst文件名可能不同,看你模板包里给的是哪个。

3.3 从示例到自己的工程:改造清单

拿到能编译的示例后,按这个顺序改造,每一步编译一次,出问题能立刻定位:

  1. 把示例.tex复制成main.tex,示例.bib复制成refs.bib,两个原始文件保留作对照。
  2. 改标题、作者块、摘要、关键词,先不写正文,编译一次看首页对不对。
  3. 建sections/目录,把正文按章节拆文件,用\input{sections/intro}引入,编译一次确认路径没错。
  4. 建figs/目录,放一张测试图,写一个figure环境,编译一次确认图片能找到。
  5. 往refs.bib里加一条测试文献,正文\cite{}一次,跑完整编译链(第5节),确认引用能出来。

这套流程看着啰嗦,但它把"环境、路径、引用"三类问题分离开了。一次性全改完再编译,报错信息会互相掩盖,排起来非常痛苦。

注意:.cls和.bst文件不要修改。有些人为了"微调"格式去改文档类源码,这在投稿阶段是明确禁止的,格式审查可能会要求你用原始模板重排。所有能调的都在你的.tex里调。

4. 核心排版实操:图表、公式、参考文献的IEEE写法

这一节是全篇最实用的部分。IEEE模板有一套自己的排版习惯,跟你平时写普通LaTeX文档不太一样,照着通用教程写,格式上会出各种小毛病。

4.1 作者信息、脚注与首页布局

首页布局是格式审查第一眼看的地方,几个细节值得单独说。

作者块里的单位信息,标准写法是"部门 / 单位 / 城市,国家 / 邮箱"四行,用\\换行。多个作者用\and分隔,模板会自动排成一行多个或者换行,你不用管。别手动加\hspace调间距,不同页宽下会错位。

脚注用\footnote{},但IEEE模板里脚注默认排在当前栏的底部,不是页面底部,这是双栏排版的正常行为,别以为是bug。如果脚注内容太长跨栏了,考虑改成正文里的括号说明。

首页底部通常会有版权声明区,这个区域投稿阶段一般留空或按模板注释处理,等录用后出版方会告诉你怎么填。别自己往里塞内容。

还有个容易忽略的点:\maketitle必须放在\begin{document}之后、摘要之前,顺序错了会导致标题排版异常或者直接报错。

4.2 图与表:位置参数、图注方向、跨栏处理

IEEE的双栏排版对浮动体位置很敏感,我踩过的坑基本都在这里。

单栏图的标准写法:

\begin{figure}[!t] \centering \includegraphics[width=\columnwidth]{figs/arch.pdf} \caption{System architecture of the proposed framework.} \label{fig:arch} \end{figure}

几个关键点。[!t]里的!是告诉编译器"尽量放页顶",配合t能减少浮动体乱跑。width=\columnwidth表示占满单栏宽度,这是最稳妥的写法;写成width=0.9\textwidth在双栏里会溢出到另一栏外面,这是新手最常犯的错——双栏文档里,单栏宽度是\columnwidth,不是\textwidth。

跨两栏的大图用figure*环境:

\begin{figure*}[!t] \centering \includegraphics[width=\textwidth]{figs/pipeline.pdf} \caption{Overall pipeline.} \label{fig:pipeline} \end{figure*}

注意figure*环境的图只能出现在页面顶部,而且通常会推迟到下一页,别指望它能放在你写代码的那个位置。这是LaTeX的浮动机制,不是bug,接受它,然后把\ref写好就行。

表格这块,IEEE的惯例是表标题在表格上方,而且模板里\caption放在tabular之前:

\begin{table}[!t] \renewcommand{\arraystretch}{1.2} \caption{Comparison of Different Methods} \label{tab:cmp} \centering \begin{tabular}{|c|c|c|} \hline Method & Accuracy & Time \\ \hline Baseline & 0.81 & 12s \\ Ours & 0.89 & 15s \\ \hline \end{tabular} \end{table}

\renewcommand{\arraystretch}{1.2}是我每次都加的一行,默认行高在双栏里显得挤,加到1.2到1.3之间视觉上舒服很多,而且不会撑破栏宽。竖线|在IEEE模板里是允许的,但越来越多的作者倾向用booktabs宏包的无竖线三线表,更清爽。用booktabs的话记得\usepackage{booktabs},然后\toprule、\midrule、\bottomrule替换\hline。

提示:表格宽度超过栏宽是最常见的溢出原因。两个解决办法:一是缩小字号,在tabular前加\small或\footnotesize;二是用\resizebox{\columnwidth}{!}{...}把整个表格缩放到栏宽。后者会让字号不一致,我一般优先用前者。

4.3 公式、定理与算法块

公式部分IEEEtran和标准LaTeX基本一致,但有几个习惯值得遵守。

行内公式用$...$,独立公式用equation环境,编号会自动生成,不要手动写(1)。多行对齐用align环境,需要amsmath宏包(模板里通常已经带了):

\begin{equation} \label{eq:loss} \mathcal{L} = \frac{1}{N}\sum_{i=1}^{N} \left\| y_i - \hat{y}_i \right\|^2 \end{equation}

公式里引用用\eqref{eq:loss},会自动带括号;用\ref{}则不带括号。这个细节很多人不注意,混着用会导致正文里出现"(1)"和"1"两种格式。

定理类环境,IEEEtran自带\newtheorem支持,但默认样式和期刊要求可能有差异。稳妥做法是在导言区自己定义:

\newtheorem{theorem}{Theorem} \newtheorem{lemma}{Lemma} \newtheorem{definition}{Definition}

算法伪代码,模板包里的algorithmic宏包可以直接用:

\begin{algorithm} \caption{Iterative Optimization} \label{alg:opt} \begin{algorithmic} \STATE \textbf{Input:} dataset $D$, learning rate $\eta$ \STATE Initialize parameters $\theta$ \FOR{$t = 1$ to $T$} \STATE Compute gradient $g_t$ \STATE Update $\theta \leftarrow \theta - \eta g_t$ \ENDFOR \STATE \textbf{Output:} $\theta$ \end{algorithmic} \end{algorithm}

注意algorithmic和algorithmicx是两个不同的包,语法不通用。模板包里给的是哪个就用哪个,别自己换,换了容易和模板的其他设置冲突。

4.4 参考文献:BibTeX的正确用法与顺序问题

IEEE要求参考文献按正文首次引用顺序编号,这个用BibTeX加IEEEtran.bst是自动的,但你得做对几件事。

第一,.bib文件里的条目类型要写对。会议论文用@inproceedings,期刊用@article,技术报告用@techreport,书写用@book。类型写错,生成的格式就错,比如把会议论文写成@article,会缺会议地点信息。

第二,\cite{}的键名要唯一且有意义。我的习惯是作者姓+年份+关键词,比如zhang2024attention,比ref1、ref2好维护一百倍。

第三,编译顺序不能省。很多人编译一次看到引用是[?]就慌了,其实只是没跑BibTeX。完整流程是:pdflatex→bibtex→pdflatex→pdflatex。四步,一步都不能少。原因后面第5节细讲。

第四,如果某条文献你想让它出现在参考文献列表里但正文没引用(比如"推荐阅读"),用\nocite{key}。全部引用用\nocite{*},但投稿时慎用,会把你.bib里所有条目都塞进去。

一个我用了很久的小技巧:.bib文件单独用Git管理,多个项目共享同一份文献库,需要哪条就\cite哪条,不用每次重新录入。代价是库会越来越臃肿,定期清理一次就行。

4.5 页数控制:双栏排版的压缩手法

投稿最痛的场景之一:内容写完了,页数超了半页。IEEE会议一般有明确的页数上限,超了要么删内容,要么压排版。压排版有几个层次,从温和到激进:

手法具体做法压缩效果风险
调整浮动体位置把[!htbp]改成[!t],让图表靠页顶0.1–0.3 页几乎无
平衡末页两栏导言区加\usepackage{balance},末尾\balance0.1–0.2 页几乎无
微调图表尺寸width=0.95\columnwidth0.1–0.3 页图变模糊
缩紧公式间距导言区调\abovedisplayskip等参数0.1–0.2 页观感略挤
局部负间距特定位置\vspace{-2mm}每处极小多点累积会难看
缩小参考文献字号\footnotesize包住bibliography0.2–0.4 页部分会议要求禁止

我的一般顺序是:先\balance,再调浮动体,再看图表能不能缩,最后才动间距。\vspace负值属于最后一招,用多了整篇看起来像被压扁了,审稿人第一印象会打折扣。

还有一个进阶技巧,如果参考文献占了快一栏,可以用\IEEEtriggeratref{N}配合\IEEEtriggercmd{\enlargethispage{-Xpt}},让参考文献在某个位置换栏,把空间省出来。这个参数需要试几次,属于精调手段。

5. 编译链路与报错排查实录

这一节是我最想写给新手的部分。LaTeX的报错信息质量参差不齐,很多报错指向的位置和真正的原因隔着十万八千里。掌握了排查思路,能省下大量时间。

5.1 为什么必须编译四遍:一次讲透

很多人不理解为什么要跑四遍,觉得是玄学。其实每一步都有明确分工:

第一遍pdflatex:解析源码,生成.aux文件(记录章节编号、公式编号、图表编号、交叉引用位置)和.log文件。此时所有\ref、\cite都是占位符,因为你引用的东西还没确定编号。

bibtex:读取.aux里记录的引用键名,去.bib里查对应的条目,按.bst样式格式化,输出.bbl文件。如果.aux里没有引用记录(第一遍没跑或者编译失败),bibtex会直接报错。

第二遍pdflatex:读入.bbl,把参考文献列表排出来,同时更新.aux里的编号信息。此时正文里的\cite能对上号了,但章节和图表编号可能还有一轮变化。

第三遍pdflatex:把第二遍产生的新编号同步到所有交叉引用位置。为什么还需要第三遍?因为参考文献列表变长会改变页码,页码变了目录和引用又得更新一次。绝大多数情况下三遍就收敛了,保险起见跑四遍。

这套流程手工敲太麻烦,所以我一直用latexmk,它自动判断需要跑几遍:

latexmk -pdf -bibtex -interaction=nonstopmode main.tex

参数解释:-pdf指定用pdflatex生成PDF,-bibtex启用BibTeX处理,-interaction=nonstopmode让编译遇到错误不中断(方便一次看到所有报错)。日常开发加个-pvc开启持续监听,保存文件自动重编译:

latexmk -pdf -bibtex -pvc main.tex

清理中间文件用:

latexmk -C

注意-C会连PDF一起删,只想清中间文件用-c。

提示:nonstopmode下编译不会停,但错误仍然记录在.log里。养成出问题先看.log的习惯,用编辑器搜索!定位第一个错误——LaTeX的错误有连锁反应,第一个错误之后的一大堆报错往往是它引起的,修好第一个,后面可能全消失。

5.2 常见报错速查表

下面这张表是我这些年攒下来的,覆盖了九成以上的新手问题:

现象常见原因处理方式
引用显示为[?]没跑BibTeX,或.bbl未生成跑完整四步编译,或直接用latexmk
参考文献列表为空\bibliography{}路径错,或.bib有语法错检查文件名不带.bib后缀,看.blg日志
图片不显示,只有一个空框路径错、扩展名错、文件名大小写不符用相对路径,Linux下严格区分大小写
Undefined control sequence \IEEEPARstart没用IEEEtran文档类检查\documentclass那行
File 'xxx.sty' not found宏包没装tlmgr install 包名
中文编译报错或乱码用了pdflatex编中文投稿一般避免中文;确需中文用XeLaTeX配ctex
表格/图片溢出到栏外宽度用了\textwidth双栏内改用\columnwidth
页数莫名超了浮动体堆积、末页两栏不平衡加\balance,调浮动体位置参数
编译卡住不结束图片过大,或死循环宏压缩图片到300dpi,检查自定义宏
字体嵌入警告PDF里有Type 3字体用pdffonts检查,换图片格式重编
交叉引用显示??.aux未更新再编译一遍,确认没有中断的错误
Too many unprocessed floats浮动体数量超过限制加\clearpage,或调整位置参数

这张表建议收藏。特别是第一条和第二条,几乎每个新手都会遇到,而且看起来吓人,实际上就是编译顺序问题。

5.3 从日志里读线索:三个实战案例

光看表格不够,我举三个真实遇到过的场景,讲讲排查思路。

案例一:图片编译后变成空白框。第一反应是路径错,但路径明明对。打开.log搜索文件名,发现一行警告:File 'figs/result.PDF' not found。问题是扩展名写了.PDF大写,而文件实际是.pdf。Windows下不区分大小写,Linux和在线平台区分,本地能编、上传就崩,这类问题在跨平台时特别多。解决办法:所有文件名统一小写,扩展名统一小写,别用空格和特殊字符。

案例二:参考文献顺序和正文引用顺序对不上。检查.bib没发现问题,.bbl里顺序却是乱的。原因是.aux文件残留了上一次编译的旧引用记录——你删掉了几条\cite,但.aux还在。解决办法:latexmk -c清中间文件,重新完整编译。这类"幽灵问题"在频繁改稿时很常见,清理重编基本都能解决。

案例三:投稿系统提示PDF字体未嵌入。本地看PDF一切正常,上传后被拒。用pdffonts检查:

pdffonts main.pdf

输出里有一列emb,全是yes才合格。发现有no的,通常是某张图片是从别的PDF里截出来的,带了未嵌入的字体。解决办法:把那张图重新导出成高分辨率PNG,或者在导出PDF时勾选"嵌入所有字体"。

6. 投稿前的自检、打包与提交流程

内容写完、格式调好,最后一公里反而是最容易出岔子的地方。投稿系统对文件的要求很具体,不符合就是打回重传,赶上截稿日就很被动。

6.1 PDF层面的硬性检查

上传前,我会固定跑这几项检查。

字体嵌入,前面说过,pdffonts main.pdf,emb列全yes。这一项不过,很多系统直接拒收。

PDF版本,有些系统只接受PDF 1.4到1.7。用pdfinfo main.pdf看版本号。pdflatex默认生成的版本通常没问题,但如果你用了某些图片处理工具合并过PDF,版本可能被改高。

页面尺寸,IEEE通常是US Letter。如果你本地默认是A4,版面比例会有细微差异,虽然多数情况能过,但严格的书会要求Letter。在文档类选项里可以指定:

\documentclass[conference,letterpaper]{IEEEtran}

页数,逐页数一遍,确认没超上限。注意参考文献和附录算不算页数,不同会议要求不同,去看征稿说明。

作者信息与匿名要求,双盲评审的会议要求正文和PDF属性里都不能出现作者信息。除了把\author{}块清空,还要检查PDF元数据:

pdfinfo main.pdf | grep -i author

如果有残留,在导言区加:

\hypersetup{pdfauthor={},pdftitle={},pdfkeywords={}}

需要hyperref宏包。注意hyperref要在大部分宏包之后加载,位置放错会引发一堆奇怪的报错。

6.2 源文件打包清单

很多会议在录用后会要求提交源文件,用于出版方重新排版。打包不是把整个文件夹压缩一下就完事,得按清单来:

文件类别具体文件是否必须说明
主文件main.tex必须确认能独立编译
章节文件sections/*.tex视情况如果用了\input就必须带
参考文献refs.bib必须通常还要带.bbl
文档类IEEEtran.cls必须用官方原版,别用修改过的
文献样式IEEEtran.bst必须会议和期刊版本可能不同
图片figs/*必须优先给矢量格式PDF/EPS
编译产物.aux.log不要中间文件,别塞进去
生成结果main.pdf视要求有的系统单独上传,不放进压缩包

打包时有个细节:把main.tex里的所有路径改成相对路径,并且确认在解压后的新目录里能编译通过。我习惯的做法是解压到一个全新目录,跑一遍latexmk,能出PDF才算打包合格。这一步能抓出"本地能编、换机器就崩"的问题,比如你引用了一个系统字体、或者依赖了某个没打包的图片。

还有一个常被忽略的点:.bib文件里的特殊字符。作者名里的重音符号、标题里的&和%,都要正确转义(\&、\%),否则出版方那边编译会报错。我的一般做法是打包前把.bib通读一遍,重点看标题字段。

6.3 上传环节与几个实操心得

投稿系统五花八门,但流程大体一致:填元数据(标题、摘要、关键词、作者)、上传PDF、上传源文件、确认作者顺序、生成预览、提交。几个容易出错的点:

作者顺序。系统里填的顺序必须和PDF里一致,这个不一致在录用后改起来非常麻烦。提交前对着PDF首页核对一遍。

摘要粘贴。系统里的摘要输入框通常不支持LaTeX公式,把公式转成纯文本或者删掉。我见过有人直接粘贴带$...$的段落,预览里显示成一堆美元符号。

关键词。系统要求的关键词和论文里的IEEEkeywords是两回事,前者用于分配审稿人,要选准;后者是排版用的。别混。

预览确认。系统生成的预览PDF一定要下载下来看一眼,有时候转换过程会把某些符号弄乱,尤其是特殊字符和公式。这一步花两分钟,能避免提交后才发现问题。

注意:提交前把整个工程目录复制一份存档,命名带上日期和版本号。后续加实验、改稿、写回复,都基于存档开新分支,别在原始目录上直接改。这个习惯救过我一次——审稿意见要求补实验,我在新分支上改,原稿完整保留,最后对比两个版本的差异非常方便。

最后说点个人的体会。LaTeX这套东西,前期的学习成本是实打实的,我第一次配环境、改模板、调编译,断断续续折腾了差不多两个周末。但之后每一篇论文,从新建工程到出初稿格式,我基本能控制在一小时内,剩下的时间全花在内容上。这个投入产出比,只要你打算认真做几年研究,就是划算的。真要说有什么建议,那就是别在环境上追求完美——能编译、能出图、能跑参考文献,就够了。把精力留给那些真正影响论文质量的事情,排版工具永远只是工具。