Error message here!

Hide Error message here!

忘记密码?

Error message here!

请输入正确邮箱

Hide Error message here!

密码丢失?请输入您的电子邮件地址。您将收到一个重设密码链接。

Error message here!

返回登录

Close

美赛LaTeX急救指南

黑山雁 2019-01-22 21:24:00 阅读数:293 评论数:0 点赞数:0 收藏数:0

关于标题不能换行的问题:这里有解决方案

一年一度的美国大学生数学建模竞赛(MCM/ICM)又要开始了。在比赛中,将有一部分同学选择用LaTeX排版论文,以使论文获得更好的视觉效果;但是,就既往经验来看,其中的很大一部分同学,还并没有熟练地掌握LaTeX的相关技巧,只是比较生硬的套用网上所给的论文模板(例如通行的mcmthesis,以及本站发布的easymcm),一旦出现一些小问题就会不知所措

此份文档,是要为各位同学提供一份比较详细的LaTeX排版问答集锦,内容集中于比赛时可能出现的种种情况,对其他情形下的常见问题则并不叙述。主要着眼于本站发布的easymcm宏包,对于mcmthesis文档类在使用时的常见问题也有少量的论述。读者可将此份文档存留、收藏,待遇到问题无法自行解决时,再来到这份文档中查找解决方案。

此份文档将根据我所了解到的问题继续补充。作者有将此文档转化为pdf文档(用LaTeX撰写)的打算,但暂无时间进行此项工作。本文的markdown源码已发布于GitHub上,戳这里看看

1 关于easymcm宏包的基本信息,以及编译系统的若干问题

Q1.1: 目前通行的mcmthesis是一个“文档类”,而本站发布的easymcm是一个“宏包”。请问这二者有何区别?

Answer: 文档类(文件后缀名为.cls)是一整套预定义的文档样式,其决定了诸如标题样式、纸张大小、章节格式等属性,相当于是文档的“框架”。由LaTeX定义的基本文档类包括articlebookreport等。而宏包(文件后缀名为.sty)如同编程语言中的“库文件”,可为文档提供若干补充的命令、功能和设置。这是一般的情况。不过,在实际使用时,文档类和宏包却可以发挥类同的作用,这主要是因为LaTeX系统对文档类/宏包文件的内容、格式未做太过严格的限定,因此许多功能既可以通过文档类实现,也可以通过宏包实现。mcmthesis采用的文档类样式,实现较复杂,但更为精细。本站的easymcm宏包二次开发自mcmthesis的老版本,仍然是一个宏包文件,结构简单,便于使用。

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

Q1.2: 我在编译宏包时出现了以下报错信息,请问是什么问题?

! LaTeX Error: Environment abstract undefined.

Answer: ABSTRACT.tex文件是不能编译的,其已通过\input命令嵌入于PAPER.tex文件之中了。请编译PAPER.tex

作为补充,需要提醒的是:一份可以编译的LaTeX源代码,至少要具有以下两个要素

  1. 文档类的声明(\documentclass命令);
  2. document主环境(一段由\begin{document}\end{document}括起来的区域)。

如果一份文档中缺少以上两个要素,说明其是作为分支文档被嵌入到其他tex代码中去了,不能用以编译。还不熟悉LaTeX文档结构的用户,可以此为依据,避免再次出错。

Q1.3: 我在编译宏包时出现了以下报错信息,请问是什么问题?

! Missing \endcsname inserted.

Answer: 这是由于您不慎编译了easymcm.sty宏包文件,其是不能编译的。请编译PAPER.tex

Q1.4: 看起来easymcm中不支持中文(相反,mcmthesis是支持的),请问如何解决这一问题呢?

Answer: 请问您为什么要在美赛论文中插入中文?虽然现在美赛的评委里中国人越来越多了,但美赛论文还是不能用中文写的。

(补充:若您使用pdflatex编译文件,请特别注意,一定不要在论文中插入任何中文符号。否则,论文中将会生成类似于某类拉丁字符的乱码,难以检查出来,会影响论文的最终效果。如果您无法保证自己在来回切换输入法的过程中不会误敲中文符号,请使用UTF-8版本的美赛模板,并使用xelatexlualatex进行编译。这样,不慎敲入的中文符号能够正常显示出来——尽管这仍然影响论文的美观性。)

