94-R分享07-我的第一本bookdown写的书

2022-04-05 14:52:57 浏览数 (1)

  • 参考:
    • 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

0 人点赞