使用R,Sweave和knitr在动态报告中使用的图中的Unicode字符

时间:2014-01-31 12:31:46

标签: r unicode ggplot2 knitr rstudio

我在使用knitr在Sweave中使用R studio生成的LaTeX报告中正确显示由ggplot2生成的图中的字体时出现问题。

起初我无法使用波兰字体正确生成pdf,但是这个问题在这篇文章中得到了解决:

Unicode Characters in ggplot2 PDF Output

简而言之,作者建议使用Cairo包(在R中)使用ggplot2生成图。

这对我有用 - 一次 - >意思是我能够生成一个带有波兰字符的情节,但当我试图在sweave文档中使用它来使用这样的编织器生成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

在调查时发生的事情 - &gt;我发现cairo生成的文件是空白的(有一个给cairo_pdf命名的pdf文件,但不能用pdf查看器打开 - &gt;错误无法打开文本文件)

现在需要注意一点:cairo_pdf函数需要设置文件名。所以我给pdf一个名字,需要稍后由tex文件使用,格式为filename-chunk_name.pdf(动态报告非常多:P)

所以我不是cairo_pdf选项。 有没有办法在没有cairo_pdf选项的情况下生成正确的pdf文件?

如果没有cairo-pdf,我无法在这个主题上找到更多...

当我删除cairo部分时,我的tex文件很好地生成了一个丑陋的点标签PDF文件...

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

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

2 个答案:

答案 0 :(得分:6)

您应该指示knitr使用该设备,而不是像调用cairo_pdf()那样打开设备。特别要看knitr options和“dev”。总之,您需要

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

或使其成为所有块的默认值

opts_chunk$set(dev='cairo_pdf')

答案 1 :(得分:3)

好的,我终于明白了!

大块标题中的Sweave编码确实存在问题。

在@Matev的回复之后,我开始测试dev =&#39; cairo_pdf&#39; - &GT;但这并未改变输出中的任何内容。

为什么呢?因为

<<dev='cairo_pdf'>>=
@

仅由 knitr Rnw文件编织器解释!!!我正在使用 Sweave weaver(这是在Sweave部分的R studio的全局选项中设置的)。

在认识到不那么明显的错误之后(因为Sweave和knitr都使用类似的chunk标题脚本格式)我在他的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>>=
    @
    
  3. 或@Matev建议整个文档的全局设置块选项(但他的答案再次针对编织者):

        \SweaveOpts{grdevice=my.Swd}
    

    现在您将获得由cairo_pdf设备(基本R设备)生成的漂亮图,它可以很好地处理uniode字体!他们将像魔术一样被你的动态报告所包围!

    我要感谢Yihui的knitr包,这是伟大的!