摘要
本课结束第七单元“其他文档与协作”,也随之结束整门课程。它重建从 Beamer 的帧到带标签的 PDF 的原理与机制之链,在每一环指出用到哪条原理、在哪一课确立;把所取得的成果放回课程计划中加以定位,并指出课程之后还留下什么;在结业测验中重复入门测验所考查的技能;最后给出六道比各课习题更难的挑战题,要求综合多个单元:编排一篇汇集整门课程的短文,把它改成演示文稿,把它的图搬到海报上,诊断一次没有冲突却改变了引用的合并,为 arXiv 和一家用 pdfLaTeX 编译的期刊准备它,以及写一份同时适用于论文、演示文稿和 KOMA-Script 报告的导言区。
学习目标
- 重建本单元各机制的顺序,指出每一机制所依靠的原理。
- 解释为什么同一内容不必重写就能改变文体、作者和目的地,以及每次改变时确实需要作出哪些决定。
- 预测带覆盖层的帧、文档类选项、排除文件、Git 合并和元数据声明各会产生什么,并修改源文件,使它产生想要的结果。
- 编排一篇汇集整门课程各种手段的学术短文,并把它改编成演示文稿、海报,使之符合发表目的地的要求。
- 把本课程所学放到各学科写作课程中加以定位,这些课程都以本课程为基础。
本单元的收获
本单元的目标是:前六个单元建立起来的学术作品能够改变文体、由多人合写,并且不必重做就送到目的地。这个目标的达成,依靠的是导言宣布为已知的内容:逻辑标记,它说明每样东西是什么,而把形式交给文档类;自己的导言区,它一次决定在整份文档中有效的东西;图形的相对尺寸;以及文献数据库,它服务于任何需要引用的文体。因此,走过的路可以读成由四段组成的一条链。
用 Beamer 制作演示文稿
用 Beamer 制作演示文稿一课表明,演示文稿和其他文档一样是文档,有自己的文档类:页面比例用 aspectratio 选择;中文与课程其他各课一样由 luatexja 和 babel 处理,而 Beamer 用来翻译定理名称的 translator 宏包没有中文词典,所以定理名称用 \deftranslation 声明;写在帧与帧之间的节,用与引用相同的多遍编译机制生成目录。它确立了帧的每个覆盖层都是 PDF 的一页,所以 \pause 和尖括号中的规格都要计数,而选项 handout 只把每帧排一次;介绍了主题、分栏、区块和定理;把 biblatex 的简短引用和一个参考文献帧搬到幻灯片上;解释了为什么备注会在每个覆盖层之后重复;并提醒 Beamer 用无衬线字体族排版,所以 \setmainfont 和 \setmainjfont 都改变不了幻灯片,汉字要用 \setsansjfont 和 \renewcommand{\kanjifamilydefault}{\gtdefault} 设定。
海报、信函与简历
海报、信函与简历一课从阅读距离推出海报的最小字号 ,又从 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 段 用 Beamer 制作演示文稿
- 排出带标题、区块、分栏和定理的帧。
- 预测覆盖层、讲义和备注产生的页数。
- 在幻灯片上用同一个数据库引用。
- 知道 Beamer 用哪个字体族,从而选择演示文稿的字体。
帧与覆盖层即页面. 每帧为每个覆盖层产生一页:
\pause以及<3->或\only<2>之类的规格决定页数;handout每帧只排一页,备注则在每个覆盖层之后重复。依据: A (是什么,而非看起来怎样). 证明于: 用 Beamer 制作演示文稿.
节与目录.
\section写在帧与帧之间,不产生页面,而为\tableofcontents提供条目,目录在第二次编译时补全。使用: 1. 帧与覆盖层即页面. 依据: C (多遍编译). 证明于: 用 Beamer 制作演示文稿.
语言与名称. Beamer 用来翻译定理名称的
translator只在语言作为文档类选项声明时才识别它,而且没有中文词典:于是“Theorem”以英文出现,没有任何警告,而“证明”由 babel 写成中文;中文名称在导言区用\deftranslation[to=chinese]一次声明。使用: 1. 帧与覆盖层即页面. 依据: B (一次决定), F (合法的不报警). 证明于: 用 Beamer 制作演示文稿.
简短引用. 幻灯片上用 biblatex 的简短形式、从同一个数据库引用,完整的文献条目放在最后一帧。
使用: 1. 帧与覆盖层即页面. 依据: E (一个数据库,多种用途). 证明于: 用 Beamer 制作演示文稿.
无衬线字体族. Beamer 用无衬线字体族排版:
\setmainfont和\setmainjfont改变不了幻灯片;没有match、\setsansjfont和\kanjifamilydefault那一行,汉字仍是宋体,也没有警告;可以更换无衬线字体族,或选用衬线字体主题,而professionalfonts不碰数学。使用: 1. 帧与覆盖层即页面. 依据: A (是什么,而非看起来怎样), F (合法的不报警). 证明于: 用 Beamer 制作演示文稿.
第 2 段 海报、信函与简历
- 按距离计算海报字号,并在缩样上检验。
- 把海报排成区块网格。
- 用 letter 和 scrlttr2 写信。
- 从数据库编排求职简历和学术简历。
按距离定字号. 在 30 厘米处,舒适的最小字号约为 7 pt;在以厘米计的距离 处,字号 必须满足 。
证明于: 海报、信函与简历.
缩样. A 系列的各种幅面形状相同,每进一级,每条边除以 :缩成 A4 的 A0 海报要在预定距离的四分之一处阅读。
区块网格. tcbposter 把页面分成栏和行,每个
\posterbox在其中占据一个位置,fontsize设定基本字号,所有相对字号都取决于它。使用: 6. 按距离定字号. 依据: B (一次决定), D (相对尺寸), G (距离决定). 证明于: 海报、信函与简历.
信函即数据. letter 和 scrlttr2 把发信人、收信人、日期和署名作为数据接收;scrlttr2 把它们存放在变量中,例如
place,并用自己的选项决定它们的位置。依据: A (是什么,而非看起来怎样). 证明于: 海报、信函与简历.
从数据库生成简历. moderncv 要求先选颜色后选样式,用于西班牙语时 babel 要加
es-lcroman;学术简历用\nocite{*}和组合各自条件的关键词筛选列出论著。使用: 9. 信函即数据, 4. 简短引用. 依据: E (一个数据库,多种用途), F (合法的不报警). 证明于: 海报、信函与简历.
第 3 段 团队协作写作
- 在 Overleaf 或 Git 仓库中共享项目。
- 写作时使他人的改动不相冲突。
- 排除生成的东西,而不丢失非生成的东西。
- 解决冲突,用编译检验,并显示改动。
逐行的差异与合并. Git 把每次提交的改动记录为删除的行和添加的行,当两个分支的改动涉及不同的行时,无须干预就把它们合并。
证明于: 团队协作写作.
每行一句. 单个换行等于一个空格,所以每行写一句不改变 PDF;差异指出改动的那一句,不相邻句子中的两处修改会自动合并。
使用: 11. 逐行的差异与合并. 依据: H (Git 比较行). 证明于: 团队协作写作.
生成的东西不保存.
.gitignore排除辅助文件,并按文件名排除文档的 PDF;*.pdf会把 PDF 格式的图片也一并排除,没有警告,文档在另一台电脑上就无法编译。使用: 11. 逐行的差异与合并. 依据: C (多遍编译), F (合法的不报警). 证明于: 团队协作写作.
解决并编译. 冲突会在文件中留下标记,要手工解决;没有冲突的合并也可能弄坏引用,所以每次合并都要用编译检验。
使用: 12. 每行一句, 13. 生成的东西不保存. 依据: H (Git 比较行), F (合法的不报警). 证明于: 团队协作写作.
PDF 中的改动. latexdiff 比较源文件的两个版本,写出第三个版本,编译后显示删去和添加的内容;团队的约定(共同的导言区和数据库、带前缀的标签)使比较结果不致充满形式上的差异。
第 4 段 模板与发表
- 让论文适应期刊的文档类。
- 准备一个能独立编译的投稿文件夹。
- 选择目的地所接受的引擎和参考文献系统。
- 生成用于存档且带标签的 PDF。
适应模板. 删去期刊文档类自己决定的东西(页面、字体、标题),保留有意义的命令;文档类已经加载的宏包,例如 elsarticle 中的 natbib,可能与自己的宏包冲突。
能独立编译的源文件. 投稿文件夹包含文档读取的一切,此外别无他物:源文件、图片、数据库或
.bbl,没有任何辅助文件。使用: 16. 适应模板, 13. 生成的东西不保存. 依据: C (多遍编译). 证明于: 模板与发表.
目的地决定引擎. arXiv 用 LaTeX、pdfLaTeX 或 XeLaTeX 编译源文件,不用 LuaLaTeX:本课程的中文文档改用 xeCJK 或 ctex,用 XeLaTeX 投稿,字体用文件名调用,并事先用这个引擎编译;随稿提交的
.bbl必须与目的地的 biblatex 版本兼容。使用: 17. 能独立编译的源文件, 4. 简短引用. 依据: E (一个数据库,多种用途), F (合法的不报警). 证明于: 模板与发表.
PDF/A 及其版本.
\DocumentMetadata写在\documentclass之前;使用pdfstandard=a-2b时要加上pdfversion=1.7,因为 2.0 版对该标准的这一部分不可接受。使用: 17. 能独立编译的源文件. 依据: F (合法的不报警). 证明于: 模板与发表.
标签、替代文本与语言.
tagging=on从有意义的标记中导出 PDF 的结构;alt给每张图提供看不见它的人将会听到的内容,lang声明语言。使用: 19. PDF/A 及其版本. 依据: A (是什么,而非看起来怎样). 证明于: 模板与发表.
课程的终点. 这条链终止于文档离开作者之手的地方:与他人合写,以多种文体呈现,并以目的地所要求的形式交付。课程也随之结束。
正在加载内容…
已完成
登录账户以保存您的进度