美文网首页R
Rmarkdown导出中文PDF解决方案

Rmarkdown导出中文PDF解决方案

作者: PurePlayer | 来源:发表于2019-12-12 17:04 被阅读0次

    Rmarkdown非常适合R语言使用者导出格式漂亮的文档,但是输出中文PDF的过程中会遇到各种麻烦的问题,本文整理了我解决该问题的经验供大家参考。
    个人的知乎|简书|CSDN|微信公众号PurePlay 也会不定期分享量化金融与R干货。

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

    • 导出PDF需要配置TeX环境,以下两种方案都可以:
      • 安装TinyTex
      • 安装任一LaTeX套件(TeX Live\CTeX\MiKTex\MacTeX)
    • 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: yes
        latex_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: yes
        number_sections: yes
        toc: yes
    classoption: "hyperref,"
    ---
    

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


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

    相关文章

      网友评论

        本文标题:Rmarkdown导出中文PDF解决方案

        本文链接:https://www.haomeiwen.com/subject/taptnctx.html