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的文件

  • 使用代码编译

在命令窗口运行以下代码

bookdown::render_book("index.Rmd", 
  output_format="bookdown::gitbook", encoding="UTF-8")

成功编译后,结果会默认保存在 _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{*}
$$

编译后显示: \[ 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}\]