前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将rmd文件输出为含中文的pdf:踩过的坑及最终解决

将rmd文件输出为含中文的pdf:踩过的坑及最终解决

原创
作者头像
依芙
发布2024-07-13 00:16:39
730
发布2024-07-13 00:16:39

软件准备

版本:win11

  1. Rstudio已经安装好knit
  2. Windows本地下载LaTeX(下载好即可,无需双击打开)https://miktex.org/download
  3. 下载TinyTeXinstall.packages("tinytex")
  4. 下载rticlesinstall.packages("rticles")

背景知识

  1. rticles包内含有谢益辉编写的Rmarkdown模板,名字为CTeX,效果如图。英文RMarkdown其实是不需要CTex的,output里面指定输出格式为pdf_document即可。但是一旦有中文,那么pdf_document渲染的pdf就会缺失中文的内容,而CTex就是一种支持中文的LaTeX。RMarkdown渲染成pdf是先渲染成LaTeX,然后再转成pdf的,所以上面的准备工具中也可以看到需要安装一种LaTeX编译环境
    CTeX模板效果
    CTeX模板效果
  2. Rmd输出过程首先R Markdown会将Rmd文件转化为一个名为knitr的文档, knitr可以理解为一个由纯文本和代码交织在一起的文档,然后再将这个文档转化为一个新的Markdown文件(.md),最后由pandoc转化为任意指定的文档格式。pandoc是一种标记语言转换工具,可以实现不同标记语言之间的转换。就这样,我们最终的数据分析报告得以呈现在大家面前。
Rmd输出过程
Rmd输出过程

先放出最终解决

在新建rmd文件时,选择CTeX模板,并按如下格式修改头文件

代码语言:r
复制
documentclass: ctexart
keywords:
output:
    pdf_document:                                        #此处冒号后面为空!!
      latex_engine: xelatex
      fig_caption: yes
      number_sections: yes
      toc: yes 

做过的失败尝试1

安装rticles包

rticles包提供了适用于各类场景的rmd模板,安装以后便可以选择支持中文的模板,在rstudio菜单栏中依次选择file->new file->R Markdown,然后选择下图所示的模板。

修改头文件

代码语言:r
复制
output:
  pdf\_document:
    latex_engine: xelatex
    includes:
    in_header: head.tex

此步骤参考的链接:

https://blog.csdn.net/arcers/article/details/85281933?comment_content=%E7%BB%88%E4%BA%8E%E8%A7%A3%E5%86%B3%E4%BA%86rstudio%E4%B8%ADRmarkdown+%E7%9A%84.rmd%E6%96%87%E4%BB%B6knit%E6%88%90pdf%E4%BA%86%EF%BC%8C%E5%A4%AA%E6%84%9F%E8%B0%A2%E5%8D%9A%E4%B8%BB%E4%BA%86&comment_replyId=&article_id=85281933&comment_userId=&commentId=

第一次报错

代码语言:R
复制
output file: 201_第一步:构建Seurat对象.knit.md

! LaTeX Error: Unicode character 第 (U+7B2C)
               not set up for use with LaTeX.

Try other LaTeX engines instead (e.g., xelatex) if you are using pdflatex. See https://bookdown.org/yihui/rmarkdown-cookbook/latex-unicode.html
错误: LaTeX failed to compile 201_第一步:构建Seurat对象.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips. See 201_第一步:构建Seurat对象.log for more info.
停止执行

做过的失败尝试2

打开MikTeX,设置→自动(即时)安装缺失的宏包→总是,记得修改xelatex

pdf文件为0kb
pdf文件为0kb
代码语言:r
复制
! LaTeX Error: Unicode character 第 (U+7B2C)
               not set up for use with LaTeX.

Try other LaTeX engines instead (e.g., xelatex) if you are using pdflatex. See https://bookdown.org/yihui/rmarkdown-cookbook/latex-unicode.html
错误: LaTeX failed to compile 一个测试.tex. See https://yihui.org/tinytex/r/#debugging for debugging tips. See 一个测试.log for more info.
停止执行
输出成功了,但文档里面没有中文
输出成功了,但文档里面没有中文

再检查一遍发现fatal error居然是……

发现有一段报错一直出现,但是没有在意

代码语言:R
复制
Locale 'Chinese (Simplified)_China.936' is unsupported, and may crash the interpreter.

寻因

将报错复制到bing,显示是perl相关的错误,而在github也发现了类似的报错,谢益辉此前在https://github.com/rstudio/tinytex-releases/issues/43给出过解决方案,但不太清楚

用户 Raspberrypi4b给出了具体解决方案

https://github.com/rstudio/tinytex/issues/439

划重点

RMarkdown输出pdf首先需要latex的支持,因此要下载tinytex包,而此时输出pdf,则会出现“只有英文没有中文”的情况(936 error),此时安装rticles包,选择支持中文pdf的ctex格式,就解决问题了。因此,要做到以下几点:

  • 在系统修改UTF-8编码
  • CTeX格式为唯一支持中文rmd输出为pdf的格式
  • 必须保证output的latex_engine: xelatex
  • 在下一次尝试输出pdf文件时,请关闭先前打开的所有pdf文档

</br>

</br>

</br>

</br>

</br>

</br>

</br>

友情链接

rmarkdown官方帮助文档

如何在Linux系统rmd转pdf?

https://blog.csdn.net/arcers/article/details/85281933?comment_content=%E7%BB%88%E4%BA%8E%E8%A7%A3%E5%86%B3%E4%BA%86rstudio%E4%B8%ADRmarkdown+%E7%9A%84.rmd%E6%96%87%E4%BB%B6knit%E6%88%90pdf%E4%BA%86%EF%BC%8C%E5%A4%AA%E6%84%9F%E8%B0%A2%E5%8D%9A%E4%B8%BB%E4%BA%86&comment_replyId=&article_id=85281933&comment_userId=&commentId=

记录RMarkdown输出PDF的设置

1.5w字的Rmarkdown入门教程汇总

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 软件准备
  • 背景知识
  • 先放出最终解决
  • 做过的失败尝试1
  • 第一次报错
  • 做过的失败尝试2
  • 再检查一遍发现fatal error居然是……
  • 寻因
  • 划重点
    • RMarkdown输出pdf首先需要latex的支持,因此要下载tinytex包,而此时输出pdf,则会出现“只有英文没有中文”的情况(936 error),此时安装rticles包,选择支持中文pdf的ctex格式,就解决问题了。因此,要做到以下几点:
    • 友情链接
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档