谢益辉已经开发了一个叫blogdown
的包,专门用Rmarkdown
部署生成博客,支持hugo
所有的主题。如果读者还没有自己的博客,又使用R,推荐阅读https://bookdown.org/yihui/blogdown/创建自己的博客并用Rmarkdown
发布文章。如果你喜欢使用hexo
博客系统,并想要使用Rmarkdown
写文章,下面就是你需要阅读的干货了,当然我这种方法不仅限于用在hexo
博客系统。
我实际做的事情就是写了两个R
的函数,可以通过调用的方式创建Rmarkdown
文档,并利用knitr
包的knit
函数将其转换为markdown
文档。
需要文档代已经提交到Gist上面,可以点击查看和下载。
第一步
创建一个Rmarkdown
文档模板,这样我们可以非常方便地在每次写新文章时生成YAML头信息。
其内容如下,简单设定标题、作者、日期、目录、标签,你可以根据自己情进行更改,只要符合头信息规范即可:
---
title: "Put your title here"
author: 王诗翔
date: "2018-02-06 12:36:48"
top: false
categories: Linux杂烩
tags:
- Linux
---
我们将它保存为template.Rmd
文件(Rmarkdown
文件一般以.Rmd
或者.rmd
结尾)。
第二步
将下面两个函数保存到一个R文件(以.R
结尾)中:
################
## 用rmd写博客 ##
################
# 作者:王诗翔
# 更新日期:2018-02-05
#>>>>>> new_rmd_post 函数 <<<<<<<<<<
# 写好模板文档后,你可以用这个函数来创建Rmarkdown文档
# 参数说明:
# post_name: 博文名(最好英文,显示不会乱码),比如我写这篇博文用的是
# how-to-write-rmd-documents-in-hexo-system
# 意思不一定要对,只要能跟其他博文名字有区分就行了
# template_name: 模板名,起template.Rmd最好,因为每次写文章都会用到,
# 这样你创建的时候不用每次都指定模板的名字
# template_path: 模板文档的路径,默认当前工作路径
# post_path: 你想把生成的文档放在哪个路径,默认当前工作路径
new_rmd_post <- function(post_name=NULL,template_name="template.Rmd",
template_path=getwd(), post_path=getwd()){
if(is.null(post_name)){
stop("A post name must be given!")
}
input_file <- paste(template_path,template_name, sep="/")
current_time <- Sys.Date()
out_file <- paste0(current_time, "-",post_name,".Rmd")
fl_content <- readLines(input_file)
writeLines(fl_content, out_file)
print("New Rmarkdown post creat successfully!")
}
#>>>>> new_md_post 函数 <<<<<<<<<<
# 你可以用这个函数来将Rmd文档转换为markdown文档
# 需要安装knitr包,命令为 install.packages("knitr")
# 参数说明:
# post_name: 文章文档名,推荐使用 年-月-日-英文名 的方式
# template_name: 模板名,你需要转换的Rmd文档
# template_path: 模板文档的路径,默认当前工作路径
# post_path: 你想把生成的文档放在哪个路径,默认当前工作路径
# time_tag: 时间标签,如果你转换的文档没有年-月-日这种标记,
# 将time_tag设定为TRUE会自动在名字前加上
new_md_post <- function(post_name=NULL,template_name="template.Rmd",template_path=getwd(),
post_path=getwd(),time_tag=FALSE){
if(is.null(post_name)){
post_name <- gsub(pattern = "^(.*)\\.[Rr]md$", "\\1", x = template_name)
}
input_file <- paste(template_path,template_name, sep="/")
# retrieve system date
if(time_tag){
current_time <- Sys.Date()
out_file <- paste0(post_path, "/", current_time, "-",post_name,".md")
}else{
out_file <- paste0(post_path, "/", post_name,".md")
}
knitr::knit(input = input_file, output = out_file)
print("New markdown post creat successfully!")
}
我把它保存为new_post.R
,上述我进行了比较详细的注释,请在使用之前仔细阅读一下。
使用
我以现在以Rmarkdown
写的这篇文章为例,简单讲一下使用。
我推荐在与你markdown
博文目录同级创建一个_rmd
目录,你可以将该目录设为一个项目目录,专门用来写rmarkdown
文档。
或者你每次用setwd()
函数设定工作目录。
将前两步创建的两个文件扔到该目录。运行R文件:
source("./new_post.R")
这样就能在R控制台调用里面的两个函数了。
创建一个Rmarkdown
文档:
> new_rmd_post("how-to-write-rmd-documents-in-hexo-system")
[1] "New Rmarkdown post creat successfully!"
创建的文档名会自动添加年-月-日和后缀。
然后你就可以开始写博客了,写好后将Rmarkdown
转换为markdown
文档:
> new_md_post(template_name = "2018-02-05-how-to-write-rmd-documents-in-hexo-system.Rmd", post_path = "../_posts")
processing file: /home/wsx/blog/source/_rmd/2018-02-05-how-to-write-rmd-documents-in-hexo-system.Rmd
|.................................................................| 100%
inline R code fragments
output file: ../_posts/2018-02-05-how-to-write-rmd-documents-in-hexo-system.md
[1] "New markdown post creat successfully!"
细心的娃娃可以感觉到我单独创建_rmd
目录并将其设为工作目录的好处:需要键入函数的参数非常少。特别是你固定你自己的写法之后,你将两个函数中的目录路径默认参数全部对应上,再使用R
的TAB
键补全,运行命令简直秒秒种,专心写文章就好啦。
本文没有涉及到画图,从理论上讲是毫无问题的,因为我只是创建了一个快速的文档创建和转换接口。后续我少不了会用到绘图,到时候再讲。
原文位于:https://shixiangwang.github.io/2018/02/06/how-to-write-rmd-documents-in-hexo-system/,为适应此处内容,略有删改。
网友评论