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

7cebe047db932116d325b739752ded17.png
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即可

feb1b412107f4509462bca18eb0ac360.png

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

fef7000b63fd169eb27d9afae738201d.png

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

cb0200fb052b28d5b172fcabb531c007.png

根据报错需要安装相应的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即可

fff8d5d774fabc55b5ece33b25f253b1.png

此外,原有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了,至此大功告成!

5f9c52ed2b1a835199095ce1f755b32e.png

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

582a9bc669e79815a348400f93a16120.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/563665.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分数的大小比较优秀教案_人教版小学数学五年级下册异分母分数加、减法公开课优质课课件教案视频...

教学案例-《异分母分数加减法》教学目标:1.借助直观图形,在操作、观察、比较、的活动中理解异分母分数加减法的算理,掌握计算方法,并能正确进行计算。2.渗透转化、迁移的数学思想,积累研究分数问题的数学活动经验。3.能…

分号可以用来分段么_更高效的GMX分段模拟方法:修改tpr文件

■2020-11-01 22:42:18在以前的一篇文章中, 我简单说过基于GROMACS的分段模拟方法[1]. 这种方法非常通用, 几乎能完成任意的功能, 且无须修改源代码, 但是运行效率比较差, 因为每次运行mdrun都要重新生成tpr文件. 对大分子来说, 使用grompp生成tpr还是很耗时的, 可能会成为运行…

java list拷贝_深入了解浅拷贝与深拷贝

在学习深拷贝和浅拷贝之前&#xff0c;咱们先来一个例子&#xff1a;import java.util.ArrayList;public class MyBaby implements Cloneable {/*** 私有变量*/private ArrayList<String> list new ArrayList<>();Overrideprotected Object clone() throws CloneN…

放大镜_屏幕放大镜怎么样使用方法

首先&#xff0c;打开控制面板&#xff0c;然后找到并单击“显示”&#xff0c;然后启动放大镜。放大镜的放大倍率基于原始屏幕&#xff0c;而不是矢量放大倍率。有关放大镜的详细操作&#xff0c;请单击帮助按钮&#xff0c;其中有特定说明。捷径一&#xff1a;win 可以快速调…

mysql取消主键_mysql如何删除主键?

当一个表中设置了主键之后&#xff0c;如果想要删除主键了要怎么做&#xff1f;下面本篇文章就给大家介绍MySQL删除主键的方法&#xff0c;希望对你们有所帮助。首先我们来看看删除主键的语法&#xff1a;ALTER TABLE TABLE_NAME DROP PRIMARY KEY;在MySQL中删除主键要考虑两种…

公认音质好的耳机品牌_什么品牌蓝牙耳机音质比较好?2020五款HIFI音质蓝牙耳机推荐...

对于蓝牙耳机&#xff0c;绝大多数人的需求都是听音乐&#xff0c;同时也作为一个穿戴的修饰品。基于这些需求&#xff0c;在我们选择蓝牙耳机的时候&#xff0c;就会选择一些外观比较好看的时尚音乐蓝牙耳机&#xff0c;既有时尚的外观&#xff0c;又有较好的音质。那么现在有…

mysql取消操作系统_Linux下的MySQL简单操作(服务启动与关闭、启动与关闭、查看版本)...

小弟今天记录一下在Linux系统下面的MySQL的简单使用&#xff0c;如下&#xff1a;服务启动与关闭 启动与关闭 查看版本环境Linux版本&#xff1a;centeros 6.6(下面演示)&#xff0c;Ubuntu 12.04(参见文章末尾红色标注字体)MySQL版本&#xff1a;5.1.73查看MySQL服务的启动状态…

python日期转化成周数_[转]浅析使用python计算两个日期间隔天数﹑周数和指定若干天后对应的日期等...

>>> import datetime>>> help(datetime)http://docs.python.org/library/datetime.html查看2009年5月31日和2009年2月1日间隔多少天>>> d1datetime.date(2009,05,31)>>> d2datetime.date(2009,02,01)>>> d1-d2datetime.timedelta…

python笔记小白入门_Python 笔记:全网最详细最小白的Class类和实例详解

面向对象最重要的概念就是类(class)和实例(instance)&#xff0c;类是抽象&#xff0c;而实例(Instance)则是一个个具体的对象面向对象三大特点&#xff1a;封装、继承和多态class Animal(object):def __init__(self, name):self.name name # 初始化类变量def Dog(self): # 创…

java 字符串转dom对象_xml类型的字符串转换为Dom对象

