跳至内容
Topos Uranos

其他文档与协作:总结与挑战

摘要

本课结束第七单元“其他文档与协作”,也随之结束整门课程。它重建从 Beamer 的帧到带标签的 PDF 的原理与机制之链,在每一环指出用到哪条原理、在哪一课确立;把所取得的成果放回课程计划中加以定位,并指出课程之后还留下什么;在结业测验中重复入门测验所考查的技能;最后给出六道比各课习题更难的挑战题,要求综合多个单元:编排一篇汇集整门课程的短文,把它改成演示文稿,把它的图搬到海报上,诊断一次没有冲突却改变了引用的合并,为 arXiv 和一家用 pdfLaTeX 编译的期刊准备它,以及写一份同时适用于论文、演示文稿和 KOMA-Script 报告的导言区。

学习目标

  1. 重建本单元各机制的顺序,指出每一机制所依靠的原理。
  2. 解释为什么同一内容不必重写就能改变文体、作者和目的地,以及每次改变时确实需要作出哪些决定。
  3. 预测带覆盖层的帧、文档类选项、排除文件、Git 合并和元数据声明各会产生什么,并修改源文件,使它产生想要的结果。
  4. 编排一篇汇集整门课程各种手段的学术短文,并把它改编成演示文稿、海报,使之符合发表目的地的要求。
  5. 把本课程所学放到各学科写作课程中加以定位,这些课程都以本课程为基础。

本单元的收获

本单元的目标是:前六个单元建立起来的学术作品能够改变文体、由多人合写,并且不必重做就送到目的地。这个目标的达成,依靠的是导言宣布为已知的内容:逻辑标记,它说明每样东西是什么,而把形式交给文档类;自己的导言区,它一次决定在整份文档中有效的东西;图形的相对尺寸;以及文献数据库,它服务于任何需要引用的文体。因此,走过的路可以读成由四段组成的一条链。

用 Beamer 制作演示文稿

用 Beamer 制作演示文稿一课表明,演示文稿和其他文档一样是文档,有自己的文档类:页面比例用 aspectratio 选择;中文与课程其他各课一样由 luatexja 和 babel 处理,而 Beamer 用来翻译定理名称的 translator 宏包没有中文词典,所以定理名称用 \deftranslation 声明;写在帧与帧之间的节,用与引用相同的多遍编译机制生成目录。它确立了帧的每个覆盖层都是 PDF 的一页,所以 \pause 和尖括号中的规格都要计数,而选项 handout 只把每帧排一次;介绍了主题、分栏、区块和定理;把 biblatex 的简短引用和一个参考文献帧搬到幻灯片上;解释了为什么备注会在每个覆盖层之后重复;并提醒 Beamer 用无衬线字体族排版,所以 \setmainfont 和 \setmainjfont 都改变不了幻灯片,汉字要用 \setsansjfont 和 \renewcommand{\kanjifamilydefault}{\gtdefault} 设定。

海报、信函与简历

海报、信函与简历一课从阅读距离推出海报的最小字号 s≥7⋅d30s \geq 7 \cdot \frac{d}{30},又从 A 系列的比例推出一个可在普通纸上检验的缩样;用 tcolorbox 的 poster 库把海报排成区块网格,其基本字号用一个选项设定;把信函当作一组数据来处理,用 letter 和 scrlttr2 的变量;介绍了 moderncv,它的颜色要先于样式选择,它与 babel 的西班牙语不相容,由选项 es-lcroman 解决;并编排了一份学术简历,其论著列表按关键词筛选,取自与论文相同的数据库。最后,它为每种文体指定一个不会省略其特征的文档类。

团队协作写作

团队协作写作一课介绍了在 Overleaf 中的协作,包括评论、修订和历史记录,以及用 Git 进行版本控制。从 Git 逐行比较和合并文件这一点,它推出每行写一句的约定:这不改变 PDF,并使不相邻句子中的两处修改自动合并;用 .gitignore 排除编译会重新生成的文件,按文件名排除文档本身的 PDF,而不是排除所有 PDF,因为其中可能有图片;讲授如何解决冲突,并通过编译检验解决的结果,因为没有冲突的合并也可能弄坏引用;用 latexdiff 在 PDF 中显示改动;并汇总了团队的约定:共同的导言区、共同的数据库、每章一个文件、带前缀的标签。

模板与发表

模板与发表一课把文档送到它的目的地。它让一篇论文适应期刊的文档类:删去文档类自己决定的东西,保留有意义的命令;并指出其中的冲突,例如 elsarticle 加载的 natbib 与 biblatex 之间的冲突;准备了一个能独立编译的投稿文件夹;说明 arXiv 编译源文件而不提供 LuaLaTeX,因此本课程的文档用 XeLaTeX 投稿,中文要从 luatexja 改用 xeCJK 或 ctex,字体用文件名调用;用写在文档类之前、带有标准所允许的 PDF 版本的 \DocumentMetadata 生成了 PDF/A;并用 tagging=on、图片的替代文本和语言为 PDF 加上标签,使看不见的人也能阅读。

