学术类

投稿时被要求使用的学术类——amsartIEEEtranelsarticlerevtex4-2acmart——大概是 LaTeX 文档类里最容易被误解的一种。打开 TeX Live 2024 附带的 acmart.cls,中间有这样一行:\LoadClass[\ACM@fontsize, reqno]{amsart}。也就是说,计算机科学界 ACM 发布的投稿类,其实建立在美国数学会的类之上。投稿类不是「发给你的样式表」,而是把投稿规定写成了可执行的代码;而且它还会在你看不见的地方加载别的类和宏包。本页要讲的是:投稿类到底固定了什么、为什么跟它对着干只会浪费时间,以及那些被悄悄加载的宏包会在哪里咬人。

投稿类到底固定了什么

被固定的有六样:栏数、版面、字体、标题体裁、题名区结构、参考文献格式。留给作者的只有内容和它的逻辑结构。所以投稿目标发放的是一整套——.cls、配套的 .bst(BibTeX 样式)以及可填写的模板——而不是一份规则清单。稿件里只写含义,\section{...}\cite{...},把外观上的一切判断交给类去做。结构与外观分离这条原则本身由「文档类与导言区」那一页负责,这里不再重复。投稿类新增的一点是:这种分离是被别人的规定强制的,而不是出于你的口味。

由此得出最实用的一条建议:不要跟类对着干。 页数上限是按该类的版面来计的,因此靠删 \vspace 或用 geometry 压边距抢来的页面,一到制作阶段重新排版就消失了。把双栏改成单栏、或替换字体的稿件,可能在送审前的格式检查环节就被退回。反过来,只要放手让类去做,同一份正文就能原封不动地换到另一个学会的类上。投稿类还给作者的是「不必操心版面的时间」,而不是「改动版面的自由」。

获取方面还有一个实际问题:这些类通常 不在最小 TeX 环境里。完整安装的 TeX Live 或 MiKTeX 会带上 amsartIEEEtranacmartelsarticlerevtex,但最小环境需要逐个安装(tlmgr install ieeetran),或者从出版社的下载包里取出 .cls 放到稿件旁边——llncs 尤其常见本地放置。此外,务必从投稿目标的 author kit / author center 重新取回最新模板。沿用本地旧副本、在截止前一晚发现版面已经变样,这样的事故每年都在某处发生。

amsart — 美国数学会的类与定理环境

amsart 是美国数学会(AMS)的论文类,不仅是数学类投稿中使用最广的一种,还 被别的类当作地基——开头已经看到 acmart 会加载它。类本身会准备好 amsmathamsfonts,所以数学相关的 \usepackage 大多可以省掉。题名区除 \title\author 外,还用 \address{...}(通信地址)、\email{...}\thanks{...}\subjclass[2020]{...}(AMS 数学主题分类)和 \keywords{...};定理环境则由 \newtheoremamsthm\theoremstyle 搭建。

amsart 上第一次绊倒,通常是 摘要的位置。按 article 的习惯把 abstract 环境写在 \maketitle 之后,日志里就会出现:Class amsart Warning: Abstract should precede \maketitle in AMS document classes。由于文档照样能编译通过,很容易被忽略,结果得到一份摘要掉在题名区之外的 PDF。正确做法是把 abstract 放在 \maketitle 之前。这一作法被建立在 amsart 之上的 acmart 继承了下来,只不过在那里不是警告而是直接报错。

latex
\documentclass[reqno]{amsart}
\newtheorem{theorem}{Theorem}[section]
\begin{document}
\title{On a Class of Analytical Engines}
\author{Ada Lovelace}
\address{Analytical Engine Lab, London, UK}
\email{[email protected]}
\subjclass[2020]{Primary 68N01; Secondary 01A55}
\keywords{analytical engine, program}

% the abstract must come BEFORE \maketitle in AMS classes
\begin{abstract}
This is the abstract.
\end{abstract}
\maketitle

\section{Introduction}
\begin{theorem}
Every engine has a program.
\end{theorem}
\end{document}

IEEEtran — IEEE 期刊与会议

IEEEtran 的特点是 同一个类会因选项而变成完全不同的体裁\documentclass[journal]{IEEEtran} 给出期刊双栏;\documentclass[conference]{IEEEtran} 给出会议论文集;此外还有短文用的 technote 和审稿用的 peerreview / peerreviewca。加上 compsoc(Computer Society)、comsoc(Communications Society)或 transmag,就切换到相应分会的体裁,并可与字号并写,如 \documentclass[10pt,journal,compsoc]{IEEEtran}。纸张默认为 letterpaper,另可选 a4papercspaper

