2014-01-31 46 views
4

我在使用knitr的Sweave中由R studio生成的LaTeX報告中的ggplot2生成的圖中正確顯示字體時出現問題。在使用R,Sweave和knitr的動態報告中使用的圖中的Unicode字符

起初我沒能正確地產生與波蘭的字體的PDF文件,但這個問題被解決在這個帖子:

Unicode Characters in ggplot2 PDF Output

總之,筆者使用開羅包(以R)產生勸使用ggplot2進行繪製。

這爲我工作 - 一次 - >意味着我能夠產生與波蘭人物情節,但是當我試圖用它sweave文檔中使用knitr這樣產生LaTeX的報告:

<<pieniadze_graph,fig=TRUE,echo=FALSE>>= 
library(Cairo) 
cairo_pdf("TutorialExercisesPart2-pieniadze_graph.pdf") 
plot1 <- qplot(expenditure, data = cas) + xlim(0, 8000) + 
    xlab(expression(paste("Pieniądze wydane na ucznia ($)"))) + 
    ylab("Liczba szkółńćźżś") 
print(plot1) 
@ 

我得到一個錯誤:

Running pdflatex on TutorialExercisesPart2.tex...failed 

在調查而happend - >我發現,開羅soppoused生成文件是空白的(有給cairo_pdf一個名稱的PDF文件,但它不能用pdf查看器打開 - >錯誤不能打開文本文件)

現在需要一個註釋:cairo_pdf函數需要設置文件名。所以我給PDF一個名字,這是tex文件需要稍後使用的格式filename-chunk_name.pdf(這麼多的動態報告:P)

所以我不是cairo_pdf選項。 有沒有辦法生成沒有cairo_pdf選項的正確的PDF文件?

我無法找到任何有關此主題,而不開羅的PDF ...

當我刪除與一個難看點很好地生成我TEX文件開羅部分標籤PDF文件中了。 ..

here is what ąćźżńół letters look like in generated report

Here is how an exported plot into png straight from Rstudio looks like

回答

3

好吧,我終於得到了它!

在塊標題中,Sweave編碼確實存在問題。

@Matev的迴應之後我開始測試dev ='cairo_pdf' - >但是這並沒有改變輸出中的任何內容。

爲什麼?由於

<<dev='cairo_pdf'>>= 
@ 

僅由knitr RNW文件韋弗解釋!我正在使用Sweave weaver(這是在Sweave部分的R studio的全局選項中設置的)。

在認識到不太明顯的錯誤之後(因爲Sweave和knitr使用類似的塊標題腳本格式),我在他的Sweave Manual中搜索了Leisch對此的評論。這是他爲大家解決誰擁有了同樣的問題:

  1. 文件中把這個代碼早(R庫後)

    <<>>= 
    my.Swd <- function(name, width, height, ...) 
    grDevices::cairo_pdf(filename = paste(name, "pdf", sep = "."), 
    width = width, height = height) 
    @ 
    
  2. 您現在可以使用單獨的塊

    下面的代碼
    <<chunk_name,grdevice=my.Swd,fig=TRUE>>= 
    @ 
    

或作爲@Matev勸全局設置塊選項FO R上的整個文檔(但同樣他的回答是對knitr韋弗):

\SweaveOpts{grdevice=my.Swd} 

現在你將獲得由cairo_pdf設備(基礎R設備),它很好地處理uniode字體產生美麗的曲線!而且他們會像魔法一樣成爲你的動態報告!

我想感謝Yihui的knitr包裝很棒!

6

而不是打開一個設備,如您調用cairo_pdf(做),你應該指導knitr使用該設備。請特別注意knitr options和「dev」。總之,你需要

<<pieniadze_graph,fig=TRUE,echo=FALSE,dev='cairo_pdf'>>= 
... 

,或者設置成默認爲所有的塊

opts_chunk$set(dev='cairo_pdf')