Xaringan增强:若干辅助R包及工具

导读:这是Xaringan系列的第5篇,系列文章请分别参看:(系列之5)Xaringan增强:若干辅助R包及工具;(系列之4)Xaringan美化:CSS功夫;(系列之3)Xaringan效率:底层与简洁;(系列之2)Xaringan发布:blogdown网站中的展示;(系列之1)Xaringan缘起:创建课程slide

Xaringan生态正在不断扩展,也将会大大方便slide制作,提升slide美观度,增加slide的更多新功能。本文将持续关注相关增强辅助包和定制函数,包括xaringanthemer、xaringanBuilder和metathis等正在开发和维护中的R包,还有一些定制化的R函数。

其中,博文Making Extra Great Slides做出了基本的梳理。本文在此基础上做了进一步测试、对比和总结。

1 R包xaringanExtra

R包xaringanExtra确实是“包”如其名,提供了不少Xaringan功能增强,可以说是大大缓解了Xaingan用户的大部分痛点。

具体可以参看R包xaringanExtra说明文档,以及关注追踪其github repo

整体来看,个人认为比较有用的增强功能包括:

  • Scribble。slide可以涂鸦啦。一句话点评:手写墨迹的保存需要手动浏览器打印,有点费手。白板(键盘B)状态下无法手写涂鸦,槽点还有,距离好用总差那么一丢丢

  • Search。全域slide搜索功能。一句话点评:这个好,直接甩掉pptx几条街。

  • Clipboard。便于代码复制操作。一句话点评:码农一族的最爱,非码农表示不觉明厉。

  • Tile View。实现slide缩略图效果。一句话点评:pptx有的,咱也的有。

  • Editable。slide内容可编辑。一句话点评:必须指定可编辑内容域,功能实用性也不够明确。

其中,比较有意思的slide操作包括:

  • Animate.css。动画效果。一句话点评:类似pptx幻灯片动画效果(进入、退出),但不是部件(element)的动画效果。无论如何,聊胜于无。此外,尤其要注意css独立文件的依赖关系,上传个人站点(如netlify)需仔细考证。

  • Panelset。面板集效果。一句话点评:它有点类似于Xaringan自带的navigator导航效果(.right-column[]+.left-column)。区别在于:前者面板是水平罗列,且只需在一个slide页面下完成(一个---下);其优点是代码更少,结构更紧凑;最大的问题是pdf导出需要额外包来加持解决,其他不足还包括:slide页码下的代码特别多,不便于导航写内容;另外对math公式等支持还不完善(如裸的Rmarkdown数学表达式会无法显示,但是加上.small[]字体大小类css修饰则可以显示)。后者则是垂直罗列,且需要在多个slide页面下完成(多个---下);其优点是便于导航编写内容,且每个pannel天然就占一张slide,方便导出pdf;不足在于垂直罗列后,右侧展示空间被压缩。

  • Broadcast。你讲你的slide,观众可自动实时跟随slide翻页。一句话点评:很炫酷的功能,但是国内网速和访问可达性还有待测试。

  • FreezeFrame。定格gif,免得它一直动。一句话点评:功夫是好功夫,不过都摆开了大架势秀舞姿了(gif嗨起来),还管得了台下观众头昏眼花么?

  • Webcam。调用摄像头,实现图中画效果。一句话点评:颜值后生美女们,定会喜大普奔吧。

  • Tachyons。大概包括了多种支持Xaringan的Tachyons“小部件”(参看Tachyons官网),如文本窗框(text box)。一句话点评:似乎普通的css设定也可以实现,这个有空再去推敲推敲其中有啥玄妙。

2 R包xaringanBuilder

R包xaringanBuildergithub repo)的目标是支持多种输出格式的Xaringan slide导出:

  • html

  • pdf

  • gif

  • pptx

  • mp4

  • png

  • social (png of first slide sized for sharing on social media)

xaringanBuilder包的安装命令为:remotes::install_github("jhelvy/xaringanBuilder")

优点

  • pdf和pptx两种格式导出是大多数人比较关心的。可以与其他导出方法比较,看哪一种方案的导出质量和速度更优。例如,pdf格式输出,感觉与后面提到的xaringan_to_pdf()过程和效果都很类似。

  • 同时支持多种格式输入和输出,还可以对“中间格式”进行处理。例如可以支持先导出为pdf,然后再进一步把pdf导出为pptx。

  • 支持复杂形式Xaringan slide的多格式输出。例如xaringanBuilder::build_pptx("03-slide-class/04-data-measuring.Rmd",complex_slides = T)就可以实现对计面板集(panelsets)类型slide的完美输出。这个功能也即实现后面要提到的xaringan_to_pdf()函数过程和效果,必须点赞!

