美赛 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下载

极不推荐使用老旧的 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定义的基本文档类包括articlebookreport等。而宏包(文件后缀名为.sty)如同编程语言中的“库文件”,可为文档提供若干补充的命令、功能和设置。这是一般的情况。不过,在实际使用时,文档类和宏包却可以发挥类同的作用,这主要是因为LaTeX系统对文档类/宏包文件的内容、格式未做太过严格的限定,因此许多功能既可以通过文档类实现,也可以通过宏包实现。mcmthesis采用的文档类样式,实现较复杂,但更为精细。本站的easymcm宏包二次开发自mcmthesis的老版本,仍然是一个宏包文件,结构简单,便于使用。

在实际使用时,文档类通过\documentclass命令确定,宏包通过\usepackage命令引用。一份可编译的tex文档可以引用多个宏包,也可以不引用任何宏包,但必须确定一种文档类。

2 图片、表格、数学公式、网址的处理

Q2.1: 我还不太会插入图标和表格……

请在使用 LaTeX 排版论文前花一点时间认真学习各项基本功能,如图表处理等。请认真阅读 latex-zh-cn(各发行版本中均有,使用 texdoc 命令即可获得——这是什么意思?,若找不到请点这里下载),其中的内容已足够你在文档中获得图表。

Q2.2: 较大的表格,不易用 LaTeX 命令编写。请问是否有解决方案?

一般而言,有两种解决方案:

  1. 使用有关工具将ExcelMatlab等表格(矩阵)格式转换为LaTeX命令,或直接在可视化界面中编辑表格并转换为LaTeX命令。一个可用的工具是Excel2LaTeX(LaTeXStudio上的中文介绍与下载CTAN上的发布页面),另一个可以在线转换的网页是TablesGenerator点此进入,我推荐这一方式)。其中的若干门道,这里就不再介绍了,用户可以自行尝试。
  2. 将表格截图后以图片形式插入到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引导的网址时,出现了不能换行的问题。如何解决?

打字机字族ttfamilyTeX的底层定义中,默认是不能换行的。(参考这个知乎上的回答)使用 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 是一个抄录环境——也就是说,在其中不需要将_^$等字符做转义处理。

url命令的使用

3 样式、字体字号、段落的设置

Q3.1:模板中与官方 Word 模板为何有微小差异(如字体颜色、字号、字体不是「纯正」的 Times New Roman 等)?

  1. \(\rm\LaTeX\) 与 Word 机制不同,默认值也不同。想要将一个页面的各项参数设置得和 Word 中「一模一样」,需要额外设置许多属性,不甚现实。使用 \(\rm\LaTeX\),即是追求较 Word 更好的排版效果(用 L 反而付出更多工作量),若视觉效果相同反倒失去意义。
  2. 关于红色字体:根据往年情况,Word 模板中的红色意指「在此填入自己的内容」,填入后宜改为黑色(因此不必去「设置字体为红色」)。目前 easymcm 与其他模板一致,采用此种解释。
  3. 关于局部的字号差异:最终提交者为 PDF,本质上是矢量图,根本无从核查某处「字号为多少」。Word 模板设置字号容易,\(\rm\LaTeX\) 中稍繁,故模板中只是近似配置,勿担忧。(关于某条线、某个段落间距之类,同理。)
  4. easymcm 已经发行三年,最初发布时默认字体甚至不是 Times 字体(袭用基底 mcmthesis v5.0 的 Palatino 字体),未有因「论文样式有偏差」而导致比赛结果受影响的汇报(具体例子:作者本人使用该模板参赛,获 M 奖)。事实证明,论文内容决定最终评审意见,论文样式只要达到清晰、基本合规即可,细节不必过分追求,更不必为此焦虑;当下成百上千人(前几年则有更多人)与你使用同样模板参赛,足以使你安心。

如一定要修改,请在各个相关评论区寻找已有回复,不再解答。

Q3.2:为何正文页码为 2?(或:为何目录没有页眉?)

目录无页眉,又仍计为第一面(实质是「凑页」),故产生如此现象。没有要紧影响,暂时采用此种样式;可能会在下一个版本中修改。

欲修改,请到 sty 文件中的最后部分,将 \thispagestyle{empty} 命令去除,或将其改为 \thispagestyle{fancy}

Q3.3: 如何调整段间距

在导言区修改 \parskip 的数值即可。如命令

\setlength{\parskip}{2\baselineskip}

就将行距设置为两倍的基础行距(也可填入具体长度,如 2pt2cm 等)。不建议随意调整。

Q3.4: 为调整页边距,我在导言区加载了 geometry 宏包后页面显示有问题,请问哪里出了问题?

easymcm 中已经加载过 geometry 宏包了,再次加载会出错(有如在C++程序中多次引用头文件的错误)。不推荐用户修改相关参数。如一定要修改,则应打开 easymcm.sty 并修改引用 geometry 宏包时所设定的参数——该宏包是第一个被引用的宏包,容易找到。

Q3.5: 如何修改目录、正文标题的样式?

不推荐用户修改,修改目录不是简单的事情。如果您希望藉此「提高水平」,在比赛前有充足的时间和精力,请查找其他资料,比如通过 texdoc 命令阅读 titlesectitletoc 等宏包的使用方法。

4 交叉引用的相关问题

Q4.1: 编译后,生成了空白的目录(或显示为 ?? 的引用标记),请问发生了什么?!

重复编译几次即可。

Q4.2: 我的论文章节太多,导致目录生成了两页。如何将其压缩到一页以内?

美赛论文理应短小精悍、结构突出,一篇20页的论文不应有太过繁密的章节划分。目录应当控制在一页以内,因此easymcm宏包中未考虑目录超出一页的情形。如果目录被迫超出一页(即实在无法删减章节),有下列解决方案:

  1. 不显示三级标题,只显示二级标题。在导言区加入\setcounter{tocdepth}{2} 即可。
  2. 定制目录样式,去掉目录中section级别标题的默认顶部间距。方法在网上可查到,但不推荐,因目录样式定制不是一件容易的事情。
  3. 如您坚持认为自己的论文必须有两页目录,请参考一位博友所引用的解决方案:知乎页面
posted @ 2019-01-22 21:24  黑山雁  阅读(7567)  评论(42编辑  收藏  举报

主题配色:取自家中拖把