R溝通|Bookdown中文書(shū)稿寫(xiě)作手冊(cè)(上)
本教程來(lái)自華東師范大學(xué)湯銀才教授,已受本人授權(quán)
前言
今年接了 5 本與貝葉斯近似計(jì)算包INLA相關(guān)的翻譯書(shū),將由高等教育出版社出版。在準(zhǔn)備翻譯的時(shí)候,我靜下來(lái)思考了一下二個(gè)問(wèn)題。一是互聯(lián)網(wǎng)時(shí)代在兼顧圖書(shū)質(zhì)量的同時(shí)怎么充分考慮讀者閱讀體驗(yàn)?二是什么是當(dāng)下最為成熟的圖書(shū)寫(xiě)作工具?特別是與數(shù)據(jù)科學(xué)密切相關(guān)的統(tǒng)計(jì)類(lèi)圖書(shū)的寫(xiě)作與出版。書(shū)稿模板的選擇成為首先要考慮的事。
在書(shū)稿模板的選擇與測(cè)試過(guò)程中遇到了很多的坑,幸運(yùn)的是逐個(gè)踩過(guò)來(lái)了,但從 TEXTEX 到Rnw(Sweave+R), 再到Rmd (Knitr + R), 最后到Bookdown, 共經(jīng)歷了 4 個(gè)模板??焖?、高效、高質(zhì)量是寫(xiě)書(shū)人追求的目標(biāo)。目前來(lái)看Bookdown是最好的選擇,因?yàn)樗鼭M足我模板選擇的快速編輯、高效生成、高質(zhì)量輸出的要求。
這本小冊(cè)子可視為一個(gè)寫(xiě)中文書(shū)稿的Bokdown模板,也是中文Bookdown寫(xiě)作的一本說(shuō)明書(shū),其中匯總了書(shū)稿中幾大核心要素的寫(xiě)作技巧。我主要參考了三個(gè)模板Bookdown模板和三本電子書(shū),羅列如下,在此一并對(duì)謝益輝、李東風(fēng)等表示感謝。
謝益輝, 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. 李東風(fēng),R 語(yǔ)言教程,第 23 章:用 bookdown 制作圖書(shū)[5], 2020-12-28. Yihui Xie, J. J. Allaire, Garrett Grolemund, R Markdown: The Definitive Guide[6], 2020-12-14.
本文框架
由于內(nèi)容較多,我們將通過(guò)三次推文進(jìn)行發(fā)布,盡情期待。當(dāng)然文末給出了原文鏈接,你可以直接學(xué)習(xí)。