槽点

  • 可能的多种包依赖关系。例如pptx格式需要依赖officer包。

  • “伪”pptx格式输出。xaringanBuilder::build_pptx("03-slide-class/04-data-measuring.Rmd",complex_slides = T)的结果,pptx的每张幻灯片都只是png格式的图片而已。不过,这个槽点应该是能够预料到的(大家猜猜是为什么?因为Xaringan slide和pptx幻灯片的血统完全不一样啊!)。

2.1 pdf输出时数学公式显示异常

问题描述:如果直接使用chrome浏览器打印pdf,数学公式显示都是正常的(如同html预览效果)。但是使用xaringanBuilder::build_pdf()函数进行pdf输出,则数学公式总是显示异常(非常小)。

尝试办法

  • 怀疑html转会效果更好,尝试.Rmd转pdf或者.html转pdf,问题都依旧。
# from html to pdf
xaringanBuilder::build_pdf("03-slide-class/04-data-measuring-test.html","public/04-data-measuring-test.pdf", complex_slides = T, delay = 3)
# from Rmd to pdf
xaringanBuilder::build_pdf("03-slide-class/04-data-measuring-test.Rmd", complex_slides = T, delay = 2)
  • 怀疑MathJax.js在线不稳定,尝试指定调用其他路径,问题依旧。

Rmarkdown的公式渲染主要有两种方式。 - 默认渲染:xaringan会自动调用MathJax.js(集成在Rstudio中)来渲染数学公式和符号。 - 本地渲染:需要在yaml区域指定本地路径下或其他网络地址的MathJax.js文件。

---
output:
  xaringan::moon_reader:
    chakra: libs/remark-latest.min.js
    mathjax: "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/MathJax.js?config=TeX-AMS_CHTML.js"
    self_contained: false
---

3 R包xaringanthemer

R包xaringanthemer提供了很多Xaringan slide风格的模板,具体可以查看官方说明,以及github repo。实际上我个人基本上还没有使用上述任何style,因为目前有自己的定制化xaringan模板。

简单点评

  • 以满足个性化需求为首,切记千篇一律。style风格一事,不过是外貌形象而已,仁者见仁智者见智。大部分人的工作汇报场景应该是固定化、模式化的,因此自己设计和维护的个性化style反而会更加实用,细节操控自然也会心中有数,迭代更新相应也更加可靠。

  • 简单的就是最有力的。还是那句老话,越复杂的style、越多的新结构,也意味着更加难以控制。开源世界里采用或拥抱某些创新工具的基本法则应该是:简单可靠,步步为营。

4 输出pdf函数xaringan_to_pdf()

显然,对Xaringan进行功能增强以后,带来的直接后果就是slide的结构和形式开始变得复杂多样。

其中,使用xaringanExtra设计面板集(panelsets)类型的slide时,简单使用chrome浏览器导出为pdf文件会不满足用户需求:pdf只会保留面板集slide下的第一个panel页面。

为此,xaringanExtra包的开发者Garrick在博文“Printing xaringan slides with chromote”中,专门提到了这一用户需求和解决办法。他编写了一个输出pdf的R函数xaringan_to_pdf(),并且后续可能会直接添加到xaringanExtra包中去。xaringan_to_pdf()函数源代码下载链接github Gist

根据作者说明,xaringan_to_pdf()函数需要依赖如下工具和R包:

  • 本地浏览器Google Chrome

  • 依赖包chromote:安装remotes::install_github("rstudio/chromote")

  • 其他依赖包:安装install.packages(c("progress", "jsonlite", "pdftools", "digest"))

最后做一下简单点评

  • pdf输出速度不太理想。xaringan_to_pdf()函数的pdf输出速度相对较慢,经测试180页slide大概需要5-10分钟(当然,根据slide的复杂程度会有一定差异)。这显然是因为依赖包过多或者工作流workflow过长 。

  • 限制是对html文件格式的pdf输出。例如xaringan_to_pdf("03-slide-class/04-data-measuring.html"),不能直接针对.Rmd文件。相当于工作流workflow进一步被延长了。

  • 后续更新支持不确定。

Related