眼下又到了六月份,虽然今年比较特殊,但是时间还是要走,一转眼我们又迎来了毕业季。相信这时许许多多的毕业生已经提交了论文,等待着答辩、或是已经完成了答辩,笔者作为今年的应届毕业生也完成了毕业设计的书写并且已经提交,正在等待答辩了,在这段闲置的时间里,我想跟广大童鞋们分享一下一个有别于大家印象中的毕业设计书写流程,或许能够给准备明年毕业的大三同学们或是要做比赛的大二大一同学们一点点灵感,至少能让大家少受一点 Word 的折磨(逃

是时候做出改变了

相信从大家还没入学的时候,大家应该就知道要使用 Word 撰写自己的论文、设计、报告书,这似乎也成了一种约定俗成的习惯,但是我想在这种习惯之下,有另外一种难言之隐也浮现在了大家的眼前:

写文一时爽,修改火葬场

打死也不改了
打死也不改了

如果不出意料的话,大家的工程文件夹都会有这种恐怖的修改痕迹,尤其是跨度数天乃至数周的大型工程更是这样。不但整理起来极为麻烦,而且文件数量一多根本就分不清哪些版本修改了什么,有的同学甚至养成了自己命名版本号的习惯,不过时间一长纵使版本号标记的再精确,也难保忘记自己修改了什么。如果所有的文件修改都以下图这种方式展示的话,是不是连思路都清晰了些呢?

不仅如此,如果有在多台电脑上编辑的需求的同学更加会体会到另一种痛苦:

如何保持要修改的文件总是最新的?

这时,一个行之有效的版本控制或管理工具就出现了

这就是 GIT

提到版本控制,对计算机技术有所了解的朋友们都知道这个世界上一个最为有名的同性交友网站软件源代码托管服务平台 GitHub,没错,它就是使用 Git 工具对项目进行管理的一个平台

Github
Github

当然,使用 Git 托管代码的程序不止它一家,像是 Gitlab,Bitbucket 和国内的码云和扣钉都是很有名的平台

知名的软件源代码托管平台
知名的软件源代码托管平台

这些平台能够保存你的每次提交并显示出你的修改痕迹,甚至还提供了包括评论,创建分支乃至「反悔」的选项,我觉得这真的是太适合写毕设了!可以说,Git 解决的正是 Word 所没办法解决的问题!

Git 要解决的三个问题
Git 要解决的三个问题

不过使用 Git 写毕设还有一个重要的障碍阻挡在我们面前,他就是——Word!

为什么是 LaTeX

很遗憾的是 Microsoft Office(下文简称 MS、MS Office)是一个彻彻底底的私有格式,因此也就没办法记录内容的变化,也自然没办法做到版本控制。不过好在我们还有另外的工具,它就是由美国计算机教授高德纳编写的排版软件 LaTeX。这个高效的排版工具被广泛的应用于理工类文献的编排中,使用这个工具就可以让 Github 完全托管我们的项目。

准备工作

开始之前,我们首先要知道,我们的项目主要是托管在云端的。与平时我们使用 Word 的角度有所不同,我们本地上的文件只是负责「更改」,仅此而已,我们所有的所有目的就是为了将本地改好的文件托管回云端。

Github+Latex 工作流
Github+Latex 工作流

所以再开始所有的工作之前,我们需要先新建一个项目,全篇文章我们都会通过 Github 来完成操作,笔者的操作系统是 macOS,Windows 上的操作与其基本一致。

在 Github 上创建项目

再开始之前,我们先去 Github 注册一个账号,这个过程应该不是很难,做好准备后我们点击左上角的 New 按钮创建新的项目库

创建项目库
创建项目库

按照顺序填写你想要的 库名描述公开情况 之后,选择是否要添加一个方便别人阅读的 「README」,随后选择创建即可,这里要注意的是如果您有朋友之后想要帮助您修改您的文章,您可以需要在 公开情况 里选择「Public」,添加完成的界面应该是这样的

创建项目
创建项目

随后我们就得到了一个空项目,接下来我们就该准备我们的书写环境了。

配置 LaTeX 环境

安装 MacTeX

有别于 MS Word 「所见即所得」的输入模式,LaTeX 是一个需要编译的工具,不过不要被编译两个字吓到,和几年前十几年前相比,现在 LaTeX 可以说是做的无比的简单好用了,我本人所使用的方案是 Visual Code Studio+MacTeX 的环境,虽说完整的 MacTeX 占地达到了不小的 4GB,但是最完整的版本才会将问题发生的概率降到最低,所以我这里推荐大家使用完整版 MacTeX。安装方式非常的简单,双击安装包,等待进度条走完就可以了。安装完毕后的 MacTex 提供了一个自带的编辑器 TeXShop,非常的难用,因此我们这里转用 Visual Code Studio

配置 Visual Code Studio

Visual Code Studio(下文简称 VSCode)是微软开发的新一代开源的代码编辑器,由于其强大的功能和丰富的插件,目前已经到了几乎「全能」的地步,关于 VSCode 的进阶配置我派已经有更为强大的文章做介绍了,这里就不再班门弄斧。下载打开完毕之后默认为英文界面,我们在插件市场中搜索中文语言包就可以完成汉化了。

简体中文
简体中文

要想在 VSCode 里使用 LaTeX 我们还需要下载扩展使 VSCode 能支持 LaTeX 的语法,我们在扩展商店里搜索 LaTeX Workershop 安装就可以了

TeX workshop
TeX workshop

然后,前往 设置 -> 扩展 -> LaTeX 中找到「在 setting.json 中编辑」,粘贴下方的文本到新开的窗口里并保存,这个操作是告诉 VSCode 应该使用的编译方式(xelatex)

{"latex-workshop.latex.recipes": [
  // {
  //   "name": "pdflatex",  //放在最前面为默认编译方案, 适用于MikTex
  //   "tools": [
  //     "pdflatex"
  //   ]
  // },
  
{
      "name": "xelatex",
      "tools": [
        "xelatex"
      ]
    }
],
"latex-workshop.latex.tools": [
  {
    "name": "xelatex",
    "command": "xelatex",
    "args": [
        "-synctex=1",
        "-interaction=nonstopmode",
        "-file-line-error",
        "%DOC%"
    ]
},  
  {
      "name": "bibtex",
      "command": "bibtex",
      "args": [
          "%DOCFILE%"
      ]
  },
  {
      "name": "texify",
      "command": "texify",
      "args": [
        "--synctex",
        "--pdf",
        "--tex-option=\"-interaction=nonstopmode\"",
        "--tex-option=\"-file-line-error\"",
        "%DOC%.tex"
      ]
    },
],
"latex-workshop.view.pdf.viewer": "external",

至此,准备工作全部完成,我们就可以真真正正的开始写我们的文章了。

开始书写

LaTeX 是通过一种叫做「宏包」的方式来控制你的文档的,在文章开始之前,你需要引用一些宏包来帮助定义你的文本。你可以把 LaTeX 想象成一个机器人,而宏包就是它的大工具箱,里面有各式各样的工具来帮助这个机器人完成各种各样的动作

关于「宏包」
关于「宏包」

比如宏包 amsmath 就是来帮助我们书写漂亮的数学公式的。不过相比于 Word,LaTeX 对于普通人的上手难度还是高了些。因此我们能看到网上有许许多多的热心朋友修改制作了许许多多的 LaTeX 模板,其中有竞赛类的,有期刊类的,也有毕业论文类的,我们在这里附上几个:

值得一体的是笔者的毕业设计就是在第三份模板的基础上加以修改而完成的,特此表示感谢。

由于此文是面向普通用户的,所以这里我们不使用 git 命令行工具,转为使用 Github 官方出的桌面应用 Github Desktop

GitHub Desktop
GitHub Desktop

我们选择我们刚刚建好的项目库,点击 Clone 克隆至本地

克隆项目
克隆项目

随后我们就能在桌面上看到这个文件夹。现在,我们的目的就是不断修改这个文件夹里的内容,然后提交修改,使其与云端总是保持一致,点开这个文件夹,大家可以看到里面只有一个 README 文件,使用 command+shift+。 就可以看到其中内涵了隐藏文件

现实隐藏文件
现实隐藏文件

现在在这个文件夹里新建 tex 文件或者拷贝模板到文件夹中,这里我们按照上方的模板来做演示,只要每次按下 VSCode 的保存按钮,VSCode 都会进行一次编译,如果一切正常,您会在下方看到一个小小的对勾

随后我们就完成了第一次编译。

提交修改

当我们完成一定次数的编辑和编译、或完成一个阶段的书写时,我们需要提交我们的操作到云端,在 VSCode 中,我们能看到不同的文件被标记成了不同的颜色

我们要做的就是把新修改的文件推送到云端去,使云端与我们的本地内容保持一致;在提交之前我们要先「暂存修改」把本地的修改确认,使用 GitHub Desktop 自然可以完成这个操作,不过 VScode 自带的 Git 管理器更加方便,我们在完成本轮的编辑后选择「源代码管理器」

源代码管理器
源代码管理器

随后在上方的文本框中输入我们本次暂存的记录,这里的记录可以是以下内容:

  • 修改的内容
  • 修改的备注
  • 本次提交的变动内容

随后点击上方的对勾标志,暂存更改

您可以多次修改,多次编译,多次暂存更改,统一提交。在暂存完一个周期(一般是完成一个部分的书写)或决定暂停书写时我们可以选择正式将修改提交到云端,在「源代码管理器」中找到推送,推送本地暂存的更改到云端。

这样,我们就完成了最基本的一个编辑周期

修改 -> 编译 -> 提交

重复这个周期,我们就能基本完成文章的撰写了。

查看与复原修改

我们在上文也说过了,Word 的通病之一就是没有办法查看完整的修改痕迹。不过现在有着 Github 加持的 Tex 则表示这都不是事儿,我们可以通过前往

https://github.com/YOURGITHUBID/YOURREPOSITORY

来到您自己的项目主页

项目主页
项目主页

我们可以通过点击提交记录来浏览您的每一次提交

修改记录
修改记录

我们可以看到,这里的标题就是我们刚刚暂存时输入的内容,所以在提交暂存时书写一个简单好记直至主题的提交说明可以让日后的查找变得轻松写意,现在我们随便点开一个提交记录看看

里面详细的记录了修改时间,提交的标题,以及增删的内容,如果您还不放心怕忘记什么,您也可以在下方的评论区留言提醒自己

发表评论
发表评论

如果哪天您真的不小心把自己的文档玩坏了,您还可以点击上方的「Browse Files」回到当时的状态,通过在旧状态下建立分支的形式拉回以前的修改记录,实现「后悔药」的功能

查看以前的提交
查看以前的提交

合并

如果有人愿意帮助您修改您的作品,那更好了,您可以邀请您的朋友 Fork 您的项目,然后请对方直接修改,随后让他提交 Pull Request ,您就可以直观的在您的 PR 控制区域看到他所提交给您的内容、简介和修改内容了,您可以在该区域控制是否合并(Merge)这条 PR。

合并
合并

拉取

在远端编辑或合并操作后需要回到本地拉取最新修改的文件,我们回到 VSCode,前往插件市场安装 GitLens,点击 Fetch 按钮,VSCode 就会与云端比对文件,同时把需要更新或新加入的文件标记出来

拉取
拉取

图中的黄点表示既有文件在远端修改,也有文件在本地等待同步,我们点按上方的箭头标志即可完成上传与下载。各位也能看到,这份文件夹通过 Git 工具来始终保持与云端的文件一致,所以如非必要,请不要在之后的修改中手动上传或下载文件到这个文件夹中,可能会导致 Git 记录被污染。

TeX 进阶

LaTeX 是一套庞大而完备的排版工具,由于我个人的知识量也非常有限,所以也无法描述完备,在此先描述几个最常用的功能来供大家完成文章。

公式

我第一次了解 TeX 的威名就是在于其强大的公式排版、文字公式混排能力,在我的同学们还在 Word 中痛苦的「剧中」、「公式标号右对齐」时,我们只需要优雅的输入公式,就可以实现全自动的排版并标号了(此操作依赖部分宏包),常见的公式类型主要有以下:

  • 行内公式
  • 行间标号公式
  • 行间不标号公式

我们分别使用以下方式进入公式编辑状态:针对行间公式,我们使用 $...$ 来编辑公式;行间标号公式则通过「align」来完成

\begin{align}
...
\end{align}

而对于行间不标号公式我们则是在 「align」后面加上一个 「*」即可

\begin{align*}
...
\end{align*}

当然,在等号前加入 & 、在公式结尾添加换行符号 \\ 就可以实现公式对齐了

关于数学公式更多的符号输入,请参阅 LaTeX CheatSheet,里面包含了基本上所有的符号。

目录与章节

在设定好格式之后,LaTeX 可以通过标题指令来自动建立标题,划分标号,一到三级标题的写法如下:

  • \section{一级标题}
  • \subsection{二级标题}
  • \subsubsection{三级标题}

一般说来,我们只需用到三级标题即可。

于此同时,当完成二次编译时,目录页({tos})也会帮助我们生成带有超链接的目录

交叉引用与参考文献

引用

LaTeX 另一个让人惊叹的点就是强大的引用功能,我们可以引用包括图片、表格乃至公式在内的几乎所有东西,要开始引用,只要在被引用的位置加入 \label{命名} ,再在需要引用的地方加入 \ref{命名} ,经过二次编译即可得到想要的引文

参考文献

管理文献的方式我派有大佬写出了文献管理神器 Zotero 学习路径指南,这里可以学习一下,我们也使用 Zotero 来管理文献,我们只需要将 Zotero 文献库导出为 bibfile

导出的信息基本格式类似于:

@article{__2004,
    title = {"工作危害性分析"在事故分析中的应用},
    url = {https://kns.cnki.net/KCMS/detail/detail.aspx?dbcode=CJFQ&dbname=CJFD2004&filename=SAFE200412013&v=MDIzNzdXTTFGckNVUjdxZlpPVnVGeXZtVXJyT05pek5hN0c0SHRYTnJZOUVaNFI4ZVgxTHV4WVM3RGgxVDNxVHI=},
    abstract = {利用工作危害性分析(JHA)对几起事故案例进行分析,并探讨如何有效地控制事故的发生。},
    number = {12},
    urldate = {2020-03-31},
    journal = {安全、健康和环境},
    author = {谭, 亚学},
    year = {2004},
    keywords = {工作危害性分析, 控制, 事故, accident, control, JHA},
    pages = {27--29+35}
}

我们就可复制里面的文件到我们项目中的 bibfile.bib 中,随后在文中使用 \cite{名称} 即可完成引用。文章最后会自动根据GBT7714-2015规范来列出这些文献。

兼容性

这里本是一个无需担心的问题,但是我们还是要写出来,因为最后的最后总是要求提交 PDF 文件,而 Tex 编译出的就是 PDF 文件,所以不用过于担心文档的兼容性问题。

总结

我们可以看到在版本控制和排版这方面,Git+LaTeX 是有这他得天独厚的优势,虽然稍高的门槛是制约普通用户使用这个工具最主要的因素,不过随着有越来越多的网上的用户们制作出了非常方便的模板之后我们不难发现它的使用门槛居然降低了不少,连我这种完全不懂得 TeX 工作原理和对 Github 的操作流程一知半解的用户也能很好的完成自己的文章,确实使用 TeX 编辑我自己的毕业设计也让我节省了不少的时间,在这里也感谢开源世界作出的贡献,也希望大家能够好好运用现成的工具,轻松高效的完成自己的任务~