前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R:如何使用RMarkdown渲染中文pdf报告

R:如何使用RMarkdown渲染中文pdf报告

作者头像
生信菜鸟团
发布2020-09-04 15:44:51
4.2K0
发布2020-09-04 15:44:51
举报
文章被收录于专栏:生信菜鸟团

Rmarkdown作为一种将R等编程语言和Markdown的简洁语法结合在一起的增强版Markdown语法,其在报告输出、数据分析、沟通交流中的易用性和便利性已得到了足够的体现。

Rmarkdown的一个重要特点就是可以在普通Markdown语法之上内嵌R等语言代码,并可以格式化输出和展示代码的结果,如展示图表等。

本文主要是展示如何使用Rmarkdown渲染pdf版中文报告(需要对Rmarkdown有一定了解)。似乎是谢益辉(https://yihui.org/)的rticles包出现了bug,所以更确切的说,本文是展示如何在Rstudio中使用rticles包的CTex模板完成中文pdf报告的渲染。

准备工作

需要安装如下工具:

R、Rstudio。

pandoc:https://github.com/jgm/pandoc/releases/tag/2.10.1。

tinytex:tinytex::install_tinytex()

rmarkdown、riticles:install.packages("rmarkdown")、install.packages("rticles")。

中文pdf渲染

在Rstudio中,File -> New File -> R Markdown,打开Rmarkdown新建对话框。使用从模板新建,创建CTex模板文件。

如果是英文RMarkdown其实是不需要CTex的,output里面指定输出格式为pdf_document即可。但是一旦有中文,那么pdf_document渲染的pdf就会缺失中文的内容,而CTex就是一种支持中文的LaTeX。RMarkdown渲染成pdf是先渲染成LaTeX,然后再转成pdf的,所以上面的准备工具中也可以看到需要安装一种LaTeX编译环境,此处是使用益辉大佬的tinytex包自动安装的当前系统可用的tinytex。

益辉大佬将很多杂志的Rmarkdown模板整理成rticles包,这样可以直接创建相应的RMarkdown模板,新建的CTex模板如图所示:

如果此时直接点击Rstudio的Knit按钮,就会报错。因为这个模板有bug,YAML头文件里面的documentclass重复了:“Duplicate map key: 'documentclass'"。

但是删除了其中一个documentclass参数,依然会报错:"Couldn't find template file ctex/resources/template.tex"。

报错提示缺少ctex模板。

暂时也不确定是怎么回事,反正我去查看rticles包的github备份,里面的ctex也没有template.tex

由于RMarkdown的输出格式是在YAML头文件里面的output控制的,而相应的格式输出其实是调用相应的输出函数,比如输出pdf格式,其实是调用的pdf_document函数。而ctex的格式输出是由ctex_article函数控制的,而它的源码就是封装了pdf_document_format函数,添加了latex_engine信息,那么就可以考虑修改output头文件。

代码语言:javascript
复制
function (..., latex_engine = "xelatex") 
{
    pdf_document_format("ctex", latex_engine = latex_engine, 
        ...)
}

YAML信息修改:

代码语言:javascript
复制
# 模板的output头文件信息
output:
  rticles::ctex:
    fig_caption: yes
    number_sections: yes
    toc: yes

# 修改后的output头文件信息,更换为pdf_document,添加latex编译引擎
output:
    pdf_document:
      latex_engine: xelatex
      fig_caption: yes
      number_sections: yes
      toc: yes 

搭配好模板中已经存在的documentclass: ctexart信息就可以在RMarkdown中正常使用CTex了,保存修改后,点击Knit to PDF即可正常进行渲染了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信菜鸟团 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 准备工作
  • 中文pdf渲染
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档