为什么 Quarto TOC 无法识别 Markdown 标题?

问题描述 投票:0回答:2

我正在尝试对

HTML
quarto 文档的内容进行编程。 IE。我有几个返回
Markdown
/
HTML
内容的函数。降价本身呈现正常,但是四开本的目录(TOC)无法识别标题!

例如,这个文档有几个标题。第一个是使用

shiny::markdown()
渲染的,第二个是在
shiny::HTML()
的帮助下渲染的,而第三个是用简单的 Markdown 编写的。四开本的 TOC 只渲染了最后一张。是否有可能在目录中包含以编程方式编写的标题?

代码本身:

---
title: "Test"
toc: true
format: html
---

```{r, echo = FALSE}
library(shiny)

foo_md <- function(){
  shiny::markdown("## Header generated with foo_md()")
}

foo_html <- function(){
  shiny::HTML("<h2> Header generated with foo_html() </h2>")
}

```

```{r, echo = FALSE}
# First header
foo_md()
```

Lorem ipsum dolor sit amet, in at in sed nibh. Neque dignissim 
ad imperdiet urna urna. In id erat aliquam, dolor ut odio. 
Congue at, non justo fermentum urna suscipit ad torquent posuere. 

```{r, echo = FALSE}
# Second header
foo_html()
```

Suspendisse ad sed, amet nec nunc conubia faucibus. Sociis in
pellentesque nibh. Venenatis at ut imperdiet ornare lectus diam ex
vitae. Id, aenean turpis diam, eget a justo consectetur finibus 
mauris.Vehicula viverra sed volutpat metus placerat tellus non. 
Et nisl. Et duis vel in.

## Ordinary markdown header

Vehicula viverra sed volutpat metus placerat tellus non. Et nisl. Et duis vel in.

我使用的是四开版本的 Windows 机器

1.0.38

r markdown quarto
2个回答
2
投票

要在 TOC 中包含以编程方式编写的标头,一种选择是使用

paste
(或使用
paste0
)创建该标头,然后简单地使用块选项
cat
results=asis
它。然后四开的 pandoc 过滤器将使用正确的 id 和类在输出 HTML 文档中呈现此标头,以便 TOC 可以定位它。

---
title: "Test"
toc: true
format: html
---

```{r, echo = FALSE}

foo_md <- function(){
  x <- "Quarto Header"
  y <- "dynamically generated"
  header <- paste("## ",x, y, "with foo_md()")
  cat(header)
}

```

```{r, echo = FALSE, results='asis'}
# First header
foo_md()
```

Lorem ipsum dolor sit amet, in at in sed nibh. Neque dignissim ad
imperdiet urna urna. In id erat aliquam, dolor ut odio. Congue at, 
non justo fermentum urna suscipit ad torquent posuere. 


## Ordinary markdown header

Vehicula viverra sed volutpat metus placerat tellus non. Et nisl. Et duis vel in

渲染后的文档如下所示,


但是当我们使用

shiny::HTML
shiny::markdown
创建它们时,它们不会以必要的 id 或标签呈现在 HTML 文档中,并且 TOC 无法定位它们。它们简单地呈现为
h2
,我们可以在我们的文档网中将它们视为 level2 标头,但不在目录中。


0
投票

我同意给定的 R 解决方案。这是适用于 Python 的答案:

  • 使用
    #| output: asis
    块头
  • 使用
    display(Markdown('\n## Your header name')

注意:如果您在代码中包含多个标头,则在标头之前添加换行符非常重要。否则,第一个标题之后的任何标题都可能会呈现为常规文本,并且不会包含在目录中。

(这是我第一次在这里发布任何内容。如果这不是回应的方式,请重新引导我。我来到这里是因为我正在寻找这个问题的Python版本的答案,但我没有看到现有的问题或答案。)

---
title: "Test"
toc: true
format: html
---

```{python}
from IPython.display import display, Markdown
```

```{python}
#| output: asis

for i in range(3):
    display(Markdown(f'\n## Header {i}'))
    display(Markdown(f'''
    Lorem ipsum dolor sit amet, in at in sed nibh. Neque dignissim 
    ad imperdiet urna urna. In id erat aliquam, dolor ut odio. 
    Congue at, non justo fermentum urna suscipit ad torquent posuere.
    '''))
```
© www.soinside.com 2019 - 2024. All rights reserved.