先别急着改代码。如果投IEEE信号处理类会议(ICASSP、ICIP、APSIPA这些),大概率用的是官方提供的spconf.sty模板而不是IEEEtran。作者信息不显示这个问题,表面上看是LaTeX代码问题,根子上却是对spconf.sty这套模板机制没吃透。我在过去一年里帮实验室同学排查过不下二十次同类问题,几乎都是同一个套路——不是\author命令写错了,就是漏了\maketitle,再要么是用了新版模板的命令去套旧版模板的宏。今天把这条排查链路完整写出来,照着走一遍基本能解决90%的情况。
1. 先弄明白:spconf.sty的作者信息到底靠什么输出
1.1 spconf.sty和IEEEtran根本不是一回事
很多刚开始写IEEE会议论文的人会把模板体系搞混。IEEE旗下期刊和会议常用的模板有两套体系:一套是IEEEtran.cls,主要用于期刊和一部分会议;另一套就是spconf.sty,这是IEEE信号处理学会(Signal Processing Society)专门为ICASSP、ICIP等旗舰会议定制的样式文件。搜索热词里那个“ieee conference”指的就是后者。
spconf.sty本身不是一个完整的文档类,它依赖article.cls作为底层文档类,通过\usepackage{spconf}加载。它的职责很纯粹:定义标题区(title block)的排版方式、双栏样式、页眉页脚、参考文献样式等。作者信息显示这块,完全由它来控制。关键点来了——spconf.sty支持的作者信息命令和IEEEtran不一样。IEEEtran用的是\author{},里面放作者名和机构,配合\thanks{}加脚注。而spconf.sty用的是三个独立命令:
\title{}——论文标题\name{}——作者姓名\address{}——作者单位、邮箱
这三个命令定义完成后,必须用\maketitle命令触发排版。这是整套机制的起点,也是后面所有排查的基础。忘掉\maketitle,就像做好了菜不装盘直接端锅上桌,厨房里什么都齐了,食客面前却空空如也。
1.2\maketitle不是摆设,它把三个宏打包成标题区
\maketitle在spconf.sty中定义的实际排版动作是:读取内部保存的\@title、\@name、\@address三个宏,按照双栏顶部的格式进行排版。看一眼spconf.sty源码就能发现,它内部做了这些事情:
\def\maketitle{% \begin{center} {\Large \bf \@title \par} \vskip 1.0em {\large \begin{tabular}[t]{c}\@name \end{tabular} \par} \vskip 1.0em {\large \@address \par} \end{center} ... }也就是说,\maketitle会读取标题、姓名、地址,然后通过一个center环境和tabular结构调整垂直间距。作者姓名那部分用的是\begin{tabular}[t]{c}\@name \end{tabular},这意味着姓名是按行依次排列的,多个作者之间用什么分隔符连接,直接决定了表格有几行。
正因如此,如果你在\name{}里写了\\换行符,它会在表格里生成新行;如果你用\and,它也会另起一栏。这是spconf的排版特性,后面写多作者时需要特别小心。
1.3 新版模板与旧版模板的命令差异是第一个坑
这里有一个非常隐蔽的坑。ICASSP官方在2019年前后更新过一次模板,新版模板文件名变了,叫icassp19.sty或spconf-new.sty,有的会议直接给IEEEtran模板。但大量自2015年以前延续下来的会议(尤其一些workshop)仍然用老版spconf.sty。
新老版本的命令不兼容。老版是\name{张三} \address{某大学},新版直接回归了\author{张三 \thanks{...}}。很多人在网上搜到的教程、博客,默认都是新版的写法,照着写进老版模板的\name{}里,当然什么都不显示。更迷惑的是,编译器还不报错,因为\author在article.cls中是存在的,只是spconf.sty覆盖了它,你写了\author,spconf根本不会去读取这个宏,作者块自然空白。
所以动手改代码之前,先打开.sty文件确认版本。搜索\def\name或\def\author,看到哪个命令有定义,哪个才是当前模板真正使用的命令。
2. 触发条件全梳理:作者信息不显示的五大高频原因
2.1 漏掉\maketitle:最常见,也最容易被忽略
先说最常见的。我处理过的案例中,至少一半是因为把\maketitle这一行给删了或者注释掉了。为什么会被删?很多LaTeX新手会用模板作者提供的author.tex作为起点,原来的模板里虽然有\maketitle,但位置很微妙——它通常在摘要(abstract)之前。如果调整结构时不小心移动,或者用某些LaTeX编辑器插入摘要模板时覆盖了这段区域,\maketitle就没了。
更迷惑的是,没有\maketitle时,标题、作者、摘要可能仍然能显示——如果你手动用\vspace和\textbf拼了一个标题区的话。但spconf的官方模板是不让你手动拼的,模板里预设的标题区样式就是通过\maketitle一次性输出。手动拼接常常导致格式错位,作者名虽然显示,但字体、间距跟官方格式完全不同,审稿人一眼就能看出没按模板来。
排查动作很简单:全文搜索\maketitle,必须存在,且必须在\begin{document}之后的正文区内,必须在\begin{abstract}之前。如果找不到,加上这一行,问题往往直接解决。
2.2 误用\author替代\name:新旧模板混用的典型后果
第二大类是命令名混用。前面已经提到,新版模板使用\author,但老版spconf.sty要求\name。如果看到作者信息不显示,先看看前导区里写的是\name{...}还是\author{...}。如果是后者,改成\name即可。
这里补充一个判断技巧:论文模板压缩包里通常有sample.tex或author.tex示例,直接打开看里面标题区用了哪个命令。跟着示例文件走,不要跟着网上的通用教程走。网上的教程百分之八十针对新版,你的会议可能还在用老版。
另外要注意\address命令是否被误用。有些模板示例中地址是写在\name里的,用\\换行,然后\address留空;有些则是\address里写完整地址。两种写法都合法,关键看模板范例怎么用。如果\address为空,自然不会显示机构。
2.3 编译次数不够:作者块依赖交叉引用信息
这个原因比较冷门,但真实存在。\maketitle输出的内容本身不依赖辅助文件,但如果你在\name{}或\address{}中使用了\thanks{}脚注,脚注编号的生成需要多次编译才能稳定。更关键的是,有些spconf版本在标题区上方会插入\markboth信息(用于页眉显示论文标题和作者),这部分内容会写入.aux文件,跨编译周期传递。如果只编译一次,辅助文件尚未生成完整,页眉和脚注相关的块可能在PDF中显示异常。
用pdflatex手动编译时,正确的做法至少编译两遍:第一遍生成.aux,第二遍根据.aux中的信息完成交叉引用和页眉输出。如果是带参考文献的论文,需要四部曲:pdflatex→bibtex→pdflatex→pdflatex。只跑一遍就打开PDF看结果,很容易产生“作者信息没显示”的错觉——其实只是脚注编号或页眉标记还没写进辅助文件。
2.4 作者块溢出页面边缘或被双栏版式挤没了
LaTeX的版式控制和Word完全不同。Word是文字推挤排版,LaTeX是盒子套盒子。\maketitle生成的标题区本身是一个垂直盒子,在双栏模板中,这个盒子横跨两栏。如果标题、姓名、地址三部分累积高度太大,超过了页面顶部允许的高度阈值,LaTeX可能执行“overflow”策略,把整个盒子推到下一页,或者压缩间距导致显示不全。
典型场景:\name{}中有七八个作者,每个都带\thanks{}的长脚注,\address{}又有三四个机构的长地址,整体高度很容易超过双栏页面顶部区域的容纳范围。此时PDF第一页看起来只有Paper ID,标题和作者都没了,翻到第二页才发现标题区整个掉到下一页去了。
处理方案不是改模板源码,而是精简作者块内容。长脚注移到页脚或文末,地址只保留机构和城市,邮箱尽量省略。latex本身对标题区的要求历来是“精炼”,不是让你把所有信息都塞进去。
2.5 文档类选项冲突破坏\maketitle内部逻辑
spconf.sty通过\AtBeginDocument钩子修改了一些article类的内部命令。如果文档类被显式指定了某些选项(比如[draft]、[twoside]),可能影响标题区的输出。多数教程里用\documentclass[letterpaper]{article}然后\usepackage{spconf},spconf.sty内部已经处理了页面尺寸和双栏逻辑,额外的文档类选项有时会引发隐性冲突。
比较常见的冲突源是\usepackage{hyperref}。hyperref会在\maketitle执行时尝试为标题生成PDF书签,某些版本的hyperref与老版spconf兼容性不佳,导致标题区内容不输出。如果前导区用了hyperref,试着注释掉编译一次,确认是否是这里的冲突。还有authblk宏包,它重新定义了\author命令,如果你同时使用了\name和authblk,会互相覆盖,作者信息自然消失。
3. 排查与修复实操:照着做就能解决
3.1 检查步骤一:确认模板文件结构与命令使用
先做一个最基础的检查。打开你的主.tex文件,找到前导区,确认是否加载了spconf:
\documentclass[letterpaper]{article} \usepackage{spconf}往下找,确认标题区命令完整存在,且顺序正确:
\title{你的论文标题} \name{作者姓名 \thanks{基金项目或通讯作者标注}} \address{机构名称、城市、邮箱} \maketitle顺序不能乱。\title、\name、\address的顺序在spconf.sty的源码中没有严格要求,但推荐按“标题→姓名→地址”排列,和\maketitle内部的排版顺序保持一致,方便自己检查。三个宏放在\begin{document}之前和之后都可以,但\maketitle必须在\begin{document}之后。
实际案例:我处理过的一个同学,把\maketitle放在\begin{abstract}之后,结果作者块显示出来了但摘要不见了,两个块重叠在一起。原因就是\maketitle内部用了\begin{center}和垂直间距,与摘要的\begin{abstract}环境互相挤占。把\maketitle移到摘要之前,一切恢复正常。
3.2 检查步骤二:逐段注释法定位冲突宏包
如果命令齐全、顺序正确,还是不显示,大概率是宏包冲突。用“逐段注释法”快速定位:
- 复制当前
.tex为备份。 - 在
\usepackage{spconf}之后的所有\usepackage{}行前面加%注释掉。 - 重新编译,看作者信息是否恢复显示。
- 如果恢复,逐个取消注释,每取消一个编译一次,直到找到罪魁祸首。
- 找到冲突宏包后,要么替换为兼容版本,要么调整加载顺序(包加载顺序影响内部命令覆盖)。
我遇到最多的冲突源按概率排序:hyperref(40%)、authblk(25%)、geometry(15%)、其他(20%)。尤其是geometry,很多人喜欢用它自定义页边距,但它会覆盖spconf预设的页面尺寸参数,导致作者块排版错乱。对IEEE会议模板,强烈建议不要用geometry,用\usepackage[margin=1in]{geometry}这种通用配置会对模板原有版式造成不可预期的影响。
3.3 检查步骤三:手动构建最小复现样例
如果项目文件很大,几十个.tex文件导入来导入去,排查效率太低。最快的办法是构造一个最小的复现样例,脱离原项目,单独验证spconf.sty这条链路的完整性:
\documentclass[letterpaper]{article} \usepackage{spconf} \begin{document} \title{A Minimal Test of Author Display} \name{Alice Zhang} \address{Peking University} \maketitle \begin{abstract} This is a test. \end{abstract} \end{document}把这段代码保存为test.tex,和spconf.sty放在同一个目录下,用pdflatex编译。如果显示正常,说明你的LaTeX环境和spconf.sty本身没有问题,问题回到原项目的配置上。如果这样都不显示,那就说明spconf.sty文件本身损坏,或者你的LaTeX发行版缺少某些依赖包(通常是很古老的times、epsfig、amsmath之类)。
3.4 检查步骤四:确认编译引擎与编译次数
spconf.sty是1990年代风格的样式文件,设计时只考虑了传统latex(dvi模式)和pdflatex。不要用XeLaTeX或LuaLaTeX编译spconf模板,尤其是老版模板。XeLaTeX对字体的处理方式会改变标题区默认字体族,导致作者块显示为空白或乱码。
编译命令建议:
pdflatex main.tex pdflatex main.tex第一遍生成辅助文件,第二遍稳定输出。如果有参考文献:
pdflatex main.tex bibtex main pdflatex main.tex pdflatex main.tex如果使用latexmk,配置文件~/.latexmkrc中加上:
$pdflatex = 'pdflatex -interaction=nonstopmode -halt-on-error';用latexmk的好处是自动判断编译次数,不会漏。如果你用的是VSCode的LaTeX Workshop插件,默认recipe就是latexmk,但对老式模板,有时需要在settings.json里显式指定:
"latex-workshop.latex.recipes": [ { "name": "pdflatex x2", "tools": ["pdflatex", "pdflatex"] } ]这段配置直接指定编译两次pdflatex,规避latexmk对旧样式文件的某些兼容性问题。
3.5 检查步骤五:查看日志文件中的异常提示
如果所有步骤都走了还不行,去读日志。编译生成的.log文件是排查LaTeX问题的终极工具。搜索关键词:
Warning——警告信息Undefined——未定义命令Missing——缺失项Overfull / Underfull——版式溢出
重点搜索Missing和Undefined。比如:
LaTeX Warning: No \author given.这条警告明确提示没有作者。但如果是老版spconf,它可能不检查\name是否有值,所以没有警告但不输出。再比如:
! LaTeX Error: File 'spconf.sty' not found.这是路径问题,样式文件根本找不到,整个模板的格式都没生效,作者块自然不是预期效果。
.log文件位置在主.tex文件同目录,文件名同名,后缀.log。用编辑器或者记事本直接打开就能看。
4. 多作者、机构与脚注的特殊场景
4.1 多人合作时的标准写法:用\and分隔
ICASSP这类会议一篇论文作者数量动辄五六个,甚至更多。spconf.sty对多人场景有自己的约定。
正确的多作者写法:
\name{Alice Zhang \thanks{This work was supported by...} \and Bob Li \thanks{Corresponding author.} \and Carol Wang} \address{Peking University, Beijing, China \and Tsinghua University, Beijing, China}\and命令让多个作者排在同一行(或者换行,取决于总宽度),多个地址也对应排列。注意\and是spconf的特殊命令,不是Article类自带的。它由spconf.sty重新定义过。
关键点:\name中每个作者的名字字段里,不要用\\手动换行,用\and自动处理。手动换行的后果是地址和作者的对齐关系错乱。你写了\name{Alice Zhang \\ Bob Li},\address{Peking University \\ Tsinghua University},两个表格各行无法一一对应,看起来非常丑陋。
4.2 作者脚注的正确打开方式
不管哪种模板,\thanks{}脚注都是作者信息的重要组成部分。它通常用来标注通讯作者、基金项目、联合单位等信息。
spconf.sty的\thanks处理和article类相同,会在当前页底部生成带编号的脚注。这里有几个注意事项:
\thanks{}必须放在\name{}内部,不能放在\address{}内部,否则脚注编号可能不连续。- 不同作者的
\thanks{}编号是自动增长的,不要手动指定。 - 如果某个
\thanks{}只写了基金名称,放在哪个作者后面优先顺序是:对应作者名后。
4.3 用\IEEEoverridecommandlockouts解决特殊脚注
新版spconf模板(2019年以后)引入了一个机制:会议模板为了控制页脚空间,会锁定部分脚注命令,作者不能随意添加额外的脚注。老版spconf没有这个锁定,但新版有。
如果遇到脚注被锁的情况,前导区加上:
\IEEEoverridecommandlockouts这个命令的作用是解除模板的脚注限制,让你可以自由使用\thanks之外的脚注。不加这个命令时,部分模板会在日志中提示Class Warning或直接吞掉脚注内容。
注意:这个命令只适用于新版spconf样式(比如icassp19.sty含IEEE前缀),老版spconf没有这个命令,加了反而会报Undefined control sequence。
4.4 摘要页的特殊处理:Paper ID和版权区
IEEE会议第一页版面严格受限,spconf.sty在顶部还会预留一个\def\paperid{}的区域。如果会议要求显示Paper ID,可以这样写:
\def\paperid{1234}这个命令需要放在\maketitle之前。Paper ID和作者信息是两个独立模块,如果Paper ID不显示,排查思路跟作者块完全不相关,不需要在\name{}和\maketitle上浪费时间。
另外,有的模板在底部有一条版权声明:
\def\copyrighttext{978-...}类似地,放在前导区即可。注意,最新热搜词提到的 “isbn:979-8-3195-0124-0” 应该就是某届会议的版权ISBN号,对应到模板里就是这个\copyrighttext宏,不要跟作者信息混淆。
5. 编译链路:VSCode、latexmk与辅助文件
5.1 为什么编译工具链会影响作者信息的显示
很多人在本地写完论文,用VSCode的LaTeX Workshop插件一键编译,发现作者块空白,但同样的代码在Overleaf上却正常。这个现象的根本原因是:VSCode编译工具链没有执行足够多次编译,或者使用了错误的编译引擎。
VSCode的LaTeX Workshop默认配置第一选项是latexmk,这本身没问题。但如果你手动调整过默认工具,或者使用了多文件项目结构,latexmk可能没有正确识别主文件。LaTeX Workshop对于多文件项目的处理依赖root文件的识别——当存在多个.tex文件时,它通过latex-workshop.latex.rootFile配置指定根文件。根文件指定错了,编译的就不是包含\maketitle的主文件,输出PDF当然没有作者信息。
正确配置示例:
"latex-workshop.latex.rootFile": "main.tex"5.2 清理辅助文件:.aux文件损坏导致的诡异问题
还有一种冷门但真实的情况:.aux文件损坏。辅助文件被中断的编译进程写坏了,里面的交叉引用和宏标记全部失效。此时重新编译,LaTeX读取损坏的.aux,可能跳过标题区的某些处理,导致作者块空白。
处理方式很粗暴但有效——删除所有辅助文件重新编译:
rm -f main.aux main.log main.out main.bbl main.blg pdflatex main.tex pdflatex main.tex在VSCode中,LaTeX Workshop插件也提供了清除辅助文件的功能。点击左侧TeX图标,找到“Clean up auxiliary files”命令即可。
5.3 Overleaf与本地编译的差异:模板文件路径问题
Overleaf和本地编译的另一个差异是模板文件的路径。在Overleaf上,spconf.sty和.tex文件通常在同一目录,编译时自动加载。在本地,如果主文件在src目录,而spconf.sty在根目录,加载就要用相对路径:
\usepackage{../spconf}路径写错,TeX找不到样式文件,整篇文档的格式全部退化为article默认样式,作者块自然不是spconf风格——但\name和\address命令又确实存在(spconf.sty被加载过但后失败)还是不存在?这个要看具体错误。如果\usepackage{../spconf}路径错误,LaTeX会报错File not found,然后停止编译,你根本看不到PDF。所以如果你连错误都没看到,说明样式文件加载成功了,问题出在别处。
5.4 推荐的项目文件组织方式
经过多次踩坑,我建议的IEEE会议模板项目结构是:
project/ ├── main.tex # 主文件,包含\maketitle,只做汇总 ├── spconf.sty # 官方样式文件,放同一目录 ├── sections/ │ ├── intro.tex │ ├── method.tex │ └── experiment.tex ├── figures/ ├── refs.bib └── main.pdf主文件只保留前导区和章节引用,所有内容放在\input{}或\include{}里。好处是定位作者块问题时只需要看主文件,不受其他章节文件干扰。
6. 老样子,说几个真实的踩坑记录
6.1 案例一:作者名和机构全在,但地址就是不出现在PDF里
有个实验室学弟,\address{}里明明写了机构名,编译也不报错,但PDF里只有标题和作者名,地址区域空白。排查了很久,最后发现他在\address{}中使用了\\换行,并且地址文本里包含&符号——这个符号在LaTeX表格环境里是列分隔符,被tabluar环境吞噬了,后面的内容就没有正常输出。
修复方法很简单:对&转义,写成\&。类似的问题还包括%(注释符)、_(下标符)、#(参数符),只要在\name{}和\address{}中使用这些特殊字符,都要用反斜杠转义。
6.2 案例二:模板里明明带了\maketitle,编译两遍还是不显示
另一个同学的情况更麻烦,模板自带的author.tex直接编译,作者信息正常;换成自己新建的main.tex,一切都照抄,就是不显示。后来发现是文档类选项问题。模板自带的author.tex用的是:
\documentclass[letterpaper]{article}而他新建的main.tex多写了一个[draft]选项:
\documentclass[letterpaper,draft]{article}在draft模式下,LaTeX会在页面边缘绘制黑条(表示过度溢出),并且对某些浮动体、插图的处理更激进。spconf.sty的部分标题区处理在draft模式下会被跳过或异常。把[draft]去掉,恢复正常。
6.3 案例三:VSCode编译看不到作者信息,Overleaf却能显示
这个案例尤其经典。同学在本地VSCode把作者的英文名显示在PDF里了,但中文作者名全丢。原因是他用了pdflatex编译,默认字体编码不支持中文。pdflatex对UTF-8中文字符支持很差,作者名中的汉字直接在PDF里消失。解决办法不是改模板,而是换编译方案:
- 改用
XeLaTeX编译,并修改spconf对字体族的设置; - 或者把作者名写成拼音/英文;
- 或者用
CJKutf8宏包支持中文(但老版spconf对中文字体配置兼容性很差,不推荐)。
说实话,IEEE国际会议的作者名绝大多数情况是英文或拼音,直接用英文名最省心。如果一定要中文显示,可以单独用\begin{CJK*}{UTF8}{gbsn}包一层,但别指望spconf会给中文作者名做特殊美化。
7. 终极方案:直接替换模板而不是死磕spconf.sty
如果以上所有方法都试了还是不行,那你可能需要换个思路——不是修这个spconf.sty,而是看看会议是否提供新版模板,或者改用IEEEtran模板再微调。
很多IEEE信号处理类会议在官网论文提交页同时提供两个版本:一个老版spconf.sty模板(为了兼容旧投稿系统),以及新版模板。如果会议允许,直接用新版模板,命令行就是\author{},和常规LaTeX习惯一致,不用折腾\name{}和\address{}。
确认方法:去会议官网的“Call for Papers”页,点开“Author Kit”或“Template”下载链接,看压缩包里的.sty文件名。是spconf.sty还是IEEEtran.cls,拿到哪个用哪个,不要自己混搭。
如果会议只提供老版spconf,那就老老实实按本文第3节的排查流程走一遍。绝大多数问题集中在:命令名用错、\maketitle缺失、编译次数不够、宏包冲突这几个点。按照从简到繁的顺序逐项检查,基本上半小时内能定位并修复。这个模板被无数人踩过,没有解决不了的问题,只是还没找到那个隐藏的坑而已。
最后再分享一个我自己的习惯:每次用会议模板,拿到压缩包第一件事,不是把author.tex改名,而是先原封不动编译一遍官方示例,确认本地环境输出正常,然后再往里面填自己的内容。这样一旦出问题,你能立刻判断是自己改错了,还是环境问题。别怕这一步浪费时间——和之后再花一晚上排查相比,三分钟的成本完全可以忽略。