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

Tom*_*lde 10 markdown r pandoc knitr

\label{}当使用knitr从*.Rmd文件到*.md文件时,我无法生成绘图knitr; 然后转换为*.pdfvia pandoc.

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

```{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() 
```
Run Code Online (Sandbox Code Playgroud)

我编织:

knit("mwe.Rmd") 
Run Code Online (Sandbox Code Playgroud)

然后我用pandoc

pandoc -o mwe.pdf mwe.md 
Run Code Online (Sandbox Code Playgroud)

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

pandoc -o mwe.pdf mwe.md
Run Code Online (Sandbox Code Playgroud)

谢谢!

Rei*_*son 11

问题是您正在编写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()
```
Run Code Online (Sandbox Code Playgroud)

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

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

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