You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何渲染含动态内容的Quarto书籍为PDF格式?

解决Quarto书籍导出PDF/Word时HTML动态内容的报错与条件渲染问题

1. 替换无效的always_allow_html: true配置

always_allow_html是R Markdown专属配置,Quarto中不生效。针对PDF输出,需在书籍根目录的_quarto.yml或单文档YAML头部添加以下配置:

format:
  pdf:
    embed-resources: true
    keep-md: true

同时安装webshot2包,用于自动将leaflet、plotly等HTML动态内容转为静态图片嵌入PDF:

install.packages("webshot2")

配置完成后,Quarto会自动处理HTML元素,避免导出报错。

2. 修复条件渲染失效问题

你之前使用的{.content-hidden unless-format="pdf"}是R Markdown语法,Quarto需使用专属的条件渲染方式:

方法一:内容块级条件显示

用Quarto短代码控制内容仅在指定格式下展示:

{{< when format="html" >}}
# 仅HTML格式显示的动态内容
```{r}
library(plotly)
plot_ly(mtcars, x = ~wt, y = ~mpg, type = "scatter", mode = "markers")

{{< end >}}

{{< when format="pdf" >}}

PDF格式替代的静态内容
library(ggplot2)
ggplot(mtcars, aes(x = wt, y = mpg)) + geom_point()

{{< end >}}

#### 方法二:代码块级条件执行
在代码块中添加`eval`参数,控制代码仅在目标格式下运行:
```r
#| eval: !expr quarto::is_format("html")
library(leaflet)
leaflet() %>% addTiles() %>% setView(lng = 116.4, lat = 39.9, zoom = 10)

PDF格式对应的替代代码块:

#| eval: !expr quarto::is_format("pdf")
# 生成静态地图/图表的代码
library(ggplot2)
ggplot(mtcars, aes(x = disp, y = hp)) + geom_line()

3. 导出Word格式的适配方案

若需导出Word,同样在配置中添加docx格式设置,配合上述条件渲染逻辑即可:

format:
  docx:
    embed-resources: true

导出的Word文档中,动态HTML内容会转为静态图片,可直接复制到LaTeX中使用。

内容的提问来源于stack exchange,提问作者Roberto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:16:12