我写这篇博客的目的是因为我在这一点转换方面耽搁了快2天时间&#xff0c;真是惭愧呀&#xff0c;dom4j.jar包有自带方法DocumentHelper.parseText(String text)用于将字符串类型的xml转换为Dom对象&#xff0c;从而进行下面的解析&#xff0c;还有一个关键是&#xff1a;产生字…

java nlpir_中科院NLPIR中文分词java版

摘要&#xff1a;为解决中文搜索的问题&#xff0c;最开始使用 版 SCWS &#xff0c;但是处理人名和地名时&#xff0c;会出现截断人名地名出现错误。开始使用 NLPIR 分词&#xff0c;在分词准确性上效果要比 SCWS 好。本文介绍如何在 系统下 JAVA &#xff0c;生成可以执行的 …

java怎编写么解析一个类型_DAY3:你必须知道的java虚拟机之类篇——类文件的结构...

马上过年啦&#xff0c;不知道大家今年有没有投资基金股票呢&#xff1f;是赚的盆满钵满还是拍断大腿&#xff0c;可以评论区一起交流交流&#xff0c;秀一秀哈哈&#xff0c;反正我是没来得及上车。暴富西不可能暴富的啦&#xff0c;打工人嘛几能写写文章啦&#xff5e;记得点…

java自学笔记_JAVA自学笔记(4)

发现JAVA的有趣Day1 继承不是"继承"1.0 继承的格式public classFU {public voidmethod(){System.out.println("Good night!");}}public class ZI extendsFU {}public classPractice {public static voidmain(String[] args) {ZI zinewZI();zi.method();}}打…

java分隔符算法_《Java数据结构和算法》栈 分隔符分配

分隔符包括“&#xff5b;“、"["、”(”、“] “、“)“、“&#xff5d;”&#xff0c;每个左分隔符需要右分隔符匹配。同时&#xff0c;在字符串中后出现左分隔符应该比早出现的先匹配。程序从字符串中不断读取字符&#xff0c;每次读取一个字符。若发现是左分隔符…

Java集合迭代器原理图解_Java Iterator接口遍历单列集合迭代器原理详解

这篇文章主要介绍了Java Iterator接口遍历单列集合迭代器原理详解,文中通过示例代码介绍的非常详细&#xff0c;对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下Iterator接口概述在程序开发中&#xff0c;经常需要遍历集合中的所有元素。针对这种需求&#x…

php商城的购物车功能,php实现购物车功能(以大苹果购物网为例)

首先是几个简单的登录页面登录用户名&#xff1a;密 码&#xff1a;登录页面写好之后&#xff0c;需要进入处理页面&#xff0c;从数据库中调出用户名和密码&#xff1a;session_start(); //开启session 必须要写到第一行header("Content-type:text/html;charsetutf-8&quo…

php的功能和特点,php的特点有哪些

PHP是一种服务器端、跨平台、html嵌入式的脚本语言执行速度快&#xff1a;PHP是一种强大的CGI脚本语言&#xff0c;语法混合了C、Java、Perl和PHP式的新语法&#xff0c;执行网页比CGI、Perl和ASP更快&#xff0c;这是它的第一个突出的特点。 (推荐学习&#xff1a;PHP视频教程…

php小程序码生成并保存,小程序中如何生成小程序码

导语&#xff1a;小程序是一种不需要下载安装即可使用的应用&#xff0c;它实现了应用“触手可及”的梦想&#xff0c;用户扫一扫或者搜一下即可打开应用。也体现了“用完即走”的理念&#xff0c;用户不用关心是否安装太多应用的问题。应用将无处不在&#xff0c;随时可用&…

php写不了php,php写入内存不足怎么办

php写入内存不足的解决办法&#xff1a;1、修改【php.ini】&#xff1b;2、在程序里面添加相关语句&#xff0c;代码为【ini_set(memory_limit, 12M)】&#xff1b;3、在根目录建立【.htaccess】文件。本教程操作环境&#xff1a;windows7系统、PHP5.6版&#xff0c;DELL G3电脑…

java 终态类,javaoo,继承,抽象类,终态类,访问修饰符!

java的继承&#xff01;Java的继承使用extends关键字&#xff01;为什么要使用继承呢&#xff1f;我们先来举例说明一下&#xff01;比如说&#xff01;烟是类&#xff01;而叶子烟&#xff0c;和纸烟&#xff0c;烟这个类包含了&#xff0c;叶子烟和纸烟这两个类&#xff0c;如…