使用R BookDown 来写书 - PDF, EPUB和Web版。还是算了吧!

前面一文记录:筛选写书工具的艰苦经历简要记录的自己尝试几种工具的艰苦努力,最后的结论是"Word + Calibre" 制造常用的电子书(DOCX, PDF, EPUB,MOBI和AZW3等)还是够用的。

如果想要制作 Web 书,甚至是需要算法的动态展示?自己制作本地的Jupyter Book简单介绍了如何使用 Jupyter Book createbuild 生成Web 书。在那里也提到了我感兴趣的支持数据分析不错的工具 - R 和 RStudio,围绕R也有创建Web 书的技术。

R BookDown 编纂Web 书

自己制作本地的Jupyter Book中展示了几本谢益辉(YiHui Xie)[GitHub,Web]编纂的围绕R制作 PDF, EPUB和Web书的几本书,想着自己也有计划完成基于R的数据分析册子,所以,就搜罗资料实践了下如何基于 R BookDown 生成书的技巧。

R Studio 编纂 BookDown 书就够了 (不依赖*nix 操作系统环境)

意思是,虽然R语言包是RStudio 的底层技术,不过,有了 RStudio,其实就是够了:不管是使用R来编程,还是使用BookDown 来写R语言交互的书。

之所以点出来这一点,是因为我在R Project 的代码里加载了所需要的包,但是,R语言包和RStudio 的R语言包二者是相互独立的。

一些依赖的包还是换成国内源吧

一如很多开源软件的安装,访问国外是很耗时的,还是换成国内的源吧。

image
image

在 RStudio 中创建 Bookdown project 很简单

image
image

只是编译(Build All)的时候,有些包要依赖 – rmarkdown, caTools等。而这些包还依赖 R 的版本

我最开始安装的是 R3.5.2,在Build All 时就出现需要 caTools 1.14

image

查了下,caTools 有要求R的版本高 – 只好重新安装最新的 R 3.6.3

须重启 RStudio (会自动换成R 3.6.3环境) – 安装那些包即可

image

安装了rmarkdown后,就少了很多包

