我想在"包装中包装用knitr和rmarkdown创建的数字"环境使用钩子。但是,在运行下面的最小示例时,图块只会被编译成markdown图片:
\begin{wrapfigure}{R}{0.3\textwidth}
![](test_files/figure-latex/unnamed-chunk-2-1.pdf)
\end{wrapfigure}
而不是预期的:
\begin{wrapfigure}{R}{0.3\textwidth}
\includegraphics{test_files/figure-latex/unnamed-chunk-2-1.pdf}
\end{wrapfigure}
最小例子:
---
header-includes:
- \usepackage{wrapfig}
output:
pdf_document:
keep_tex: TRUE
---
```{r}
library(knitr)
knit_hooks$set(wrapf = function(before, options, envir) {
if(before) {
"\\begin{wrapfigure}{R}{0.3\\textwidth}"
} else {
"\\end{wrapfigure}"
}
})
```
```{r, wrapf=TRUE}
library(ggplot2)
qplot(cars$speed, cars$dist)
```
答案 0 :(得分:2)
pandoc
负责将降价文档转换为TEX文档。由于pandoc
在\begin{…}
和\end{…}
之间没有触及,因此图像的降价语法不会转换为TEX语法。
你可以......
fig.show = 'hide'
)并使用cat("\includegraphics{figure/unnamed-chunk-2-1.pdf}")
的内容。cat
的钩子中包含一些魔法。 以下是选项2的示例:
knit_hooks$set(wrapf = function(before, options, envir) {
if(before) {
return("\\begin{wrapfigure}{R}{0.3\\textwidth}")
} else {
output <- vector(mode = "character", length = options$fig.num + 1)
for (i in 1:options$fig.num) {
output[i] <- sprintf("\\includegraphics{%s}", fig_path(number = i))
}
output[i+1] <- "\\end{wrapfigure}"
return(paste(output, collapse = ""))
}
})
此挂钩可与wrapf = TRUE
和fig.show = "hide"
一起使用。 (此外,您需要将\usepackage{graphics}
添加到header-includes
。)
但请注意我不会这样做!在更复杂的设置中,太多事情可能会出错。想想缓存,标题,标签,缓存(再次!)......
因此,如果确实需要控制PDF的排版,我建议编写RNW(选项3)。