过去,如果安装了
str_view()
软件包,webshot
的 html 输出可以正确呈现在 pdf 幻灯片中(另请参阅这个答案)。然而,这不再有效。
以下 Rmd 文件应生成标题幻灯片和显示正则表达式示例的幻灯片:
---
title: "Regex"
output: beamer_presentation
---
```{r setup, include=FALSE}
library(stringr)
```
## `str_view`
```{r regex1}
str_view(c("abc", "bcd", "cde"), "bc", html = TRUE)
```
如果只安装了
webshot
软件包,而不安装 webshot2
,我在编织时会收到以下错误:
Error:
! webshot.js returned failure value: 1
Backtrace:
1. rmarkdown::render(...)
2. knitr::knit(knit_input, knit_output, envir = envir, quiet = quiet)
3. knitr:::process_file(text, output)
7. knitr:::process_group.block(group)
8. knitr:::call_block(x)
...
19. knitr (local) value_fun(ev$value, ev$visible)
20. knitr (local) fun(x, options = options)
22. knitr::knit_print(x, ...)
23. knitr:::html_screenshot(x)
26. webshot (local) `<fn>`(...)
Execution halted
调用
webshot::is_phantomjs_installed()
返回TRUE
,因此PhantomJS已安装。
如果我安装
webshot2
,编织工作不会出错,但str_view()
的html输出不会显示:
过去可以创建的预期输出看起来像这样(使用图像处理程序重新创建):
这里有什么问题吗?还有办法让它发挥作用吗?
(我知道我可以使用
str_view()
的文本输出而不使用 html = TRUE
,但我更喜欢 html 输出。)
我使用以下版本在 Ubuntu 22.04.2 上运行此程序:
我终于找到了这个问题的原因,它与
webshot2
依赖于基于Chromium的浏览器来截取由str_view()
创建的html小部件的屏幕截图有关。
渲染 Rmd 文件时,html 小部件将存储在 R 会话使用的临时文件夹中的 html 文件中,该临时文件夹位于
/tmp
内。 webshot2
然后使用基于 chromium 的浏览器(在我的例子中是勇敢的)打开该文件并截取屏幕截图。然而,在 Ubuntu Brave 中,Chromium 和 Chrome 都是以 snap 的形式安装的,并且不允许 snap 访问/tmp
,因此截图失败。
我找到了两个解决方案:
您可以通过将以下行添加到您家中的文件
.Renviron
来更改 R 会话存储临时数据的目录(如果不存在,则创建它)(请参阅此答案):
TMPDIR = "PATH_TO_YOUR_TEMPDIR"
请注意,路径必须位于您的家中,并且不能是隐藏目录或位于隐藏目录中,以便快照能够访问它。
您还可以仅在使用包unixtools呈现Rmd文件的R会话中更改临时目录(请参阅这个答案)。安装软件包
remotes::install_github("s-u/unixtools")
然后,将以下内容添加到 Rmd 文件中的块中:
library(unixtools)
tmp_dir <- "tmp/"
dir.create(tmp_dir, showWarnings = FALSE)
set.tempdir(normalizePath(tmp_dir))
这将在存储 Rmd 文件的同一目录中创建一个子文件夹
tmp/
并将其用于临时数据。 (当然,如果您愿意,您可以使用不同的文件夹,同样具有上述限制。)
这使我能够成功构建我的投影仪演示文稿,但不幸的是,结果并不令人满意:小部件的屏幕截图太小了。但这是另一个问题...