2016-01-10 58 views
1

我產生一個解決方案手冊一本,使用.Rmd文件具有以下YAML頭控制細節:knitr .Rmd - > 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 setup, echo=FALSE} options(digits=4) par(mar=c(5,4,1,1)+.1)

相反,我得到的圖像就像我的文檔中有較大的邊界框下面的比我想的和比我想要的字體大得多。

sample image

我知道如何控制這一切,用乳膠製作.Rnw文件,但我 無法找到如何做到這一點的.Rmd - >詞。有沒有可以用 的大塊鉤子?我不認爲有一個out.width大塊選項可重新調整 的數字,就像在LaTeX中一樣。

+1

您使用的'par'' mar'gins是默認的R邊距,大約與圖片顯示的尺寸相同。如果你讓他們變得更小,會發生什麼? – thelatemail

回答

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)是爲了避免將它傳遞給每一個塊中的文件的方式。

邊距顯示爲固定(使用默認reference-docx從libreoffice的docx輸出截圖)。

enter image description here

+1

Upvoted,但您可能想要添加的兩件事:[global.par](http://yihui.name/knitr/options/)使當前塊的'par()'設置得以保留,[hook_pdfcrop] (https://github.com/yihui/knitr-examples/blob/master/085-pdfcrop.Rnw)以避免一些帶邊緣的麻煩。 –

+0

@CL。你應該做出答案,這比我的更好。 – scoa

+0

完成。我認爲我們的答案能夠提供一個相當全面的圖景。 –

1

@ SCOA的回答顯示瞭如何使用一個hook在每個塊的開頭設定一些圖形參數。這是必要的,因爲「默認情況下,knitr會打開一個新的圖形設備來記錄圖並在評估代碼後關閉它,因此par()設置將被丟棄」,即後期塊的圖形參數不能在早期設置塊中設置,但需要分別爲每個塊設置。

如果這種行爲是不想要的,該package optionglobal.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)。請注意,在某些情況下,裁剪地塊有時會出現明顯不同的地圖「縮放」因素的副作用:這種情況發生在我們從兩幅地塊上的相同大小的元素開始,但其中一幅地塊周圍有較大的白色邊緣。如果兩者在裁剪之後都被調整爲固定的輸出寬度,則具有較大邊距的圖上的元素看起來更大。但是,這與docx輸出無關,因爲在這種情況下不能使用out.width/out.height

+0

'opts_knit $ set(global.par = TRUE)'是讓knitr尊重全局'par()'選項的正確方法。我知道'pdfcrop',但這對於MS Word'.docx'輸出不起作用,其中圖像全部以PNG格式生成。 – user101089

+0

啊,我忘記了docx上下文。關於你的第一句話:是的。這正是我寫的,不是嗎? –

+0

更新:'hook_pdfcrop'也適用於'.docx'和'png'圖像。見'? hook_pdfcrop':「當繪圖格式不是PDF(例如PNG)時,ImageMagick中的程序轉換用於修剪白色頁邊空白」。 –