knitr 文档中 ggplot 中的非英文字符

Non English characters in ggplot within a knitr document

我正在尝试在 RStudio 中从 .Rmd 文件编织一个包含立陶宛语字符(如 ąčęėįšųž)的文件。虽然编织到 html 工作正常并且 ggplot 标题有立陶宛字符,当编织到 pdf 时 ggplot 确实会产生警告并消除这些字符。

可重现的例子:

---
title: "Untitled"
output:
  pdf_document:
    includes:
      in_header: header_lt_text.txt
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(ggplot2)
```


## Lithuanian char: ĄČĘĖĮŠŲŪžąčęėįšųūž
```{r}
ggplot(iris, aes(Sepal.Length, Sepal.Width))+
    geom_point(aes(col=Species))+
    labs(title="Lithuanian char: ĄČĘĖĮŠŲŪžąčęėįšųūž")

```

我通过 header_lt_text.txt 参数如下:

\usepackage[utf8]{inputenc}
\usepackage[L7x]{fontenc}
\usepackage[lithuanian]{babel}

\usepackage{setspace}
\onehalfspacing

关于如何ggplot创建正确的标签有什么建议吗?

问题出在 pdf 设备上,只有在将图片另存为 pdf 格式时才会出现(您需要这样,因为它看起来好多了)。这就是为什么它在某些情况下看起来 "work" 的原因:图像不是呈现为 pdf,而是例如作为png。感谢@Konrad 正确识别问题的根源。

要解决这个问题,您需要将正确的编码传递给 pdf 设备。 幸运的是,pdf 设备 (?pdf) 采用 encoding 参数和 there is a chunk option 将参数传递给设备:dev.args

在 Windows 上,适当的编码是 CP1257.enc(波罗的海):

```{r dev="pdf", dev.args=list(encoding="CP1257.enc")}
  ggplot(iris, aes(Sepal.Length, Sepal.Width))+
  geom_point(aes(col=Species))+
  labs(title="Lithuanian char: ĄČĘĖĮŠŲŪžąčęėįšųūž")
```

您可以看到开箱即用的其他编码:list.files(system.file("enc", package = "grDevices"))

在我的 linux 机器上运行良好:

或者,如果您愿意在 pdf 中插入 png 图像,您可以简单地在块选项中使用 dev="png"。虽然看起来不太好。