【发布时间】:2023-01-19 17:29:18
【问题描述】:
标签: r-markdown quarto
标签: r-markdown quarto
查看文档后,根据我自定义 Rmarkdown 的经验,我猜想这需要创建自定义模板和/或使用 pandoc Lua 过滤器。
我过去使用的一种更轻量级的方法是使用一个小的自定义函数将自定义标注块的代码添加到 Rmd 或 Qmd。一个缺点是这需要一个代码块。但是,为了让您的生活更轻松一些,您可以例如创建一个 RStudio sn-p 以将代码块模板添加到您的文档中。
---
title: "Custom Callout"
format: html
---
```{r}
my_call_out <- function(...) {
cat(":::{.callout-tip collapse='true'}
")
cat("## Additional Resources
")
cat(paste0("- ", ..., collapse = "
"))
cat("
:::
")
}
```
```{r results="asis"}
my_call_out(paste("Resource", 1:2))
```
Blah blah
```{r results="asis"}
my_call_out("Resource 3", "Resource 4")
```
Blah blah
【讨论】:
更新:
我实际上已经将以下 lua 过滤器转换为四开过滤器扩展 collapse-callout,它允许更轻松地为特定标注块指定默认选项。有关安装和使用的详细说明,请参阅 github 自述文件。
正如@stefan 提到的,您可以使用 pandoc Lua 过滤器更巧妙地完成此操作。
四开本_doc.qmd
---
title: "Callout Tip"
format: html
filters:
- custom-callout.lua
---
## Resources
:::{.custom-callout-tip}
- Resource 1
- Resource 2
:::
## More Resources
:::{.custom-callout-tip}
- Resource 3
- Resource 4
:::
自定义callout.lua
local h2 = pandoc.Header(2, "Additional Resources")
function Div(el)
if quarto.doc.isFormat("html") then
if el.classes:includes('custom-callout-tip') then
local content = el.content
table.insert(content, 1, h2)
return pandoc.Div(
content,
{class="callout-tip", collapse='true'}
)
end
end
end
只需确保 quarto_doc.qmd 和 custom-callout.lua 文件位于同一目录(即文件夹)中。
【讨论】:
.custom-callout-tip 而不是使用 .callout-tip 来执行此操作。
quarto-exts中的代码来回答这个问题。
custom-callout.lua 文件添加到主项目文件夹并将 filters: - custom-callout.lua 添加到我网站的主 _quarto.yaml。