13.5 Bookdown包的内容交叉引用
Rmarkdown包不支持正文内容的交叉引用,Bookdown包针对这一问题进行了优化改进。Bookdown包支持的正文交叉引用种类繁多,包括图片、表格、公式、定理、章节等,极大方便了用户对长文档内容的跨域查阅。
Rmarkdown包生成图表有两种方式:直接插入图表;执行代码块生成图表。采用第二种方式生成图表时,每个代码块可以设置一个标签(lable),在正文中交叉引用该图表时,默认的引用方式为“\@ref(prefix:lable)”,即只需在lable前添加指定引用对象类型的前缀即可。例如:若引用图片,则使用“\@ref(fig:lable)”;若引用表格,则使用“\@ref(tab:lable)”。
下面对图片、表格、公式的交叉引用方式进行说明。
1.图片的交叉引用
用户如果希望使用Bookdown包在正文中交叉引用插入的图片或者由代码块生成的图片,可以参考使用如下的代码块设置:
在此基础上,如果希望在正文中交叉引用该图片,可以在正文引用位置输入“\@ref(fig:figurelable)”,那么文档编译时将对应用的图片自动编号,同时也将对图片标题自动添补“图1”等题注。值得注意的是,在对图片标签命名时,最好使用英文名称,同时英文名称里不允许有下划线,建议使用图表标题的英文缩写,如果有多个相似内容的标题需要命名,可以在英文名称后加上数字序号予以区分。
如果用户发现使用Bookdown包输出的图表标签是“Figure 1”,而不是想要的“图1”,建议采用如下方法解决。
在当前扩展名为Rmd的文件目录下找到_bookdown.yml文件并打开,检查language参数,按照如下示例修改参数:
通常而言,若用户使用本书推荐的中文Bookdown模板,则不会存在上述问题。初学者在不熟悉Bookdown包的各项功能前,要尽量使用中英文Bookdown模板编排长文档,从而避免不必要的错误,提升工作效率。
2.表格的交叉引用
Bookdown包中的表格交叉引用与图片交叉引用类似,也是分两步完成。
利用如下代码块设置完成表格的标签生成:
在此基础上,用户如果希望在正文中交叉引用该表格,可以在正文引用位置输入“\@ref(tab:tablelable)”,文档编译时将对应用的表格自动编号,同时也将对表格标题自动添补“表1”等题注。在Bookdown包中,建议使用Knitr包中的kable()函数或者DT包输出表格,这样不仅操作较为简便,也可以获得不错的显示效果。
3.公式的交叉引用
Bookdown包要实现公式的交叉引用,需要先在公式环境中输入“(\#eq:label)”,之后在正文需要引用的位置输入“\@ref(eq:binom)”。示例代码及输出结果(如图13-4所示)如下:
图13-4 公式交叉引用示例