1  引言

这是第 1 章的内容,回顾中国图书发展的历史及最新趋势 (R Core Team, 2021; Xie, 2015).

1.1 中国图书出版的变化

中国的图书出版经历一些折腾,方正系统一度非常流行,但现在看来是非常失败的,主要是它在解决中文字库和公式排版等的同时没有解决兼容性、标准化及便利性等问题,其本质上想实现在其自创的中文系统中将 TeX 命令做一个映射以实现数学公式排版,同时完成格式的定制.

中国学术界也经历了一些折腾,如中科院张林波研究员等开发的CCT系统和华东师范大学肖刚与陈志杰等老师开发的天元系统,它们是 TeX 系统汉化版,较好地解决了汉字生成与调用,但因没有考虑普适性或可拓展性而像方正系统一样随着CJK的逐渐成熟而逐渐被抛弃,均退出了历史舞台. 而同期中科院吴凌云博士等在普及 TeX 的同时开发的 TeX 中文套餐C TeX 相当成功,主要的工作是会对汉字排版的ctex宏包及套餐的开发(后者类似于针对苹果OS系统的MacTeX, 但后期的更新显得太慢),并对三个主流的文档类book, article, report进行了定制,推出了相应的中文文档类ctexbook, ctexart, ctexrep, 由此避免了传统的基于CJK宏包需要的大量定制,同时保证了与原有 TeX 系统的兼容性. 这样我们始终可以使用跨平台的TeXLiVe进行排版或各类模板的开发,例如各个出版社的图书模板、各个期刊的模板、各高校的硕士和博士毕业论文模板等, 现在这样的模板都开源到Overleaf上.

TeX 的出现1,而且始终屹立不倒的原因是什么? 第一个原因是它解决了一个Word之类文字编辑系统的痛点,即从所见所得(WYSIWYG, What you see is what you get)到所想所得(WYTIWYG), 即通过一些 TeX 命令集构成一个完整的编程语言,由它完成一个封闭的体系,具有类似C语言一样非常强大的开发功能,由此形成了后来的latex, miktex, latex2.09, luatex, xetex等 TeX 编译引擎,它们在充分利用电脑系统资源的同时实现高质量输出需要的精度.

TeX 屹立不倒的另一个原因是浮动对象的处理,即包括公式,表格、图形、页码、章节、文献、定理等的标签化与引用,实现文档内部的自由跳转,结合Acrobat Reader这样强大的pdf阅读器的支持,使得读者的阅读体验得到大幅改善,并为图书的电子化奠定了基础.

