RMarkdown图插入Word,宽度和高度为101%

时间:2018-06-14 10:54:52

标签: r ms-word r-markdown knitr pandoc

就像在标题中一样:无论我从RMarkdown插入Word中的绘图是多么花哨或简单,我都会得到一个高度和宽度为101%的图像。这很烦人,因为这会使情节模糊不清。

示例

这个简短的.Rmd文件:

---
output:
  word_document

---

```{r, echo=F}
plot(1:100)
```

编织这个:

enter image description here

然后我右键单击它,选择属性并看到它插入了101%的原始大小(下面的奇怪语言是抛光;)

enter image description here

当我将其重置为100%时,它看起来更好:

enter image description here

问题 如何强制RMarkdown插入100%宽度和高度的图?

我尝试了什么

(这些都不起作用)

  • 更改地块尺寸(fig.widthfig.height块选项)
  • 将Word中的默认单位从cm更改为
  • 更改用于绘图的设备及其重新设置(devres块选项)

1 个答案:

答案 0 :(得分:4)

首先,请注意,当实施this knitr feature request时,您必须停止使用以下答案。

可以使用pandoc link attributes解决此问题。如pandoc文档中所述,没有链接属性“ 后备是查看图像分辨率和图像文件中嵌入的dpi元数据”(我认为麻烦来自此后备方法)。

链接属性是pandoc 1.16中引入的最新pandoc功能。 knitr尚不支持此功能,但是根据上述功能要求很快就会提供。

只要knitr不支持pandoc链接属性,这就是解决这个问题的有力建议。它使用knitr plot hook

---
output: word_document
---

```{r setup, echo=FALSE}
default_plot_hook <- knitr::knit_hooks$get('plot')

knitr::knit_hooks$set(plot = function(x, options) {
  default_md <- default_plot_hook(x, options)
  link_attr <- sprintf("{width=%sin height=%sin}", options$fig.width, options$fig.height)
  sub("(!\\[.*]\\(.*\\))", paste0("\\1", link_attr), default_md)
})
```

```{r, echo=F}
plot(1:100)
```

说明
RMarkdown文件(.Rmd)渲染过程的第一步是生成普通的markdown文件(.md)。 这是knitr的工作。

该过程的第二步是从该word文件生成.docx文件(markdown)。 这是pandoc的工作。

请注意,您可以使用markdown标头中的keep_md选项来检查此中间YAML文件:

---
output: 
  word_document:
    keep_md: true
---

knitr的可用版本中,图像的链接由knitr呈现,如下所示:

![](myreport_files/figure-docx/unnamed-chunk-1-1.png)<!-- -->

没有链接属性,因此pandoc使用后备方法确定图像的尺寸。

建议的knitr绘图钩将宽度和高度属性添加到链接。
它返回以下markdown

![](myreport_files/figure-docx/unnamed-chunk-1-1.png){width=5in height=4in}<!-- -->

因此,pandoc从这些属性而不是回退方法确定图像的尺寸。

很明显,要使用此建议,您的pandoc版本必须为> = 1.16。