Rmarkdown非常适合R语言使用者导出格式漂亮的文档,但是输出中文PDF的过程中会遇到各种麻烦的问题,本文整理了我的经验供大家参考。

总的来说,通过Rmarkdown输出中文版pdf报告,要解决以下两个核心问题:

  1. 导出PDF需要配置TeX环境,以下两种方案都可以:
  • 安装TinyTex
  • 安装任一LaTeX套件(TeX LiveCTeXMiKTexMacTeX)

2. PDF中文显示问题,下面两种方案中更推荐后者:

  • 在YAML中写入LaTeX的一些设置;
  • 使用rticles包中的CTeX Documents模板

下面以事件先后顺序为线索详细介绍Rmarkdown输出中文版pdf报告的解决方案。

Rmarkdown导出PDF

首先需要解决的是创建Rmarkdown并导出PDF的问题。

安装好R语言与Rstudio之后,通过菜单栏File >>New File >>R Markdown可以直接在Rstudio上创建一个新的Rmarkdown文档,第一次创建会弹出对话框提示需要安装以下R包,点击Yes即可

再次点击菜单栏File>> New File>> R Markdown,弹出以下对话框点击OK后,可以成功地创建Rmarkdown文件

但是如果要导出PDF,会出现报错pdflatex not found

根据报错需要安装相应的LaTeX环境,此处有多种方案可以选择

  • 安装一个常用的TeX集成编辑环境,如TeX Live,CTeX,MiKTex,MacTeX任选其一即可,安装过程比较漫长;
  • 比较简单的方式是,使用谢益辉大神的开发的TinyTeX包,能很好的兼容Rmarkdown,安装相对比较方便快捷,参考TinyTeX中文文档,直接在Rstudio控制台输入以下命令即可:
install.packages('tinytex')
tinytex::install_tinytex()

一台电脑上同时存在多种TeX环境会产生冲突,因此益辉大神建议安装TinyTex之前需要卸载电脑中的其他 LaTeX 套装(TeX Live 或 MiKTeX 或 MacTeX)。

考虑到后续论文写作需求,我选择了安装目前比较常用的TeX Live。经历了漫长的TeX Live安装并重新启动Rstudio之后,Rmarkdown文件就可以正常导出成PDF了,但还不能显示中文。

PDF中文解决方案

完成上述步骤后,接下来解决中文输出的问题,有两种方案可以选择:

方案一,在原有的Rmarkdown模板基础上,在YAML中加上命令调用LateX的xeCJK包,即把原有的Rmarkdown文件头改成如下格式:

---
title: "中文"
CJKmainfont: Microsoft YaHei
output:pdf_document:includes:header-includes:- usepackage{xeCJK}keep_tex: yeslatex_engine: xelatex
---

上述方法能够解决中文显示的问题,但是原始Rmarkdown模板是基于英文写作习惯设计,如果全篇用中文写作会很奇怪,且模板格式比较单一。

因此强烈安利方案二,谢益辉大神写的Rmarkdown的模板包rticles,里面的CTeX Documents就是支持中文pdf的模板,除此之外还有适用于不同期刊的Rmarkdown模板,通过以下命令即可安装:

install.packages("rticles")

此时再次创建新的Rmarkdown文档,会出现很多新的模板,选择CTeX Document即可

此外,原有CTeX Document模板的页边距较大,可以在YAML中加入geometry选项调节页边距:

---
title: "R语言简介"
author:- PurePlayer
documentclass: ctexart
geometry: "left=2.5cm,right=2cm,top=3cm,bottom=2.5cm"
output:rticles::ctex:fig_caption: yesnumber_sections: yestoc: yes
classoption: "hyperref,"
---

然后就可以导出自动生成目录、页眉、标题序号的PDF了,至此大功告成!

欢迎关注我的知乎|简书|CSDN|微信公众号PurePlay , 会不定期分享量化金融与R干货。

