- 参考:
- 23 用bookdown制作图书 | R语言教程 (pku.edu.cn)[1]
- Learn bookdown • bookdown (rstudio.com)[2]
前言
虽然我的笔记非常的有体系,但我内心其实还是有一个小小的冲动——写一本书。
当然我肯定是不敢去出版的,掂量掂量我自己;倒贴的买卖,我也不傻啊。
但如果出版成电子的格式呢?当然可以啦。开源的事情,我最喜欢了。
比如李东风的这本:23 用bookdown制作图书 | R语言教程 (pku.edu.cn)[3]
而我的编程语言也是基于R 以及Rstudio的开发,因此bookdown 就成了我的不二选择了。
这里李东风老师给了一个适配中文的模板:https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/bookdown-template-v0-6.zip
还有官方模板:https://github.com/rstudio/bookdown-demo
1-什么是bookdown
是继knitr和rmarkdown扩展包之后, 另一个增强markdown格式的扩展, 使得Rmd格式可以支持公式、定理、图表自动编号和引用、链接, 文献引用和链接等适用于编写书籍的功能。
如果说gitbook 之于md:https://www.gitbook.com
以及其他:Tufte CSS (http://edwardtufte.github.io/tufte-css/), and Tufte-LaTeX (https://tufte-latex.github.io/tufte-latex/)
那么bookdown 之于Rmd,只会比他们更好用。
和一般的自动化流程一下[[02-可重复工作执行简明指南(上)]],bookdown 的创作,我们也要养成一个好习惯,创建一个目录,用Rproj 来管理这个目录下的bookdown 内容。
2-我的第一本book
如果你读过xieyihui 的bookdown 书,或者其他人对于这个包的其他细致的介绍,可能刚刚上手会有些摸不着头脑。
这里我们先从最简单的bookdown 入手。
你可以简单地将bookdown 理解成Rmd 的升级,它可以将多个不同的Rmd 整合,以生成一本book。
最简单的bookdown 内容可以仅仅由Rmd 文件组成:
- index.Rmd 文件,书写book的基本配置,以及book 的首页介绍;
- 书本的不同章节,以
xx-name.Rmd
比如01-CapterOne.Rmd
……
2.1-index
一般命名为index.Rmd
,你可以理解为一个关于书的readme文件,最终将是这本书的封面。
比如我的index为:
代码语言:javascript复制---
title: "测试"
author: "Peng"
date: "`r format(Sys.time(), '%d %B, %Y')`"
description: "这是用R的bookdown功能制作中文图书的模板,输出格式为bookdown::gitbook和bookdown::pdf_book."
site: bookdown::bookdown_site
output: bookdown::gitbook
documentclass: book
classoption: oneside
link-citations: yes
---
#```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
#```
# 开始之前
这是本书的封面。
这是我的第一个测试,时间:`r date()`
上面的setup 代码块为了便于md 文件显示,我将反问号打了注释。
你可以将这个index 理解为对所有Rmd 的整体配置,一劳永逸。
除此之外,它还是你的首页文档,第一章,你可以在上面写上本该是readme 的内容,比如:
2.2-其他rmd
忽略一般的Rmd 头部配置即可。
2.3-其他细节
将你的章节按照顺序编辑:
你的Rmd 名称并非是你的目录上的章节名称。给每个Rmd 文件仅仅配置一个#
标题,这个标题名也就是你的章节名。
此外,默认下bookdown 的作用模式为合并再编织(M-K):将不同的Rmd文件(不同章节)合并到一个Rmd 文件中(Merge),再将他们输出成一本书(knit)。
- 不同章节中的R 环境,会继承到后续章节(按照代码顺序),包括使用的包、变量等等;
- 不同章节中的代码块不可以有相同的名称;
- 你可以自由管理Rmd 文件的位置,比如放在工作目录的其中某个子目录下。
关于这一部分,后面我们还会详细介绍。
此外关于索引,rmd 对于这个检测也比较严格,需要离上一行保持一行间隔:
否则无法被正常识别:
此外,引用也需要严格的使用>
标注:
2.4-开始编译
使用Rstudio,在index.Rmd
或者_bookdown.yml
中设置site: bookdown::bookdown_site
后, RStudio就能识别这个项目是一个bookdown项目, 这时RStudio会有一个Build窗格,其中有“Build book”快捷图标, 从下拉菜单中选择一个输出格式(包括gitbook、pdf_book、epub_book), 就可以编译整本书。
另一种办法是在命令窗口用如下命令编译(以输出gitbook为例):
代码语言:javascript复制bookdown::render_book("index.Rmd",
output_format="bookdown::gitbook", encoding="UTF-8")
这里建议命令行的编译方法,因为使用Rstudio 有子界面无法显示的可能。
2.5-输出结果
编译结果默认保存在_book
子目录中 。你也可以在_bookdown.yml
中设置output_dir
项改为其它子目录。(后面会说到)
编译整本书为pdf_book格式时,如果成功编译, 也会弹出一个PDF预览窗口。可以在_book
子目录中找到这个PDF文件。
比如:
有些奇怪的是,如果是用命令行在linux 下编译bookdown,有时候打开会是这样的:
至于原因为何,我也不甚清楚。怀疑和这个json文件有关:
后续内容
个人觉得通过R bookdown 的学习,可以作为一个涉猎html/css 网页设计的契机,包括其本身更加细致的内容,我以后也会继续更新。
参考资料
[1]
23 用bookdown制作图书 | R语言教程 (pku.edu.cn): https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/bookdown.html
[2]
Learn bookdown • bookdown (rstudio.com): https://pkgs.rstudio.com/bookdown/articles/bookdown.html
[3]
23 用bookdown制作图书 | R语言教程 (pku.edu.cn): https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/bookdown.html