2 Bookdown笔记
2.1 介绍
本章目前的学习主要依据李东风《统计软件教程》中“用bookdown制作图书”一节。
2.2 index.Rmd的设置
index.Rmd文件通常用来生成一本bookdown书的书皮(也可以写个序言啥的),在开头的YAML元数据部分可以对书的名字、作者、日期等进行设置
上栗子:
---
title: "学习笔记" # 书名
author: "吴小胖" # 作者
date: "`r Sys.Date()`" # 日期(Sys.Date()显示系统日期)
site: bookdown::bookdown_site # 很重要必带,使RStudio软件能辨认这是个bookdown项目
output: bookdown::gitbook # 默认的输出格式
documentclass: book # 借助LaTeX编译PDF格式指定LaTeX的模板
bibliography: [myrefs.bib] # 指定.bib格式的文献数据库
biblio-style: apa
link-citations: yes
description: "描述这书是干嘛的,但其实并不会出现在生成的书里"
---
2.3 书的编译
以下编译步骤针对gitbook格式,生成的书为HTML网页格式
问:还能生成啥格式?
答:PDF
问:为啥不生成PDF?
答:PDF太鸡毛,容不得一点点错,对中文和数学公式都不友好…
(耐心好的同学请自行前往《统计软件教程》学习)
2.3.1 打印整本
- RStudio手动编译
1.检查index.Rmd 或_bookdown.yml中是否设置了site: bookdown::bookdown_site(没有的赶紧加)
2.对于新书的project,应先设置左上窗口Build,步骤参下(旧书或右上窗口已有Build的可跳过)
Build —> Configure Build Tools
Project build tools 设置为 Website
选择需要打印的书的路径
3.依次点击右上的 Build —> Build Book —> bookdown::gitbook 便可成书(HTML格式)
通常编译完成后默认浏览器会自动弹出预览窗口,后续想要查看请前往_book子目录下点击带.html的文件
- 使用代码编译
在命令窗口运行以下代码
成功编译后,结果会默认保存在 _book 子目录中(在_bookdown.yml中设置output_dir项可以把结果存在其它子目录)
2.3.2 编译单章
书长了以后,编译整本会花费很长时间,可以仅编译gitbook格式的一章,修改满意后再编译整本书。
仅编译一章也需要所有的.Rmd文件都是已经编译过一遍的,新增的Rmd文件和图形文件会使得编译单章出错, 每次新增了Rmd文件和图形文件都应该重新编译整本书,但是旧Rmd文件修改内容后没必要重新编译整本书, 可以仅编译单章。
编译单章,请在命令窗口运行以下代码
bookdown::preview_chapter("1001-chapter01.Rmd", # 替换为想要编译的章节.Rmd的文件名
output_format="bookdown::gitbook", encoding="UTF-8")
一个小小的疑惑
点击单个.Rmd 文件的“蓝色毛线球”knit也能编译,但规则还没摸透
感觉是整本编译,但只更新当前.Rmd文件的内容
2.4 章节结构
项目中每个.Rmd文件为一章。每个.Rmd文件的第一行,应用如下格式:
# 章节标题 {#chapter_name}
写明章节标题和章标签。其中,章标签为{}里的内容,会作为Knit生成的HTML文件名,通常用英文、数字、减号命名且同一本书勿重复。
各章节内容不要太长,否则编译预览很慢。 内容相近的章节可以归为一个“部分”。应用如下格式:
# (PART) “部分”标题 {-}
# 章节标题 {#chapter_name}
附录章节的格式如下:
# (APPENDIX) 附录 {-}
2.5 交叉引用
若想在书的某个章节引用同本书其他章节的内容时,流程如下:
1.在想要引用的章节标题末尾空格后加标签,标签格式{#label}
。
注:标签的命名应使用英文、数字、减号,且整本书不要有重复的标签。为避免不同章节使用重复标签, 可以用章节名+标签名的方式命名标签{#chapter01-label}
。
再注:可以尝试养成每个章节一至三级标题都有自定义标签的好习惯。
2.有了标签后,便可采取§\@ref(label)
或[链接文本](#label)
的格式进行引用,其中label
是想要引用章节对应的标签名。
举个栗:
手册里曾有一章叫Markdown笔记,此章有一节叫Markdown格式,此节对应的标签为Markdown-form。
现在我想要调它,于是输入了:§\@ref(Markdown-form)
or [Markdown格式](#Markdown-form)
。
编译后的书里便显示了:
§1.2
or
Markdown格式
(点击即可跳转到对应章节)
2.6 编号
2.6.1 公式编号
此节只有公式编号教程,想看如何在Markdown文件中插入LaTeX格式的数学公式的朋友请移步数学公式
- 人为编号
编译后显示: \[ y=f(x) \tag{*} \]
- 自动编号
在公式的末尾或者一行公式的
\\
换行符之前,写入(\#eq:mylabel)
f(x) = f(x_0) + f’(x_0)(x-x_0) + o(x-x_0) \tag{2.1} \[\begin{align} f(x) =& \sum_{k=0}^\infty \frac{1}{k!} x^k \tag{2.2} \\ = e^x \tag{2.3} \end{align}\]