Word 是最常用的文章编辑软件,功能强大灵活,然而有过用 Word 写论文( thesis )等具有严格样式要求的文章的同学,应该对它麻烦的样式管理深恶痛绝。
LaTeX 是一种排版系统,它与 Word 这种富文本编辑器在结构上完全不同。LaTeX 将内容和样式分离,简单说,它的用法是:为文章不同部分设定样式,然后再填入内容并指定这部分内容所用样式,这样就可以生成对应样式和内容的 PDF 文件。
所谓样式,就是字体、行间距、标题大小、页眉页脚、自动生成目录、自动生成参考文献等等
这样的结构,可以在写作时不必考虑复杂的样式管理,只需要填入纯文本的文章内容。除此之外,样式和内容都是纯文本,也就容易批量修改和自动化处理。LaTeX 被广泛用于生成高印刷质量的科技和数学类文档。这个系统同样适用于生成从简单信件到完整书籍的所有其他种类的文档。
既然样式和内容已经分离,那么就意味着,“官方”可以发布包含样式的文件,然后使用者只需要填入内容即可,而不必像使用 Word 那样手动调整。除此之外,使用 LaTeX 要学习的内容远远少于 Word,并且清晰明了(因为是纯文本而不是GUI),并且 LaTeX 的样式方便深度自定制,还有,LaTeX 涉及的软件有开源选择。
吐槽:虽然 Word 也可以发布带有样式的文档,但扩展性不够,比如各个级别的标题数量与自己的文章不符,这样就不能纯填入内容,涉及到样式部分;
另外,Word 不能精准复制,像是表格,标题等,复制的时候总是带点额外东西等等,改着改着就想摔电脑了。
还有,Word 上的公式输入,图标题注修改起来很麻烦。
BIThesis 是 BIT 学长维护的 LaTeX 模板,针对北京理工大学对毕设文章样式要求而创建的,具体含有本科毕业设计论文,外文翻译,研究生学位论文等。
这个项目获得了 北京理工大学教务部、北京理工大学计算机学院 的认可、背书与大力支持。
GitHub: BITNP/BIThesis: ? 北京理工大学非官方 LaTeX 模板集合,包含本科、研究生毕业设计模板及更多。? (更多文档请访问 wiki 和 release 中的手册) (github.com)
Wiki: BIThesis | BIThesis (bitnp.net)
学长的博客: FKY&JYQ (fkynjyq.com)
针对毕设论文,用 Word 还是 LaTeX?
- 首先要知道:从 LaTeX 转为 Word 并不方便,而且很可能会有一些样式上的缺陷。因此使用 LaTeX 的话,只有论文的 PDF 版了。
- 是否有他人参与? 若其他人不了解 LaTeX,还是推荐用 Word。
- 有精力学习吗? 一般3小时就能入门,配合本文,最终花在 LaTeX 上的时间不会超过 10 小时,且最终一定比用 Word 更省时间(除非你很擅长用 Word)
- 是否有大量的公式、图表需要排版? 如果是的话,优先选择 LaTeX。
- LaTeX 不适合过度个性化的排版,因为它的优势就是把样式交给专业的人,作者只关注内容。但不是不能实现,只是要学习很多底层命令,不如Word那样点点点就行(实际上,借助 ChatGPT 等,个性化定制的门槛降低很多)
北理的23届毕业生,由于什么改革,毕设最后需要提交一堆文档,非常麻烦和烦人,其中,提到毕设论文需要提交 PDF 和 Word 版,寡人并没有提交 Word,暂时没问题。(吐槽:Word版有什么必要需要提交???)
项目官方 Wiki 实际上已经有教程,但是还有所不足,因此本文参考官方 Wiki 并将寡人毕设实际经历中遇到的问题记录于此。以及怎么在 LaTeX 中结合 Zotero 进行文献管理(可以自动生成参考文献)。
前置准备
在使用模板之前,你需要在本机安装 LaTeX 环境。一个完整的 LaTeX 环境包括:
- 开源免费的 LaTeX 发行版(包含有必备的 LaTeX 编译器与有用的宏包),本文使用 Win 10
- 一个 LaTeX 编辑器,本文使用 VS Code
安装 LaTeX 发行版
官网: TeX Live – TeX Users Group (tug.org)
进入下载页面:Installing TeX Live over the Internet – TeX Users Group (tug.org) ,点击 install-tl-windows.exe
下载在线安装包。
具体安装过程省略。实际经历,在线装TeX花了2h。这段时间正好够看 1小时学latex
确认安装无误
打开终端,Windows 按快捷键 Win R ,然后输入 Cmd 进入终端
输入下面的命令:
验证 latexmk 的安装
latexmk --version
验证 xelatex 的安装
xelatex --version
验证 biber
参考文献编译器的安装情况:
biber --version
出现类似的输出,说明我们编译器安装应该是没有问题的。
使用包管理工具进行安装:使用 Linux 系统的同学也可以选择使用合适的包管理工具进行 TeX Live 的安装。以 Ubuntu 为例子,只需要运行:
sudo apt install texlive
安装 VS Code 作为 LaTeX 编辑器
理论上来说,任何一个「文本编辑器」均可以用来撰写 LaTeX 文档,本文用 VS Code 配合 LaTeX Workshop 插件。
- 安装 VS Code 编辑器:Visual Studio Code – Code editing. Redefined.
- 安装 LaTeX Workshop 插件
- 安装 LaTeX Utilities 插件
安装插件很简单,在 VS Code 中点左栏是插件(Extensions),然后搜索插件名称,如 LaTeX Utilities ,再选择安装就可以了。
配置 VS Code
- 打开 UI 设置界面:快捷键
Ctrl ,
- 点击右上角
Open Settings (JSON)
按钮,打开相应的 JSON 格式配置文件,其中- “编译工具”是在
"latex-workshop.latex.tools": [ ... ]
处进行定义,即我们在这里定义每次调用工具latexmk
或xelatex
时所执行的命令 - “编译工具链”是在
"latex-workshop.latex.recipes": [ ... ]
处进行定义,即我们在这里定义编译整个文档的工具链。对我们的模板使用xelatex
的编译方式来说,就是定义xelatex -> biber -> xelatex -> xelatex
「四步走」的串联过程
- “编译工具”是在
注意:LaTeX Workshop 的默认配置无法对我们的项目进行编译。 所以请仔细阅读下文并替换相应配置
- 使用 latexmk 编译
编译工具 "latex-workshop.latex.tools": [ ... ]
部分改为
"latex-workshop.latex.tools": [
{
"name": "latexmk",
"command": "latexmk",
"args": [
"-synctex=1",
"-interaction=nonstopmode",
"-file-line-error",
"-xelatex",
"-outdir=%OUTDIR%",
"-cd",
"%DOC%"
],
"env": {}
},
]
编译工具链 "latex-workshop.latex.recipes": [ ... ]
部分改为
"latex-workshop.latex.recipes": [
{
"name": "latexmk",
"tools": [
"latexmk"
]
},
]
最终效果如图(只看涉及的两部分即可,其他部分保持默认)
下载和使用模板生成论文( thesis )
到 Release 页面下载使用的模板。
然后在 VS Code 中打开项目目录。流程是:
- 打开 VS Code,
- 左上角【File】-【Open Folder】,
- 打开模板文件根目录,文件名一般是这种的:undergraduate-thesis。
- 确定
简单了解 BIThesis 本科毕业设计论文模板 结构
写论文时涉及到的文件有这些
undergraduate-thesis 根目录
├── main.tex 主配置文件,含封面信息等
├── chapters 章节目录
│ ├── 0_abstract.tex 摘要部分内容
│ ├── 1_chapter1.tex 第一章部分内容
│ └── 2_chapter2.tex 等等,有几章就复制几份
│
├── images 图片目录,论文中的图片都放这里
│ ├── bit_logo.png
│ └── header.png
│
├── misc 其他章节目录
├── 1_originality.pdf 原创性说明的 PDF 版
├── 1_originality.tex 原创性说明的 tex 版,默认用的是 PDF 版
├── 2_conclusion.tex 论文的“结论”章节内容
├── 3_reference.tex 参考文献,一般不需特别修改
├── 4_appendix.tex 附录部分内容
├── 5_acknowledgements.tex 致谢部分内容
└── ref.bib 涉及到的参考文献的信息,从 zotero 导出
具体的模样请下载 release 查看,里面的注释也很详细。
具体效果可以看我的论文例子:
使用 VS Code 编译模板基本流程
到这步,用 LaTeX 写文章的全流程基本就结束了。
由于 LaTeX 的文件其实就是纯文本,所以要生成 PDF 还需要通过编译,因此 LaTeX 不像 Word 那样:所见即所得。
开始编译
- 打开命令执行栏:快捷键
Ctrl shift P
, - 搜索 LaTeX Workshop: Build with recipe ,按 Enter
- 选择你所用的 recipe,本文用的是 latexmk ,按 Enter 即开始编译
- 生成的 PDF 文件就是项目根目录的
main.pdf
文件
实际上,有内容改动后,按 Ctrl S 保存也会触发编辑;
文献管理——配合Zotero
把导出的文件库添加至 misc/ref.bib 中,并在正文的相应位置使用 \cite{xxx} 的格式引用参考文献
最好加一个文献就保存一下,以免因为不支持类型而出错,最好也不好查找哪个造成的
Zotero导出文献库
zotero 安装 Better BibTex。Better BibTex 可以方便的导出和自动更新bib文件。
文献bib文件导出:
- 点击菜单栏的File → Export Library:
- 格式选择 Better BibTeX
- 勾选Keep updated,这样才能保证在后面添加新的文献到zotero的时候不需要重复导出。建议大家导出整个文献库作为自己写作的引用库,而不是为每个待写论文单独导出文献。
- 此时导出的时候可以选择一个通用位置(
D:\Data\cite
),在latex中指定bib文件的位置即可。 - 每次增删zotero中的文献,bib文件也会自动同步修改
VS Code 插件 — Zotero LaTex
- 安装 Zotero 插件
- 插件设置:在VS Code的设置窗口
Ctrl ,
中搜索 Zotero: - 将Latex Command改为需要的latex命令,默认为autocite,改为cite。
- 完成之后即可在latex文件中使用快捷键
Alt z
调用zotero的citation窗口来插入文献到当前光标位置,和word中使用zotero插件无异。
\cite
是 LaTeX 中的基本引用命令,通常用于生成带有方括号或圆括号的引用。在不同的文献样式下,它可以生成不同的引用格式,如数字、作者-年份或者作者-标题等。\cite
命令通常不考虑文本语境,所以它可能在某些情况下不适用。例如:
According to the study by Smith \cite{smith2021}, ...
\autocite
命令是 biblatex
宏包提供的引用命令,它能够自动根据文献样式和文本语境生成合适的引用格式。使用 \autocite
命令时,它会考虑所使用的引用样式和文本的语境,自动决定是否应该使用括号、引号等。例如:
According to the study by Smith \autocite{smith2021}, ...
总之,\autocite
命令在很多情况下比 \cite
命令更加灵活,因为它能够根据文献样式和文本语境自动调整引用格式。然而,如果你的文档中只需要使用一种固定的引用格式,使用 \cite
命令也是可以的。
写论文时要注意的
文章内容中要用到百分号时,需要在前面加上反斜杠: \%
,
LaTeX源文本
生成的PDF
其实,还有一些其他字符,在使用的时候需要注意加 反斜杠,如果编译时报错可以看看是不是这个问题。
汉字和字母之间加上空格,实际上,加不加没区别,但加空格在纯文本的情况下看着方便,而且符合 md 的习惯。
写论文时常用到的
模板中有丰富的注释,照猫画虎就能基本满足,下面是我实际使用中,注释没涉及的部分,用以补充。
如果你有个性化需求,强烈推荐询问 GPT 4 ,回答得很棒。
图片
缩放
使用 graphicx
宏包。首先,请确保在文档的导言区(preamble),即 main.tex 的中 \usepackage{}
那部分,引入 graphicx
宏包:(模板默认已引用)
\usepackage{graphicx}
然后,在要插入图片的地方,使用 \includegraphics
命令。例如,以下命令将图片宽度设置为文档宽度的 80%:
\includegraphics[width=0.8\textwidth]{your_image_file}
width
(宽度)、height
(高度)和 scale
(缩放比例)
一行中多个图
使用 minipage
环境或者 subfigure
包来在一行中排列多张图片。以下是使用 minipage
和 subfigure
的示例:
- 使用
minipage
:
\begin{figure}[htbp]
\centering
\begin{minipage}[b]{0.45\textwidth}
\includegraphics[width=\textwidth]{example-image-a}
\caption{图片 A}
\label{fig:a}
\end{minipage}
\hfill
\begin{minipage}[b]{0.45\textwidth}
\includegraphics[width=\textwidth]{example-image-b}
\caption{图片 B}
\label{fig:b}
\end{minipage}
\end{figure}
- 使用
subfigure
包:
在文档的导言部分包含 subcaption
包:
\usepackage{subcaption}
\begin{figure}[htbp]
\centering
\begin{subfigure}[b]{0.45\textwidth}
\includegraphics[width=\textwidth]{example-image-a}
\caption{图片 A}
\label{fig:a}
\end{subfigure}
\hfill
\begin{subfigure}[b]{0.45\textwidth}
\includegraphics[width=\textwidth]{example-image-b}
\caption{图片 B}
\label{fig:b}
\end{subfigure}
\caption{图片 A 和 B}
\label{fig:ab}
\end{figure}
在上述两个例子中,使用了 \label
命令为每个图像定义了引用标签。可以使用 \ref
命令引用这些标签,例如:如图 \ref{fig:a} 所示。
表格
将表格中的某一列中的两行合并为一行
使用 \multirow
命令。
\begin{table}[htbp]
\linespread{1.5}
\zihao{5}
\centering
\caption{某一列中两行合并的表格}\label{某一列中两行合并的表格}
\begin{tabular}{ccc}
\toprule
序号 & 名称 & 数量 \\
\midrule
1 & 商品 A & \multirow{2}{*}{100} \\
2 & 商品 B & \\
3 & 商品 C & \multirow{2}{*}{200} \\
4 & 商品 D & \\
\bottomrule
\end{tabular}
\end{table}
第三列中的第二行和第三行被合并成了一行,并且居中对齐。其中,\multirow{2}{*}{100}
的意思是将该单元格合并到 2 行,并且内容居中显示,*
表示自动计算该单元格的宽度。100是要填充的内容
指定列宽度
使用 p{width}
选项,单元格内超过的文本将自动换行。例如:
\begin{tabular}{|l|p{10cm}|}
\hline
Column 1 & Column 2 \\
\hline
Short text & This is a long text that will be wrapped automatically when it reaches the cell border. \\
\hline
\end{tabular}
在这个例子中,表格有两列,第二列(列 2)的宽度被设置为 10 厘米,所以它会自动换行。
代码
段内代码
以 listing环境为例。先引用
\usepackage{listings}
代码部分用 \texttt{}
括起来
为了实现在生产环境中能够灵活地切换源代码进行编译,并进一步便利标签和锚点两套代码的维护工作,我选用了预处理命令 \texttt{\#define} 搭配 \texttt{\#ifdef} 和 \texttt{\#endif} 的方式。
这里,由于’#’符号在LaTeX中有特殊含义,所以在使用的时候需要加上反斜线。
LaTeX 转 Word
? 将 LaTeX 格式的文档转换为 Word | BIThesis (bitnp.net)
其他问题
有问题可以查看官方文档:? 疑难杂症 | BIThesis (bitnp.net) 或询问 ChatGPT。