如何在 rmarkdown 中交叉引用表格和图表?
how to cross reference tables and plots in rmarkdown?
我正在使用以下模板
---
title: "Nice try buddy"
author: "SpaceMan"
date: "13 December 2057"
output:
bookdown::pdf_document2
header-includes:
- \usepackage{booktabs}
- \usepackage{longtable}
- \usepackage{array}
- \usepackage{multirow}
- \usepackage[table]{xcolor}
- \usepackage{wrapfig}
- \usepackage{float}
- \usepackage{colortbl}
- \usepackage{pdflscape}
- \usepackage{tabu}
- \usepackage{threeparttable}
- \usepackage{threeparttablex}
- \usepackage[normalem]{ulem}
- \usepackage{makecell}
---
---
references:
- id: fenner2012a
title: One-click science marketing
container-title: Nature Materials
volume: 11
---
```{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).
and not a nice citation! @fenner2012a
## Including Tables
You can also embed tables, for example: \@ref(tab:tw)
```{r tw, echo=FALSE}
mytable
```
## References
其中 mytable
存储在 R 会话中并由
生成
mytable <- head(cars) %>% kable(format = "latex",
booktabs = T,
caption = "Demo Table",
escape = F) %>%
kable_styling(latex_options = 'HOLD_position')
现在,这应该可以工作,但是当我使用
编织文档时
rmarkdown::render('C:\Users\john\Documents\bbv.Rmd')
- table 的
cross-reference
不存在!我只看到 ??
- 并且 table 有这个奇怪的
#tab
东西 - 如何摆脱它?
- 目录在这里,虽然我没有要求它
有解决这些问题的想法吗?
谢谢!
编辑:奇怪的 #tab
东西在重启后消失了。
问题是您在 R 块之外使用它是在违背 kable
的意图:
The kable()
function will automatically generate a label for a table environment, which is the prefix tab:
plus the chunk label.
https://bookdown.org/yihui/bookdown/tables.html
所以下面的解决方法绝对是有问题的。将文件 foo.Rmd
与
一起使用
---
output:
bookdown::pdf_document2:
toc: no
header-includes:
- \usepackage{float}
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## Including Tables
You can also embed tables, for example: \@ref(tab:tw)
```{r tw, echo=FALSE}
mytable
```
You can also embed tables, for example: \@ref(tab:tw2)
```{r tw2, echo=FALSE}
mytable2
```
Referencing images is easier: \@ref(fig:plt)
```{r plt, echo=FALSE, fig.cap = 'hello', fig.height=3}
myplot
```
可以用第二个文件处理这个文件foo.R
:
library(knitr)
library(kableExtra)
# add the label to the options that would normally be populated from the chunk options
opts_current$append(list(label = "tw"))
mytable <- head(cars) %>% kable(format = "latex",
booktabs = T,
caption = "Demo Table",
escape = F) %>%
kable_styling(latex_options = 'HOLD_position')
opts_current$restore()
opts_current$append(list(label = "tw2"))
mytable2 <- tail(cars) %>% kable(format = "latex",
booktabs = T,
caption = "Demo Table",
escape = F) %>%
kable_styling(latex_options = 'HOLD_position')
opts_current$restore()
myplot <- ggplot(cars, aes(x = dist, y = speed)) + geom_point()
rmarkdown::render("foo.Rmd")
原则上,你也可以在R提示符下执行这些命令,但我尽量不直接使用提示符。顺便说一句,我没有得到你的代码的 (#tab)
输出。
但是,我认为不违背 kable
的工作原理更有意义。我可以理解将数据操作与表示分离是有意义的。但是,从我的角度来看,创建 table 是演示。因此,我不会在外部创建 table,而是在外部创建数据。为了具体化,让我们使用一个文件 bar.Rmd
:
---
output:
bookdown::pdf_document2:
toc: no
header-includes:
- \usepackage{float}
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(kableExtra)
```
## Including Tables
You can also embed tables, for example: \@ref(tab:tw)
```{r tw, echo=FALSE}
mydata %>% kable(format = "latex",
booktabs = T,
caption = "Demo Table",
escape = F) %>%
kable_styling(latex_options = 'HOLD_position')
```
连同一个文件bar.R
:
# insert data processing here
mydata <- head(cars)
rmarkdown::render("bar.Rmd")
这给了我相同的输出,并且数据处理(最初!)与演示文稿分开。
我正在使用以下模板
---
title: "Nice try buddy"
author: "SpaceMan"
date: "13 December 2057"
output:
bookdown::pdf_document2
header-includes:
- \usepackage{booktabs}
- \usepackage{longtable}
- \usepackage{array}
- \usepackage{multirow}
- \usepackage[table]{xcolor}
- \usepackage{wrapfig}
- \usepackage{float}
- \usepackage{colortbl}
- \usepackage{pdflscape}
- \usepackage{tabu}
- \usepackage{threeparttable}
- \usepackage{threeparttablex}
- \usepackage[normalem]{ulem}
- \usepackage{makecell}
---
---
references:
- id: fenner2012a
title: One-click science marketing
container-title: Nature Materials
volume: 11
---
```{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).
and not a nice citation! @fenner2012a
## Including Tables
You can also embed tables, for example: \@ref(tab:tw)
```{r tw, echo=FALSE}
mytable
```
## References
其中 mytable
存储在 R 会话中并由
mytable <- head(cars) %>% kable(format = "latex",
booktabs = T,
caption = "Demo Table",
escape = F) %>%
kable_styling(latex_options = 'HOLD_position')
现在,这应该可以工作,但是当我使用
编织文档时rmarkdown::render('C:\Users\john\Documents\bbv.Rmd')
- table 的
cross-reference
不存在!我只看到??
- 并且 table 有这个奇怪的
#tab
东西 - 如何摆脱它? - 目录在这里,虽然我没有要求它
有解决这些问题的想法吗? 谢谢!
编辑:奇怪的 #tab
东西在重启后消失了。
问题是您在 R 块之外使用它是在违背 kable
的意图:
The
kable()
function will automatically generate a label for a table environment, which is the prefixtab:
plus the chunk label.
https://bookdown.org/yihui/bookdown/tables.html
所以下面的解决方法绝对是有问题的。将文件 foo.Rmd
与
---
output:
bookdown::pdf_document2:
toc: no
header-includes:
- \usepackage{float}
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## Including Tables
You can also embed tables, for example: \@ref(tab:tw)
```{r tw, echo=FALSE}
mytable
```
You can also embed tables, for example: \@ref(tab:tw2)
```{r tw2, echo=FALSE}
mytable2
```
Referencing images is easier: \@ref(fig:plt)
```{r plt, echo=FALSE, fig.cap = 'hello', fig.height=3}
myplot
```
可以用第二个文件处理这个文件foo.R
:
library(knitr)
library(kableExtra)
# add the label to the options that would normally be populated from the chunk options
opts_current$append(list(label = "tw"))
mytable <- head(cars) %>% kable(format = "latex",
booktabs = T,
caption = "Demo Table",
escape = F) %>%
kable_styling(latex_options = 'HOLD_position')
opts_current$restore()
opts_current$append(list(label = "tw2"))
mytable2 <- tail(cars) %>% kable(format = "latex",
booktabs = T,
caption = "Demo Table",
escape = F) %>%
kable_styling(latex_options = 'HOLD_position')
opts_current$restore()
myplot <- ggplot(cars, aes(x = dist, y = speed)) + geom_point()
rmarkdown::render("foo.Rmd")
原则上,你也可以在R提示符下执行这些命令,但我尽量不直接使用提示符。顺便说一句,我没有得到你的代码的 (#tab)
输出。
但是,我认为不违背 kable
的工作原理更有意义。我可以理解将数据操作与表示分离是有意义的。但是,从我的角度来看,创建 table 是演示。因此,我不会在外部创建 table,而是在外部创建数据。为了具体化,让我们使用一个文件 bar.Rmd
:
---
output:
bookdown::pdf_document2:
toc: no
header-includes:
- \usepackage{float}
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(kableExtra)
```
## Including Tables
You can also embed tables, for example: \@ref(tab:tw)
```{r tw, echo=FALSE}
mydata %>% kable(format = "latex",
booktabs = T,
caption = "Demo Table",
escape = F) %>%
kable_styling(latex_options = 'HOLD_position')
```
连同一个文件bar.R
:
# insert data processing here
mydata <- head(cars)
rmarkdown::render("bar.Rmd")
这给了我相同的输出,并且数据处理(最初!)与演示文稿分开。