如何自动引用Tufte讲义中的数字?

时间:2020-05-25 01:42:32

标签: r r-markdown knitr tufte

我正在尝试使用R markdown和Tufte讲义输出来编写报告以生成pdf。我无法使用任何建议的方法将图形引用放在文本中。我希望有人能说明我该怎么做。如果有任何建议,我将不胜感激。

到目前为止,我已经尝试了this stackoverflow响应中描述的两种广泛方法。

选项1:使用\@ref(fig:chunk-label)的基本减价方法。这将导致pdf在图形标题中具有正确的格式,但文本参考为@ref(fig:fig-margin).。参见脚本下方的图片:

```
---
title: "Markdown example"
date: "`r Sys.Date()`"
output:
  tufte::tufte_handout:
    citation_package: natbib
link-citations: yes
---

```{r setup, include=FALSE}
library(tufte)

```

```{r fig-margin, fig.cap=("MPG vs horsepower, colored by transmission."), fig.height=3.5, fig.margin=TRUE, fig.width=3.5, message=FALSE, cache=FALSE}
library(ggplot2)
mtcars2 <- mtcars
mtcars2$am <- factor(
  mtcars$am, labels = c('automatic', 'manual')
)
ggplot(mtcars2, aes(hp, mpg, color = am)) +
  geom_point() + geom_smooth() +
  theme(legend.position = 'bottom')

```

Insert the figure reference here \@ref(fig:fig-margin).

There is an image from the pdf copied here but I do not have points to paste it. Hopefully it is visible

我已经尝试过\@ref(fig:fig-margin)格式的多种变体,例如删除反斜杠,但无济于事。

选项2:使用字幕制作器。在上方链接的答案选项中,建议使用Captioner作为解决方案,并提供一些代码。

我实现了此选项,这次获得了正确的内联引用,但是图1:图中标题的一部分被复制了(即,它显示为图1:图1:MPG与功率等)。 Here is an image from the pdf using the Captioner approach

```
---
title: "Captioner example"
date: "`r Sys.Date()`"
output:
  tufte::tufte_handout:
    citation_package: natbib
link-citations: yes
---

```{r setup, include=FALSE}
library(tufte)
library(captioner)
# invalidate cache when the tufte version changes
knitr::opts_chunk$set(tidy = FALSE, cache.extra = packageVersion('tufte'))
options(htmltools.dir.version = FALSE)

table_captions <- captioner::captioner()
figure_captions <- captioner::captioner(prefix="Figure.")
fig.cap <- captioner::captioner()

t.ref <- function(label){
  stringr::str_extract(table_captions(label), "[^:]*")
}

f.ref <- function(label){
  stringr::str_extract(figure_captions(label), "[^:]*")
}



```


```{r fig-margin, fig.cap=figure_captions("fig_one", "MPG vs horsepower, colored by transmission."), fig.height=3.5, fig.margin=TRUE, fig.width=3.5, message=FALSE, cache=FALSE}
library(ggplot2)
mtcars2 <- mtcars
mtcars2$am <- factor(
  mtcars$am, labels = c('automatic', 'manual')
)
ggplot(mtcars2, aes(hp, mpg, color = am)) +
  geom_point() + geom_smooth() +
  theme(legend.position = 'bottom')

```

Insert experiment ref here `r f.ref("fig_one")`.

如果可以的话,我倾向于仅使用基本的Markdown方法,但如果唯一的方法是使用Captioner,那么如果有人建议删除重复项,那将是很好的选择(我确实尝试过一些调整安装程序块中定义的功能,但没有起作用。

任何建议将不胜感激。计划B当然只是手动完成。

谢谢。

2 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,如tufte讲义(PDF),所以我尝试了\ref并用{@ 3}}中rmarkdown示例#1中建议的不带@符号的括号{ }上面链接。似乎正在工作。

\ref{fig:my_fig}

答案 1 :(得分:0)

我发现连字符(我相信得分不高)会导致引用问题。因此,如果您将块重命名为\@ref(fig:fig-margin),则\@ref(fig:figMargin)将不起作用,但figMargin将起作用。