1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > php生成pdf中文断码_Rmarkdown导出中文PDF解决方案

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

时间:2022-07-12 20:44:58

相关推荐

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

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

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

导出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 YaHeioutput: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:- PurePlayerdocumentclass: ctexartgeometry: "left=2.5cm,right=2cm,top=3cm,bottom=2.5cm"output:rticles::ctex:fig_caption: yesnumber_sections: yestoc: yesclassoption: "hyperref,"---

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

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。