随着数据科学这一新兴学科的出现,开源的RPython (还有正在逐步流行的Julia)编程语言越来越强大. 为了增加这类图书的可读性,需要将代码较完整地呈现在读者面前,并且要求代码的即时可复现能力,即数据的变化,其分析的结果(包括图形和表格)也随之发生变化并同步呈现出来. 这就是现在逐步流行的文学化编程(literate programming), 它实现上最早也是 TeX 的鼻祖Knuth提出的, 后来被谢益辉得到重视并广泛推广,并通过RstudioR Markdown和现在的Quarto Markdown传递给R的用户. 我们姑且把这种将写作与数据分析相结合的统计分析称为文学化统计编程(literate statistical programming). 它在为数据科学爱好者带来便利的同时也通过Bookdownquarto为论文、分析报告和图书的写作和电子化带来了极大的好处,越来越多的包括网页版电子书在内的文档出现在(https://github.com/)等网站上.

这本小册子主要考虑书稿类文档的写作,它可以包括图书、毕业论文和分析报告,在些统称为书稿. 现在写书选择什么类型的模板,下面我们来作进一步的探索与比较.

1.2 统计类图书的核心要素

统计或数据科学类图书的排版除普通图书的页面及文字风格等静态元素外,核心要素体现在浮动的对象上,使得图书的阅读体验更好地发挥出来,即在不同页面之间快速切换、跟踪、搜索,以及必要的RPython等代码以语法高亮方式显示,必要时同步将执行结果呈现出来.

  1. 章节标题是浮动的,最主要用于书签的生成;

  2. 公式是浮动的,这是数学、统计等理科书的特点,公式引用必不可少;

  3. 图形是浮动的,统计图形作为可视工具,在说明数据或展示分析结果时经常会引用相应的图形;

  4. 表格是浮动的,通常是原始数据或统计分析的结果以表格形式展示出来,它们可能被多次在不同的章节中引用;

  5. 定理是浮动的, 这里定理是指与之相关的一大类,包括常用的定理、引理、推论、命题、例子等,它们在文中也会被反复引用;

  6. 文本可以设置浮动标签后被引用,最为常见的是图形与表格的题图(caption)通过文本方式来引用;

  7. 文献是浮动的,这在是谈及前人的已有工作、成果比较或进行综述时经常要引用大量已经发表的论文、图书、会议报告等.

TeX 有一套成熟的浮动对象的排版方式,通过给浮动对象打标签(label),然后引用(ref). Quarto Book(或之前的Bookdown)思路一样,但比 TeX 的处理稍复杂些(可能因我们还没有习惯引起). 我们在后面章节中分别举例说明.

1.3 统计数据分析类图书模板的选择

统计数据分析类图书既有理论或原理的讲解,又会有一些案例分析,包括这些案例分析实现的代码. 我们可以考虑的模板主要有三种类型.

1.3.1 基于纯 TeX 模板

全世界90%的书是由 TeX 排版的,包括硕士和博士毕业论文模板,这要感谢鼻祖Knuth!开源成就了 TeX !

如果仅仅是统计理论方面的书集,这显然是最好的选择,因为高质量公式的排版离不开 TeX. 基于 TeX 的排版存在三个明显的缺陷或不足:

  1. 大量的 TeX 命令需要记忆;

  2. 对于代码的排版非常不便,特别是RPython代码执行后的输出,尤其是图形与表格;

  3. 代码以listing等包来呈现, 无法实时呈现代码运行的结果,不符合文学化编程的要求.

1.3.2 R, Markdown与 TeX 的结合

数据科学时代更注重文学化统计编程,代码伴随是这类图书的特点,自Springer出版R系列统计图书后,这种风格成为新趋势,大大方便了数据科学爱好者”便学习便练习”的学习方式. 针对代码伴随,早期对这类图书有二个解决方案:

  1. Sweave/knitr + R

本质上它是在 TeX 嵌入R代码块,并由R在后台运行后将结果也嵌入到 TeX 中,再由 TeX 的编译引擎生成pdf. 这个方案的基本沿用 TeX 的方式,它仅解决了上面提到的第二个问题. 在数据科学时代,报告的快速生成成为新的要求,效率优先!随着knitr的出现Sweave退出舞台.

  1. R Markdown + Mathjax/ TeX

Markdown作为一种轻量级的标记语言成为网页作为文字主要载体的互联网时代首先的写作工作,但它显然不适合数学与统计类论文或图书的撰写,但knitrpandoc的出现使不同风格的内容整合与转换成为可能,而不同风格的内容各有善长的工具实现,作为统计类专业论文或图书类文档主要的内容有:

  1. 文字, 由markdown完成

  2. 公式,由 TeX 完成

  3. 代码,由R (或Python) 完成

要说明的是,在网页端, TeX 的实现可由Mathjax来完或渲染(转化或生成标准的公式),见第 4 章说明.

1.3.3 从Markdown、R Markdown 到 Quarto

Markdown 是一种轻量级标记语言,其语法简单易用,容易上手. 人们可以通过 Markdown 给纯文本文档添加格式化元素,轻松转换为其他格式文件,适用不同场景,从而使创作者专注于内容写作,而非格式排版. Markdown文档的扩展名为.md. Markdown 的语法结构十分简单,使用者稍微阅读一下相关文档和案例,便可动手写作.

R Markdown 是基于 Markdown 的扩展,专门为 R 语言和数据分析而设计. 它允许在 Markdown 文档中嵌入R代码块,并提供了方便的方式来执行和显示代码的结果. 通过 R Markdown,用户可以编写结合了文本、代码和结果展示的动态报告、文档、演示文稿等. R Markdown 文件可以通过 RStudio 等工具进行编辑和转换,得到包括 HTML、PDF、Word 文档等多种输出格式. R Markdown 文档的扩展名为 .rmd.

过去10年,R的功能与生态得到不断完善, 得益于Hadley Wickham和谢益辉等开发的许多优秀包的出现,如knitr, kableExtra, ggplot2, dplyr等, 以及基于 rmarkdown适用于新的特定应用场景的程序包, 如bookdownpagedown, rticle等的出现和普及, Rstudio作为一个IDE也变得越来越成熟与强大, 正在成为一个非常优秀的论文、幻灯片及图书等撰写与出版系统(PUB).

Quarto 则是定位 R Markdown 的下一代产品,由 Posit 2(原 RStudio 的开发团队)开发,是一个开源的数据分析与科技出版系统. Quarto 不仅支持 R 生态系统的扩展,还支持更多的编程语言(如 PythonJuliaObservable 等),同时支持近 40 种输出格式(包括html,pdf, ePub, Word, Asciidoc等),从而在更大范畴内为科技类(不仅仅限于统计类)出版活动提供解决方案.

Quarto已经完成能够实现bookdown的书稿排版涉及的定制及核心要素的排版,而且考虑到对更多编程语言的支持, 我们完成可以将原来基于bookdown的写作转换到Quarto上来. 若非必要, 我们这本手册之后也用Quarto Book来指基于Quarto的书稿格式排版.

1.3.4 格式转换流程

Quarto 根据以下工作流程导出各类格式文档:

其中,Knitr 是 Quarto 中使用的一个 R 包,负责将 .qmd 文件转换为普通 Markdown 格式(.md 文件),以便后续使用 Pandoc 进行格式转换。在转换前, 会运行.qmd文件中的代码块, 将得到的文字、表格、图形结果再插入到文档中. 代码块可以在R的knitr包支持下运行, 也可以在Jupyter软件的支持下运行.

Pandoc 是一个开源的文档转换工具,用于将一个格式的文档转换为另一种格式,广泛应用于科技写作领域。Pandoc 支持多种输入格式(如 Markdown、HTML、LaTeX 等)和输出格式(如 HTML、PDF、Word、ePub 等),并提供了丰富的选项和灵活的配置来满足各种转换需求。特别地, 对于pdf输出, 由pandoc完成由md转化为 TeX , 并由laTeX编译生成pdf; 对于HTML输出, 由pandocmd转化为html, 其中的数学公式由MathjaxKaTeX完成渲染.

想在 VS Code 中进行格式转换,可以在命令行下运行如下命令:

quarto render --to all 

1.3.5 多格式图书出版的实现

在科技高度发达的互联系时代,读者使用的媒介基本有三类:较为专业的电脑,较为轻便的平板(电脑)和全功能的智能手机. 前者以pdf类图书为主呈现给读者,同时可以完成标注等工作;后者以文字型的电子图书为主,消磨时间为主;而平板的使用者逐渐成为电子类图书的新势力,包括pdfepub之类的电子书. 基于Quarto创建的Book类, 注重不同类型读者的媒体使用的差异,并很好地实现统一编写与差异化输出. 目前Quarto Book可以一键生成三类图书:

  1. gitbook,可自由出版在git pages

  2. ePub, 发表到大量的电子图书平台上

  3. pdf, 正规的图书出版公司以电子或纸质形式出版

注释

Quarto 与 TeX 做到了无缝衔接,我们可以在 Markdown 文档中嵌入和管理 TeX 代码,而且我们还可以通过TeX或\(CSS/SCSS\)的高度定制实现符合PDF、HTML或ePub的的输出。


  1. 是伟大的Knuth创造了排版的奇迹↩︎

  2. Posit 由 RStudio 更名而来,于2021年开始着手打造新一代的R Markdown,称为Quarto. 2022年12月,Rstudio作为公司于2021年作出了重大战略调整,不仅将公司名称改为Popsit,而且将更多的开发放在应用更为广泛的VS Code上,但同时保证对RstudioPython Notebook的支持. 该公司专注于数据科学的资源集成,近年来一直在布局打通大数据科学的创作与分享.↩︎