第 1 章 引言
這是第1[7]章的內(nèi)容,回顧中國(guó)圖書(shū)發(fā)展的歷史及最新趨勢(shì). (R Core Team, 2020[8]; Xie, 2015a[9]),
1.1 中國(guó)圖書(shū)出版的變化
中國(guó)的圖書(shū)出版經(jīng)歷一些折騰,方正系統(tǒng)一度非常流行,但現(xiàn)在看來(lái)是非常失敗的,主要是它在解決公式排版的同時(shí)沒(méi)有解決便利性,其本質(zhì)上想實(shí)現(xiàn)在其自創(chuàng)的中文系統(tǒng)中將 TEXTEX 命令做一個(gè)映射以實(shí)現(xiàn)數(shù)學(xué)公式排版,同時(shí)完成格式的定制。
中國(guó)學(xué)術(shù)界也經(jīng)歷了一些折騰,如中科院張林波研究員等開(kāi)發(fā)的CCT系統(tǒng)和華東師范大學(xué)肖剛與陳志杰等老師開(kāi)發(fā)的天元系統(tǒng),它們是 TEXTEX 系統(tǒng)漢化版,較好地解決了漢字生成與調(diào)用,但因沒(méi)有考慮普適性或可拓展性而像方正系統(tǒng)一樣隨著CJK的逐漸成熟而逐漸被拋棄,均退出了歷史舞臺(tái)。而同期中科院吳凌云博士等在普及 TEXTEX 的同時(shí)開(kāi)發(fā)的 TEXTEX 中文套餐 CTEX 相當(dāng)成功,主要是針對(duì)漢字排版的ctex宏包,并對(duì)三個(gè)主流的文檔類(lèi)book, article, report進(jìn)行了定制,推出了相應(yīng)的中文文檔類(lèi)ctexbook, ctexart, ctexrep, 由此避免了傳統(tǒng)的基于CJK宏包需要的大幅定制,同時(shí)保證了與原有 TEX 系統(tǒng)的兼容性。這樣我們始終可以使用跨平臺(tái)的TeXLiVe進(jìn)行排版或各類(lèi)模板的開(kāi)發(fā),例如各個(gè)出版社的圖書(shū)模板、各個(gè)期刊的模板、各高校的碩士和博士畢業(yè)論文模板等。
TEX 的出現(xiàn)1[10],而且始終屹立不倒的原因是什么?第一個(gè)原因是它解決了一個(gè)Word之類(lèi)文字編輯系統(tǒng)的痛點(diǎn),即從所見(jiàn)所得(WYSIWYG, What you see is what you get)到所想所得(WYTIWYG), 即通過(guò)一些 TEX 命令集構(gòu)成一個(gè)完整的編程語(yǔ)言,由它完成一個(gè)封閉的體系,具有類(lèi)似C語(yǔ)言一樣非常強(qiáng)大的開(kāi)發(fā)功能,由此形成了后來(lái)的latex, miktex, latex2.09, luatex, xetex等 TEXTEX 編譯引擎,它們?cè)诔浞掷秒娔X系統(tǒng)資源的同時(shí)實(shí)現(xiàn)高質(zhì)量輸出需要的精度。
TEXTEX 屹立不倒的另一個(gè)原因是浮動(dòng)對(duì)象的處理,即包括公式,表格、圖形、頁(yè)碼、章節(jié)、文獻(xiàn)、定理等的標(biāo)簽化與引用,實(shí)現(xiàn)文檔內(nèi)部的自由跳轉(zhuǎn),結(jié)合Acrobat Reader這樣強(qiáng)大的pdf閱讀器的支持,使得讀者的閱讀體驗(yàn)得到大幅改善,并為圖書(shū)的電子化奠定了基礎(chǔ)。
隨著數(shù)據(jù)科學(xué)這一新興學(xué)科的出現(xiàn),開(kāi)源的R和Python (還有正在逐步流行的Julia)編程語(yǔ)言越來(lái)越強(qiáng)大。為了增加這類(lèi)圖書(shū)的可讀性,需要將代碼較完整地呈現(xiàn)在讀者面前,并且要求代碼的即時(shí)可復(fù)現(xiàn)能力,即數(shù)據(jù)的變化,其分析的結(jié)果(包括圖形和表格)也隨之發(fā)生變化。這就是現(xiàn)在逐步流行的文學(xué)化編程(literate programming), 它實(shí)現(xiàn)上最早也是 TEXTEX 的鼻祖 Knuth 提出的, 后來(lái)被謝益輝得到重視并廣泛推廣,并通過(guò)Rstudio傳遞給R的用戶。我們姑且把這種將寫(xiě)作與數(shù)據(jù)分析相結(jié)合的統(tǒng)計(jì)分析稱(chēng)為文學(xué)化統(tǒng)計(jì)編程(literate statistical programming), 在為數(shù)據(jù)科學(xué)愛(ài)好者帶來(lái)便利的同時(shí)也通過(guò)Bookdown為圖書(shū)的寫(xiě)作和電子化帶來(lái)了極大的好處,越來(lái)越多的網(wǎng)頁(yè)版電子書(shū)出現(xiàn)在(https://bookdown.org/)和(https://github.com/)等網(wǎng)站上。
現(xiàn)在寫(xiě)書(shū)選擇什么類(lèi)型的模板,下面我們來(lái)作進(jìn)一步的探索與比較。
1.2 統(tǒng)計(jì)類(lèi)圖書(shū)的核心要素
統(tǒng)計(jì)類(lèi)圖書(shū)的排版除普通圖書(shū)的頁(yè)面及文字風(fēng)格等靜態(tài)元素外,核心要素體現(xiàn)在浮動(dòng)的對(duì)象上,使得圖書(shū)的閱讀體驗(yàn)更好地發(fā)揮出來(lái),即在不同頁(yè)面之間快速切換、跟蹤、搜索,必要的R和Python代碼以語(yǔ)法高亮方式顯示。
章節(jié)標(biāo)題是浮動(dòng)的,最主要用于書(shū)簽的生成; 公式是浮動(dòng)的,這是數(shù)學(xué)、統(tǒng)計(jì)等理科書(shū)的特點(diǎn),公式引用必不可少; 圖形是浮動(dòng)的,統(tǒng)計(jì)圖形作為可視工具,在說(shuō)明數(shù)據(jù)或展示分析結(jié)果時(shí)經(jīng)常會(huì)引用相應(yīng)的圖形; 表格是浮動(dòng)的,通常是原始數(shù)據(jù)或統(tǒng)計(jì)分析的結(jié)果以表格形式展示出來(lái),它們可能被多次在不同的章節(jié)中引用; 定理是浮動(dòng)的, 這里定理是指與之相關(guān)的一大類(lèi),包括常用的定理、引理、推論、命題、例子等,它們?cè)谖闹幸矔?huì)被反復(fù)引用; 文本可以設(shè)置浮動(dòng)標(biāo)簽后被引用,最為常見(jiàn)的是圖形與表格的題圖(caption)通過(guò)文本方式來(lái)引用; 文獻(xiàn)是浮動(dòng)的,這在是談及前人的已有工作、成果比較或進(jìn)行綜述時(shí)經(jīng)常要引用大量已經(jīng)發(fā)表的論文、圖書(shū)、會(huì)議報(bào)告等.
TEXTEX 有一套成熟的浮動(dòng)對(duì)象的排版方式,通過(guò)給浮動(dòng)對(duì)象打標(biāo)簽(label),然后引用(ref), Bookdown思路一樣,但比 TEXTEX 的處理稍復(fù)雜些(可能因不習(xí)慣引起)。我們?cè)诤竺嬲鹿?jié)中分別舉例說(shuō)明。
1.3 統(tǒng)計(jì)數(shù)據(jù)分析類(lèi)圖書(shū)模板的選擇
統(tǒng)計(jì)數(shù)據(jù)分析類(lèi)圖書(shū)既有理論或原理的講解,又會(huì)有一些案例分析,包括這些案例分析實(shí)現(xiàn)的代碼。我們可以考慮的模板主要有三種類(lèi)型。
1.3.1 基于純 TEXTEX 模板
全世界 90%的書(shū)是由 TEX 排版的,包括碩士和博士畢業(yè)論文模板,這要感謝鼻祖 Knuth!開(kāi)源成就了 TEX!
如果僅僅是統(tǒng)計(jì)理論方面的書(shū)集,這顯然是最好的選擇,因?yàn)楦哔|(zhì)量公式的排版離不開(kāi) TEXTEX. 基于 TEXTEX 的排版存在三個(gè)明顯的缺陷或不足:
大量的 TEXTEX 命令需要記憶; 對(duì)于代碼的排版非常不便,特別是 R或Python代碼執(zhí)行后的輸出,尤其是圖形與表格;代碼以 listing等包來(lái)呈現(xiàn), 無(wú)法實(shí)時(shí)呈現(xiàn)代碼運(yùn)行的結(jié)果,不符合文學(xué)化編程的要求.
1.3.2 Rmarkdown 與 TEXTEX 的結(jié)合
數(shù)據(jù)科學(xué)時(shí)代更注重文學(xué)化統(tǒng)計(jì)編程,代碼伴隨是這類(lèi)圖書(shū)的特點(diǎn),自 Springer 出版R系列統(tǒng)計(jì)圖書(shū)后,這種風(fēng)格成為新趨勢(shì),大大方便了數(shù)據(jù)科學(xué)愛(ài)好者“便學(xué)習(xí)便練習(xí)”的學(xué)習(xí)方式。
針對(duì)代碼伴隨,早期對(duì)這類(lèi)圖書(shū)有二個(gè)解決方案:
Sweave/knitr + R
本質(zhì)上它是在 TEXTEX 嵌入R代碼塊,并由R在后臺(tái)運(yùn)行后將結(jié)果也嵌入到 TEXTEX 中,再由 TEXTEX 的編譯引擎生成pdf。這個(gè)方案的基本沿用 TEXTEX 的方式,它僅解決了上面提到的第二個(gè)問(wèn)題。在數(shù)據(jù)科學(xué)時(shí)代,報(bào)告的快速生成成為新的要求,效率優(yōu)先!隨著knitr的出現(xiàn)Sweave退出舞臺(tái).
Rmarkdown+Mathjax/TEXTEX
Markdown作為一種輕量級(jí)的標(biāo)記語(yǔ)言成為網(wǎng)頁(yè)作為文字主要載體的互聯(lián)網(wǎng)時(shí)代首先的寫(xiě)作工作,但它顯然不適合數(shù)學(xué)與統(tǒng)計(jì)類(lèi)論文或圖書(shū)的撰寫(xiě),但knitr和pandoc的出現(xiàn)使不同風(fēng)格的內(nèi)容整合與轉(zhuǎn)換成為可能,而不同風(fēng)格的內(nèi)容各有善長(zhǎng)的工具實(shí)現(xiàn),作為統(tǒng)計(jì)類(lèi)專(zhuān)業(yè)論文或圖書(shū)類(lèi)文檔主要的內(nèi)容有:
文字, 由 markdown 完成 公式,由 TEXTEX 完成 代碼,由 R(或 Python) 完成
要說(shuō)明的是,在網(wǎng)頁(yè)端,TEXTEX 的實(shí)現(xiàn)可由Mathjax來(lái)完或渲染(轉(zhuǎn)化或生成標(biāo)準(zhǔn)的公式),見(jiàn)第4[11]章說(shuō)明。
隨著Rstudio的越來(lái)越成熟與強(qiáng)大(得益于許多優(yōu)秀包的出現(xiàn),如knitr, kableExtra), Rstudio不僅是一個(gè)很好的代碼編輯器(Eidtor), 也是一個(gè)非常好的集成開(kāi)發(fā)環(huán)境(IDE),同時(shí)正在成為一個(gè)非常優(yōu)秀的論文、幻燈片及圖書(shū)等撰寫(xiě)與出版系統(tǒng)(PUB)。后者的基本流程是
由 rmd文件通過(guò)knitr完成初步集成由 pandoc完成由rmd向md的轉(zhuǎn)化與融合由 pandoc完成由md轉(zhuǎn)化為 TEXTEX, 并由laTeX編譯生成pdf(形式多樣!)或由 pandoc由md轉(zhuǎn)化為html, 其中的數(shù)學(xué)公式由Mathjax完成渲染.
1.3.3 Rmarkdown向Bookdown過(guò)渡
在科技高度發(fā)達(dá)的互聯(lián)系時(shí)代,讀者使用的媒介基本有三類(lèi):較為專(zhuān)業(yè)的電腦,較為輕便的平板(電腦)和全功能的智能手機(jī)。前者以pdf類(lèi)圖書(shū)為主呈現(xiàn)給讀者,同時(shí)可以完成標(biāo)注等工作;后者以文字型的電子圖書(shū)為主,消磨時(shí)間為主;而平板的使用者逐漸成為電子類(lèi)圖書(shū)的新勢(shì)力,包括pdf和epub之類(lèi)的電子書(shū)。 Bookdown注重不同類(lèi)型讀者的媒體使用的差異,并很好地實(shí)現(xiàn)統(tǒng)一編寫(xiě)與差異化輸出。目前Bookdown可以生成三類(lèi)圖書(shū):
gitbook,可自由出版在git pages上epub, 發(fā)表到大量的電子圖書(shū)平臺(tái)上pdf, 正規(guī)的圖書(shū)出版公司以電子或紙質(zhì)形式出版
往期精品(點(diǎn)擊圖片直達(dá)文字對(duì)應(yīng)教程)
后臺(tái)回復(fù)“生信寶典福利第一波”或點(diǎn)擊閱讀原文獲取教程合集




























