跳至内容
Topos Uranos

摘要

本课讲授多位作者如何合写一份文档,既不丢失工作,也不混淆版本。课中解释为什么通过电子邮件交换版本行不通,以及为什么纯文本源文件能够逐行比较和合并修改;介绍在线共享编辑器 Overleaf,包括邀请他人加入项目、同时编辑、评论、修订、带有标记版本的历史记录、选择 LuaLaTeX 以及上传本地项目;讲授在 LaTeX 项目中使用 Git 的最小工作流程,包括 .gitignore 文件、每行写一句以及在 .tex 文件中解决冲突,并附有一个测试仓库的真实输出;说明 Overleaf 与 Git 的集成及其与 GitHub 的同步;汇总团队应当约定的规范;最后介绍 latexdiff,它能生成一份标出两个版本之间改动的 PDF。

学习目标

  1. 解释为什么纯文本源文件能够比较和合并多位作者的工作,而文字处理软件的文件却无法以同样的方式做到。
  2. 以适当的权限共享 Overleaf 项目,添加评论,用修订功能审阅,并从历史记录中恢复以前的版本。
  3. 用 Git 管理 LaTeX 项目:初始化仓库,提交修改,阅读历史和差异,并与远程仓库同步。
  4. 编写一个 .gitignore,排除辅助文件,而不排除文档所需的文件。
  5. 预判两处同时进行的修改何时会产生冲突,并在 .tex 文件中解决冲突,随后检查文档能够编译且内容正确。
  6. 在团队中约定共同的导言区、共同的参考文献库、文件划分和标签规范,并用 latexdiff 生成显示两个版本之间改动的 PDF。

为什么多人合写很难

团队写作最常见的方式也是最脆弱的方式:一位作者用电子邮件发出文件,另一位修改后换个文件名发回,几周之后,文件夹里便有了 报告-终稿.docx、报告-终稿2.docx 和 报告-终稿-安娜修改.docx。如果两位作者同时在同一个版本上工作,就得有人手工把一方的修改搬到另一方的文件里,而搬运时遗漏的内容会悄无声息地丢失。文字处理软件帮不上比较的忙,因为它的文件不是可读的文本,而是一个把内容和格式混在一起的压缩包;它虽有比较工具,却无法自动合并两条相互独立的工作线。

LaTeX 源文件则不同:它是纯文本,任何程序都能逐行读取。由此便有了两种在文字处理软件中不易实现的操作。第一种是差异(英文 diff):给定一个文件的两个版本,程序能准确指出删去了哪些行、添加了哪些行。第二种是合并(英文 merge):给定在同一版本上做出的两组修改,如果它们涉及文件的不同位置,程序会自动把它们合在一起,只有当双方改动了同一处时,才请作者介入。不过,要让这两种操作发挥作用,还需要一套组织方式:一个存放现行版本的公共位置,以及一份记录谁在何时改了什么的档案。本课介绍本课程采用的两种做法:Overleaf 在浏览器中解决这个问题,Git 则在每位作者自己的电脑上解决,编辑器用 Texmaker。