使用Latex编写论文(pkuthss模板)
这段时间在写毕业论文,使用的是Latex编写,这里记录一下期间遇到的各种问题的解决方法。
Latex 和 Word 的对比
Latex 的优势在于参考文献的管理比较简单。毕业论文要求所有参考文献按照出现顺序进行编号,但是我们在改论文的过程中不可避免会出现添加、删除、调整位置的情况。Word 下面每次手动改参考文献顺序是很痛苦的。虽然有一些第三方工具比如 EndNote 可以帮助解决这个问题,但是……我没用过。
Latex的劣势在于格式管理麻烦,尤其是文中频繁出现公式或转义字符的情况,总是会被打断思路。
编译环境
在线环境可以直接使用 Overleaf。Overleaf的优点在于这是一个在线网站,全平台可用,并且支持多人协作。但是缺点在于其编译速度慢,并且亮色背景我不喜欢。Overleaf可以直接导入网站中的 pkuthss 模板开始写作。
本地环境的优势在于编译速度快,尤其是几十页篇幅的文档。另外编辑环境的背景颜色可以自己定制,可以使用喜欢的Dark主题。
本地环境的配置如下:texlive + vscode + Latex Workshop。
- texlive 可以到 tug.org 下载对应平台的安装包进行安装,我使用的是 Windows 平台的 Easy Install。安装时间太长,抽空去吃了个午饭。(我其实试过使用 choco 来安装 texlive,不过安装之后感觉缺了一些东西??)
- 写作环境使用的是 VS Code,程序员都懂。
- 编译配置的话 VS Code 安装 Latex Workshop即可。
本地项目搭建
首先下载 pkuthss 模板,这里从 GitHub下载。
然后是编译命令,Overleaf 里使用的 XeLatex,本地我们也保持一致。
涉及到参考文献 ref.bib 的编译,我们按照 pkuthss 中 main.tex 的提示使用 biber。
最终,项目配置 [.vscode/settings.json] 内容编写如下:
{
"latex-workshop.latex.tools": [
{
"name": "xelatex",
"command": "xelatex",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-pdf",
"%DOCFILE%"
]
},
{
"name": "biber",
"command": "biber",
"args": [
"%DOCFILE%"
]
}
],
"latex-workshop.latex.recipes": [
{
"name": "xe->bib->xe->xe",
"tools": [
"xelatex",
"biber",
"xelatex",
"xelatex"
]
}
]
}
模板修改
版本管理
写一次论文中间可能经过多次修改,如果不做版本管理,得到的可能就是“初稿、修改1、修改2、...、终稿”这样一堆文件。这显然很不程序员。
我们直接初始化一个Git项目来管理版本。
由于Git只适合管理文本文件,这里我们需要将不合适的内容排除。
我们直接使用Github提供的 Tex.gitignore模板 来填写 .gitnore 文件。
可以看到,左侧文件栏里 *.aux 等一系列编译中间文件都变成了灰色,不会进入版本历史。
插入图表目录
有时候图表比较多,老师会建议插入图表目录。
直接使用 \listoffigures
插入图片目录的话,显示出来的图片是 1.1 xxxx
这种格式,我们希望改为 图 1.1 xxxx
这种格式。
操作方法是在 main.tex 中 \tableofcontents
(正文目录) 后面加入这样一段:
{%
\let\oldnumberline\numberline%
\renewcommand{\numberline}{\figurename~\oldnumberline}%
\renewcommand{\listfigurename}{图目录}
\listoffigures%
}
表目录同=同理,fugure 改成 table 就可以:
{%
\let\oldnumberline\numberline%
\renewcommand{\numberline}{\tablename~\oldnumberline}%
\renewcommand{\listtablename}{表目录}
\listoftables%
}
插入矢量图
按照规范,写论文时一般应该使用矢量图。
在Word中,我们可以直接画图,或者从 Visio、PowerPoint 中直接粘贴图表,而 Latex 只是一个排版工具,需要从别处导入图片。
我们这里介绍三种导出矢量图的办法:
Excel 导出矢量图
Excel 本身就是矢量的,可以直接把表格导出PDF,也可以把生成的图表导出PDF。
Powerpoint 导出矢量图
需要多张图片拼接,并且图层比较复杂的时候,可以先复制到Powerpoint进行编辑,然后导出 PDF。
draw.io 导出矢量图
更复杂的图像可以使用 draw.io 画图,然后导出矢量图。
draw.io 是一个跨平台工具,可以在浏览器中直接使用,支持 Windows、Linux、MacOS、ChromeOS客户端,同时还有 VSCode 插件,并且是一个开源免费产品,绝对的良心产品!!!
draw.io 支持 【另存为】【svg格式矢量图】、【导出】【pdf】两种创建矢量图的方式。
其中,pdf可以直接在Latex中作为一般图片来插入,是最合适的方案。
到处PDF时,去掉默认的【包含绘图副本】,选择【导出单页】,此时导出的pdf就是只包含绘图区域的尺寸了,可以作为图片插入,不必再次裁剪。
表格缩放
当我们使用 table套tabular插入一个表格时,默认表格宽度是自动收紧到表格内单列最大宽度。
当我们的表格列数比较少的时候,表格会挤在中间的一小块位置,不够美观。
我们希望能够让表格自动扩展到页面宽度,可以使用定宽表格 tabularx 替换 tabular 达到目的。
tabularx 相比于 tabularx 多出一个参数,用于指定表格固定宽度。内容不够时自动填充空格,内容过多时自动表格内换行。
例子如下:
\usepackage{tabularx} % 定宽表格相关
\newcolumntype{Y}{>{\centering\arraybackslash}X}
\begin{table}[!htb]
\centering
\caption{示例表格}
\label{tab:example}
% \begin{tabular}{ccc}
\begin{tabularx}{0.9\linewidth}{YYY}
\toprule
col1 & col2 & col3 \\
\midrule
val11 & val12 & val13\\
val21 & val22 & val23 \\
\bottomrule
\end{tabularx}
% \end{tabular}
\end{table}
X是tabularx提供的一种用于自动扩展表格内容的格式控制。
tabularx依赖array宏包,如果需要定制更多格式,可以参考array的格式控制方式。