固有作法方面:摘要写在 abstract 环境里,关键词放进专用的 IEEEkeywords 环境,它在期刊模式下自动排成 “Index Terms”,在会议模式下排成 “Keywords”。作者与所属由 \IEEEauthorblockN{...}\IEEEauthorblockA{...} 组合而成,参考文献标准使用 BibTeX 样式 IEEEtran.bst。还有一个不显眼却很关键的性质:IEEEtran.cls 默认几乎不加载外部宏包——在 TeX Live 2024 附带的版本里,出现 \RequirePackage 的地方只有面向 Computer / Communications Society 的数学字体探测。因此你自己加 hyperrefgeometry 通常也不会冲突,这与下面的 acmart 正好相反。模板从 IEEE 的 Template Selector 重新取回最稳妥。

latex
\documentclass[conference]{IEEEtran}
\begin{document}
\title{A Conference Paper}
\author{\IEEEauthorblockN{Ada Lovelace}
  \IEEEauthorblockA{Analytical Engine Lab\\ London, UK}}
\maketitle

\begin{abstract}
This is the abstract.
\end{abstract}

\begin{IEEEkeywords}
broadband networks, quality of service
\end{IEEEkeywords}

\section{Introduction}
The conference option sets the proceedings layout.
\end{document}

acmart — ACM 期刊与会议论文集

acmart 是 ACM 发布的统一类,取代了过去按会议和期刊分散的一组旧类。体裁通过 format= 选项 选择,而 format= 这部分本身可以省略。审稿投稿的默认值是单栏的 manuscript;多数期刊用 acmsmall;以书籍形式出版的会议论文集用 sigconf;SIGPLAN 系列用 sigplan。判别的经验规则是:acm 开头的格式面向期刊与 Transactions,以 sig 开头的格式面向会议论文集。 因此写作 \documentclass[sigconf]{acmart}\documentclass[manuscript,review,anonymous]{acmart}。另外,SIGCHI 的 sigchi 和 SIGGRAPH 的 siggraph 都已废止:一旦指定,类会给出 Class acmart Warning: The format sigchi is now obsolete. I am switching to sigconf. 并自行切换过去。sigchi-a 仅为旧文档保留了选项,类自己也会警告 ACM 不会接受这种体裁的稿件。

acmart 的固有作法集中在 它索取的元数据量 上。期刊要用短名指定刊名,如 \acmJournal{TOMS};正式论文还要用 \begin{CCSXML}...\end{CCSXML}\ccsdesc{...} 声明 CCS(ACM Computing Classification System)概念,并附 \keywords{...}。所属要拆成要素来写:\affiliation{\institution{...}\city{...}\country{...}}。参考文献使用基于 natbib 的 ACM-Reference-Format。而从 amsart 继承来的摘要作法在这里是强制的——把 abstract 放在 \maketitle 之后,编译会以 ! Class acmart Error: Abstract must be defined before maketitle command. Please move it! 中止。与只给警告的 amsart 不同,这里直接拒绝构建。

latex
\documentclass[sigconf]{acmart}
\begin{document}
\title{A Proceedings Paper}
\author{Ada Lovelace}
\affiliation{\institution{Analytical Engine Lab}\city{London}\country{UK}}

% abstract before \maketitle, or acmart raises an error
\begin{abstract}
This is the abstract.
\end{abstract}

\ccsdesc[500]{Networks~Network reliability}
\keywords{broadband networks, quality of service}
\maketitle

\section{Introduction}
The sigconf format sets the ACM proceedings layout.
\end{document}

llncs — Springer 的 LNCS

llncs 是 Springer 会议论文集系列 Lecture Notes in Computer Science(LNCS) 及姊妹系列 LNAI、LNBI 所用的类,直接按类名指定:\documentclass{llncs}。包括 ECCV、MICCAI 在内,众多通过 Springer 出版会议论文集的国际会议都采用这一体裁;版式是扩展自 article 的单栏。它的固有作法集中在作者与所属的写法上,类为此新增了标准 LaTeX 没有的 \institute 命令。用 \inst{n} 给每位作者加所属编号,如 \author{Ivar Ekeland\inst{1} \and Roger Temam\inst{2}},再用 \institute{first affiliation \and second affiliation} 列出所属,编号会自动生成。邮件地址写在 \institute 内部,形式为 \email{...}。参考文献样式为 splncs04\bibliographystyle{splncs04})。runningheads 选项面向卷编辑,单篇投稿通常不需要。

