knitr.Rmd->Word文档:图形的控制细节
我正在为一本书编写解决方案手册,使用带有以下YAML头的.Rmd文件:knitr.Rmd->Word文档:图形的控制细节,r,rstudio,knitr,r-markdown,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文档 将会有很多图形,我想设置一些全局图形参数,以提
---
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设置,echo=FALSE}
选项数字=4
帕尔玛=c5,4,1,1+.1
取而代之的是,我在我的文档中得到了如下图像,它们的边框比我想要的大,字体比我想要的大得多
我知道如何在用LaTeX生成的.Rnw文件中控制所有这些,但我
找不到如何在.Rmd->Word中执行此操作。有一个大钩子我可以吗
使用我不认为有一个out.width块选项可以重新缩放
LaTeX中的图形。实际使用小边距作为使用挂钩的示例。以下是根据本文档改编的解决方案
---
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$setsmall.mar=TRUE可以避免将其传递给文档中的每个块
边距显示为libreoffice中docx输出的固定屏幕截图,默认参考docx
实际上,使用较小的边距作为使用挂钩的示例。以下是根据本文档改编的解决方案
---
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$setsmall.mar=TRUE可以避免将其传递给文档中的每个块
边距显示为libreoffice中docx输出的固定屏幕截图,默认参考docx
@scoa的回答显示了如何使用a在每个块的开头设置一些图形参数。这是必要的,因为默认情况下,KNITR打开一个新的图形设备来记录情节并在评估代码之后关闭它,因此PAR设置将被丢弃,即,稍后的块的图形参数不能在早期设置块中设置,但需要单独为每个块设置。p>
如果不需要这个行为,GULAL.PAL=真值可以使用:
opts_knit$set(global.par = TRUE)
为边距找到正确的值有时是相当痛苦的。在这些情况下,我们可以提供帮助。在选项crop=TRUE的所有块中,将删除白边距。要将此应用于所有块,请使用
library(knitr)
knit_hooks$set(crop = hook_pdfcrop)
opts_chunk$set(crop = TRUE)
这也适用于docx输出,因为当打印格式不是PDF(例如PNG)时,ImageMagick中的程序convert用于从?hook_pdfcrop修剪白色边距
请注意,在某些情况下,裁剪绘图有时会产生明显不同的绘图缩放因子的副作用:这种情况发生在两个绘图上的元素大小相同,但其中一个绘图周围的白边更大的情况下。如果在裁剪后将两者都调整为固定的输出宽度,则具有较大边距的绘图上的元素看起来更大。但是,这与docx输出无关,因为在这种情况下不能使用out.width/out.height。@scoa的回答显示了如何使用a在每个块的开头设置一些图形参数。这是必要的,因为默认情况下,KNITR打开一个新的图形设备来记录情节并在评估代码之后关闭它,因此PAR设置将被丢弃,即,稍后的块的图形参数不能在早期设置块中设置,但需要单独为每个块设置。p>
如果不需要这个行为,GULAL.PAL=真值可以使用:
opts_knit$set(global.par = TRUE)
为边距找到正确的值有时是相当痛苦的。在这些情况下,我们可以提供帮助。在选项crop=TRUE的所有块中,将删除白边距。要将此应用于所有块,请使用
library(knitr)
knit_hooks$set(crop = hook_pdfcrop)
opts_chunk$set(crop = TRUE)
这也适用于docx输出,因为当打印格式不是PDF(例如PNG)时,ImageMagick中的程序convert用于从?hook_pdfcrop修剪白色边距
请注意,在某些情况下,裁剪绘图有时会产生明显不同的绘图缩放因子的副作用:这种情况发生在两个绘图上的元素大小相同,但其中一个绘图周围的白边更大的情况下。如果在裁剪后将两者都调整为固定的输出宽度,则具有较大边距的绘图上的元素看起来更大。但是,这与Dox输出无关,因为在这种情况下不能使用Out.Wist/Out.Health.
您使用的PAR边距是默认的R边距,其大小与您的图像显示的大小有关。如果你让它们小得多,会发生什么?你使用的利润率是默认的R利润率,这大约是你的图片显示的大小。如果你让它们更小的话,会发生什么呢?但是,你可能要补充的是:让PAC设置从当前的块中被保存下来,并且避免一些与边缘的冲突。@ CL.,你应该做一个回答,它比分钟要好。完成了。我想
我们的答案给出了一个非常全面的图片。投票赞成,但有两件事你可能想补充:使PAR设置从当前的块被保留,以避免一些与利润的麻烦。@ CL.,你应该做一个答案,它比分钟更好。完成。我认为我们的答案给出了一个非常全面的图片。OPTSZ针织$GETGloal.Pal.Talk是正确的方式来编织尊重全球PAR选项。我知道pdfcrop,但这不适用于MS Word.docx输出,其中图像都是以PNG格式生成的。啊,我忘了docx上下文。关于你的第一句话:是的。这正是我写的,不是吗?更新:hook_pdfcrop也适用于.docx和png图像。看见HookgPDFCISDATION:当情节格式不是PDF,例如PNG,IMAGEMAGIK中的程序转换用来修剪白边。OPTSKNIKET$GETGloal.Par=Trite是正确地建立KNITR尊重全局PAR选项的方法。我知道pdfcrop,但这不适用于MS Word.docx输出,其中图像都是以PNG格式生成的。啊,我忘了docx上下文。关于你的第一句话:是的。这正是我写的,不是吗?更新:hook_pdfcrop也适用于.docx和png图像。看见hook_pdfcrop:当打印格式不是PDF(例如PNG)时,ImageMagick中的程序convert用于修剪白色边距。