我无法用knitr生成\ label {fig:mwe-plot}

时间:2014-06-06 16:21:49

标签: r markdown knitr pandoc

使用knitr通过\label{}*.Rmd文件转到*.md文件时,我无法为地块生成knitr;然后通过*.pdf转换为pandoc

我的*.Rmd的MWE包含在下面:

```{r Setup, include=FALSE, results="hide", warning=FALSE}
opts_chunk$set(dev="cairo_pdf", fig.lp="fig:", echo=FALSE, results="hide", 
               message=FALSE, warning=FALSE)
```

```{r mwe-plot, fig.cap = "MWE plot."}
library(ggplot2)
ggplot(mtcars, aes(factor(cyl))) +
  geom_bar() 
```

我编织:

knit("mwe.Rmd") 

然后我使用pandoc

pandoc -o mwe.pdf mwe.md 

我应该可以在我的Figure \ref{fig:mwe-plot}来源中使用*.Rmd交叉引用该情节。但是,如果我运行\label{fig:mwe-plot}似乎还没有创建mwe.tex

pandoc -o mwe.pdf mwe.md

谢谢!

1 个答案:

答案 0 :(得分:10)

问题是您正在编写R markdown文件,并且与LaTeX相关的选项在此类文档中不起作用(它们没有任何效果)。 fig.cap有效,但fig.lp不会,你根本不会添加任何\label{},因为Rmd文档的输出挂钩是降价的,一般来说没有标签等。

在这种情况下,您需要在\label{}中手动编写fig.cap,就像在LaTeX文档中明确添加它一样。例如:

```{r mwe-plot, fig.cap = "\\label{fig:mwe-plot}MWE plot."}
library(ggplot2)
ggplot(mtcars, aes(factor(cyl))) +
  geom_bar()
```

现在knitr会使用markdown图像标记约定逐字地将该标题转储到markdown文件中(我们需要在输入R中的字符串时转义反斜杠,因此\\参数中的fig.cap 。然后Pandoc将能够使用这个标题,标签及其引用都应该自行解决。

另一种选择更复杂;没有什么可以阻止你编写自己的自定义钩子为你做这个,但你必须研究LaTeX钩子和MD钩子,看看如何组合你需要的两个元素。

请注意,此问题(与LaTeX输出相关的块选项)适用于编写Rmd文件时的所有此类块选项。这有点隐含在KNitr网站的选项页面中,但当我第一次开始使用带有降价的Knitr并使用pandoc进行渲染时,它仍然让我感到意外。