为什么使用LaTeX撰写学位论文
一般来说,撰写学位论文的软件有两类,一类是 Microsoft Word 或者 WPS 等富文本编辑器,另一类是 LaTeX 系列的纯文本撰写再编译的排版程序。Word 的优势在于所见即所得,调整字体,插入表格等操作可以随着操作立即在屏幕上显示出来,图形化界面排版也很方便。但是,Word 在处理几万字的,格式要求严格的学位论文时,对于绝大部分同学是非常挑战耐心的事情,如果 Word 掌握的不够,可能就会发生长文档排号前面后面乱了,插入图片文字乱了的窘境。而 LaTeX 作为一种专门为了科学文献排版而设计实现的排版工具,排版论文时有无可比拟的优势,纯文本撰写,编译直接产生符合需求的 pdf 论文,是非常惬意的过程。必须承认,相比于 Word,LaTeX 是一种更符合程序员思维的工具,具有一定的学习曲线,需要专门花时间学习。但是,以撰写学位论文为目的,学习的内容并不多,而且掌握之后撰写论文就基本没有排版需求,只需要关注论文内容即可。
下面首先阐述 LaTeX 撰写环境的配置,然后叙述用 LaTeX 撰写论文的基本方法。
环境配置
环境配置主要是安装 LaTeX 编译工具和配置一个舒适的撰写环境。
安装 TeXLive 发行版
LaTeX 是基于 TeX 的一种排版系统,LaTeX 和 TeX 的发展历史,详见维基百科。一个不太准确的理解,可以把 LaTeX 看成一种专门为了排版设计的“编程语言”,只不过他的编译结果不是机器码,而是 dvi 或者 pdf 格式的格式化文档。我们为了使用 LaTeX 编译论文,首先需要安装一个编译工具,而 TeXLive 是包含 “编译器” 在内的一整套编译工具,可以理解为 g++ 之于 C++ 或者 OpenJDK 之于 Java。
Windows和 Linux 操作系统上,建议安装 TeXLive,TeXLive 的安装镜像可以从国内的镜像站下载,如华为镜像站,中科大镜像站。以下图中华为镜像站截图为例,直接下载 texlive.iso
即可。
下载完成后,开始安装,挂载 texlive.iso
,然后双击install-tl-windwos.bat
开始安装。
弹出如下图的安装界面后,可以选择直接安装,如果非常不想安装在C盘,可以改换安装目录,但是注意安装路径不要包含空格和中文字符。
安装过程比较漫长,可能长达20分钟-1小时。
安装完成后,开始菜单可以看到 TexLive 2020 或者 TexLive 2021 文件夹,打开其中的 TeXworks editor 编辑器。
用一个简短的小文档测试一下安装是否正常完成。打开 TeXworks editor 编辑器之后,我们输入以下内容,然后将其保存在一个空目录 test
中,将其命名为 test.tex
,保存完成后,将 TeXworks editor 左上角的绿色箭头右边的编译工具选成 XeLaTeX
,再点击绿色箭头编译,应该会在左侧弹出编译好的文档。
\documentclass{article}
\usepackage[UTF8]{ctex}
\begin{document}
你好,\LaTeX!
\end{document}
至此,编译成功,TeXLive 安装完毕。
安装和配置 VS Code
VS Code 不是必须的,上文中的 TeXworks editor 也可以完成论文撰写,但是 VS Code 界面美观,还能配合插件进行自动补全,字数统计等额外的功能,可以大幅度提升撰写体验。(其他一些专门的 LaTeX 撰写工具,也非常易用,如 Tex Maker, TeX Studios 等,作者自己比较喜欢 VS Code的界面 :)
首先从官网下载并安装 (VS Code)[https://code.visualstudio.com/download]
然后打开 VS Code 插件安装两个插件,分别是 LaTeX Workshop
和 LaTeX Utilities
,其中前者是必须的,用于支持在 VS Code 中编译 LaTeX 文档,后者是可选的,提供了一些额外功能,比如字数统计。
由于中科大的模板提供了默认配置,因此如果只用来撰写学位论文,并不需要以下配置。在此提供几种常见的配置,可以用于撰写其他文章时参考。
同时,建议编译配置每个项目用自己的,而非全局配置,如果需要修改配置,尽量修改当前项目中的
.vscode/settings.json
。可以发现,从 Github 下载的官方模板的编译配置,就在该文件中。
- pdflatex
"latex-workshop.latex.tools": [
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
],
"env": {}
}
],
"latex-workshop.latex.recipes": [
{
"name": "pdflatex",
"tools": [
"pdflatex"
]
}
]
- xelatex
"latex-workshop.latex.tools": [
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
],
"env": {}
}
],
"latex-workshop.latex.recipes": [
{
"name": "xelatex",
"tools": [
"xelatex"
]
}
]
- xelatex->bibtex->xelatex->xelatex
"latex-workshop.latex.tools": [
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
],
"env": {}
},
{
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
],
"env": {}
}
],
"latex-workshop.latex.recipes": [
{
"name": "xelatex ➞ bibtex ➞ xelatex × 2",
"tools": [
"xelatex",
"bibtex",
"xelatex",
"xelatex"
]
}
],
- pdflatex->bibtex->pdflatex->pdflatex
"latex-workshop.latex.tools": [
{
"name": "pdflatex",
"command": "pdflatex",
"args": [
"-shell-escape",
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"%DOCFILE%"
],
"env": {}
},
{
"name": "bibtex",
"command": "bibtex",
"args": [
"%DOCFILE%"
],
"env": {}
}
],
"latex-workshop.latex.recipes": [
{
"name": "pdflatex ➞ bibtex ➞ pdflatex × 2",
"tools": [
"pdflatex",
"bibtex",
"pdflatex",
"pdflatex"
]
}
],
论文结构
一般来说,LaTeX 中样式和内容是分离的,LaTeX 模板负责样式,文章作者负责内容,除了 LaTeX 官方维护的模板,一般学术会议,期刊或者学校等组织也会设计实现自己的模板。本文先概述 LaTeX 中基于默认模板的文章组织结构,然后结合中科大学位论文模板阐述学位论文的组织结构。
LaTeX 文章的基本结构
LaTeX 默认模板中的文章可以分为 book
和 report
,前者一般用来撰写书籍或者大型论文,后者一般是短文。其中 book
类的文章结构包含 chapter
section
subsection
subsubsection
等四级主要结构,再往下细分可以用 paragraph
等结构,但一般用不到。而 report
类的文章作为短文,没有 chapter
,以 section
作为最高等级。
学位论文模板一般是在 book
类的基础上定制的,下面先看一下基于 book
类文章的基本结构。
\documentclass{book}
\usepackage[heading=true]{ctex}
\begin{document}
\chapter{绪论}
本章主要讲述以下内容。
\section{研究背景}
随着深度学习的发展。
\section{研究现状}
当前,对于训练过程的通信瓶颈问题。
\section{研究内容}
本文包含多方面的研究内容。
\subsection{研究内容一}
研究内容一主要包含深度神经网络的相关内容。
\subsection{研究内容二}
\section{论文组织结构}
本文第一章为绪论。
\end{document}
编译出来的效果如下:
可以看到,\chapter{绪论}
编译成了 第一章 绪论
,\section{研究背景}
编译成了 1.1 研究背景
,其余内容也是按照 tex
文件中的描述编译成了对应的形式。从文本描述 \chapter{绪论}
到 pdf 中的 第一章 绪论
,是LaTeX 配合对应的模板类和宏包完成了纯文本描述到带样式 pdf 的转变。如果这里我们想要的章节是 一、绪论
的形式,应该修改样式描述或者更换模板,而不用修改正文内容,这就是所谓的样式和内容分离的特性。
显然,当前的配置,是不符合学位论文撰写的要求的。以中科大为例,《中国科学技术大学研究生学位论文撰写手册》规定了严格的论文格式要求,如果用 Word 撰写,就要自己按照要求完成排版工作,而如果使用 LaTeX 撰写,那么只需要下载对应的中科大学位论文模板,就可以不用再关心排版格式的问题了。
科大论文模板的组织结构
科大模板的默认编译工具是 latexmk, 因此需要确保存储路径中不含有空格。
我们从科大学位论文模板 github 仓库 https://github.com/ustctug/ustcthesis 下载模板。
模板的组织结构如图所示:
把该文件夹作为项目用VS Code打开,然后打开 main.tex
,使用 ctrl + alt + B
或者点击 VS Code 右上角绿色箭头编译文档,如果编译成功,使用 ctrl + alt + V
快捷键可以在 VS Code 内打开预览。
切换到 ustcthesis-doc.tex
编译,可以查看模板的文档。
两个文件都编译成功后,我们就可以用 VS Code 撰写学位论文了。开始前,请记住以下快捷键,它们对于提升效率非常有用。
ctrl + alt + B
编译文档ctrl + alt + V
查看文档- 在 tex 文件中任意位置点击鼠标左键,光标在该处闪烁后,按下
ctrl + alt + J
可以跳转到此处tex文件对应的pdf中的位置 - 按住 ctrl 后在 pdf 文件中任意位置点击鼠标左键,可以跳转到此处 pdf 文件对应的 tex 代码。
学位论文撰写
修改配置
模板的配置主要在 main.tex
和 ustcsetup.tex
两个文件中。修改前强烈建议阅读上文中编译得到的 ustcthsis-doc.pdf
,下面只叙述软件学院工程硕士如何调整和调整效果,不阐述理由。
下面的配置,只适合于软件学院工程硕士学位论文
先调整 main.tex
中的文档类参数,主要指定学位,学位类型,输出类型等。以软件学院工程硕士为例,输出双面打印的论文,main.tex
中应当修改为:
\documentclass[degree=master, degree-type=professional]{ustcthesis}
然后调整 ustcsetup.tex
中的配置项目:
- 修改中英文论文题目
- 修改中英文作者姓名
- 修改中英文作者
- 修改论文类型
- (可选)添加企业导师
修改完成后 ustcsetup.tex
如下,其中中文题目中的双斜线\用于指定断行位置:
\ustcsetup{
title = {一种大型企业员工信息管理系统\\的设计与实现},
title* = {Design and Implementation of a Staff Information Management System in Large Enterprises},
author = {张三},
author* = {Zhang San},
speciality = {软件工程},
speciality* = {Software Engineering},
supervisor = {XXX~教授},
supervisor* = {Prof. XXX},
advisor = {XXX~高级工程师},
advisor* = {XXX~Senior Engineer},
% date = {2017-05-01}, % 默认为今日
professional-type = {专业学位类型},
professional-type* = {Professional degree type},
% secret-level = {秘密}, % 绝密|机密|秘密,注释本行则不保密
% secret-level* = {Secret}, % Top secret|Highly secret|Secret
% secret-year = {10}, % 保密年限
%
% 数学字体
% math-style = GB, % 可选:GB, TeX, ISO
math-font = xits, % 可选:stix, xits, libertinus
}
编译效果如下:
调整章节
模板中,摘要,正文章节和致谢均单独成一个文件,存储在 chapters/
文件夹中,然后在 main.tex 中通过 \input{}
命令导入,可以按照自己的安排替换章节文件并修改导入命令,作者自己改成了如下:
需要注意,除了摘要,致谢,已发表论文等章节有特殊的环境外,其他章节,最外层均为 \chapter
。此外,每个chapters
文件夹中的 tex
文件,第一行均应通过特殊注释通过相对路径指明项目主文档,即:
% !TeX root = ../main.tex
有了这行注释,才能在任意文件中通过 Ctrl + Alt + B
或者右上角绿色小箭头编译文档,否则要退回 main.tex
才能编译。
参考文献
参考文献引用使用 bibtex
,只需要从谷歌学术,百度学术,知网,acm,ieee 官网等导出 bibtex
粘贴到 bib/ustc.bib
文件中,然后在正文中用 /cite{}
引用即可,这里补充两个作者遇到的小问题的解决方案:
- 网页引用
应当尽量少引用网页内容,但是工程性质的论文,几乎很难避免引用官方文档等网页,网页引用格式如下
@misc{weave-net,
title = {Weave Net},
year = {2020},
author = {WeaveWorks},
howpublished = {\url{https://www.weave.works/oss/net/} Accessed March 4, 2021}
}
其中 year
一般是网页的发布时间或者修改时间,可以省略,而 howpublished
中的 Accessed
日期表示你参考的时间,不可以省略。title
和 author
有就写提供的,没有一般写 XXX Official Document
和 XXX
,XXX
是项目或者软件名称。
bib
文件中&
引发的错误
bib文件中的项目中含有 &
符号时,有时会编译报错,作者的解决方案比较low,直接将其替换成 and
,应该有其他优雅的方案。
插图
图片统一存储在 figures
文件夹,使用以下代码引用图片:
\begin{figure}[htb]
\centering
\includegraphics[width=\textwidth]{servering-performance.png}
\caption{优化前后的平均延时与吞吐量}
\label{fig:servering-perf}
\end{figure}
由于 ustcsetup.tex
设置了默认图片存储路径 \graphicspath{{figures/}}
, 因此使用 \includegraphics{}
时可以直接写图片名称,不用完整路径,而且 VS Code 可以自动补全。
表格
LaTeX 中撰写表格是相对痛苦的一个过程,但是幸运的是目前有一些非常好用的表格生成器,这里推荐一个 https://www.tablesgenerator.com/ ,这个网页工具非常强大,几乎满足所有需求。它甚至支持长表格续表等。
该工具的功能请自行探索,这里补充一个容易忽略的功能,就是它可以从 tex 代码反向导入后再修改,这是一个非常好用的功能,尤其是修改论文的时候。
公式
公式分为行内公式和单独成行的公式,行内公式用两个美元符号包裹,如 $k_1 = 1$
,而行间公式,是要求具有编号的,因此我们使用 equation
环境:
\begin{equation}
\label{eq:t-process}
t_p = t_{in} + t_{cal} + t_{out}
\end{equation}
会被编译为:
一个VS Code的小技巧,编辑完公式后,鼠标指向 \begin{equation}
附近,可以直接看到公式预览:
算法与代码
必须明确,论文正文中要绝对避免出现大段的代码,这是非常不恰当的行为。
对于算法,应当尽量使用 algorithm
环境基于伪代码展示,而不是大段的 Java 或者 Cpp 代码。
如果需要插入少量代码或者附录中插入较长代码,可以使用 listings 环境。在 ustcsetup.tex
环境中加入 listings
包并做一些基本设置:
\usepackage{listings}
\lstset{
basicstyle=\ttfamily
}
然后在正文或者附录中插入代码。
\begin{lstlisting}{language=Go}
package main
import "fmt"
func main() {
fmt.Println("Hello World!")
}
\end{lstlisting}
listings
有非常多的配置选项用于定制代码显示,自行百度即可。
补充说明
浮动体标签
图片,表格,算法,公式等浮动体,我们一般在其中插入 \label{}
标记,然后正文中用 \ref{} 引用,对章节也可以引用,如下所示:
% 插入一个公式并引用
通过式子 \ref{eq:t-process} 分析,我们可以得出结论:
```latex
\begin{equation}
\label{eq:t-process}
t_p = t_{in} + t_{cal} + t_{out}
\end{equation}
需要注意,一篇学位论文中,标签会非常的多,为了便于区分不同的浮动体,建议用以下方式命名标签:
- 图片:fig:xxx
- 表格:tab:xxx
- 算法:alg:xxx
- 公式:eq:xxx
- 章节:
- ch:xxx
- sec:xxx
- subsec:xxx
这种命名方式比较清晰明了,自动补全时便于查找。
参考文档
- 在 LaTeX 中插入公式等的教程,可以参考 http://www.mohu.org/info/lshort-cn.pdf
- TexLive 在本地安装了文档,如果想查看宏包的文档,打开命令行执行以下命令即可打开对应的文档:
texdoc.exe <包名>
以 listings 为例,执行以下命令,即可打开文档:
texdoc.exe listings
常见问题及解决方案
- 新手容易遇到一个错误是正文中有下划线
_
,下划线在非公式环境中出现时,需要转义\_
- latexmk 编译时,如果修改了非 tex 文件中的内容,可能不会编译,这时可以清除编译产生的文件后再编译,点击下图中的
Clean up auxiiary files
即可。
希望本文对正在撰写论文的同学有所帮助。有其他疑问或者发现文中错误,可以评论指出或者邮件 <域名中最长字符串>@aliyun.com
联系我。