php生成pdf中文断码_Rmarkdown导出中文PDF解决方案相关推荐

  1. php生成pdf中文断码_PHP生成PDF完美支持中文,解决TCPDF乱码

    //生成pdf最近会用到,找到一些资料,非原创 PHP生成PDF格式文件以TCPDF为基础,TCPDF是一个用于快速生成PDF文件的PHP5函数包.TCPDF基于FPDF进行扩展和改进.支持UTF-8 ...

  2. wps js生成条形码,批量生成code128条形码小标签并导出为pdf文件

    最近从vba转到js宏,以前写vba可以引用BarcodeX控件生成条形码,但我不知道怎么在wps js环境引用第三方控件,所以只能用Shapes.AddPicture方法插入条形码图片,这里利用bw ...

  3. java ireport生成pdf_Ireport,JAVA报表制作并导出(pdf、excel、word)

    ireport使用javabean作为数据源生成报表并导出 (pdf.excel.word) 1.首先需要下载报表模板制作软件,我使用的是iReport-5.6.0.下载好后开始画自己的模板.最好是先 ...

  4. php excel中文名称乱码,phpexcel导出中文文件名乱码的解决办法

    使用phpexcel类库导出excel文件,文件名为中文时,在chrome浏览器下导出正常,在IE内核浏览器下导出文件名显示乱码,解决办法就是通过iconv函数转换编码,从utf-8转为gb2312, ...

  5. 中文转码 java_URL 中中文转码

    js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent 1 ...

  6. HTML导出PDF有边框,使用jspdf导出的pdf的页面边框

    使用jspdf函数下载pdf文件时,我需要获取页面边框. 我该如何实现.我能够单独为表格设置边框,而不能为页面设置边框. var doc = new jsPDF('p', 'pt'); doc.set ...

  7. python url中文转码_python实现中文转换url编码的方法

    本文实例讲述了python实现中文转换url编码的方法.分享给大家供大家参考,具体如下: 今天要处理百度贴吧的东西.想要做一个关键词的list,每次需要时,直接添加 到list里面就可以了.但是添加到 ...

  8. python生成二维码教程_使用Python生成个性二维码

    任务目的 这一步会介绍通过Python中的MyQR包实现生成二维码的操作,包括生成普通二维码.带有静态图和动态图的二维码,同时也会对MyQR生成二维码的常用参数进行介绍说明. 任务步骤注:CVM适合用 ...

  9. PIC单片机驱动LCD断码屏代码生成工具

    PIC单片机驱动LCD断码屏代码生成工具 PIC 16系列单片机部分型号都带有LCD(断码)驱动模块, 在编写这部分代码的过程中发现对驱动管脚赋值逻辑有很大的重复部分. 所以写了一个宏函数,自动生成驱 ...

最新文章

  1. View及ViewGroup的事件分发及传递(一)
  2. Et.parse(xml) #39gbk#39 codec cant decode byte
  3. SQL对象名无效怎么办法 华骨龙
  4. Android ToolBar的使用
  5. [c#菜鸟]lambda表达式
  6. mysql 导入导出.sql文件
  7. Angular Effects.ofType的工作原理
  8. grunt集成自动启动
  9. ddddocr打包不成功解决办法
  10. LeetCode(783)——二叉搜索树结点最小距离(JavaScript)
  11. Windows 下使用GNU开发环境[转]
  12. linux下mysql5.7以上my.cnf配置文件配置
  13. 背水一战 Windows 10 (60) - 控件(媒体类): Pointer 涂鸦板, InkCanvas 涂鸦板
  14. asp.net core 返回的Server Kestrel是什么
  15. 小程序实现简单语音聊天
  16. vscode 历史版本1.68.1
  17. 海康录像机能用别的摄像头吗_海康威视录像机NVR如何添加其它品牌(大华)摄像头...
  18. FDDB数据集标注文件:椭圆转换矩形
  19. UNICODE,GBK,UTF-8区别
  20. 【Git】从本地上传到github的文章显示图片的方法

热门文章

  1. 反序列化的时候出现eof exception_FastJson序列化时候出现了$ref?还不赶紧学习下...
  2. python取出字典中最大值_python找出字典中value最大值的几种方法
  3. 鸿蒙手机是个噱头,华为鸿蒙不是谈判噱头 必要时会应用手机当中!
  4. 谷歌Chrome浏览器正式上新Android版黑暗模式
  5. js判断url链接是否可访问(服务可连接,可用)
  6. java访问同一个变量_java – 从另一个类访问变量
  7. idea创建多模块Springboot项目、导入多模块、删除多模块
  8. 分布式和微服务的区别
  9. JAVA分布式篇3——Dubbo
  10. mysql count distinct case when_统计符合条件的去重过的数量 - - count distinct if case