最简单完美解决Rmd导出PDF中文失效问题

本文讲述了在使用RMarkdown编写文档时,中文字符失效和图片中文显示问题的解决方案,包括更换Latex引擎、使用rticles模板、调整图片输出格式以及利用showtext包进行字体设置。
摘要由CSDN通过智能技术生成

正文中文输出

问题

在使用 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的接口,如果不喜欢默认需要每次手动设置)

  • 22
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值