可重复的示例
---
title: "Untitled"
output:
bookdown::epub_book:
toc: yes
epub_version: "epub3"
date: "2022-11-26"
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
## 交互图形
```{r}
#| label: echarts4r
#| fig-cap: "交互图形"
#| eval: !expr knitr::is_html_output()
library(echarts4r)
mtcars |>
e_charts(qsec) |>
e_line(mpg)
```
我的诉求
有一段生成交互图形的代码,只希望它在目标输出是 HTML 网页时执行,而当目标输出是 EPUB、 DOCX 和 PDF 等其它格式的时候,不要执行,这个要怎么实现?
问题现象
echarts4r 包绘制的交互网页图形,代码块选项设置了 eval: knitr::is_html_output()
但是,奇怪的是 EPUB 输出格式中,代码块被执行了,这意味着 EPUB 格式是一种特殊的 HTML 格式?还是判断输出格式的函数 knitr::is_html_output()
存在 BUG?
经过了解发现, EPUB 输出格式似乎和 XML 格式有很大关系, EPUB 文档可以解压缩,打开,看到很多零碎文件,DOCX 文档也是。
参考材料
- https://www.w3.org/publishing/epub3/epub-overview.html
- https://en.wikipedia.org/wiki/EPUB