通过out.width缩放Rmd中的图

时间:2016-10-19 01:57:39

标签: r markdown knitr r-markdown

我正在制作一份包含一些情节的Rmd文件。它应该导出到otd和pdf。有些数字应该足够小,以便在得到的odt中将它们中的两个彼此相邻。

我通过

编织文档
Rscript -e "require(knitr); require(markdown); knit('Test_Markdown.Rmd', 'Test_Markdown.md')"

在Rmd中有一个如下图:

```{r plottestnormal, fig.path = ".", fig.width = 6, fig.height = 6, dpi = 300, dev = "png", dev.args = list(type = "cairo")}
plot(1:10, 1:10)
```

我希望情节是一半大小 - 但缩放!

这会使大小正确,但不会缩放:

```{r plottestsmall, fig.path = ".", fig.width = 3, fig.height = 3, dpi = 600, dev = "png", dev.args = list(type = "cairo")}
plot(1:10, 1:10)
```

正如我从the opiton description所理解的那样,以下内容应该符合我的意思,但它不起作用。

```{r plottestscaled, fig.path = ".", fig.width = 6, fig.height = 6, out.width = 3, out.height = 3, dpi = 300, dev = "png", dev.args = list(type = "cairo")}
plot(1:10, 1:10)
```

这会在生成的* md文件中生成一个html img标记:

<img src=".plottestscaled-1.png" title="plot of chunk plottestscaled" alt="plot of chunk plottestscaled" width="3" height="3" />

使用

编译时,pdf和odt都没有显示
pandoc -f markdown "Test_Markdown.md" -o "Test_Markdown.odt"

pandoc -t latex "Test_Markdown.md" -o "Test_Markdown.pdf"

我看到this issue对我没有帮助。

我错过了什么?

编辑:

感谢@Yihui,现在适用于LaTeX-&gt; pdf和(大概是未经测试的)html。

我是对的,out.widthout.height导出不支持*.odt*.docx吗?

如果是,那可能是他们不适合我的原因?

如果不是,我怎样才能在*.odt中获得相同的效果(缩放图)?

(我想导出到pdfodt,所以任何解决方案最好同时覆盖(至少)这两个。)

这是一个完整的文档,通过rmarkdown::render("Test_Markdown.Rmd", "all")处理我的问题。

---
title: Scale plot in Rmd
output:
    pdf_document:
        latex_engine: xelatex
    odt_document:
        keep_md: true
---

```{r plottestscaled, fig.path = "./", fig.width = 6, fig.height = 6, out.width = "3in", out.height = "3in", dpi = 300, dev = "png", dev.args = list(type = "cairo")}
plot(1:10, 1:10)
```

EDIT2:

到目前为止,我的“最佳”解决方案是,禁用odt输出中的缩放并手动重新缩放办公室中的绘图。虽然不是很可重复......

```{r plottestscaled, fig.path = "./", fig.width = 6, fig.height = 6, out.width=switch(opts_knit$get("rmarkdown.pandoc.to"), latex = "3in", NULL), out.height=switch(opts_knit$get("rmarkdown.pandoc.to"), latex = "3in", NULL), dpi = 300, dev = "png", dev.args = list(type = "cairo")}
plot(1:10, 1:10)

1 个答案:

答案 0 :(得分:1)

Pandoc的Markdown不支持在最新版本之前指定图像的大小,因此当您指定图的宽度时, knitr 必须回退到HTML和HTML代码不适用于LaTeX或ODT输出(仅支持本机Markdown代码,但LaTeX输出除外,其中也支持原始LaTeX代码。)

简短的回答是使用 rmarkdown 包而不是自己运行Pandoc。在生成具有width属性的数字时, knitr 将足够聪明以切换到LaTeX代码。或者甚至更好,只需单击RStudio IDE中的$(".Mask").each(function() { var tempstr = this.innerText; var replacestr = this.innerText.replace(/./g, "*"); $(this).mouseover(function() { this.innerText = tempstr; }); $(this).mouseout(function() { var tempObj = this; setTimeout(function() { tempObj.innerText = replacestr; }, 10000); }); this.innerText = replacestr; }); 按钮。

你可以尝试在幕后找出所有技术细节(从knitr::hook_plot_md开始),但如果你不熟悉 knitr rmarkdown 在内部工作。