美赛 LaTeX 急救指南
本文已不再于此更新,最新版本请见:xjtu-blacksmith.cn/essay/mcmaid。
一年一度的美国大学生数学建模竞赛(MCM/ICM)又要开始了。在比赛中,将有一部分同学选择用LaTeX
排版论文,以使论文获得更好的视觉效果;但是,就既往经验来看,其中的很大一部分同学,还并没有熟练地掌握LaTeX
的相关技巧,只是比较生硬的套用网上所给的论文模板(例如通行的mcmthesis
,以及本站发布的easymcm
),一旦出现一些小问题就会不知所措。
此份文档为一份比较详细的 LaTeX
排版问答集锦,内容集中于比赛时可能出现的种种情况。主要着眼于西安交大钱院学辅维护的 easymcm
宏包。读者可将此份文档存留、收藏;待遇到问题无法自行解决时,再来到这份文档中查找解决方案。
此份文档将根据我所了解到的问题继续补充。如未找到答案,请到 easymcm 模板的 GitHub 讨论页面上发言(需注册 GitHub 账号)。不推荐在本页面下方评论提问,这不便于其他有相同问题的同学翻阅。
1 安装与编译问题
Q1.1: 我使用 CTeX
套装进行排版,编译时系统报错:
! LaTeX Error: File ` lastpage.sty ' not found.
(或 xcolor.sty
等其他常见宏包)是缺少宏包吗?应如何解决呢?
您使用的应是非完整的
CTeX
套装,缺少宏包且不能自动联网安装。如一定要使用CTeX
套装(不推荐,见下),在安装时,应下载带有Full
字样的安装包,如下图所示(截图来自清华镜像)。
极不推荐使用老旧的
CTeX
套装,请安装最新发行版(例如 TeX Live 2019),安装教程可见这里或这里。与CTeX
套装相关的其他问题,作者将不再回复。
Q1.2:原来安装了 CTeX
套装,后来(先卸载了套装,再)安装了最新的 TeX 发行版(如 TeX Live)后编译出错,是什么原因?
CTeX
套装与其他 TeX 发行版共存本就有诸多问题,此外CTeX
还有可能修改系统环境变量、导致无法在命令行中调用其他 TeX 发行版的程序。一般问题是环境变量缺失,请据此为线索自行搜索解决方案,并确保
CTeX
套装完全删除干净。
Q1.3: 编译时显示 easymcm.sty
文件未找到?
首先检查
easymcm.sty
文件是否与被编译的PAPER.tex
或其他文件在同一目录下。如果仍不能找到,请检查编译时所在的目录是否是当前目录(可检查 IDE 或终端开头输出的若干信息)。一种常见的可能是:没有解压
zip
文件,直接通过 Windows 系统文件管理器中集成的zip
查看器打开了PAPER.tex
。请解压后再用。另外,似乎这个问题大多是在 \(\rm\mathbb{C}\TeX\) 套装下出现的。如实在无法解决,建议安装最新的 TeX Live,以解决此问题(并避免产生其他更多问题)。
Q1.4: 我在编译宏包时出现了以下报错信息:
! Missing \endcsname inserted.
这是由于您不慎编译了
easymcm.sty
宏包文件。请编译PAPER.tex
。(您可能是在使用 WinEdt 软件,因为其他的 IDE 都不会允许这样做。)
Q1.5: 目前通行的mcmthesis
是一个“文档类”,而本站发布的easymcm
是一个“宏包”。请问这二者有何区别?
文档类(文件后缀名为
.cls
)是一整套预定义的文档样式,其决定了诸如标题样式、纸张大小、章节格式等属性,相当于是文档的“框架”。由LaTeX
定义的基本文档类包括article
、book
、report
等。而宏包(文件后缀名为.sty
)如同编程语言中的“库文件”,可为文档提供若干补充的命令、功能和设置。这是一般的情况。不过,在实际使用时,文档类和宏包却可以发挥类同的作用,这主要是因为LaTeX
系统对文档类/宏包文件的内容、格式未做太过严格的限定,因此许多功能既可以通过文档类实现,也可以通过宏包实现。mcmthesis
采用的文档类样式,实现较复杂,但更为精细。本站的easymcm
宏包二次开发自mcmthesis
的老版本,仍然是一个宏包文件,结构简单,便于使用。在实际使用时,文档类通过
\documentclass
命令确定,宏包通过\usepackage
命令引用。一份可编译的tex
文档可以引用多个宏包,也可以不引用任何宏包,但必须确定一种文档类。
2 图片、表格、数学公式、网址的处理
Q2.1: 我还不太会插入图标和表格……
请在使用 LaTeX 排版论文前花一点时间认真学习各项基本功能,如图表处理等。请认真阅读
latex-zh-cn
(各发行版本中均有,使用texdoc
命令即可获得——这是什么意思?,若找不到请点这里下载),其中的内容已足够你在文档中获得图表。
Q2.2: 较大的表格,不易用 LaTeX
命令编写。请问是否有解决方案?
一般而言,有两种解决方案:
- 使用有关工具将
Excel
、Matlab
等表格(矩阵)格式转换为LaTeX
命令,或直接在可视化界面中编辑表格并转换为LaTeX
命令。一个可用的工具是Excel2LaTeX
(LaTeXStudio上的中文介绍与下载、CTAN
上的发布页面),另一个可以在线转换的网页是TablesGenerator
(点此进入,我推荐这一方式)。其中的若干门道,这里就不再介绍了,用户可以自行尝试。- 将表格截图后以图片形式插入到
LaTeX
中。这是最方便的做法,问题在于截图是位图格式的,对文档的显示效果可能有一定的影响。同时,在插入截图时,还应采取这样的“古怪”方式:\begin{table}[!htbp] \centering \caption{Name of the table}\label{tb:XXX} \includegraphics[width=Xcm]{XXX.jpg} \end{table}
由此,显示出的标题将是“Table X: Name of the table”,而不是“Figure”。
figure
环境与table
环境都是浮动对象,没有本质上的区别,主要区别就是标题名称。
Q2.3: easymcm
自带的样例论文中,所有的表格几乎都是三线表。不能使用更复杂的样式吗?
三线表是科技论文中的通用表格形式,简洁明快,在美赛论文中的确不推荐用其他类型的表格。但是,如果需要处理特别复杂的表格,必须在表格中用若干竖线分隔,则还是用默认的表格样式为好。不建议新手自己用代码写复杂表格,请按照Q2.2中所提供的解决方案来生成复杂表格的
LaTeX
代码。关于三线表的更多信息,可以查看三线表宏包booktabs
的说明文档(使用texdoc
命令查看,见 Q2.1 的回答)。可换页表格需调用longtable
宏包。
Q2.4: LaTeX
中的公式代码太繁琐了,记不住、用不熟,怎么破?
如果您已经比较熟悉
LaTeX
中数学公式的基本语法,以及若干的数学环境,只是对具体的符号代码感到苦恼,可以准备一份公式代码表在手头以供查阅。各种纸质的、在线的LaTeX
教程中,都有这样的公式符号代码表。如果您对基本的公式语法都感到陌生,则建议您利用其他可视化编辑器生成
LaTeX
代码。使用Office
套装处理文档的用户,应该比较熟悉MathType
公式编辑器了,其内置有生成TeX
代码的模块,具体的配置方法可在网上容易地找到(前提是,您使用的是完整版的MathType
,不是在试用期结束后残存的“精简版”)。另外,还有一个较好的在线公式编辑器,语言可调整为中文,也可以充当一个公式表:如果您遗忘了某些符号,或记不清矩阵、积分号等的使用方法,可直接在界面上寻找对应按钮,点击就能生成规范的LaTeX
代码。还可参考我在钱院学辅信息站编写的 LaTeX 公式语法速成文章。
Q2.5: 插入由\texttt
引导的网址时,出现了不能换行的问题。如何解决?
打字机字族
ttfamily
在TeX
的底层定义中,默认是不能换行的。(参考这个知乎上的回答)使用easymcm
模板时,为了自动换行,请在论文正文及参考文献区采用\url
命令将需要引用的网址括起来,例如一个含网址的bibitem
应写成这样:\bibitem{XXX} Easymcm: A useful template for MCM/ICM. 2019.1.22. \url{https://www.cnblogs.com/xjtu-blacksmith/p/9737960.html}
效果如下图所示,可见自动换行的问题已解决了。特别注意,
\url
是一个抄录环境——也就是说,在其中不需要将_
、^
、$
等字符做转义处理。
3 样式、字体字号、段落的设置
Q3.1:模板中与官方 Word 模板为何有微小差异(如字体颜色、字号、字体不是「纯正」的 Times New Roman 等)?
- \(\rm\LaTeX\) 与 Word 机制不同,默认值也不同。想要将一个页面的各项参数设置得和 Word 中「一模一样」,需要额外设置许多属性,不甚现实。使用 \(\rm\LaTeX\),即是追求较 Word 更好的排版效果(用 L 反而付出更多工作量),若视觉效果相同反倒失去意义。
- 关于红色字体:根据往年情况,Word 模板中的红色意指「在此填入自己的内容」,填入后宜改为黑色(因此不必去「设置字体为红色」)。目前
easymcm
与其他模板一致,采用此种解释。- 关于局部的字号差异:最终提交者为 PDF,本质上是矢量图,根本无从核查某处「字号为多少」。Word 模板设置字号容易,\(\rm\LaTeX\) 中稍繁,故模板中只是近似配置,勿担忧。(关于某条线、某个段落间距之类,同理。)
easymcm
已经发行三年,最初发布时默认字体甚至不是 Times 字体(袭用基底mcmthesis v5.0
的 Palatino 字体),未有因「论文样式有偏差」而导致比赛结果受影响的汇报(具体例子:作者本人使用该模板参赛,获 M 奖)。事实证明,论文内容决定最终评审意见,论文样式只要达到清晰、基本合规即可,细节不必过分追求,更不必为此焦虑;当下成百上千人(前几年则有更多人)与你使用同样模板参赛,足以使你安心。如一定要修改,请在各个相关评论区寻找已有回复,不再解答。
Q3.2:为何正文页码为 2
?(或:为何目录没有页眉?)
目录无页眉,又仍计为第一面(实质是「凑页」),故产生如此现象。没有要紧影响,暂时采用此种样式;可能会在下一个版本中修改。
欲修改,请到
sty
文件中的最后部分,将\thispagestyle{empty}
命令去除,或将其改为\thispagestyle{fancy}
。
Q3.3: 如何调整段间距?
在导言区修改
\parskip
的数值即可。如命令\setlength{\parskip}{2\baselineskip}
就将行距设置为两倍的基础行距(也可填入具体长度,如
2pt
、2cm
等)。不建议随意调整。
Q3.4: 为调整页边距,我在导言区加载了 geometry
宏包后页面显示有问题,请问哪里出了问题?
easymcm
中已经加载过geometry
宏包了,再次加载会出错(有如在C++
程序中多次引用头文件的错误)。不推荐用户修改相关参数。如一定要修改,则应打开easymcm.sty
并修改引用geometry
宏包时所设定的参数——该宏包是第一个被引用的宏包,容易找到。
Q3.5: 如何修改目录、正文标题的样式?
不推荐用户修改,修改目录不是简单的事情。如果您希望藉此「提高水平」,在比赛前有充足的时间和精力,请查找其他资料,比如通过
texdoc
命令阅读titlesec
、titletoc
等宏包的使用方法。
4 交叉引用的相关问题
Q4.1: 编译后,生成了空白的目录(或显示为 ??
的引用标记),请问发生了什么?!
重复编译几次即可。
Q4.2: 我的论文章节太多,导致目录生成了两页。如何将其压缩到一页以内?
美赛论文理应短小精悍、结构突出,一篇20页的论文不应有太过繁密的章节划分。目录应当控制在一页以内,因此
easymcm
宏包中未考虑目录超出一页的情形。如果目录被迫超出一页(即实在无法删减章节),有下列解决方案:
- 不显示三级标题,只显示二级标题。在导言区加入
\setcounter{tocdepth}{2}
即可。- 定制目录样式,去掉目录中
section
级别标题的默认顶部间距。方法在网上可查到,但不推荐,因目录样式定制不是一件容易的事情。- 如您坚持认为自己的论文必须有两页目录,请参考一位博友所引用的解决方案:知乎页面。
本博客上不以【校理】字样作为标题的文章,其著作权均归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
本人为西安交通大学能动学院本科生,欢迎对相关内容提出批评与建议!
Github个人主页:https://github.com/xjtu-blacksmith/
欢迎关注西安交大钱院学辅信息站:https://qyxf.site/
邮箱:yjr134@163.com