- 参考:
- 1.4 Two rendering approaches | bookdown: Authoring Books and Technical Documents with R Markdown[1]
前言
发现一些不错的技巧,作为小小的分享。
两种bookdown作用形式
合并再编织(M-K):将不同的Rmd文件(不同章节)合并到一个Rmd 文件中(Merge),再将他们输出成一本书(knit)。
或是,编织再合并(K-M):将不同的Rmd文件先各自输出(knit),接着由bookdown 将他们合并成一本书(merge)。
这二者看似差别不大,实际上不同的设定却对最终结果有很大的影响。
M-K:
- 不同章节中的R 环境,会继承到后续章节(按照代码顺序),包括使用的包、变量等等;
- 不同章节中的代码块不可以有相同的名称;
- 你可以自由管理Rmd 文件的位置,比如放在工作目录的其中某个子目录下。
K-M:
- 各Rmd 代码彼此独立,互相的变量、环境中的函数、加载的包,互不干扰;
- 不同章节中的代码块可以有相同的名称;
- 必须将所有章节对应的Rmd 文件放在工作目录中。
默认下的bookdown 采用的是M-K 模式。
比如我们在编译时,就是先生成一个大的_main.Rmd
文件,其集合了所有的Rmd 文件代码:
如果你希望切换到K-M 模式:
new_session = TRUE
when callingrender_book()
- set
new_session: yes
ornew_session: true
in the configuration file_bookdown.yml
.
保存缓存
有时候可能有的代码块需要非常耗时的计算。
而有时候为了确保最终输出的书本没有排版问题,需要一遍遍knit 代码。这时候可以在代码块设置:
代码语言:javascript复制```{r important-computing, cache=TRUE}
预览与实时预览书本
preview_chapter() 可以让你仅仅输出某一章节的内容。
serve_book() 可以让你获得一个动态变化的html bookdown 界面,可以让你实时预览因为代码改变,发生的页面变化。
比如:
代码语言:javascript复制bookdown::preview_chapter("chap-name.Rmd",
output_format="bookdown::gitbook", encoding="UTF-8")
参考资料
[1]
1.4 Two rendering approaches | bookdown: Authoring Books and Technical Documents with R Markdown: https://bookdown.org/yihui/bookdown/new-session.html