latex
\documentclass{llncs}
\begin{document}
\title{An LNCS Contribution}
\author{Ivar Ekeland\inst{1} \and Roger Temam\inst{2}}
\institute{Paris-Dauphine University, Paris, France\\
  \email{[email protected]}
  \and Sorbonne University, Paris, France\\
  \email{[email protected]}}
\maketitle

\begin{abstract}
The abstract follows the title block.
\end{abstract}

\section{Introduction}
Bibliography style: splncs04.
\end{document}

elsarticle — Elsevier 期刊

elsarticle 是投往 Elsevier 各期刊的稿件所用的类,写作 \documentclass[preprint,12pt]{elsarticle}。默认选项为 a4paper,10pt,oneside,onecolumn,preprint,其中 preprint 给出投稿用的宽松单栏版式。1p3p5p 对应刊出时的版面(单栏、双栏、摘要通栏的双栏),最终刊面由出版社排。此外还有为审稿加大行距的 review、更接近印刷版的 final,以及用于匿名投稿的 doubleblind。它的固有作法是 frontmatter 环境\title{...}\author{...}\affiliation{...}(旧写法 \address{...} 仍可用)、abstract 环境、keyword 环境全部放在其中,正文从 \end{frontmatter} 之后开始。作者与所属通过标签对应,写成 \author[a]{...}\affiliation[a]{organization={...}, city={...}, country={...}}

这里埋着整页最常被踩到的雷。elsarticle.cls 在接近末尾处执行了 \RequirePackage[\@biboptions]{natbib},也就是说 类已经替你加载了 natbib,默认引用形式是 numbers。若不知情而在导言区写 \usepackage[authoryear]{natbib},编译就会以 ! LaTeX Error: Option clash for package natbib. 中止。更容易迷惑的是:若恰好传入同样的 numbers,反而能通过,于是故障看起来时有时无。正确的做法有三种——用类选项指定,\documentclass[preprint,authoryear]{elsarticle};使用类自带的 \biboptions{...};或者用 nonatbib 选项彻底抑制加载。参考文献样式则从 elsarticle-numelsarticle-num-nameselsarticle-harv 中选择。natbib 一侧的引用命令由 natbib 那一页负责。

latex
% author-year is a CLASS option here -- do not reload natbib yourself
\documentclass[preprint,authoryear,12pt]{elsarticle}
\begin{document}
\begin{frontmatter}
\title{An Elsevier Manuscript}
\author[a]{Ada Lovelace}
\affiliation[a]{organization={Analytical Engine Lab},
  city={London}, country={UK}}

\begin{abstract}
The abstract lives inside the front matter.
\end{abstract}

\begin{keyword}
broadband networks \sep quality of service
\end{keyword}
\end{frontmatter}

\section{Introduction}
Text begins after the front matter.
\bibliographystyle{elsarticle-harv}
\end{document}

REVTeX — 物理领域(APS / AIP)

