RMarkdown不在图形中打印汉字

时间:2018-06-20 21:26:13

标签: r character-encoding r-markdown

---
title: 

output: 
 pdf_document:
    latex_engine: xelatex

fontsize: 11pt
#mainfont: Calibri
classoption: letter
geometry: left=0.5in, right=0.5in, top=0.6in, bottom=1.25in
subparagraph: yes

header-includes:
- \usepackage[UTF8]{ctex}
- \usepackage{setspace}
- \usepackage{tocloft}
- \usepackage{anyfontsize}
- \usepackage{fancyhdr}
- \usepackage{fontspec}
- \usepackage{sectsty}
- \sectionfont{\huge}
- \subsectionfont{\fontsize{14}{16.8}\selectfont}
- \pagestyle{fancy}

- \renewcommand{\headrulewidth}{0pt}
---

```{r}
library(ggplot2)
print("中文")
df <- data.frame(
  gp = factor(rep(letters[1:3], each = 10)),
  y = rnorm(30)
)
ds <- plyr::ddply(df, "gp", plyr::summarise, mean = mean(y), sd = sd(y))

# The summary data frame ds is used to plot larger red points on top
# of the raw data. Note that we don't need to supply `data` or `mapping`
# in each layer because the defaults from ggplot() are used.
ggplot(df, aes(gp, y)) +
  geom_point() +
  geom_point(data = ds, aes(y = mean), colour = 'red', size = 3) +
  labs(x = "中文")
```

编织该文件后,似乎print函数的字符编码工作正常,但是汉字未显示在图形标签中,并且在字符转换时出现错误。我是Mac用户。 enter image description here

1 个答案:

答案 0 :(得分:1)

TL; DR:这似乎不是knitr / rmarkdown问题,而是与字体和输出设备有关的问题。我不确定原因,但是下面的解决方法涉及更改输出字体(Batang为我工作)和输出设备(pdf是默认设置,但更改为cairo_pdf或{{1 }}都为我工作)。


首先,确定一个字体家族,R将为其正确渲染字符。我通常不确定如何确定是否需要反复试验,但是在过去,我发现Symbola和Batang字体通常似乎可以与非英文字符和各种unicode符号一起使用。如果没有字体,则需要在计算机上安装字体,并且可能还需要use the extrafont package在R中注册字体。然后可以在控制台中运行绘图代码,查看是否汉字正确呈现。

使用Batang字体,我发现能够以正确显示汉字的方式将绘图输出到控制台。但是,无论是以交互方式还是在编织时将图保存为pdf,标准的png设备都无法渲染字符。相反,我尝试了pdfcairo_pdf设备,它们都起作用。以下是示例代码(使用与您的问题相同的png):

yaml

这是输出文档中的图:

enter image description here

enter image description here