【问题标题】:conditionally embed video in R-markdown (bookdown)有条件地在 R-markdown 中嵌入视频(bookdown)
【发布时间】:2020-11-30 21:40:04
【问题描述】:

如果我只是简单地将 YouTube 提供的 HTML 代码复制并粘贴到 .Rmd 文件中,这对于 gitbook 输出效果很好。下面是代码示例

<iframe width="560" height="315" src="https://www.youtube.com/embed/9AI3BkKQhn0"
frameborder="0" allow="accelerometer; autoplay; encrypted-media;
gyroscope; picture-in-picture" allowfullscreen>
</iframe>

但是,我收到 PDF 和 EPUB 输出的错误消息。为了避免这种情况,我想我可以使用条件编译,例如

```{r}
if (knitr::is_html_output(excludes = "epub")) {
  <iframe width="560" height="315" 
  src="https://www.youtube.com/embed/9AI3BkKQhn0"
  frameborder="0" allow="accelerometer; autoplay; encrypted-media;
  gyroscope; picture-in-picture" allowfullscreen>
  </iframe>
}
```

但是,这已在 RStudio 编辑器中因意外标记而被删除。这里有什么问题?有没有办法解决这个问题?

【问题讨论】:

标签: html video conditional-statements output bookdown


【解决方案1】:

欢迎使用 stackoverflow!

  • 你是对的,条件编译是解决这个问题的一种方法。为此,我们需要告诉 knitr 是否应该评估代码块(以输出格式为条件)。这必须通过块选项eval 指定,而不是在代码块内。

  • 请注意,R 无法解析纯 HTML 代码。相反,您可以将 HTML 代码作为字符串传递给 cat()(打印字符串)并告诉 knitr 使用块选项 results = 'asis' 包含结果。

```{r, eval=knitr::is_html_output(excludes = "epub"), results = 'asis', echo = F}
cat(
'<iframe width="560" height="315" 
  src="https://www.youtube.com/embed/9AI3BkKQhn0"
  frameborder="0" allow="accelerometer; autoplay; encrypted-media;
  gyroscope; picture-in-picture" allowfullscreen>
  </iframe>'
)
```

请注意,我还设置了echo = F,这样代码就不会打印在输出中。

更多关于knitr的选择,请看亿辉的优秀documentation

【讨论】:

  • 非常感谢!这可以解决问题。仅在我删除了 allowfullscreen 选项后才适用于 EPUB。
  • 太棒了!如果你能接受这个答案,那会很高兴。 (:
猜你喜欢
  • 2017-10-06
  • 2015-02-27
  • 2011-08-10
  • 2021-11-18
  • 2016-10-17
  • 2016-11-25
  • 1970-01-01
  • 2021-02-02
  • 2019-08-05
相关资源
最近更新 更多