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进行渲染时,它仍然让我感到意外.