emacs将org文档输出位html,orgmode文档直接knitr输出HTML或PDF

导出Rhtml/Rnw/Rmd文档后,如果要想得到最终的HTML或pdf文档,你得打开R程序,载入knitr,然后做knit。但真正的orgmode使用者不会这么做。我们希望用一个键盘命令就能从org文件得到HTML或pdf文件。这个功能ox-ravel 并没有提供,需要自己设置。

第一步是编写Rhtml/Rnw/Rmd的导出函数,以Rhtml为例,可以这样:

(defun org-export-rhtml

(&optional async subtreep visible-only body-only ext-plist)

"Export current buffer to a Rhtml file."

(interactive)

(let* ((extension ".Rhtml")

(file (org-export-output-file-name extension subtreep))

(org-export-coding-system org-html-coding-system))

(org-export-to-file 'html-knitr file

async subtreep visible-only body-only ext-plist))

)

本人Elisp水平有限,上面函数是仿照org的 org-html-export-to-html 函数写的。

第二步,编写函数调用knitr把Rhtml/Rnw/Rmd转成HTML/pdf文件。还是照猫画虎,改编一个:

(defun knit-html ()

(interactive)

(let* ((tmp-file (org-babel-temp-file "R-"))

(rhtml (org-export-rhtml))

(body (concat "library('knitr'); knit('" rhtml "'); unlink('" rhtml "')")))

(org-babel-eval org-babel-R-command

(format org-babel-R-write-object-command "TRUE" "TRUE"

(format "{function ()\n{\n%s\n}}()" body)

(org-babel-process-file-name tmp-file 'noquote)))

(org-babel-R-process-value-result

(org-babel-result-cond "silent"

(with-temp-buffer (insert-file-contents tmp-file) (buffer-string))

(org-babel-import-elisp-from-file tmp-file '(16)))

"TURE")))

上面的函数在把Rhtml文件knit后就把它当临时文件删除了,想保留就去掉 unlink 语句。

第三步就很容易了,为上面定义的函数绑定键盘快捷键就可以了:

(define-key org-mode-map (kbd "\C-c \C-v h") 'knit-html)

这里绑定的是 C-c C-v h 按键,可另选。

ESS是必需的,如果你正在寻求一步法将含R代码的org文件输出为HTML/pdf文件,这当然不用提醒了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值