knitr .Rmd - > Word文档:控制数字的详细信息

时间:2016-01-10 23:04:49

标签: r rstudio knitr r-markdown

我正在为一本书制作解决方案手册,使用带有以下YAML标题的.Rmd文件:

---
title: "DDAR: Solutions and Hints for Exercises"
date: "`r Sys.Date()`"
output: 
  word_document:
    reference_docx: solutions-setup.docx
---

我使用reference_docx控制文档的总体布局以获取输出Word文档。

会有很多数字,我想设置一些全局图形参数,以提供相对紧凑的边界框和合理的字体大小 在图中,无需根据我在PDF文档中看到的每一个进行调整。

我尝试了以下操作,但par()设置似乎没有任何效果:

{r setup, echo=FALSE} options(digits=4) par(mar=c(5,4,1,1)+.1)

相反,我在我的文档中得到的图像比我想要的更大的边界框以及比我想要的更大的字体大小。

sample image

我知道如何控制使用LaTeX生成的.Rnw文件中的所有这些,但是我 找不到怎么做.Rmd - >字。我能不能用一个大块的钩子 使用?我不认为有一个out.width块选项可以重新扩展 像LaTeX一样的人物。

2 个答案:

答案 0 :(得分:2)

knitr documentation for hooks实际上使用小边距作为你可以用钩子做什么的一个例子。这是一个解决方案(改编自本文档)。

---
output: word_document
---

```{r setup, echo=FALSE}
library(knitr)
knit_hooks$set(small.mar = function(before, options, envir) {
    if (before)    par(mar=c(5,4,1,1)+.1)  # smaller margin on top and right
})
opts_chunk$set(small.mar=TRUE)
```

```{r}
plot(iris$Sepal.Length)
```

使用opts_chunk$set(small.mar=TRUE)是一种避免将其传递给文档中每个块的方法。

边距似乎是固定的(截图来自libreoffice中的docx输出,默认为reference-docx)。

enter image description here

答案 1 :(得分:2)

@ scoa的回答显示了如何使用hook在每个块的开头设置一些图形参数。这是必要的,因为"默认情况下,knitr打开一个新的图形设备来记录图并在评估代码后关闭它,因此par()设置将被丢弃",即图形参数为以后的块不能在早期的setup-chunk中设置,但需要分别为每个chunk设置。

如果不需要此行为,可以使用package option global.par = TRUE

opts_knit$set(global.par = TRUE)

找到边距的正确值有时非常痛苦。在这些情况下,hook_pdfcrop可以提供帮助。在选项crop = TRUE的所有块中,将删除白边距。要将其应用于所有块,请使用

library(knitr)
knit_hooks$set(crop = hook_pdfcrop)
opts_chunk$set(crop = TRUE)

这适用于docx输出,因为"当绘图格式不是PDF(例如PNG)时,ImageMagick中的程序转换用于修剪白边距" (来自?hook_pdfcrop)。

请注意,在某些情况下,种植地块的副作用有时会明显不同" zoom"图的因素:这种情况发生在我们从两个图上相同大小的元素开始但在一个图周围有较大的白边距的情况下。如果在裁剪后将两者都调整为固定的输出宽度,则具有较大边距的图上的元素看起来更大。但是,这与docx输出无关,因为在这种情况下无法使用out.width / out.height