从rmarkdown到PDFpdf,txt教程

从rmarkdown到PDF Patrick 2016年7月16日 问题的提出 整整一下午加一个晚上,也真是服了自己~,莫名奇妙有想把rmd文件转成PDF,之前的话有过尝试,但是以失败告终


接下来还是说正事,免得又忘了: markdown是一种轻量级的语言,出发点就是将行文的内容与格式分开,方便书写

最初是方便写博客的,不过自从有了pandoc这个神奇的东西,似乎文档格式转化什么的都不是问题

rmarkdown 这里要真的是要拜拜大神啊——谢益辉,方便了广大R用户,它的 knitr 也是无人不知,无人不晓啊

不过我们今天的首发是 rmarkdown ,它的作用是在markdown中嵌入包括R之内的各种代码,码农最爱啊! 关于rmarkdown的相关基础大家可以自行了解,在线文档非常丰富,如果你有用RStudio的话,它的 Help 菜单中就有相关的参考手册的

同时呢,RStudio也可整合了一系列方便rmarkdown写作的功能,比如新建rmd文件啊,html、doc、pdf输出等功能,这里我主要关注pdf的输出,应为前两种基本没什么问题,按部就班即可,但是从rmd文件生成pdf的过程并没有那么简单,也容易出问题,特别是对于广大同学使用中文写作的,纠结程度你不可能不懂

初始化 一般来讲,rmarkdown包含这样一个开头设定参数: —
title: “从rmarkdown到PDF”
author:
 – Patrick
date: “2016年7月16日”
output:
 pdf_document:
   latex_engine: xelatex
   template: !expr rticles::ctex_template()
 word_document: default
documentclass: ctexart
fontsize: 12pt
geometry: tmargin=1.8cm,bmargin=1.8cm,lmargin=2.1cm,rmargin=2.1cm
— 这段代码就是本文用到的,内容包括标题、作者、日期、字体大小、页边距设置,这些都没什么特别,重点是output和documentclass两个选项: 大家如果用RStudio新建一个rmd文件,它的开头应该是这样的: —
title: “Untitled”
author: “Patrick”
date: “2016年7月16日”
output: pdf_document
— 不过呢,这样的文件生成pdf之后,日期中的汉字并不会出现,这也就是我纠结一下午想要求解的主要问题了

对比两者不同,我们处理中文需要做到以下几点: 设置latex的编译引擎为xelatex 设置文档类型为ctexart 下载并且安装rticles包 启用模板rticles::ctex_template() rticles 对于rticles这个包这里要补充说明一下,如果你下载了该包并且使用上面的设置,你并不一定能够成功(比如我:(),为什么呢?我也不清楚,不过经过研究,我发现了一个解决途径(后续影响尚待评估)

大家定位到 rticles 包安装目录的子目录下: .\rticles\rmarkdown\templates\ctex\resources ,你的包装在哪儿?试试控制台输入 .libPath()

找到 default.latex 文件中的下面一段: \usepackage[usenames,dvipsnames]{color}
\hypersetup{breaklinks=true,
           bookmarks=true,
           pdfauthor={$author-meta$},
           pdftitle={$title-meta$},
           colorlinks=true,
           citecolor=$if(citecolor)$$citecolor$$else$blue$endif$,
           urlcolor=$if(urlcolor)$$urlcolor$$else$blue$endif$,
           linkcolor=$if(linkcolor)$$linkcolor$$else$magenta$endif$,
           pdfborder={0 0 0}} 删掉即可,这里提醒大家留个备份,以备不测,比如原地复制一份

showtext 好了,经过一番操作,rmd文件中的中文可以正常输出了,但是问题并没有结束,大家可以尝试一下在正文插入如下的R代码: plot ( 1 : 10 , main = ‘中文’ ) 如果没问题,本段可以跳过,如果报错,那么好了,这里提供两种途径,在此之前,请安装showtext包: 将plot语句用showtext.begin()与showtext.end()包裹: showtext : : showtext.begin ( ) plot ( 1 : 10 , main = ‘中文’ ) showtext : : showtext.end ( ) 在代码块设置参数 fig.showtext = TRUE : plot ( 1 : 10 , main = ‘中文’ ) 然而如你所想,这一切仅仅是个开始,进一步的内容我们下次了解



发表回复