Q1.5: 我使用CTeX套装进行排版,编译时系统报错:

! LaTeX Error: File ` lastpage.sty ' not found.

是缺少宏包吗?应如何解决呢?

Answer: 就实际经验来说,您使用的应该是非完整版的CTeX套装,缺少宏包且不能自动联网安装。在安装时,应下载带有Full字样的安装包,如下图所示(截图来自清华镜像)。

CTeX下载

另外,补充说明:尽管大多数资深的LaTeX用户都不推荐大家使用老旧的CTeX套装(我作为一个初级的LaTeX用户也不推荐),但easymcm宏包的更新过程中仍将充分考虑与CTeX套装的兼容性。许多新手仍然先接触到CTeX套装,这是不以人的意志为转移的现状。

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

Q2.1: 我还不太会插入图标和表格,怎么办怎么办!

Answer: easymcm的发行版本中附带有一份样例论文,其源码中有大量的图、表插入命令,可供参考。另外,您也可参考一般的LaTeX教程。

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

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

  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环境都是浮动对象,没有本质上的区别,主要区别就在其标题名称(也即\caption命令的效果)上。

Q2.3: easymcm自带的样例论文中,所有的表格几乎都是三线表。不能使用更复杂的样式吗?

Answer: 三线表是科技论文中的通用表格形式,简洁明快,在美赛论文中的确不推荐用其他类型的表格。但是,如果需要处理特别复杂的表格,必须在表格中用若干竖线分隔(这是三线表中不应该出现的!),则还是用默认的表格样式为好。不建议新手自己用代码写复杂表格,请按照Q2.2中所提供的解决方案来生成复杂表格的LaTeX代码。关于三线表的更多信息,可以查看三线表宏包booktabs说明文档

Q2.4: LaTeX中的公式代码太繁琐了,记不住、用不熟,怎么破?

Answer: 如果您已经比较熟悉LaTeX中数学公式的基本语法,以及若干的数学环境,只是对具体的符号代码感到苦恼,可以准备一份公式代码表在手头以供查阅。各种纸质的、在线的LaTeX教程中,都有这样的公式符号代码表。我的资源分享页面中所引用的两种电子版教程(A Primer以及lshort)中,也有这样的表可供查阅。

如果您对基本的公式语法都感到陌生,则建议您利用其他可视化编辑器生成LaTeX代码。使用Office套装处理文档的用户,应该比较熟悉MathType公式编辑器了,其内置有生成TeX代码的模块,具体的配置方法可在网上容易地找到(前提是,您使用的是完整版的MathType,不是在试用期结束后残存的“精简版”)。另外,还有一个较好的在线公式编辑器,语言可调整为中文,使用十分便捷,同时也可以充当一个公式表:如果您遗忘了某些符号,或记不清矩阵、积分号等的使用方法,可直接在界面上寻找对应按钮,点击就能生成规范的LaTeX代码。

Q2.5: 插入由\texttt引导的网址时,出现了不能换行的问题。如何解决?

Answer: 打字机字族ttfamilyTeX的底层定义中,默认是不能换行的。(参考这个知乎上的回答)解决方案不少,本站提供的easymcm宏包中是用url宏包下\UrlBreaks命令定义换行字符来解决的。不幸的是,我目前所提供的样例论文中并没有应用这一方案——那时我和队友还在学习LaTeX论文排版,采用的手段还是手动换行。为了自动换行,请在论文正文及参考文献区采用\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: 我想将论文字体调整为Times New Roman,请问如何做?

Answer: 首先,美赛官方未要求论文字体,仅要求论文的字号不小于12号,因此任何字体都是可以的。其次,如果您一定要使用一般情况下的规范字体Times New Roman,首先应将PAPER.tex导言区中的\usepackage{palatino}去掉,然后再在原位置引用另一宏包:

\usepackage{mathptmx}

再次编译即可。mathptmx宏包提供了一种可用的Times New Roman字体。详细内容,可以参考LaTeXStudio上的一篇介绍),读者也可以尝试该页面上所提供的其他方案。

Q3.2: 如何调整段间距

Answer: 在easymcm宏包目前版本(v5.02)的模板文件夹内,ABSTRACT.tex文件中,有一段已经被注释掉的命令:

% 下面的语句可调整全文行距为标准值的0.6倍,请自行使用
% \renewcommand{\baselinestretch}{0.6}\normalsize

将下面命令的注释号去掉,即可使之生效;修改其倍数,即可调整段落间距的大小(设为0则表示不需要段间距)。

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

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

特别说明:论文排版时常用的各类宏包,诸如geometryhyperrefbooktabsfontspecfancyhdrxcolorgraphicx等,全部都在easymcm之中加载过了,切不可在论文正文的导言区再次加载。如果要修改加载这些宏包时所设置的参数,请使用宏包所提供的设置接口,或直接到easymcm.sty的对应位置修改。

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

Answer: 不推荐用户修改。如果您有能力轻松地修改这些样式,那何必过来用easymcm这样的入门级模板呢?如您一定要定制自己的论文样式,可以参考这个页面(但注意,请不要在美赛论文中使用\ctexset之类的中文处理命令,easymcm中并未添加对中文的支持!),也可参考titlesec宏包的说明文档——处理目录、标题样式的titlesectitletoc宏包均已在easymcm中加载过了。

Q3.5: 我使用的美赛模板是mcmthesis文档类,默认的论文样式中有多余的摘要页。请问如何去除?

Answer: 使用mcmthesis自带的设置命令:

\mcmsetup{CTeX = false, tcn = 1234567, problem = A,%
sheet = true, titleinsheet = true, keywordsinsheet = true,%
titlepage = false, abstract = false}

即可将其调整到符合美赛论文规范的程度(队伍控制号tcn和选题problem需根据实际情况再做调整)。其他问题,请用户参考mcmthesis自带的说明文档(原则上,如果您安装的是完整版的TeX发行版,则可以直接用本地搜索引擎搜索到mcmthesis.pdf这份参考文档)。您也可直接联系mcmthesis目前的维护者,在[LaTeXStudio]上您可以找到其站长(mcmthesis目前的维护者)的联系方式。

4 目录、交叉引用的相关问题

Q4.1: 编译后,生成了空白的目录,请问发生了什么?!

Answer: 重复编译几次即可。别慌。

Q4.2: 如何自己定义目录上各条目的样式?

Answer: 请参考问题Q3.4的回答。

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

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

(1) 将目录页上的字号改小,方法是到easymcm.sty的第125行左右,加入一条缩小字号的命令:

%=========目录的制作==========
\renewcommand\tableofcontents{%
\centerline{\normalfont\Large\bfseries\contentsname%
\@mkboth{%
\MakeUppercase\contentsname}{\MakeUppercase\contentsname}}%
\vskip 3ex%
\small% 这条命令是新加入的
\@starttoc{toc}%
}

该方法对于目录内容仅微微多于一页的情形是适用的。

(2) 不显示三级标题,只显示二级标题。方法是到easymcm.sty的第48行,将原来的\setcounter{tocdepth}{3}改成\setcounter{tocdepth}{2}。(也可在不修改sty文件的前提下,直接在PAPER.tex的导言区声明\setcounter{tocdepth}{2},以覆盖之前的计数器。)

(3) 定制目录样式,去掉目录中section级别标题的默认顶部间距。方法在网上可查到,但不推荐,因目录样式定制不是一件容易的事情。

如您坚持认为自己的论文必须有两页目录,请参考一位博友所引用的解决方案:知乎页面

Q4.4: 我设置了正确的\label&\ref引用,但输出的论文中却显示出“??”,这是什么情况?

Answer: 请参考Q4.1的回答。

版权声明
本文为[黑山雁]所创,转载请带上原文链接,感谢
https://www.cnblogs.com/xjtu-blacksmith/p/mcmaid.html

编程之旅,人生之路,不止于编程,还有诗和远方。
阅代码原理,看框架知识,学企业实践;
赏诗词,读日记,踏人生之路,观世界之行;

支付宝红包,每日可领