正文中文输出
问题
在使用 R Markdown 编写文档并导出为 PDF 格式时,经常会遇到一个普遍的问题:中文失效。
或者导出的文档中文字符残缺
解决方法
方法一
其实这里只需更改一下Latex引擎为xelatex
(默认是pdflatex
),并且把documentclass
选项改为ctexart
即可(当然这里需要你本身就配置好了Latex环境)
title: "中文文档"
documentclass: ctexart
output:
pdf_document:
latex_engine: xelatex
事实上,这并不是Rmarkdown本身的问题,这是因为Rmarkdown调用的Pandoc转换pdf。而Pandoc默认的引擎是pdflatex
,这是不支持中文的,因此在预设里改一下就完事(如果用过Pandoc的同学肯定知道这一点)
方法二
当然,也可以直接调用Rmarkdown的模板包rticles解决
install.packages("rticles")
其中包含了很多常用的模板,而CTeX模板是专门来处理中文文档的
如图所示
此时会发现中文文档能正确的输出了
图片中文输出
问题
一般来说,到这里绝大部分的转pdf问题能愉快轻松的解决,但实际使用过程中,会发现有一个很悲催的问题—R输出的图片中的中文均不能正常显示。。。
原因(可跳过)
这是因为在Rmarkdown中,预设output
部分的有一个参数叫dev
,用于指定绘图设备(device),即用于生成图形的底层绘图系统,默认设置为
output:
pdf_document:
latex_engine: xelatex
dev: pdf
此处的图片输出格式是将图片其转变为pdf。但是在转变过程中无法解析中文字符(此处跟Latex无关)。
在这篇文章中Rmarkdown转中文pdf中遇到的问题_rmarkdown无法保存为pdf-CSDN博客,提到了一个解决办法,即将dev
参数改为cairo_pdf
output:
pdf_document:
latex_engine: xelatex
dev: cairo_pdf
但实测效果为
接着我又尝试了设置为
output:
pdf_document:
latex_engine: xelatex
dev: png
发现问题虽然解决了,但是并不理想
这是因为这里只是简单的转换为图片,不能自适应清晰度(会被放大而变糊)
解决方法
找了很久,终于找到了一个非常简单的解决办法(TAT非常不容易)
参考至showtext | R语言绘图字体设置——针对Windows系统-CSDN博客,借助showtext
这个包可以轻松地解决这个问题
首先先下载这个包
install.packages("showtext")
在Rmd正文最开始写上
`ˋ`{r setup, include=FALSE}
library(showtext)
showtext_auto()
`ˋ`
然后会发现这个问题轻松地解决了!
当然,如果不喜欢showtext
默认的字体,可以自行添加字体
`ˋ`{r setup, include=FALSE}
library(showtext)
font_add("simsun", regular = "simsun.ttc")
showtext_auto()
`ˋ`
然后在代码中指定family
即可(唯一缺点是似乎找不到设置默认family
的接口,如果不喜欢默认需要每次手动设置)