ounter(lineounter(line> install.packages('rmarkdown')also installing the dependencies ‘highr’, ‘markdown’, ‘digest’, ‘Rcpp’, ‘rlang’, ‘glue’, ‘magrittr’, ‘stringi’, ‘knitr’, ‘yaml’, ‘htmltools’, ‘evaluate’, ‘base64enc’, ‘jsonlite’, ‘mime’, ‘tinytex’, ‘xfun’, ‘stringr’
image

按照提示,在 RStudio 的 Console 里安装相应的包即可

ounter(lineounter(lineounter(lineounter(lineinstall.packages('caTools')install.packages('bitops')install.packages('rprojroot')install.packages('bookdown')
image

再次build All 就可以了

image
image

生成了 HTML, PDF 和 EPUB。效果还是不错的。

image
image
image

对照Rmd文本和生成的页面,看出,页面中有Rmd中嵌入的R代码的结果图

01-intro.Rmd

ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line# Introduction {#intro}You can label chapter and section titles using `{#label}` after them, e.g., we can reference Chapter \@ref(intro). If you do not manually label them, there will be automatic labels anyway, e.g., Chapter \@ref(methods).Figures and tables with captions will be placed in `figure` and `table` environments, respectively.​```{r nice-fig, fig.cap='Here is a nice figure!', out.width='80%', fig.asp=.75, fig.align='center'}par(mar = c(4, 4, .1, .1))plot(pressure, type = 'b', pch = 19)​```Reference a figure by its code chunk label with the `fig:` prefix, e.g., see Figure \@ref(fig:nice-fig). Similarly, you can reference tables generated from `knitr::kable()`, e.g., see Table \@ref(tab:nice-tab).​```{r nice-tab, tidy=FALSE}knitr::kable(  head(iris, 20), caption = 'Here is a nice table!',  booktabs = TRUE)​```You can write citations, too. For example, we are using the **bookdown** package [@R-bookdown] in this sample book, which was built on top of R Markdown and **knitr** [@xie2015].
image

在Web 版上也能显示。

image

不过,Bookdown 生成的HTML确实不能交互了 – Jupyter Book 则借助 Jupyter Notebook 而能交互

Build 一本实际的R BookDown书的经历 - 麻烦程度绝对不比 写书低

想榜样学习,应该算是捷径吧。就想着找一个 R BookDown 写的书的源代码,然后自己Build 一下:既能通过阅读源代码而学习如何使用R BookDown 编纂实际的书的技巧;又能真实体验一下使用R Bookdown的麻烦程度。还真能找到这样的书。

R Bookdown的书站:https://bookdown.org/

image
image

R For Data Science 书 - 感谢Garrett Grolemund, Hadley Wickham

在 Google 中输入 "R For Data Science Github",幸运地找到这本书的源码。

https://github.com/hadley/r4ds

https://r4ds.had.co.nz/是此书的Web 版本。

image

Build 此书 - 痛苦也就开始了!

类似前面的叙述,在RStudio 中Build All 此书。遇到了很多的问题,到最后也没有成功!痛苦不堪!

缺包问题很多,不过解决也简单 - install.packages(xxx)即可

image

在右上的Build 标签页中能看出是缺少dplyr,那么,在左下的Console 中install.packages('dplyr')即可:当然,在国内的话还是修改为国内源为宜

在 Build 消息框里面的汉字显示有问题,不过,可以定位到相应的代码处,点击红色方框中的小绿三角,就运行了那个代码。在Console 中就显示了错误信息的中文

image

还有一个 typo - “var1able”:应该是“variable”

image

过程中有一次生成了 HTML页面 – 虽然是分在两个目录(还没有整个合在一起),不过,已经可以在HTML中正确嵌入图片了。不过,整个生成过程不成功的(前面bookdown 例子,生成了 PDF, HTML 和EPUB的)。<u>最终,也不清楚为什么不行,为什么不成功</u>

image

将 HTML页面和那些包含图片的目录手工合在一起,然后查看HTML – 正确嵌入了 图片。

image

即便是安装了那些包,以及改了typo,还是不能生产PDF,也并没有 EPUB (应该是EPUB的build 在 PDF之后,所以,PDF不过,后面的 EPUB也没有了) – <u>说是 GHC 的问题</u>

image

开始以为是 pandoc.exe 的问题,将错误信息在Google 搜索,没有效果

  • Pandoc.exe internal error closure type xxxx

  • GHC version 8.6.5 for x86_64_unknown_mingw32

下一个错误我开始以为是mingW32 的问题,找了很多mingW32 的工具包(RTools, 专门的mingw32, R和RStudio 自带的 mingW32等等),都没有用

还按照 GHC信息找到关联的 Haskell,安装并PATH中添加了路径,也没有用

image
image

最后,确定还真是 没有 GHC 8.6.5 程序的问题!

image
image
image
image
image
image

要重新启动 RStudio,GHC才有效

image
image

可还是不行 – 导出的 有问题!

image

查看 _main.log文件:不明所以

甚至想试试 TexMaker 使用XeLaTeX调试一下 _main.tex,更是一头雾水!

image

甚至试了 更改 RStudio 中的 LaTeX 配置,没有用的

image

虽然没顺利结束,其实生成了 HTML 和 PDF 了 – EPUB 因为在PDF之后就被挡住了

HTML

image
image

PDF

image
image
image

PDF看上去也还不错,不过。。。排版问题还是很多!图的大小,很多warning

image
image
image

算是总结吧

到目前为止,写书和论文的工具真是用了很多了,有如下的总结:

写书 - PDF, EPUB, AZW3, MOBI

我觉得还是 Word + Calibre 就可以了。

  • 活用 Word 的大纲模式,就能够编纂页数很多的书(我编纂过仅2000页的书,没有问题)
  • 要解决很多自动问题:图、表和公式的自动编码和引用,参考文献的自动引用等(已解决,另文撰述)
  • Word 本身对PDF 的支持就很不错。
  • 使用Calibre 导入 Word 文档,经过一些简单的设置就能够导出格式不错的EPUB,AZW3, MOBI等(参看)

不足的就是不能生成算法交互的Web。

写书 - 算法交互的Web书

觉得 Jupyter NoteBook 就可以了:能够支持很多语言。要做的就是讲对应语言的Kernel 加载进 Jupyter Notebook。

论文 - Word + LaTeX

  • 中文论文,还是使用Word 吧。主要的挑战就是要解决图、表、公式的自动编号和引用,以及参考文献的格式和引用。
  • 英文论文,自然是 不可。

想要算法交互展示?那还是使用 Jupyter NoteBook吧。

其他

Jupyter 也支持 R 语言(另文)

R PageDown就算了吧(想试试的自己去试试吧)

再次推荐去看看谢益辉(YiHui XIE)的博客吧

image
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容