R沟通|Bookdown中文书稿写作手册(上)
本教程来自华东师范大学汤银才教授,已受本人授权
前言
今年接了 5 本与贝叶斯近似计算包INLA
相关的翻译书,将由高等教育出版社出版。在准备翻译的时候,我静下来思考了一下二个问题。一是互联网时代在兼顾图书质量的同时怎么充分考虑读者阅读体验?二是什么是当下最为成熟的图书写作工具?特别是与数据科学密切相关的统计类图书的写作与出版。书稿模板的选择成为首先要考虑的事。
在书稿模板的选择与测试过程中遇到了很多的坑,幸运的是逐个踩过来了,但从 TEXTEX 到Rnw
(Sweave+R), 再到Rmd
(Knitr + R), 最后到Bookdown
, 共经历了 4 个模板。快速、高效、高质量是写书人追求的目标。目前来看Bookdown
是最好的选择,因为它满足我模板选择的快速编辑、高效生成、高质量输出的要求。
这本小册子可视为一个写中文书稿的Bokdown
模板,也是中文Bookdown
写作的一本说明书,其中汇总了书稿中几大核心要素的写作技巧。我主要参考了三个模板Bookdown
模板和三本电子书,罗列如下,在此一并对谢益辉、李东风等表示感谢。
谢益辉, bookdown 中文范例[1] 谢益辉, A bookdown example for Chapman & Hall books[2] bookdown-chapterbib[3] 谢益辉, bookdown: Authoring Books and Technical Documents with R Markdown[4], 2021-03-15. 李东风,R 语言教程,第 23 章:用 bookdown 制作图书[5], 2020-12-28. Yihui Xie, J. J. Allaire, Garrett Grolemund, R Markdown: The Definitive Guide[6], 2020-12-14.
本文框架
由于内容较多,我们将通过三次推文进行发布,尽情期待。当然文末给出了原文链接,你可以直接学习。
第 1 章 引言
这是第1[7]章的内容,回顾中国图书发展的历史及最新趋势. (R Core Team, 2020[8]; Xie, 2015a[9]),
1.1 中国图书出版的变化
中国的图书出版经历一些折腾,方正系统一度非常流行,但现在看来是非常失败的,主要是它在解决公式排版的同时没有解决便利性,其本质上想实现在其自创的中文系统中将 TEXTEX 命令做一个映射以实现数学公式排版,同时完成格式的定制。
中国学术界也经历了一些折腾,如中科院张林波研究员等开发的CCT
系统和华东师范大学肖刚与陈志杰等老师开发的天元系统,它们是 TEXTEX 系统汉化版,较好地解决了汉字生成与调用,但因没有考虑普适性或可拓展性而像方正系统一样随着CJK
的逐渐成熟而逐渐被抛弃,均退出了历史舞台。而同期中科院吴凌云博士等在普及 TEXTEX 的同时开发的 TEXTEX 中文套餐 CTEX 相当成功,主要是针对汉字排版的ctex
宏包,并对三个主流的文档类book
, article
, report
进行了定制,推出了相应的中文文档类ctexbook
, ctexart
, ctexrep
, 由此避免了传统的基于CJK
宏包需要的大幅定制,同时保证了与原有 TEX 系统的兼容性。这样我们始终可以使用跨平台的TeXLiVe
进行排版或各类模板的开发,例如各个出版社的图书模板、各个期刊的模板、各高校的硕士和博士毕业论文模板等。
TEX 的出现1[10],而且始终屹立不倒的原因是什么?第一个原因是它解决了一个Word
之类文字编辑系统的痛点,即从所见所得(WYSIWYG, What you see is what you get)到所想所得(WYTIWYG), 即通过一些 TEX 命令集构成一个完整的编程语言,由它完成一个封闭的体系,具有类似C
语言一样非常强大的开发功能,由此形成了后来的latex
, miktex
, latex2.09
, luatex
, xetex
等 TEXTEX 编译引擎,它们在充分利用电脑系统资源的同时实现高质量输出需要的精度。
TEXTEX 屹立不倒的另一个原因是浮动对象的处理,即包括公式,表格、图形、页码、章节、文献、定理等的标签化与引用,实现文档内部的自由跳转,结合Acrobat Reader
这样强大的pdf
阅读器的支持,使得读者的阅读体验得到大幅改善,并为图书的电子化奠定了基础。
随着数据科学这一新兴学科的出现,开源的R
和Python
(还有正在逐步流行的Julia
)编程语言越来越强大。为了增加这类图书的可读性,需要将代码较完整地呈现在读者面前,并且要求代码的即时可复现能力,即数据的变化,其分析的结果(包括图形和表格)也随之发生变化。这就是现在逐步流行的文学化编程(literate programming
), 它实现上最早也是 TEXTEX 的鼻祖 Knuth 提出的, 后来被谢益辉得到重视并广泛推广,并通过Rstudio
传递给R
的用户。我们姑且把这种将写作与数据分析相结合的统计分析称为文学化统计编程(literate statistical programming
), 在为数据科学爱好者带来便利的同时也通过Bookdown
为图书的写作和电子化带来了极大的好处,越来越多的网页版电子书出现在(https://bookdown.org/)和(https://github.com/)等网站上。
现在写书选择什么类型的模板,下面我们来作进一步的探索与比较。
1.2 统计类图书的核心要素
统计类图书的排版除普通图书的页面及文字风格等静态元素外,核心要素体现在浮动的对象上,使得图书的阅读体验更好地发挥出来,即在不同页面之间快速切换、跟踪、搜索,必要的R
和Python
代码以语法高亮方式显示。
章节标题是浮动的,最主要用于书签的生成; 公式是浮动的,这是数学、统计等理科书的特点,公式引用必不可少; 图形是浮动的,统计图形作为可视工具,在说明数据或展示分析结果时经常会引用相应的图形; 表格是浮动的,通常是原始数据或统计分析的结果以表格形式展示出来,它们可能被多次在不同的章节中引用; 定理是浮动的, 这里定理是指与之相关的一大类,包括常用的定理、引理、推论、命题、例子等,它们在文中也会被反复引用; 文本可以设置浮动标签后被引用,最为常见的是图形与表格的题图(caption)通过文本方式来引用; 文献是浮动的,这在是谈及前人的已有工作、成果比较或进行综述时经常要引用大量已经发表的论文、图书、会议报告等.
TEXTEX 有一套成熟的浮动对象的排版方式,通过给浮动对象打标签(label),然后引用(ref), Bookdown
思路一样,但比 TEXTEX 的处理稍复杂些(可能因不习惯引起)。我们在后面章节中分别举例说明。
1.3 统计数据分析类图书模板的选择
统计数据分析类图书既有理论或原理的讲解,又会有一些案例分析,包括这些案例分析实现的代码。我们可以考虑的模板主要有三种类型。
1.3.1 基于纯 TEXTEX 模板
全世界 90%的书是由 TEX 排版的,包括硕士和博士毕业论文模板,这要感谢鼻祖 Knuth!开源成就了 TEX!
如果仅仅是统计理论方面的书集,这显然是最好的选择,因为高质量公式的排版离不开 TEXTEX. 基于 TEXTEX 的排版存在三个明显的缺陷或不足:
大量的 TEXTEX 命令需要记忆; 对于代码的排版非常不便,特别是 R
或Python
代码执行后的输出,尤其是图形与表格;代码以 listing
等包来呈现, 无法实时呈现代码运行的结果,不符合文学化编程的要求.
1.3.2 R
markdown 与 TEXTEX 的结合
数据科学时代更注重文学化统计编程,代码伴随是这类图书的特点,自 Springer 出版R
系列统计图书后,这种风格成为新趋势,大大方便了数据科学爱好者“便学习便练习”的学习方式。
针对代码伴随,早期对这类图书有二个解决方案:
Sweave/knitr + R
本质上它是在 TEXTEX 嵌入R
代码块,并由R
在后台运行后将结果也嵌入到 TEXTEX 中,再由 TEXTEX 的编译引擎生成pdf
。这个方案的基本沿用 TEXTEX 的方式,它仅解决了上面提到的第二个问题。在数据科学时代,报告的快速生成成为新的要求,效率优先!随着knitr
的出现Sweave
退出舞台.
Rmarkdown
+Mathjax
/TEXTEX
Markdown
作为一种轻量级的标记语言成为网页作为文字主要载体的互联网时代首先的写作工作,但它显然不适合数学与统计类论文或图书的撰写,但knitr
和pandoc
的出现使不同风格的内容整合与转换成为可能,而不同风格的内容各有善长的工具实现,作为统计类专业论文或图书类文档主要的内容有:
文字, 由 markdown 完成 公式,由 TEXTEX 完成 代码,由 R
(或 Python) 完成
要说明的是,在网页端,TEXTEX 的实现可由Mathjax
来完或渲染(转化或生成标准的公式),见第4[11]章说明。
随着Rstudio
的越来越成熟与强大(得益于许多优秀包的出现,如knitr
, kableExtra
), Rstudio
不仅是一个很好的代码编辑器(Eidtor
), 也是一个非常好的集成开发环境(IDE
),同时正在成为一个非常优秀的论文、幻灯片及图书等撰写与出版系统(PUB
)。后者的基本流程是
由 rmd
文件通过knitr
完成初步集成由 pandoc
完成由rmd
向md
的转化与融合由 pandoc
完成由md
转化为 TEXTEX, 并由laTeX
编译生成pdf
(形式多样!)或由 pandoc
由md
转化为html
, 其中的数学公式由Mathjax
完成渲染.
1.3.3 Rmarkdown
向Bookdown
过渡
在科技高度发达的互联系时代,读者使用的媒介基本有三类:较为专业的电脑,较为轻便的平板(电脑)和全功能的智能手机。前者以pdf
类图书为主呈现给读者,同时可以完成标注等工作;后者以文字型的电子图书为主,消磨时间为主;而平板的使用者逐渐成为电子类图书的新势力,包括pdf
和epub
之类的电子书。 Bookdown
注重不同类型读者的媒体使用的差异,并很好地实现统一编写与差异化输出。目前Bookdown
可以生成三类图书:
gitbook
,可自由出版在git pages
上epub
, 发表到大量的电子图书平台上pdf
, 正规的图书出版公司以电子或纸质形式出版
往期精品(点击图片直达文字对应教程)
后台回复“生信宝典福利第一波”或点击阅读原文获取教程合集