revtex4-2 是美国物理学会(APS)与美国物理联合会(AIP)期刊所用的类,版本号就写在类名里。指定时把三类选项组合起来——学会(aps / aip)、刊名(prlprbprxprfluids 等)与版式(preprint / reprint / twocolumn——例如 \documentclass[prl,aps,reprint]{revtex4-2}。所属的写法比较特别:把 \affiliation{...} 直接放在每个 \author{...} 之后,它就属于该作者;连续共享同一所属的作者会被自动合并。若想改用上标编号,使用类选项 superscriptaddress。参考文献样式为 apsrev4-2

REVTeX 内部同样抱着 natbib,但传入的选项与 elsarticle 不同。revtex4-2.cls 执行的是 \RequirePackage[sort&compress]{natbib},也就是说 引用编号会自动升序排列,连续编号还会压缩成区间。因此即便写成 \cite{c,a,b},输出也会是 [1–3] 这样的形式。这是为配合物理领域惯例而设的默认行为,与你写键的顺序无关。同样地,不要再自己补上 \usepackage{natbib},交给类去做。

latex
\documentclass[prl,aps,reprint]{revtex4-2}
\begin{document}
\title{A Physical Review Letter}
\author{Ada Lovelace}
\affiliation{Analytical Engine Lab, London, UK}
\author{Charles Babbage}
\affiliation{Analytical Engine Lab, London, UK}

% in REVTeX the abstract comes before the title block is typeset
\begin{abstract}
This is the abstract.
\end{abstract}
\maketitle

\section{Introduction}
% natbib is loaded by the class with sort&compress
Text.
\bibliographystyle{apsrev4-2}
\end{document}

类已经悄悄加载的宏包与 Option clash

投稿类特有的错误大多只有一个来源:作者又一次带着选项加载了类已经加载过的宏包。 典型例子是 acmart:TeX Live 2024 附带的版本会自行加载 geometryhyperreffancyhdrnatbibmicrotypebooktabscaptionsetspacexcolorgraphicx 等。因此在 \documentclass[sigconf]{acmart} 之后写 \usepackage[margin=1in]{geometry},编译就会以 ! LaTeX Error: Option clash for package geometry. 中止。elsarticle 同样加载 graphicx,并在刊面版式选项下加载 geometry。「一改边距就报错」这种症状,几乎都是这个原因。

按顺序尝试三种应对。第一,先怀疑 这个选项能不能改由类选项传入——elsarticleauthoryear 正是此例。第二,若确实需要抢先一步,就在 \documentclass 之前\PassOptionsToPackage{...}{geometry},类加载该宏包时这些选项就会合并进去。第三,改边距或改栏数本身往往就违反投稿规定,所以要先考虑 干脆不做 才是正解。想知道到底加载了哪些宏包,最快的办法是在导言区开头放 \listfiles,然后看日志末尾。

投稿目标 / 领域要记住的一点
amsart美国数学会(数学)abstract 要在 \maketitle 之前;也是 acmart 的地基
IEEEtranIEEE 期刊与国际会议(电气、信息)用选项切换模式(journalconferencetechnote);几乎不加载外部宏包
acmartACM 期刊与会议论文集(计算机科学)format= 选体裁;必须写 CCS 概念;内部加载大量宏包
llncsSpringer LNCS / LNAI / LNBI 会议论文集\institute\inst{n} 写所属;参考文献用 splncs04
elsarticleElsevier 期刊(各领域)前置部分放在 frontmatter 环境;类会加载 natbib,故用 \biboptions
revtex4-2APS / AIP 期刊(物理)\affiliation 紧跟在 \author 之后;natbib 以 sort&compress 加载

以上只是代表性的例子。Springer 还有较新的统一类 sn-jnl;数学领域有 amsart 的书籍版 amsbook 以及各出版社自有的类;生物医学领域则各家出版社自备模板。不论哪个领域,刚才看到的三条原则都同样适用:不改体裁、重新取回模板、不要重复加载类已经加载过的宏包。

投稿前要确认的六件事

投稿类上的失败,与其说源自 LaTeX 语法错误,不如说源自 一点一点偏离模板。为了不在截止前夜手忙脚乱,请机械地过一遍下面六点。

  • 重读第一行。 \documentclass[...] 的选项是否完全符合投稿规定?审稿版(reviewpreprintmanuscriptanonymous)与终稿(reprintsigconf 等)通常并不相同。
  • 把题名区恢复成模板的样子。 各个类写 \author、所属、摘要、关键词的方式都不同。若你用自定义宏重新包过,请改回来;否则出版社检查和 XML 转换可能提取不到元数据。
  • 单独跑通参考文献。 使用类指定的 .bstIEEEtranACM-Reference-Formatsplncs04elsarticle-*apsrev4-2),跑一遍 BibTeX 或 Biber,确认没有未定义引用。
  • 把日志读到最后。 Option clashUnused global option(s)、字体替换,以及由 Overfull \hbox 造成的段落溢出,只看 PDF 是发现不了的。
  • 冻结整套模板。 不要把 CTAN 的 .cls、出版社 kit 的旧 .bst 和别的年份的骨架混在一起。在 README 里写一行获取来源和日期,可以省去与合著者的争论。
  • 确认提交物的形式。 交源码还是 PDF、插图格式(EPS / PDF / PNG)、文件命名规则、是否需要匿名,这些是投稿系统的规定,不归类管。