下图把四段汇成一条链。中间一列的每个节点是一种机制或一条规则,按彼此依赖的顺序编号,并用弧线连到它所用到的前面的环节;四周浮动的是支撑,即这条链一再求助的原理,每个支撑用实线连到依靠它的环节,用虚线连到确立它的环节,在前几个单元中确立的支撑则画成圆环。点击一个支撑,会突出显示所有用到它的环节;每个环节都链接到讲解它的那一课。

链的支柱

  • A是什么,而非看起来怎样. 标记说明每个元素是什么,文档类及其选项决定它的形式;所以换了文档类,内容就换了文体。确立于第二和第三单元。 本单元中不加证明而采用。
  • B一次决定. 在一处决定的东西(一个选项、一条自定义命令、一份共同的导言区),在那里改动,整份文档随之改变;手工复制的东西则不再一致。确立于前几个单元。 本单元中不加证明而采用。
  • C多遍编译. 引擎把在一遍中算出的东西记入辅助文件,并在下一遍中使用;这些文件每次编译都会重新生成。确立于第一单元,在第三单元中细化。 本单元中不加证明而采用。
  • D相对尺寸. 相对于正文表示的尺寸,如 \linewidth 或字号 \large 与 \Huge,会适应它被使用的位置。确立于第二和第五单元。 本单元中不加证明而采用。
  • E一个数据库,多种用途. 文献在数据库中描述一次,每种文体再按适合自己的样式和筛选条件引用或列出它们。确立于第六单元。 本单元中不加证明而采用。
  • F合法的不报警. 引擎及其程序只对无法处理的东西发出警告;一份合法却没有说出作者本意的源文件会毫无警告地编译,缺陷只在结果中可见。确立于第五和第六单元。 本单元中不加证明而采用。
  • G距离决定. 一个字所张的视角随距离成比例地缩小;最小字号随距离增大。 确立于: 6. 按距离定字号.
  • HGit 比较行. Git 逐行比较和合并文件:只把不相邻行中的改动合并起来,若两处改动涉及同一行或相邻的行,就宣布冲突。 确立于: 11. 逐行的差异与合并.
  1. 第 1 段 用 Beamer 制作演示文稿

    • 排出带标题、区块、分栏和定理的帧。
    • 预测覆盖层、讲义和备注产生的页数。
    • 在幻灯片上用同一个数据库引用。
    • 知道 Beamer 用哪个字体族,从而选择演示文稿的字体。
    1. 帧与覆盖层即页面. 每帧为每个覆盖层产生一页:\pause 以及 <3-> 或 \only<2> 之类的规格决定页数;handout 每帧只排一页,备注则在每个覆盖层之后重复。

      依据: A (是什么,而非看起来怎样). 证明于: 用 Beamer 制作演示文稿.

    2. 节与目录. \section 写在帧与帧之间,不产生页面,而为 \tableofcontents 提供条目,目录在第二次编译时补全。

      使用: 1. 帧与覆盖层即页面. 依据: C (多遍编译). 证明于: 用 Beamer 制作演示文稿.

    3. 语言与名称. Beamer 用来翻译定理名称的 translator 只在语言作为文档类选项声明时才识别它,而且没有中文词典:于是“Theorem”以英文出现,没有任何警告,而“证明”由 babel 写成中文;中文名称在导言区用 \deftranslation[to=chinese] 一次声明。

      使用: 1. 帧与覆盖层即页面. 依据: B (一次决定), F (合法的不报警). 证明于: 用 Beamer 制作演示文稿.

    4. 简短引用. 幻灯片上用 biblatex 的简短形式、从同一个数据库引用,完整的文献条目放在最后一帧。

      使用: 1. 帧与覆盖层即页面. 依据: E (一个数据库,多种用途). 证明于: 用 Beamer 制作演示文稿.

    5. 无衬线字体族. Beamer 用无衬线字体族排版:\setmainfont 和 \setmainjfont 改变不了幻灯片;没有 match、\setsansjfont 和 \kanjifamilydefault 那一行,汉字仍是宋体,也没有警告;可以更换无衬线字体族,或选用衬线字体主题,而 professionalfonts 不碰数学。

      使用: 1. 帧与覆盖层即页面. 依据: A (是什么,而非看起来怎样), F (合法的不报警). 证明于: 用 Beamer 制作演示文稿.

  2. 第 2 段 海报、信函与简历

    • 按距离计算海报字号,并在缩样上检验。
    • 把海报排成区块网格。
    • 用 letter 和 scrlttr2 写信。
    • 从数据库编排求职简历和学术简历。
    1. 按距离定字号. 在 30 厘米处,舒适的最小字号约为 7 pt;在以厘米计的距离 dd 处,字号 ss 必须满足 s≥7⋅d30s \geq 7 \cdot \frac{d}{30}。

      证明于: 海报、信函与简历.

    2. 缩样. A 系列的各种幅面形状相同,每进一级,每条边除以 2\sqrt{2}:缩成 A4 的 A0 海报要在预定距离的四分之一处阅读。

      使用: 6. 按距离定字号. 依据: G (距离决定). 证明于: 海报、信函与简历.

    3. 区块网格. tcbposter 把页面分成栏和行,每个 \posterbox 在其中占据一个位置,fontsize 设定基本字号,所有相对字号都取决于它。

      使用: 6. 按距离定字号. 依据: B (一次决定), D (相对尺寸), G (距离决定). 证明于: 海报、信函与简历.

    4. 信函即数据. letter 和 scrlttr2 把发信人、收信人、日期和署名作为数据接收;scrlttr2 把它们存放在变量中,例如 place,并用自己的选项决定它们的位置。

      依据: A (是什么,而非看起来怎样). 证明于: 海报、信函与简历.

    5. 从数据库生成简历. moderncv 要求先选颜色后选样式,用于西班牙语时 babel 要加 es-lcroman;学术简历用 \nocite{*} 和组合各自条件的关键词筛选列出论著。

      使用: 9. 信函即数据, 4. 简短引用. 依据: E (一个数据库,多种用途), F (合法的不报警). 证明于: 海报、信函与简历.

  3. 第 3 段 团队协作写作

    • 在 Overleaf 或 Git 仓库中共享项目。
    • 写作时使他人的改动不相冲突。
    • 排除生成的东西,而不丢失非生成的东西。
    • 解决冲突,用编译检验,并显示改动。
    1. 逐行的差异与合并. Git 把每次提交的改动记录为删除的行和添加的行,当两个分支的改动涉及不同的行时,无须干预就把它们合并。

      证明于: 团队协作写作.

    2. 每行一句. 单个换行等于一个空格,所以每行写一句不改变 PDF;差异指出改动的那一句,不相邻句子中的两处修改会自动合并。

      使用: 11. 逐行的差异与合并. 依据: H (Git 比较行). 证明于: 团队协作写作.

    3. 生成的东西不保存. .gitignore 排除辅助文件,并按文件名排除文档的 PDF;*.pdf 会把 PDF 格式的图片也一并排除,没有警告,文档在另一台电脑上就无法编译。

      使用: 11. 逐行的差异与合并. 依据: C (多遍编译), F (合法的不报警). 证明于: 团队协作写作.

    4. 解决并编译. 冲突会在文件中留下标记,要手工解决;没有冲突的合并也可能弄坏引用,所以每次合并都要用编译检验。

      使用: 12. 每行一句, 13. 生成的东西不保存. 依据: H (Git 比较行), F (合法的不报警). 证明于: 团队协作写作.

    5. PDF 中的改动. latexdiff 比较源文件的两个版本,写出第三个版本,编译后显示删去和添加的内容;团队的约定(共同的导言区和数据库、带前缀的标签)使比较结果不致充满形式上的差异。

      使用: 14. 解决并编译. 依据: B (一次决定). 证明于: 团队协作写作.

  4. 第 4 段 模板与发表

    • 让论文适应期刊的文档类。
    • 准备一个能独立编译的投稿文件夹。
    • 选择目的地所接受的引擎和参考文献系统。
    • 生成用于存档且带标签的 PDF。
    1. 适应模板. 删去期刊文档类自己决定的东西(页面、字体、标题),保留有意义的命令;文档类已经加载的宏包,例如 elsarticle 中的 natbib,可能与自己的宏包冲突。

      使用: 3. 语言与名称. 依据: A (是什么,而非看起来怎样), B (一次决定). 证明于: 模板与发表.

    2. 能独立编译的源文件. 投稿文件夹包含文档读取的一切,此外别无他物:源文件、图片、数据库或 .bbl,没有任何辅助文件。

      使用: 16. 适应模板, 13. 生成的东西不保存. 依据: C (多遍编译). 证明于: 模板与发表.

    3. 目的地决定引擎. arXiv 用 LaTeX、pdfLaTeX 或 XeLaTeX 编译源文件,不用 LuaLaTeX:本课程的中文文档改用 xeCJK 或 ctex,用 XeLaTeX 投稿,字体用文件名调用,并事先用这个引擎编译;随稿提交的 .bbl 必须与目的地的 biblatex 版本兼容。

      使用: 17. 能独立编译的源文件, 4. 简短引用. 依据: E (一个数据库,多种用途), F (合法的不报警). 证明于: 模板与发表.

    4. PDF/A 及其版本. \DocumentMetadata 写在 \documentclass 之前;使用 pdfstandard=a-2b 时要加上 pdfversion=1.7,因为 2.0 版对该标准的这一部分不可接受。

      使用: 17. 能独立编译的源文件. 依据: F (合法的不报警). 证明于: 模板与发表.

    5. 标签、替代文本与语言. tagging=on 从有意义的标记中导出 PDF 的结构;alt 给每张图提供看不见它的人将会听到的内容,lang 声明语言。

      使用: 19. PDF/A 及其版本. 依据: A (是什么,而非看起来怎样). 证明于: 模板与发表.

课程的终点. 这条链终止于文档离开作者之手的地方:与他人合写,以多种文体呈现,并以目的地所要求的形式交付。课程也随之结束。