繁体   English   中英

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

[英]Unicode characters in plots to use in dynamic reports using R, Sweave and knitr

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

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

ggplot2 PDF输出中的Unicode字符

简而言之,作者建议使用Cairo包(在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

在调查发生的同时 - >我发现cairo生成的文件是空白的(有一个给cairo_pdf命名的pdf文件但是无法用pdf查看器打开 - >错误无法打开文本文件)

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

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

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

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

这是生成的报告中的ććźżñół字母的样子

以下是从Rstudio直接导出到png的绘图的样子

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

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

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

opts_chunk$set(dev='cairo_pdf')

好的,我终于明白了!

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

在@Matev的回复之后我开始测试dev ='cairo_pdf' - >但这并没有改变输出中的任何内容。

为什么? 因为

<<dev='cairo_pdf'>>=
@

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

在认识到不那么明显的错误之后(因为Sweave和knitr都使用类似的块头标题格式)我在他的Sweave手册中找到了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建议全局设置整个文档的块选项 (但他的答案再次针对knitr weaver):

    \SweaveOpts{grdevice=my.Swd}

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

我要感谢Yihui的knitr包非常棒!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM