这是对的后续问题
this
. 我知道,在knitr生成的PDF中交叉引用图形和表格的规范方法是使用
bookdown::pdf_document2
(详细信息
here
).
这太棒了!
但是假设我想将Rmd发送给一个没有
预订
已安装?如何确保文档在以下环境中进行渲染:
预订
尚未安装?我希望所有内容都包含在一个Rmd文件中。文档的使用者可能是以前很少或没有R经验的人,并且刚刚安装了R和RStudio,但没有安装任何软件包。我如何确保如果他们点击
编织
他们会得到带有交叉引用的PDF?或者,如果
Binder
或者类似的方法提供了执行(或者更好的是,编织到PDF)Rmd文件的方法,与Jupyter笔记本电脑的执行方法大致相同——我希望能够将以自动方式呈现PDF所需的一切绑定到Rmd文件本身。
示例文档如下所示:
---
title: "Cross-refs test"
author: "Me"
date: "13 December 2017"
output:
bookdown::pdf_document2:
citation_package: natbib
fig_caption: yes
keep_tex: yes
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## Title
\begin{equation}
f\left(k\right)=\binom{n}{k}p^k\left(1-p\right)^{n-k} \label{eq:binom}
\end{equation}
You may refer to it using `\@ref(eq:binom)`, e.g., see Equation \@ref(eq:binom).
因此,如果这个Rmd文件是由脑死亡僵尸或活页夹下载和编织的,我如何确保不会发生这种情况:
Error in loadNamespace(name) : there is no package called 'bookdown'
Calls: <Anonymous> ... tryCatch -> tryCatchList -> tryCatchOne -> <Anonymous>
Execution halted
我不能假设我的Rmd的消费者会知道在这种情况下该做什么,也不能假设我不控制的任何自动过程会从Rmd中呈现PDF,它会从某个地方的回购中获取(就像Binder所做的那样)。
如果有
不
交叉引用,我可以指定
pdf_document
作为输出格式,RStudio将读取YAML和if
knitr公司
和
R标记
如果未安装,则会自动触发安装(用户/脑死亡僵尸只需单击“确定”即可接受安装),并呈现PDF。因此,如果缺少这两个包:没问题,至少在使用RStudio时是这样。用户获取Rmd,安装R和Rstudio,编织Rmd,然后出现PDF。如果使用
预订
获取交叉引用。
似乎YAML是在执行R代码之前解释的,因此与
this
用于打印文档中的当前时间(
date: "`r Sys.time()`"
)不起作用。否则,我会
r install.packages("bookdown")
在这里
那么,有没有一种方法可以在不使用bookdown的情况下进行交互引用,但要像使用bookdown一样简单优雅,或者有没有某种方法可以触发knitr安装bookdown,以便在遇到这种情况时渲染不会崩溃
bookdown::pdf_文档2
?
基本上,我想要的是在一个编织的PDF中进行交叉引用,并尽可能少地进行用户干预——因为我的用户可能是一个脑死亡的僵尸或机器人。
我想避免硬编码交叉引用。我宁愿不使用乳胶。如果可能的话,只需要纯R Markdown和一些knitr魔法。