如何在Rmarkdown bookdown的asis输出HTML中正确渲染@ref交叉引用
问题原因
- Pandoc 默认不会解析 HTML 标签内部的 Markdown 语法,你放在
<div>标签内的@ref()会被识别为普通文本,不会被 bookdown 处理成交叉引用链接。 cat()输出异常的问题是因为写法不符合 asis 块的输出要求,调整语法即可正常工作。
解决方案
给需要解析 Markdown 内容的 HTML 块级标签添加 markdown="1" 属性,明确告知 Pandoc 解析标签内部的 Markdown 语法,正确写法如下:
```{r results='asis', echo=FALSE} cat(" <h2>An html title</h2> <div markdown='1'> @ref(titi22) </div> ")
如果需要处理更复杂的动态生成内容,也可以主动调用 knit 工具处理 Markdown 内容后再输出: ```r ```{r results='asis', echo=FALSE} # 定义带Markdown语法的内容模板 md_tpl <- " <h2>An html title</h2> <div> @ref(titi22) </div> " # 解析模板中的Markdown语法 parsed_content <- knitr::knit(text = md_tpl, quiet = TRUE) # 输出处理完成的内容 cat(parsed_content)
## 注意事项 - 确保被引用的代码块ID `titi22` 真实存在,没有配置禁用交叉引用的相关参数。 - `results='asis'` 块中输出内容时不需要对 `@` 符号做额外转义。 内容的提问来源于stack exchange,提问作者jérémy Gelb
相关产品推荐
相关产品推荐

